不是很难,但是有点繁琐的一道题。注意要把用于计数的变量 count 放到合适的位置。
10.15有一个班4个学生,5门课。(1)求第一门课的平均分;(2)找出有两门以上课程不及格的学生,输出他们的学号和全部课程成绩及平均成绩;(3)找出平均成绩在90分以上或全部课程成绩在85分以上的学生。分别编3个函数实现上3个要求。
#include <stdio.h>
int main(){
void avcour1(char (* pcourse)[10], float (* pscore)[5]);
void avsco(float (*pscore)[5],float * paver);
void fail2(char (* pcourse)[10], int * pnum, float (* pscore)[5], float * paver);
void good(char (* pcourse)[10], int * pnum, float (* pscore)[5], float * paver);
char course[5][10]={"English","Computer","Math","Physics","Chemistry"};
char (* pcourse)[10];
int i, j,* pnum;
int num[4]={1001,1002,1003,1004};
float score[4][5]={{34,56,88,99,89},
{77,88,99,67,78},
{99,90,87,86,89},
{78,89,99,56,77}};
float (* pscore)[5],* paver;
float aver[4];
pnum=num; //一维数组,存放学生编号
pscore=score; //二维数组,存放学生的成绩
pcourse=course; //一维数组,存放课程名称
paver=aver; //一维数组,存放每名学生平均成绩
//将学生编号和成绩打印
printf("NO. ");
for(i=0; i<5; i++){
printf(",%s ",course[i]);
}
printf("\n");
//打印学生编号和成绩
for(i=0; i<4; i++){
printf("%-8d",num[i]);
for(j=0; j<5; j++){
printf("%4.2f ",score[i][j]);
}
printf("\n");
}
//每名学生所有课程的平均成绩
avsco(pscore, paver);
//1.求所有学生第一门课程的平均成绩
avcour1(pcourse, pscore);
//2.找出两门以上课程不及格的学生,输出学号,成绩,平均成绩
fail2(pcourse, pnum, pscore, paver);
//3.找出平均成绩在90分以上或全部课程成绩在85分以上的学生,输出学号,成绩,平均成绩
good(pcourse, pnum, pscore, paver);
return 0;
}
void avsco(float (*pscore)[5],float * paver){
int i,j;
float sum,avg;
for(i=0; i<4; i++){
sum=0;
for(j=0; j<5; j++){
sum += *(*(pscore+i)+j);
}
avg = sum/5;//第i个学生的平均成绩
*(paver+i)=avg;
}
for(i=0; i<4; i++){
printf("第%d个学生的平均成绩为%4.2f \n",i+1,*(paver+i));
}
}
//1.
void avcour1(char (* pcourse)[10], float (* pscore)[5]){
int i;
float sum=0,avg1;
for(i=0; i<4; i++){
sum += *(*(pscore+i));
}
avg1 = (float)sum/4;
printf("第一门课%s的平均成绩为:%4.2f\n",* pcourse,avg1);
}
//2.找出两门以上课程不及格的学生,输出学号,成绩,平均成绩
void fail2(char (* pcourse)[10], int * pnum, float (* pscore)[5], float * paver){
int i,j,count;
printf("\n下面的学生有两门及以上的课程不及格.\n");
//将学生编号和成绩打印
printf("NO. ");
for(i=0; i<5; i++){
printf(",%s ",*(pcourse+i));
}
printf("average");
printf("\n");
for(i=0; i<4; i++){
count=0;
for(j=0; j<5; j++){
if(*(*(pscore+i)+j) < 60 ) count++;
}
if(count>=2){
printf("%-8d",*(pnum+i));
for(j=0; j<5; j++){
printf("%4.2f ",*(*(pscore+i)+j));
}
printf("%4.2f ",*(paver+i));
printf("\n");
}
}
}
//3.找出平均成绩在90分以上或全部课程成绩在85分以上的学生,输出学号,成绩,平均成绩
void good(char (* pcourse)[10], int * pnum, float (* pscore)[5], float * paver){
int i,j,count;
printf("\n下面的学生平均成绩在90分以上或全部课程成绩在85分以上.\n");
//将学生编号和课程打印
printf("NO. ");
for(i=0; i<5; i++){
printf(",%s ",*(pcourse+i));
}
printf("average");
printf("\n");
for(i=0; i<4; i++){
count=0;
for(j=0; j<5; j++){
if(*(*(pscore+i)+j) > 85) count++;
}
if(count==5 || *(paver+i)>90){
printf("%-8d",*(pnum+i));
for(j=0; j<5; j++){
printf("%4.2f ",*(*(pscore+i)+j));
}
printf("%4.2f ",*(paver+i));
printf("\n");
}
}
}
结果: