输入学生成绩信息(包括学号、姓名、语文、英语、数学),计算出学生成绩总分,并按总分从高到低输出
3条回答 默认 最新
- qzjhjxj 2022-09-11 09:15关注
代码修改如下,供参考对照:
#include <stdio.h> typedef struct { char no[20]; char name[20]; float yw; float sx; float yy; float sum; }Student; //Student stds[1000]; 这里全局变量定义多余了 void input(Student s[], int* len) { int i, n; printf("请输入增加的人数:"); scanf("%d", &n); for (i = (*len), (*len) += n; i < (*len); i++) { printf("学号:"); scanf("%s", s[i].no); getchar(); printf("姓名:"); scanf("%s", s[i].name); getchar(); printf("语文:"); scanf("%f", &s[i].yw); getchar(); printf("数学:"); scanf("%f", &s[i].sx); getchar(); printf("英语:"); scanf("%f", &s[i].yy); getchar(); } } void sum(Student s[], int len) { int i; for (i = 0; i < len; i++) { s[i].sum = s[i].yw + s[i].sx + s[i].yy; } } void swap(Student* a, Student* b) { Student tmp; tmp = *a; *a = *b; *b = tmp; } void sort(Student s[], int len) { int i, j; for (i = 0; i < len - 1; i++) for (j = i + 1; j < len; j++) if (s[i].sum < s[j].sum) swap(&s[i], &s[j]); } void print(Student s[], int len) { int i; for (i = 0; i < len; i++) printf("%s,%s,%.2f,%.2f,%.2f,%.2f\n", s[i].no, s[i].name, s[i].yw, s[i].sx, s[i].yy, s[i].sum); } int main() { Student stds[1000] = { {"1001","李三",100,100,100,0}, {"1002","张三",80,80,85,0}, {"1003","王二",70,95,87,0}, {"1004","李四",60,90,82,0} }; int len = 4; input(stds, &len); sum(stds, len); sort(stds, len); print(stds, len); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 无线电能传输系统MATLAB仿真问题
- ¥50 如何用脚本实现输入法的热键设置
- ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
- ¥30 深度学习,前后端连接
- ¥15 孟德尔随机化结果不一致
- ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
- ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
- ¥15 谁有desed数据集呀
- ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
- ¥15 关于#hadoop#的问题