优化下列函数:struct student { int num; char name[10]; int c,oop,db; float avg; }; void input(int n,struct student hkx[]) { for(int i=1;i<n;i++) { scanf("%d%s",&hkx[i].num,hkx[i].name,&hkx[i].c,&hkx[i].oop,&hkx[i].db); hkx[i].avg = (float)(hkx[i].c+hkx[i].oop+hkx[i].db)/3; } } int output(int n,struct student hkx[]) { for(int i=0;i<n;i++) { printf("%d%s",hkx[i].num,hkx[i].name); for(int j=0;j<n;j++) { printf("%d%d%d",hkx[i].c,hkx[i].oop,hkx[i].db); } printf("%f\n",hkx[i].avg); } } int sort(int n,struct student stu[]) { struct student temp; for (int i = 0; i < n - 1; i++) { for (int j = i + 1; j < n; j++) { if (hkx[i].avg < hkx[j].avg) { temp = hkx[i]; hkx[i] = hkx[j]; hkx[j] = temp; } } } } int main() { struct student hkx[100]; int n; printf("请输入要录入成绩资料的学生人数:"); scanf("%d", &n); struct student hkx[i]; input(hkx,n); // 输入学生成绩资料 sort(hkx,n); // 对结构体数组进行降序排序 output(hkx,n); // 输出每个学生的成绩资料 return 0; }
时间: 2024-04-28 13:20:24 浏览: 45
C语言的Struct Hack笔记
这段代码存在一些问题和可以优化的地方,以下是我的建议:
1. 在函数 input 中的 for 循环中,循环变量 i 应该从 0 开始,而不是从 1 开始。因为结构体数组 hkx 的下标是从 0 开始的,如果 i 从 1 开始,则会导致 hkx[0] 没有被赋值,可能会导致程序出错。
2. 在函数 output 中,第一个 printf 函数的输出格式缺少一个空格,应该改为:printf("%d %s ", hkx[i].num, hkx[i].name); 。
3. 在函数 output 中的第二个 for 循环中,循环变量 j 的上限应该是 3,而不是 n。因为每个学生只有三门课程的成绩,超过三门课程的成绩没有意义。
4. 在函数 sort 中,循环变量 i 应该从 0 开始,而不是从 1 开始,同样的道理,因为结构体数组 hkx 的下标是从 0 开始的。
5. 函数 sort 没有返回值,应该将其返回值类型改为 void。
6. 在函数 main 中,结构体数组 hkx 已经在声明时定义了大小为 100,不需要再在输入数据前再次定义一个大小未知的 hkx 数组。
7. 在函数 main 中,应该检查输入的 n 是否超过了 hkx 数组的大小,如果超过了,应该给出提示并结束程序。
8. 在函数 main 中,应该在最后返回一个值,比如返回 0。
改进后的代码如下:
阅读全文