fylslzn 2024-09-25 20:57 采纳率: 100%
浏览 16
已采纳

绑住完成C语言的任务

谁能帮我用c语言做个东西,这是一个学长给我的任务,但我c语言啥也没学,学长说可以以任何形式完成包括上网咨询,题目需求如下:
需求:对一次歌手比赛的成绩进行管理,功能要求:1、输入每个选手的数据包括编号、姓名、十个评委的成绩,根据输入计算出总成绩和平均成绩(去掉最高分,去掉最低分)。2、显示主菜单如下:1)输入选手数据 2)评委打分 3)成绩排序(按平均分)4)数据查询 5)追加学生数据 6)写入数据文件7)退出系统。
需要完成文档撰写,内容需要包括:
系统总体设计--确定程序功能模块;采用什么系统进行设计,需要用到哪些技术,等等。
系统详细设计--在总体设计基础上设计系统总体框架、数据结构(类)、关键算法的流程;系统由几个模块组成,每个模块有什么功能等等。
代码设计--给出所有代码,要有完备的注释。

我在网上找了好多资料,但我啥也看不懂,他就给一周时间,有哪位优秀的人能帮我完成吗,谢谢了

  • 写回答

21条回答 默认 最新

  • 一休哥助手 2024-09-26 19:26
    关注
    此回答来自于wx公众号:一休哥助手
    

    我可以帮你完成这个C语言任务!以下是任务的分步解决方案,包括总体设计、详细设计和代码实现:


    系统总体设计:

    功能模块

    1. 输入选手数据:输入选手编号、姓名。
    2. 评委打分:每个选手由10位评委打分,计算总成绩和平均成绩(去掉最高分和最低分)。
    3. 成绩排序:根据选手的平均分进行排序。
    4. 数据查询:根据编号查询选手的成绩。
    5. 追加学生数据:追加新的选手数据。
    6. 写入数据文件:将选手数据写入到文件中保存。
    7. 退出系统:退出程序。

    设计思路

    • 采用C语言设计,使用结构体来存储选手信息,包括编号、姓名、评委分数、总分和平均分。
    • 数据结构:数组存储所有选手的数据。
    • 主要技术:结构体、文件操作、排序算法(如冒泡排序)、输入输出操作等。

    系统详细设计:

    数据结构

    typedef struct {
        int id;           // 选手编号
        char name[100];   // 选手姓名
        float scores[10]; // 10个评委的分数
        float total;      // 总成绩
        float average;    // 平均成绩
    } Singer;
    

    关键算法流程

    1. 计算总分和平均分
      • 去掉最高分和最低分后,计算总分并求平均分。
    2. 排序
      • 根据选手的平均分进行排序,使用简单的冒泡排序。
    3. 数据查询
      • 根据选手编号查找对应的选手数据。
    4. 文件操作
      • 将数据保存到文件中,并支持文件读取。

    代码设计:

    #include <stdio.h>
    #include <string.h>
    
    #define MAX_SINGERS 100
    
    typedef struct {
        int id;           // 选手编号
        char name[100];   // 选手姓名
        float scores[10]; // 10个评委的分数
        float total;      // 总成绩
        float average;    // 平均成绩
    } Singer;
    
    Singer singers[MAX_SINGERS]; // 存储选手数据
    int singer_count = 0;        // 选手数量
    
    // 输入选手数据
    void inputSingerData() {
        if (singer_count >= MAX_SINGERS) {
            printf("无法添加更多选手,已达到上限。\n");
            return;
        }
        printf("输入选手编号: ");
        scanf("%d", &singers[singer_count].id);
        printf("输入选手姓名: ");
        scanf("%s", singers[singer_count].name);
        singer_count++;
    }
    
    // 评委打分并计算总成绩和平均分
    void enterScores() {
        for (int i = 0; i < singer_count; i++) {
            printf("输入选手 %s 的10个评委打分: \n", singers[i].name);
            float max = 0, min = 100, sum = 0;
            for (int j = 0; j < 10; j++) {
                scanf("%f", &singers[i].scores[j]);
                sum += singers[i].scores[j];
                if (singers[i].scores[j] > max) max = singers[i].scores[j];
                if (singers[i].scores[j] < min) min = singers[i].scores[j];
            }
            singers[i].total = sum - max - min;
            singers[i].average = singers[i].total / 8; // 去掉最高分和最低分后的平均分
        }
    }
    
    // 按平均成绩排序
    void sortSingers() {
        for (int i = 0; i < singer_count - 1; i++) {
            for (int j = 0; j < singer_count - i - 1; j++) {
                if (singers[j].average < singers[j + 1].average) {
                    Singer temp = singers[j];
                    singers[j] = singers[j + 1];
                    singers[j + 1] = temp;
                }
            }
        }
        printf("按平均分排序后的选手列表:\n");
        for (int i = 0; i < singer_count; i++) {
            printf("编号: %d, 姓名: %s, 平均分: %.2f\n", singers[i].id, singers[i].name, singers[i].average);
        }
    }
    
    // 根据编号查询选手数据
    void querySingerData() {
        int id;
        printf("输入要查询的选手编号: ");
        scanf("%d", &id);
        for (int i = 0; i < singer_count; i++) {
            if (singers[i].id == id) {
                printf("编号: %d, 姓名: %s, 平均分: %.2f\n", singers[i].id, singers[i].name, singers[i].average);
                return;
            }
        }
        printf("未找到该选手。\n");
    }
    
    // 追加选手数据
    void appendSingerData() {
        inputSingerData();
    }
    
    // 将选手数据写入文件
    void writeDataToFile() {
        FILE *file = fopen("singer_data.txt", "w");
        if (file == NULL) {
            printf("无法打开文件。\n");
            return;
        }
        for (int i = 0; i < singer_count; i++) {
            fprintf(file, "编号: %d, 姓名: %s, 平均分: %.2f\n", singers[i].id, singers[i].name, singers[i].average);
        }
        fclose(file);
        printf("数据已写入文件。\n");
    }
    
    // 主菜单
    void showMenu() {
        int choice;
        do {
            printf("\n1. 输入选手数据\n");
            printf("2. 评委打分\n");
            printf("3. 成绩排序\n");
            printf("4. 数据查询\n");
            printf("5. 追加选手数据\n");
            printf("6. 写入数据文件\n");
            printf("7. 退出系统\n");
            printf("选择操作: ");
            scanf("%d", &choice);
    
            switch (choice) {
                case 1:
                    inputSingerData();
                    break;
                case 2:
                    enterScores();
                    break;
                case 3:
                    sortSingers();
                    break;
                case 4:
                    querySingerData();
                    break;
                case 5:
                    appendSingerData();
                    break;
                case 6:
                    writeDataToFile();
                    break;
                case 7:
                    printf("退出系统。\n");
                    break;
                default:
                    printf("无效选择,请重新输入。\n");
            }
        } while (choice != 7);
    }
    
    // 主函数
    int main() {
        showMenu();
        return 0;
    }
    

    完整代码说明:

    1. 输入选手数据:函数 inputSingerData() 负责输入选手编号和姓名,并将数据存入数组。
    2. 评委打分:函数 enterScores() 负责输入每个选手的评委打分,并计算去掉最高分和最低分后的总分和平均分。
    3. 成绩排序sortSingers() 使用冒泡排序按平均分对选手进行排序。
    4. 数据查询querySingerData() 根据选手编号查询对应数据。
    5. 追加数据:通过 appendSingerData() 追加新的选手数据。
    6. 写入文件writeDataToFile() 将选手数据保存到文件。
    7. 主菜单showMenu() 控制整个系统的操作流程。

    希望这个完整的C语言解决方案能帮你完成学长布置的任务!

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

报告相同问题?

问题事件

  • 已采纳回答 9月27日
  • 创建了问题 9月25日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?