您的位置:首页 > 其它

谭浩强教授《C程序设计题解与上机指导(第二版)》习题10.15

2009-07-29 22:07 302 查看
有一个班,有4名学生、5门课程。(1)求第一门课的平均分;(2)找出有两门以上课程不及格的学生,输出他们的学号和全部课程成绩及平均分;(3)找出平均成绩在90分以上或全部课程成绩在85分以上的学生。

#include <stdio.h>
#include <string.h>

main()
{
void avsco();
void avcour();
void fail2();
void good();

int i,j,*pnum,num[4];
float score[4][5],aver[4],*psco,*pave;
char course[5][10],*pcou;

printf("Input course:/n");
pcou=course[0];
for(i=0;i<5;i++)
scanf("%s",course[i]);//输入科目名
printf("Input NO. and score:/n");
printf("NO.");
for(i=0;i<5;i++)
printf(", %s",course);//输出科目名
printf("/n");
psco=&score[0][0];//把二维数组score[4][5]的首列地址赋给指向float型数据的指针变量psco
pnum=&num[0];//使指向整型数据的指针变量指向一维整型数组num[4]的首地址
for(i=0;i<4;i++)
{
scanf("%d",pnum+i);//输入学号
for(j=0;j<5;j++)
scanf("%f",psco+i*5+j);//按列输入各科目的成绩
}
pave=&aver[0];
printf("/n/n");
avsco(psco,pave);//函数调用,求每个学生的平均成绩
avcour(pcou,psco);//函数调用,求第1门科目的平均分
printf("/n/n");
fail2(pcou,pnum,psco,pave);//函数调用,//找出有2门以上科目不及格的学生
printf("/n/n");
good(pcou,pnum,psco,pave);//函数调用,//找出各科成绩在85分以上或平均成绩在90分以上的学生
}

void avsco(float *psco,float *pave)//求每个学生的平均成绩
{
int i,j;
float sum,average;
for(i=0;i<4;i++)
{
sum=0.0;
for(j=0;j<5;j++)
sum=sum+(*(psco+i*5+j));
average=(float)(sum/5.0);
pave[i]=average;
}

}

void avcour(char *pcou,float *psco)//求第1门科目的平均分
{
int i;
float sum,average;
sum=0.0;
for(i=0;i<4;i++)
sum=sum+(*(psco+i*5));//因为psco指向的是列,所以psco+i*5表示每个学生的第1门科目的地址
average=(float)(sum/4.0);
printf("course 1:%s, average score:%6.2f./n",pcou,average);
}

void fail2(char course[][10],int num[],float score[4][5],float aver[4])//找出有2门以上科目不及格的学生
{
int i,j,k,label;
printf("==============================Student who is fail==============================/n");
printf("NO.");
for(i=0;i<5;i++)
printf("%10s",course[i]);
printf("average/n");
for(i=0;i<4;i++)
{
label=0;
for(j=0;j<5;j++)
if((score[i][j]<60.0)) label++;
if(label>=2)
{
printf("%5d",num[i]);
for(k=0;k<5;k++)
printf("%10.2f",score[i][k]);
printf("%10.2f",aver[i]);
}
}
}

void good(char course[5][10],int num[4],float score[4][5],float aver[4])//找出各科成绩在85分以上或平均成绩在90分以上的学生
{
int i,j,k,n;
printf("====================Student whose score is good==========/n");
printf("NO.");
for(i=0;i<5;i++)
printf("%10s",course[i]);
printf("average/n");
for(i=0;i<4;i++)
{
n=0;
for(j=0;j<5;j++)
if(score[i][j]>85.0) n++;
if((n==5)||(aver[i])>=90)
{
printf("%5d",num[i]);
for(k=0;k<5;k++)
printf("%10.2f",score[i][k]);
printf("%10.2f/n",aver[i]);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: