差等生还是优等生
小Bob 小Bob Bob来啦
2020年04月28日 23:49 __ _ _ _ _

**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; }}
运行结果:


最后的话:刷题要找自己的不足,然后去专攻。
往期推荐:
刷新路由3的那些事(二) 2020-04-24
关于路由的其他功能(剧终) 2020-04-25
C++预告 2020-04-27
公众号:程序员Bob
一个正在学习C语言的人,致力于将C讲得更透彻!
点赞关注谢谢你
长按下图二维码关注,和你一起领悟程序员的魅力。

点“ 在看 ” 你懂得

预览时标签不可点
阅读
__











