momo 2022-12-25 01:43 采纳率: 100%
浏览 53
已结题

C语言程序设计题非常感谢

.学生成绩统计程序设计
设计结构体数组,结构中包含学生数据为:学号、姓名、物理分数、数学分数、外语分数、计算机分数。设计各个函数,分别实现以下功能:
(1)输入学生数据(2)显示所有学生信息 (3)统计每科的最高分、最低分、不及格人数、不及格学生的数据。
设计菜单,通过选择菜单调用以上各函数。

  • 写回答

2条回答 默认 最新

  • bingbingyihao 2022-12-25 13:29
    关注

    回答:我也写了一个版本的,相对功能简单一些,代码如下

    # include <stdio.h>
    # include <stdlib.h>
    # include <string.h>
    
    #define MAX_SIZE 10
    #define PASS_SOCRE 60
    
    struct Student {
        char studentID[20];
        char name[20];
        int math;
        int physics;
        int english;
        int computer;
    };
    
    int continueInput()
    {
        printf("是否继续输入(1、继续输入   0、退出输入)\n");
        int select;
        scanf("%d", &select);
        if (select == 1)
        {
            return 1;
        }
        else
        {
            return 0;
        }
    }
    
    void inputData(Student stuArr[])
    {
        printf("请输入学生信息(学号、姓名、数学成绩、物理成绩、英语成绩、计算机成绩)\n");
        for (int i = 0; i < MAX_SIZE; i++)
        {
            scanf("%s %s %d %d %d %d", stuArr[i].studentID, stuArr[i].name, &stuArr[i].math, &stuArr[i].physics, &stuArr[i].english, &stuArr[i].computer);
            if (continueInput() == 0)
            {
                return;
            }
        }
    }
    
    void printTitle()
    {
        printf("学号\t姓名\t数学成绩\t物理成绩\t英语成绩\t计算机成绩)\n");
    }
    
    void printData(Student stu)
    {
        printf("%s\t%s\t%d\t\t%d\t\t%d\t\t%d\n", stu.studentID, stu.name, stu.math, stu.physics, stu.english, stu.computer);
    }
    
    void print(Student stuArr[])
    {
        printTitle();
        for (int i = 0; i < MAX_SIZE; i++)
        {
            if (strcmp(stuArr[i].name, "") != 0)
            {
                printData(stuArr[i]);
            }
        }
    }
    
    void printMax(int maxScore[4])
    {
        printf("数学最高分:%d\n", maxScore[0]);
        printf("物理最高分:%d\n", maxScore[1]);
        printf("英语最高分:%d\n", maxScore[2]);
        printf("计算机最高分:%d\n", maxScore[3]);
        printf("\n");
    }
    
    void printMin(int minScore[4])
    {
        printf("数学最低分:%d\n", minScore[0]);
        printf("物理最低分:%d\n", minScore[1]);
        printf("英语最低分:%d\n", minScore[2]);
        printf("计算机最低分:%d\n", minScore[3]);
        printf("\n");
    }
    
    void printNoPassNumber(int noPassNumber[4])
    {
        printf("数学不及格人数:%d\n", noPassNumber[0]);
        printf("物理不及格人数:%d\n", noPassNumber[1]);
        printf("英语不及格人数:%d\n", noPassNumber[2]);
        printf("计算机不及格人数:%d\n", noPassNumber[3]);
        printf("\n");
    }
    
    void printNoPassData(Student stuArr[], int index[4][MAX_SIZE])
    {
        printf("数学不及格学生的成绩\n");
        printTitle();
        int count = 0;
        for (int i = 0; i < MAX_SIZE; i++)
        {
            if (index[0][count] == i)
            {
                count++;
                printData(stuArr[i]);
            }
        }
    
        printf("物理不及格学生的成绩\n");
        printTitle();
        count = 0;
        for (int i = 0; i < MAX_SIZE; i++)
        {
            if (index[1][count] == i)
            {
                count++;
                printData(stuArr[i]);
            }
        }
    
        printf("英语不及格学生的成绩\n");
        printTitle();
        count = 0;
        for (int i = 0; i < MAX_SIZE; i++)
        {
            if (index[2][count] == i)
            {
                count++;
                printData(stuArr[i]);
            }
        }
    
        printf("计算机不及格学生的成绩\n");
        printTitle();
        count = 0;
        for (int i = 0; i < MAX_SIZE; i++)
        {
            if (index[3][count] == i)
            {
                count++;
                printData(stuArr[i]);
            }
        }
    }
    
    void statistic(Student stuArr[])
    {
        // 下标依次表示 数学、物理、英语、计算机
        int maxScore[4] = { stuArr[0].math, stuArr[0].physics, stuArr[0].english, stuArr[0].computer };
        int minScore[4] = { stuArr[0].math, stuArr[0].physics, stuArr[0].english, stuArr[0].computer };
        int noPassNumber[4] = { 0, 0, 0, 0 };
        int index[4][MAX_SIZE] = {}; // 不及格的学生下标
        int count[4] = { 0, 0, 0, 0 };
    
        for (int i = 0; i < MAX_SIZE; i++)
        {
            if (strcmp(stuArr[i].name, "") == 0)
            {
                continue;
            }
            if (stuArr[i].math > maxScore[0])
            {
                maxScore[0] = stuArr[i].math;
            }
            if (stuArr[i].physics > maxScore[1])
            {
                maxScore[1] = stuArr[i].physics;
            }
            if (stuArr[i].english > maxScore[2])
            {
                maxScore[2] = stuArr[i].english;
            }
            if (stuArr[i].computer > maxScore[3])
            {
                maxScore[3] = stuArr[i].computer;
            }
    
            if (stuArr[i].math < minScore[0])
            {
                minScore[0] = stuArr[i].math;
            }
            if (stuArr[i].physics < minScore[1])
            {
                minScore[1] = stuArr[i].physics;
            }
            if (stuArr[i].english < minScore[2])
            {
                minScore[2] = stuArr[i].english;
            }
            if (stuArr[i].computer < minScore[3])
            {
                minScore[3] = stuArr[i].computer;
            }
    
            if (stuArr[i].math < PASS_SOCRE)
            {
                noPassNumber[0]++;
                index[0][count[0]++] = i;
            }
            if (stuArr[i].physics < PASS_SOCRE)
            {
                noPassNumber[1]++;
                index[1][count[1]++] = i;
            }
            if (stuArr[i].english < PASS_SOCRE)
            {
                noPassNumber[2]++;
                index[2][count[2]++] = i;
            }
            if (stuArr[i].computer < PASS_SOCRE)
            {
                noPassNumber[3]++;
                index[3][count[3]++] = i;
            }
        }
    
        printMax(maxScore);
        printMin(minScore);
        printNoPassNumber(noPassNumber);
        printNoPassData(stuArr, index);
    }
    
    void menu(Student stuArr[])
    {
        char space[] = "\t\t\t";
        printf("%s学生成绩统计系统\n", space);
        printf("%s1、输入学生信息\n", space);
        printf("%s2、显示学生信息\n", space);
        printf("%s3、统计学生信息\n", space);
        printf("%s4、退出系统\n", space);
        int chioce;
        scanf("%d", &chioce);
        switch (chioce)
        {
        case 1:
            inputData(stuArr);
            break;
        case 2:
            print(stuArr);
            break;
        case 3:
            statistic(stuArr);
            break;
        case 4:
            exit(0);
            break;
        default:
            break;
        }
    }
    
    int main()
    {
        Student stuArr[MAX_SIZE] = {};
        while (1)
        {
            menu(stuArr);
            printf("\n");
            system("pause");
            system("cls");
        }
    }
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    1人已打赏
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月4日
  • 已采纳回答 12月27日
  • 创建了问题 12月25日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度