#include<stdio.h> #define MAXN 100 struct student{ char name[20]; int score; }; void cnt_score( struct student *p, int n ); int main() { int i, n; struct student stu[MAXN]; scanf("%d", &n); for(i = 0; i < n; i++){ scanf("%s%d", stu[i].name, &stu[i].score); } cnt_score(stu, n); return 0; } void cnt_score(struct student *p, int n) { int cnt_a = 0, cnt_p = 0, cnt_f = 0; struct student stu[q];struct student *p=stu while ( p <= q ){ if ( (*p).score>=80&&(*p).score<=100 ) cnt_a++; else if ( (*p).score>=60&&(*p).score<=79 ) cnt_p++; else cnt_f++; p++; } printf("%d %d %d\n", cnt_a, cnt_p, cnt_f); }
时间: 2024-01-28 11:05:13 浏览: 73
这段代码存在以下问题:
1. 在 `cnt_score()` 函数中,定义了一个 `struct student` 类型的指针 `p`,但并没有给它赋值,也没有使用传入的指针参数 `p`,因此会导致编译时出现错误。
2. 在 `cnt_score()` 函数中,定义了一个 `struct student` 类型的数组 `stu`,但是并没有使用,也没有给它赋值,同样会导致编译时出现错误。
3. 在 `cnt_score()` 函数中,没有使用传入的指针参数 `p` 来统计成绩的数量,而是使用了未定义的变量 `q`,这也会导致编译时出现错误。
下面是修改后的代码:
```c
#include<stdio.h>
#define MAXN 100
struct student{
char name[20];
int score;
};
void cnt_score(struct student *p, int n);
int main() {
int i, n;
struct student stu[MAXN];
scanf("%d", &n);
for(i = 0; i < n; i++){
scanf("%s%d", stu[i].name, &stu[i].score);
}
cnt_score(stu, n);
return 0;
}
void cnt_score(struct student *p, int n) {
int cnt_a = 0, cnt_p = 0, cnt_f = 0;
while (p < p + n) { // 使用传入的指针参数 p 来统计成绩的数量
if ((*p).score >= 80 && (*p).score <= 100)
cnt_a++;
else if ((*p).score >= 60 && (*p).score <= 79)
cnt_p++;
else
cnt_f++;
p++;
}
printf("%d %d %d\n", cnt_a, cnt_p, cnt_f);
}
```
修改后的代码中,使用传入的指针参数 `p` 来统计成绩的数量,同时删除了无用的变量和语句。
阅读全文