求看看我这个程序哪里出问题了?

设计一个程序,从键盘输入小于30个学生成绩,当输入为1时,输入完毕统计并显示优、良、中、及格及不及格人数;我的程序如下:
#include <stdio.h>
int main ()
{
int n[30],a,b,c,d,e,i;
a=b=c=d=e=0;
printf("Enter n[i]:");
for(i=0;i<30;i++)
scanf("%d",&n[i]);
for (i=1;i<30;i++)
{

if(n[i]>90)
{
    a=a+1;
}
else if((n[i]>=80)&&(n[i]<=90))
{
    b=b+1;
}
else if((n[i]>=70)&&(n[i]<80))
{
    c=c+1;
}
else if((n[i]>=60)&&(n[i]<70))
{
    d=d+1;
}
else if((n[i]<60)&&(n[i]>0))
{
    e=e+1;
}
else(n[i]==1);
{
    printf("error");
}
}
printf("优%d\n: 良%d\n 中%d\n 及格%d\n 不及格%d\n",a,b,c,d,e);
return 0;

}

但运行出来结果却是:

img


所以到底哪里错了呢?

img

你这里设置成了必须输入30个分数之后才会计算成绩合不合格
我们可以在这里增加一个 if 语句来判断:

printf("Enter n[i]:\n");
for (i = 0; i < 30; i++)
{
      scanf("%d", &n[i]);
      if (n[i] == 1) {
           break;
      }
 }

判断等级的地方也有些问题,我改了一下

#include <stdio.h>
int main()
{
    int n[30], a, b, c, d, e, i;
    a = b = c = d = e = 0;

    printf("Enter n[i]:\n");
    for (i = 0; i < 30; i++)
    {
        scanf("%d", &n[i]);
        if (n[i] == 1) {
            break;
        }
    }

    for (i = 1; i < 30; i++)
    {
        if (n[i] > 90 && n[i] <= 100)
        {
            a = a + 1;
        }
        else if (n[i] >= 80)
        {
            b = b + 1;
        }
        else if (n[i] >= 70)
        {
            c = c + 1;
        }
        else if (n[i] >= 60)
        {
            d = d + 1;
        }
        else if (n[i] >= 0)
        {
            e = e + 1;
        }
    }
    printf("优:%d个人\n良:%d个人\n中:%d个人\n及格:%d个人\n不及格:%d个人\n", a, b, c, d, e);
    return 0;
}

测试结果如下:

img

有帮助的话记得点个采纳支持一下博主呀

1 循环无法终止
for(i=0;i<30;i++)
scanf("%d",&n[i]);
2 当n[i]==1时循环没有跳出