输入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);
}

数组在定义的时候是要定义大小的。我理解的你的意思是:先输入要统计的学生的数目N,也既是定义一个大小为N的数组,有一个偷懒的方法就是你预先定义一个很大的数组,远超过你能使用的极限,比如你可能统计100人的成绩,你可以预先定义一个大小为1000的数组来存储成绩,这样就可以用for循环了,只是在输入成绩的时候你要有一个判断来告诉程序你的输入结束,比如当你输入的成绩超过100时判定输入结束。但是这样的定义浪费了内存。
更好的方法是动态建立一个数组,我用C++实现,下面是程序,你看看
#include <iostream>
using namespace std;
int main()
{
int i,n,count[6]={0,0,0,0,0,0};
cout<<"输入要统计的学生人数:"<<endl;
cin>>n;
int *score=new int[n];
cout<<"输入"<<n<<"位学生成绩:"<<endl;
for(i=0;i<n;++i)
cin>>score[i];
for(i=0;i<n;++i)
{
if(score[i]<60)
count[0]++;
else if(score[i]<=69&&score[i]>=60)
count[1]++;
else if(score[i]<=79&&score[i]>=70)
count[2]++;
else if(score[i]<=89&&score[i]>=80)
count[3]++;
else if(score[i]<=99&&score[i]>=90)
count[4]++;
else if(score[i]==100)
count[5]++;
}
cout<<"统计结果如下:"<<endl;
for(i=0;i!=6;++i)
cout<<count[i]<<" ";
cout<<endl;
delete [] score;
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-02-27
struct student* q = p + n - 1;

(*p).score >= 80 && (*p).score <= 100

(*p).score >= 60 && (*p).score <= 79
相似回答