快乐打码 2022-12-18 22:29 采纳率: 71.4%
浏览 40
已结题

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

任务:学生成绩统计。从键盘输入一个班(全班最多不超过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;
}
  • 写回答

2条回答 默认 最新

  • Huazie 全栈领域优质创作者 2022-12-18 22:57
    关注

    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;
    }
    

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月27日
  • 已采纳回答 12月19日
  • 修改了问题 12月19日
  • 创建了问题 12月18日

悬赏问题

  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启