修改程序#include <stdio.h> #include <stdlib.h> struct student { int num; char name[10]; int c,oop,db; float avg; }; void input(int n,struct student hkx[]) { for(int i=0;i<n;i++) { printf("第 %d 个学生:\n", i + 1); 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); } } void sort(int n,struct student hkx[]) { struct student temp; for (int i = 0; i < n - 1; i++) { for (int j = i + 1; j < 3; j++) { if (hkx[i].avg < hkx[j].avg) { temp = hkx[i]; hkx[i] = hkx[j]; hkx[j] = temp; } printf("\n学号 姓名 c语言 OOP 数据库 平均成绩\n"); printf("%-10d %-10s% -8d% -8d% -6.1f\n",hkx[i].num,hkx[i].name,hkx[i].c,hkx[i].oop,hkx[i].db,hkx[i].avg); } } } int main() { int n; printf("请输入要录入成绩资料的学生人数:"); scanf("%d", &n); struct student hkx[100]; input(hkx,n); // 输入学生成绩资料 sort(hkx,n); // 对结构体数组进行降序排序 output(hkx,n); // 输出每个学生的成绩资料 return 0; }
时间: 2024-02-05 19:02:34 浏览: 78
这段程序存在一些问题,我将列出并解释这些问题,并提供相应的修改建议:
1. 在 input 函数中,scanf 函数缺少了两个格式控制符,应该修改为:
```c
scanf("%d%s%d%d%d",&hkx[i].num,hkx[i].name,&hkx[i].c,&hkx[i].oop,&hkx[i].db);
```
2. 在 output 函数中,for 循环的终止条件应该是 j < 3,而不是 n,应该修改为:
```c
for(int j=0;j<3;j++)
```
3. 在 sort 函数中,内层循环应该从 i+1 开始,而不是从 0 开始,应该修改为:
```c
for (int j = i + 1; j < n; j++)
```
4. 在 sort 函数中,printf 函数的位置不正确,应该将 printf 函数放在外层循环中,以便每次交换后输出当前的排序结果,应该修改为:
```c
for (int i = 0; i < n - 1; i++) {
printf("\n学号 姓名 c语言 OOP 数据库 平均成绩\n");
for (int j = i + 1; j < n; j++) {
if (hkx[i].avg < hkx[j].avg) {
struct student temp = hkx[i];
hkx[i] = hkx[j];
hkx[j] = temp;
}
printf("%-10d %-10s% -8d% -8d% -6d% -6.1f\n", hkx[i].num, hkx[i].name, hkx[i].c, hkx[i].oop, hkx[i].db, hkx[i].avg);
}
}
```
5. 在 output 函数中,printf 函数的格式控制符不正确,应该修改为:
```c
printf("%d %s %d %d %d %f\n", hkx[i].num, hkx[i].name, hkx[i].c, hkx[i].oop, hkx[i].db, hkx[i].avg);
```
修改后的程序如下:
阅读全文