#include<stdio.h> #include <stdio.h> struct student { int num; char name[20]; int score;}stu[5]; main() { struct student *pt,*p[5]; int i, j, k,sum=0; for(i=0;i<5;i++) {scanf("%d%s%d",&stu[i].num,stu[i].name,&stu[i].score); p[i]=&stu[i]; sum=sum+p[i]; } for(i=0;i<5;i++) { k=i; for(j=i;j<5;j++) if( &stu[j].score>&stu[k].score) k=j; if(k!=i) { pt=p[i]; p[i]=p[k]; p[k]=pt;} } for(i=0;i<5;i++) printf("%d, %s, %d", &stu[i].num,stu[i].name,&stu[i].score); printf("Average=%d\n", sum/10); }
时间: 2024-03-20 22:41:41 浏览: 49
整体引用-C语言入门教程
这段代码存在一些错误,可能是因为复制时出现了问题。这里给您列出了一些可能的错误:
1. 在第一行和第二行中重复包含了<stdio.h>头文件。
2. 结构体中的成员变量score应该是整型,而不是字符型。应该改为:int score;
3. 在第11行中,计算sum时应该加上p[i]->score而不是p[i]。
4. 在第23行中,printf语句中应该使用p[i]->num、p[i]->name和p[i]->score而不是&stu[i].num、stu[i].name和&stu[i].score。因为p[i]指向了结构体数组中的元素,而不是数组本身。
5. 在第24行中,计算平均值时应该除以5而不是10。
6. 缺少对结构体指针pt的定义。
有了这些修改,代码将会变得更加稳定,如下所示:
```c
#include <stdio.h>
struct student {
int num;
char name[20];
int score;
} stu[5];
int main() {
struct student *pt, *p[5];
int i, j, k, sum = 0;
for(i = 0; i < 5; i++) {
scanf("%d%s%d", &stu[i].num, stu[i].name, &stu[i].score);
p[i] = &stu[i];
sum += p[i]->score;
}
for(i = 0; i < 5; i++) {
k = i;
for(j = i; j < 5; j++) {
if(p[j]->score > p[k]->score) {
k = j;
}
}
if(k != i) {
pt = p[i];
p[i] = p[k];
p[k] = pt;
}
}
for(i = 0; i < 5; i++) {
printf("%d, %s, %d\n", p[i]->num, p[i]->name, p[i]->score);
}
printf("Average=%d\n", sum / 5);
return 0;
}
```
阅读全文