#include<stdio.h> struct student { char num[20]; char name [20]; int a; }; int main() { int n,i=0, struct stdent g[i]; scanf("%d",&n) for(i=0;i<n;i++) { scanf("%s %s %d",g[i].num,g[i].name,&g[i].a) } double b; for(i=0;i<n;i++) { b+=g[20].a; } double c=b/n; printf("%lf\n",c); for(i=0;i<n;i++) { if(g[i].a<c) { printf("%s %S\n",g[i].name,g[i].num); } } return 0; } }
时间: 2024-01-19 10:02:25 浏览: 56
这段代码有一些问题,我帮你指出来:
1. 在 `int n, i=0, struct stdent g[i]` 这一行中,你在定义 `g` 数组时使用了变量 `i`,但是此时 `i` 还没有被赋值,因此 `g` 数组的大小为 0,这是不合法的。
2. 在 `scanf("%d",&n)` 这一行中,你没有加分号。
3. 在 `scanf("%s %s %d",g[i].num,g[i].name,&g[i].a)` 这一行中,你没有加分号。
4. 在 `for(i=0;i<n;i++) { b+=g[20].a; }` 这一行中,你应该使用 `i` 作为数组下标,而不是固定使用 `20`。
5. 在 `printf("%s %S\n",g[i].name,g[i].num);` 这一行中,你错误地使用了大写字母 `S`,导致编译错误。
6. 在最后的大括号 `}` 处,多余了一个。
修正后的代码如下:
```c
#include <stdio.h>
struct student {
char num[20];
char name[20];
int a;
};
int main() {
int n, i;
scanf("%d", &n);
struct student g[n];
for (i = 0; i < n; i++) {
scanf("%s %s %d", g[i].num, g[i].name, &g[i].a);
}
double b = 0;
for (i = 0; i < n; i++) {
b += g[i].a;
}
double c = b / n;
printf("%lf\n", c);
for (i = 0; i < n; i++) {
if (g[i].a < c) {
printf("%s %s\n", g[i].name, g[i].num);
}
}
return 0;
}
```
阅读全文