我写的代码在编译器上是没有什么问题了,但是运行上还存在问题,这哪还存在问题,要怎么改正?

任务:学生成绩统计。从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实现下列功能:
(1)统计不及格人数并打印不及格学生名单;
(2)统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单;
(3)统计各分数段的学生人数及所占的百分比。


#include <stdio.h>
#define N 30

int main() {
    //声明结构体student
    struct student {
        char name[20];//学生姓名
        float score;  //学生成绩
    };
    int count0 = 0, count1 = 0, count2 = 0, count3 = 0, count4 = 0;
    int n, i, a, count = 0, k = 0;
    float average, sum = 0;
    struct student stu[100];//定义结构体数组
    for (int i = 0; i < N; i++) { //利用循环输入学生的姓名,成绩
        scanf("%s%f", &stu[i].name, &stu[i].score);
        sum += stu[i].score; //计算总成绩
        if (stu[i].score < 60) { //判断是否及格,统计不及格人数
            count++;
            printf("不及格的学生名单有:%s:%d", stu[i].name, stu[i].score);
        }
        if (stu[i].score < 0)
            break;
    }
    printf("不及格人数为%d", count);
    average = sum / N; //求平均成绩
    for (int i = 0; i < N; i++) { //打印成绩在全班平均分及平均分之上的学生
        if (stu[i].score > average) {
            k++;
            printf("成绩在全班平均分及平均分之上的学生有:%s:%d", stu[i].name, stu[i].score);
        }
    }
    printf("成绩在全班平均分及平均分之上的学生人数有:%d", k); //输出成绩在全班平均分及平均分之上的学生人数
    for (i = 0; i < N; i++) {
        if (stu[i].score >= 90)
            count0++;
        if (80 <= stu[i].score && stu[i].score <= 89)
            count1++;
        if (70 <= stu[i].score && stu[i].score <= 79)
            count2++;
        if (60 <= stu[i].score && stu[i].score <= 69)
            count3++;
        if (stu[i].score < 60)
            count4++;

    }
    printf("%d", count0, count1, count2, count3, count4);
    printf("60分以下的学生人数是%d,所占百分比是%d", count0, (float)count0 / N * 100);
    printf("60分以上的学生人数是%d,所占百分比是%d", count1, (float)count1 / N * 100);
    printf("70分以上的学生人数是%d,所占百分比是%d", count2, (float)count2 / N * 100);
    printf("80分以上的学生人数是%d,所占百分比是%d", count3, (float)count3 / N * 100);
    printf("90分以上的学生人数是%d,所占百分比是%d", count4, (float)count4 / N * 100);

    return 0;
}

img

代码修改了一下,你对比参考如下:

#include <stdio.h>
#define N 30

int main() {
    //声明结构体student
    struct student {
        char name[20];//学生姓名
        float score;  //学生成绩
    };
    int count0 = 0, count1 = 0, count2 = 0, count3 = 0, count4 = 0;
    int n, i, a, count = 0, k = 0;
    float average, sum = 0;
    struct student stu[100];//定义结构体数组
    for (int i = 0; i < N; i++) { //利用循环输入学生的姓名,成绩
        scanf("%s %f", stu[i].name, &(stu[i].score));
        getchar();
        sum += stu[i].score; //计算总成绩
        if (stu[i].score < 60) { //判断是否及格,统计不及格人数
            count++;
            printf("不及格的学生名单有:%s:%f\n", stu[i].name, stu[i].score);
        }
        if (stu[i].score < 0)
            break;
    }
    printf("不及格人数为%d\n", count);
    average = sum / N; //求平均成绩
    for (int i = 0; i < N; i++) { //打印成绩在全班平均分及平均分之上的学生
        if (stu[i].score > average) {
            k++;
            printf("成绩在全班平均分及平均分之上的学生有:%s:%f\n", stu[i].name, stu[i].score);
        }
    }
    printf("成绩在全班平均分及平均分之上的学生人数有:%d\n", k); //输出成绩在全班平均分及平均分之上的学生人数
    for (i = 0; i < N; i++) {
        if (stu[i].score >= 90)
            count0++;
        if (80 <= stu[i].score && stu[i].score <= 89)
            count1++;
        if (70 <= stu[i].score && stu[i].score <= 79)
            count2++;
        if (60 <= stu[i].score && stu[i].score <= 69)
            count3++;
        if (stu[i].score < 60)
            count4++;

    }
    printf("%d %d %d %d %d\n", count0, count1, count2, count3, count4);
    printf("60分以下的学生人数是%d,所占百分比是%f\n", count0, (float)count0 / N * 100);
    printf("60分以上的学生人数是%d,所占百分比是%f\n", count1, (float)count1 / N * 100);
    printf("70分以上的学生人数是%d,所占百分比是%f\n", count2, (float)count2 / N * 100);
    printf("80分以上的学生人数是%d,所占百分比是%f\n", count3, (float)count3 / N * 100);
    printf("90分以上的学生人数是%d,所占百分比是%f\n", count4, (float)count4 / N * 100);

    return 0;
}

如有帮助,欢迎点赞+采纳哈!

整体修改如下,供参考:

#include <stdio.h>
#define N 30
int main() {
    //声明结构体student
    struct student {
        char name[20];//学生姓名
        float score;  //学生成绩
    };
    int count0 = 0, count1 = 0, count2 = 0, count3 = 0, count4 = 0;
    int n, i, a, count = 0, k = 0;
    float average = 0, sum = 0;
    struct student stu[100];
    for (i = 0; i < N; i++) {   //for (int i = 0; i < N; i++) 修改
        scanf("%s%f", stu[i].name, &stu[i].score);     //修改
        // scanf("%s%f", &stu[i].name, &stu[i].score);
        if (stu[i].score < 0)     //修改,这句移动到这
            break;
        sum += stu[i].score;
        if (stu[i].score < 60) {
            count++;
            printf("不及格的学生名单有:%s:%.2f\n", stu[i].name, stu[i].score); //修改
        }
    }
    printf("不及格人数为%d\n", count);
    n = i;  //修改
    if(n > 0)  average = sum / n; // average = sum / N;   修改
    for (i = 0; i < n; i++) { //for (int i = 0; i < N; i++) 修改
         if (stu[i].score > average) {
             k++;
            printf("成绩在全班平均分及平均分之上的学生有:%s:%.2f\n", stu[i].name, stu[i].score);
            //printf("成绩在全班平均分及平均分之上的学生有:%s:%d\n", stu[i].name, stu[i].score);
         }
    }
    printf("成绩在全班平均分及平均分之上的学生人数有:%d\n", k);
    for (i = 0; i < n; i++) {    // for (i = 0; i < N; i++) 修改
        if (stu[i].score >= 90)
            count0++;
        if (80 <= stu[i].score && stu[i].score <= 89)
            count1++;
        if (70 <= stu[i].score && stu[i].score <= 79)
            count2++;
        if (60 <= stu[i].score && stu[i].score <= 69)
            count3++;
        if (stu[i].score < 60)
            count4++;
    }
    printf("%d %d %d %d %d\n", count0, count1, count2, count3, count4);//修改
    if (n > 0){      //  修改
         printf("60分以下的学生人数是%d,所占百分比是%.2f%%\n", count4, (float)count4 / n * 100);
         //printf("60分以下的学生人数是%d,所占百分比是%f\n", count0, (float)count0 / N * 100); 修改

         printf("60分以上的学生人数是%d,所占百分比是%.2f%%\n", count3, (float)count3 / n * 100);
         //printf("60分以上的学生人数是%d,所占百分比是%f\n", count1, (float)count1 / N * 100);修改

         printf("70分以上的学生人数是%d,所占百分比是%.2f%%\n", count2, (float)count2 / n * 100);
         //printf("70分以上的学生人数是%d,所占百分比是%f\n", count2, (float)count2 / N * 100); 修改

         printf("80分以上的学生人数是%d,所占百分比是%.2f%%\n", count1, (float)count1 / n * 100);
         //printf("80分以上的学生人数是%d,所占百分比是%f\n", count3, (float)count3 / N * 100); 修改

         printf("90分以上的学生人数是%d,所占百分比是%.2f%%\n", count0, (float)count0 / n * 100);
         //printf("90分以上的学生人数是%d,所占百分比是%f\n", count4, (float)count4 / N * 100); 修改
    }
    return 0;
}