题目描述:
编写程序,输入一批学生的成绩,遇0或负数则输入结束,要求统计并输出优秀(大于85)、通过(60~84)和不及格(小于60)的学生人数。
输入格式:
一批学生成绩,遇0结束
输出格式:
输出各个成绩段的人数
用数组解:
#include<stdio.h>
int main()
{
int a[200];//用数组存储输入的成绩
int k=0;
int x=0,m=0,n=0;
for(int i=0;i<200;i++)
{
scanf("%d",&a[i]);
if(a[i]<=0)//输入的成绩小于等于0时跳出for循环,但是0好像也会被录入数组,没想到什么好法子解决
{
k=i;//这个i就是目前数组长度,用k存下,给下面循环的循环次数做限制
break;
}
}
for(int c=0;c<k;c++)
{
if(a[c]>=85)
{
x++;
}
else if(a[c]>=60&&a[c]<=84)
{
m++;
}
else if(a[c]<60)
{
n++;
}
}
printf(">=85:%d\n60-84:%d\n<60:%d",x,m,n);
return 0;
}
解这道题数组不是优解,因为用不着收集输入的数据,判断即可,但我一看到输入一批,习惯性联想到数组了,
#include<stdio.h>
int main()
{
int a,x=0,m=0,n=0;
scanf("%d",&a);//要先收取一个数据,因为while是要先判断再执行的,要是不喜欢这样,可以用do-while,或者while(~scanf("%d",&a)),把读取到0停止,放在循环里,用break跳出
while(a>0)
{
if(a>=85)
{
x++;
}
else if(a>=60&&a<=84)
{
m++;
}
else if(a<60&&a>0)
{
n++;
}
scanf("%d",&a);
}
printf(">=85:%d\n60-84:%d\n<60:%d\n",x,m,n);
return 0;
}
这里用while(~scanf(“%d”,&a)),这句话的意思就是当scanf读取到后面没有数据,会返回0,也就为假停止循环,这么理解就行,想要具体了解,可以搜搜,跟这句话同理还有while(scanf(“%d”,&a)!=EOF)
#include<stdio.h>
int main()
{
int a,x=0,m=0,n=0;
while(~scanf("%d",&a))
{
if(a>=85)
{
x++;
}
else if(a>=60&&a<=84)
{
m++;
}
else if(a<60&&a>0)
{
n++;
}
else
{
break;
}
}
printf(">=85:%d\n60-84:%d\n<60:%d\n",x,m,n);
return 0;
}
用do-while:
#include<stdio.h>
int main()
{
int a,x=0,m=0,n=0;
do//先执行,后判断
{
scanf("%d",&a);
if(a>=85)
{
x++;
}
else if(a>=60&&a<=84)
{
m++;
}
else if(a<60&&a>0)
{
n++;
}
}while(a>0);
printf(">=85:%d\n60-84:%d\n<60:%d\n",x,m,n);
return 0;
}