"输入成绩直到超出0-100范围,输出人数,平均、最高和最低分。"

题目是:连续输入全班成绩,直到输入超出0-100范围,要求输出全部同学人数和平均分,最高分和最低分。
我的运行结果出现了一些问题,当输入的数字里有不在0-100范围内的数字时无误,但如果所有的输入内容都属于这个范围的话就输出不了任何内容,请问是什么原因,以及该怎么改呢?

以下是我的代码:
#include<stdio.h>
int main()
{
int a[100];
int i=0;
double n=0.0;
int sum=0;
int min=101;
int max=0;
int score=0;
double s=0.0;
printf("请输入成绩(百分制,用空格分隔):");
for(i=0;i<100;i++)
{
scanf("%d",&score);
if(score>=0 && score<=100)
{
sum++;
a[i]=score;
n+=score;
}
else
{
break;
}
}
s=n/sum;
printf("平均成绩是:%.2f\n",s);
for(i=0;i<100;i++)
{
if(a[i]>=0 && a[i]<=100 && a[i]>=max)
{
max=a[i];
}
if(a[i]>=0 && a[i]<=100 && a[i]<=min)
{
min=a[i];
}
}
printf("班级人数是:%d\n",sum);
printf("最高分是:%d\n",max);
printf("最低分是:%d\n",min);
return 0;
}

你题目中不是说明了:连续输入成绩, 直到输入超出0-100范围
你题目没有规定输入数据的数目
就是说你输入完所有的正常数据内容之后, 必须再输入一个超出0-100范围的值表示输入结束,这是必须的,也是你题目要求的.
如果所有的输入内容都属于这个范围, 没有一个超出0-100范围的值, 程序无法判断你有没有输入完毕,程序就不会结束输入.也不符合你题目要求.

你题目的解答代码如下:

#include <stdio.h>
int main()
{
    int i = 0;
    double n = 0.0;
    int sum = 0;
    int min = 101;
    int max = 0;
    int score = 0;
    double s = 0.0;
    printf("请输入成绩(百分制,用空格分隔):");
    while (1) //你题目没有规定输入数据的数目,要用while循环
    {
        scanf("%d", &score);
        if (score >= 0 && score <= 100)
        {
            sum++;
            //a[i] = score; //你题目没有规定输入数据的数目, 也就不能用数组
            n += score;
            if (score > max)
            {
                max = score;
            }
            if (score < min)
            {
                min = score;
            }
        }
        else
        {
            break;
        }
    }
    s = n / sum;
    printf("平均成绩是:%.2f\n", s);
    printf("班级人数是:%d\n", sum);
    printf("最高分是:%d\n", max);
    printf("最低分是:%d\n", min);
    return 0;
}

img

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

循环输入,记录总分,人数,最高和最低分。直到输入值不在0-100之间。不需要用数组的

#include <stdio.h>
int main()
{
    int score,total =0,num=0,max=0,min=101;
    printf("请输入成绩(百分制,用空格分隔):\n");
    scanf("%d",&score);
    while(score >= 0 && score <= 100)
    {
        total += score;
        num++;
        if(score > max)
            max = score;
        else if(score < min)
            min = score;
        scanf("%d",&score);
    }
    printf("平均分是:%.2f\n",total*1.0/num);
    printf("班级人数是:%d\n",num);
    printf("最高分是:%d\n",max);
    printf("最低分是:%d\n",min);
    return 0;
}

那当然啦,你设置的结束循环(break)的条件是输入一个超出0-100的数;
而循环的结束条件(while)是输入100个数字;
也就是说,结束条件是1.输入超出范围的数 或者,2.输入100个数
你不满足条件1,又尚未满足条件2,循环不会停,结果自然也轮不到输出了