输入n个学生的姓名和百分制成绩,分段统计学生的成绩。 输入格式: 输入在第一行中给出正整数N(1≤n≤100)。随后N行,每行给出一位学生的姓名和成绩,中间以空格分隔。 输出格式: 在一行中顺序输出成绩为80-100分、60-79分、0-59分的学生人数,中间以空格分隔。 输入样例: 5 huanglan 83 wanghai 76 shenqiang 50 zhangfeng 95 zhangmeng 60 输出样例: 2 2 1 #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 <= q ){ if ( ) cnt_a++; else if ( ) cnt_p++; else cnt_f++; p++; } printf("%d %d %d\n", cnt_a, cnt_p, cnt_f); }
时间: 2024-01-11 16:03:31 浏览: 184
这里有两个问题。首先,没有定义指向最后一个学生的指针q。其次,在cnt_score函数中需要循环输入的学生成绩并进行统计。以下是修改后的代码:
```
#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 *q = p + n; // 定义指向最后一个学生的指针
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);
}
```
这样,就可以统计出成绩为80-100分、60-79分和0-59分的学生人数并输出了。
阅读全文