输入学生成绩信息(包括学号、姓名、语文、英语、数学),计算出学生成绩总分,并按总分从高到低输出
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; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录