统计一个班的学生成绩。要求程序具有如下功能:
(1) 每个学生的学号和四门功课的成绩从键盘读入。
(2) 计算每个学生的总分和平均分。
(3) 按平均成绩进行排序,输出排序后的成绩单(包括学号、四门功课的成绩和平均分),给出名次。如果分数相同,则名次并列,其他学生名次不变。
软件: Visual C++6.0
c语言程序设计(使用数组与函数)
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- CSDN专家-风起峰落 2021-11-22 20:34关注
typedef struct{ int num; float course1; float course2; float course3; float course4; float total; float avg; }student_score_t; int main() { int n,num,c1,c2,c3,c4; printf("Input students number:"); scanf("%d",&n); student_score_t **student_pool = (student_score_t**)malloc(sizeof(student_score_t*)*n); memset(student_pool,0,sizeof(student_score_t)*n); for(int i=0;i<n;++i) { student_pool[i] = (student_score_t*)malloc(sizeof(student_score_t)); scanf("%d %f %f %f %f",&student_pool[i]->num, &student_pool[i]->course1, &student_pool[i]->course2, &student_pool[i]->course3, &student_pool[i]->course4); student_pool[i]->total = student_pool[i]->course1+student_pool[i]->course2+ student_pool[i]->course3+student_pool[i]->course4; student_pool[i]->avg = student_pool[i]->total/4.0f; } student_score_t * temp=NULL; for(int i=0;i<n-1;++i) for(int j=i+1;j<n;++j) { if(student_pool[i]->avg < student_pool[j]->avg) { temp=student_pool[i]; student_pool[i]=student_pool[j]; student_pool[j]=temp; } } int rank=1; printf("排名\t学号\t成绩1\t成绩2\t成绩3\t成绩4\t平均分\n"); for(int i=0;i<n;++i) { if(i>0 && student_pool[i]->avg < student_pool[i-1]->avg) ++rank; printf("%d\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",rank, student_pool[i]->num,student_pool[i]->course1, student_pool[i]->course2,student_pool[i]->course3, student_pool[i]->course4,student_pool[i]->avg); } return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 Power query添加列问题
- ¥50 Kubernetes&Fission&Eleasticsearch
- ¥15 有没有帮写代码做实验仿真的
- ¥15 報錯:Person is not mapped,如何解決?
- ¥30 vmware exsi重置后登不上
- ¥15 易盾点选的cb参数怎么解啊
- ¥15 MATLAB运行显示错误,如何解决?
- ¥15 c++头文件不能识别CDialog
- ¥15 Excel发现不可读取的内容
- ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题