Think twice in all things, but think twice before you leap.
凡事要三思,但比三思更重要的是三思而后行。
帮助小伙伴改了一道题,如下:
任务:
有一个班4个学生,5门课程。
求第n门课程的平均分(1<=n<=5);
找出有m门以上课程不及格的学生(1<=m<=5),输出他们的学号和全部课程成绩及平均成绩;
找出平均成绩在x分以上或全部课程成绩在y分以上的学生,分别编写3个函数实现以上3个要求。
样例:
学号 成绩1 成绩2 成绩3 成绩4 成绩5
001 90.0 75.5 80.0 59.0 43.0
002 88.5 75.0 96.0 57.0 60.5
003 89.0 87.0 86.0 90.4 100.0
004 98.0 96.0 99.0 85.0 82.0
输入:
3
2
90
85
输出:
第3门课程的平均分为:
90.25
有2门以上课程不及格的学生信息为:
学号:
001
全部成绩:
90.0 75.5 80.0 59.0 43.0
平均成绩:
69.5
平均成绩在90分以上的学生为:
003 004
全部课程成绩在85分以上的学生为:
003
源代码(部分代码来自这位小伙伴哦):
#include <stdio.h>
void first_average(float (*p)[6],int n);
void fail(float (*p)[6],int m,int grade);
void excellent(float (*p)[6],int n);
int main()
{
float sh[4][6]={{90.0,75.5,80.0,59.0,43.0,001},{88.5,75.0,96.0,57.0,60.5,002},{89.0,87.0,86.0,90.4,100.0,003},{98.0,96.0,99.0,85.0,82.0,004}};
float (*p)[6]; //定义行指针
int average,no,grade,ave_gra;
p=sh;
scanf("%d",&average);
scanf("%d",&no);
scanf("%d",&grade);
scanf("%d",&ave_gra);
printf("第%d门课的平均分为:\n",average);
first_average(p,average);
printf("有%d门以上不及格的学生信息为:\n",no);
fail(p,no,grade);
printf("全部课程成绩在%d分以上的学生为:\n",ave_gra);
excellent(p,ave_gra);
return 0;
}
void first_average(float (*p)[6],int n)
{
float ave=0;
int i=0;
for(;i<4;i++)
ave=ave+p[i][n-1];
ave=ave/4;
printf("%.2f\n",ave);
}
void fail(float (*p)[6], int m, int grade) {
int i, j, k = 0;
float ave = 0;
for (i = 0; i < 4; i++) {
for (j = 0; j < 5; j++) {
if (*(*(p + i) + j) < 60)
k++;
if (k == m) {
printf("学号为:\n");
printf("00%.0f\n", p[i][j + 1]);
printf("全部成绩:\n");
for (j = 0; j < 5; j++) {
ave = ave + *(*(p + i) + j);
printf("%.1f", *(*(p + i) + j));
}
printf("\n");
ave = ave / 5;
printf("平均成绩:\n");
printf("%.1f\n", ave);
k = 0;
}
}
}
printf("平均成绩在%d分以上的学生为:\n",grade);
for (i = 0; i < 4; i++) {
for (j = 0; j < 5; j++) {
ave = ave + *(*(p + i) + j);
}
ave = ave / 5;
if(ave>grade){
printf("00%.0f ",*(*(p + i) + j));
}
ave=0;
}
printf("\n");
}
void excellent(float (*p)[6],int n)
{
int i,j;
float ave=0,k=0;
for(i=0;i<4;i++){
for(j=0;j<5;j++){
ave=ave+*(*(p+i)+j);
if(*(*(p+i)+j) > n)
k++;
}
if(k==5)
printf("00%.0f",*(*(p+i)+5));
ave=0;
k=0;
}
}
运行结果: