dashidai_ 2023-01-02 16:16 采纳率: 94.1%
浏览 72
已结题

关于#c语言#的问题:要求:1)请 定义一个结构,来描述每个学生2)请用根据输入学生的个数动态申请的方法来定义结构数组3)请分别定义函数来计算统计、平均、最高分数4)函数的形参请使用指针的形式

  1. 1 个班上有 N 个学生,每个学生有学号、性别、身高、班级、数学、英语、物理等。
    请编写一个程序统计学生的男生、女生分别的个数,平均身高、每门课的平均成绩,
    并找出 3 门课总分最高且单门成绩大于 60 的的学生。
    要求:
    1)请 定义一个结构,来描述每个学生
    2)请用根据输入学生的个数动态申请的方法来定义结构数组
    3)请分别定义函数来计算统计、平均、最高分数
    4)函数的形参请使用指针的形式
  2. 基于第 1 题,请用把学生的信息放在文本里面,用文件操作来输入;请把统计的结
    果输出到一个 ouput.txt 的文本中。
  • 写回答

1条回答 默认 最新

  • |__WhoAmI__| 2023-01-02 19:00
    关注

    1.定义结构体,描述每个学生的信息。

    struct student
    {
        int id; // 学号
        char gender; // 性别
        float height; // 身高
        int class_id; // 班级
        float math; // 数学成绩
        float english; // 英语成绩
        float physics; // 物理成绩
    };
    

    2.根据输入学生的个数动态申结构体数组。

    int num_students; // 学生的个数
    printf("输入学生的个数:");
    scanf("%d", &num_students);
    
    // 动态申结构体数组
    struct student *students = (struct student *)malloc(num_students * sizeof(struct student));
    

    3.定义函数来计算统计、平均、最高分数。

    // 计算男生、女生的个数
    void count_genders(struct student *students, int num_students, int *num_males, int *num_females)
    {
        for (int i = 0; i < num_students; i++)
        {
            if (students[i].gender == 'M')
            {
                (*num_males)++;
            }
            else if (students[i].gender == 'F')
            {
                (*num_females)++;
            }
        }
    }
    
    // 计算平均身高
    float average_height(struct student *students, int num_students)
    {
        float sum = 0;
        for (int i = 0; i < num_students; i++)
        {
            sum += students[i].height;
        }
        return sum / num_students;
    }
    
    // 计算每门课的平均成绩
    void average_scores(struct student *students, int num_students, float *math_avg, float *english_avg, float *physics_avg)
    {
        float math_sum = 0, english_sum = 0, physics_sum = 0;
        for (int i = 0; i < num_students; i++)
        {
            math_sum += students[i].math;
            english_sum += students[i].english;
            physics_sum += students[i].physics;
        }
        *math_avg = math_sum / num_students;
        *english_avg = english_sum / num_students;
        *physics_avg = physics_sum / num_students;
    }
    
    // 找出 3 门课总分最高且单门成绩大于 60 的的学生
    void top_students(struct student *students, int num_students)
    {
        int top_count = 0;
        for (int i = 0; i < num_students; i++)
        {
            // 如果学生的 3 门课总分最高且单门成绩大于 60,就输出学生的信息
            if (students[i].math > 60 && students[i].english > 60 && students[i].physics > 60 && students[i].math + students[i].english + students[i].physics > top_count)
            {
                top_count = students[i].math + students[i].english + students[i].physics;
                printf("学号:%d\n", students[i].id);
                printf("性别:%c\n", students[i].gender);
                printf("身高:%.2f\n", students[i].height);
                printf("班级:%d\n", students[i].class_id);
                printf("数学成绩:%.2f\n", students[i].math);
                printf("英语成绩:%.2f\n", students[i].english);
                printf("物理成绩:%.2f\n", students[i].physics);
            }
        }
    }
    

    4.从文本文件中读取学生信息,并输出统计结果到另一个文本文件。

    int main()
    {
        // 从文本文件中读取学生信息
        FILE *input_file = fopen("input.txt", "r");
        if (input_file == NULL)
        {
            printf("无法打开文件!\n");
            return 1;
        }
        // 读取学生的个数
        int num_students;
        fscanf(input_file, "%d", &num_students);
    
        // 动态申结构体数组
        struct student *students = (struct student *)malloc(num_students * sizeof(struct student));
    
        // 读取每个学生的信息
        for (int i = 0; i < num_students; i++)
        {
            fscanf(input_file, "%d %c %f %d %f %f %f", &students[i].id, &students[i].gender, &students[i].height, &students[i].class_id, &students[i].math, &students[i].english, &students[i].physics);
        }
        fclose(input_file);
        // 统计男生、女生的个数
        int num_males = 0, num_females = 0;
        count_genders(students, num_students, &num_males, &num_females);
    
        // 计算平均身高
        float avg_height = average_height(students, num_students);
    
        // 计算每门课的平均成绩
        float math_avg, english_avg, physics_avg;
        average_scores(students, num_students, &math_avg, &english_avg, &physics_avg);
    
        // 找出 3 门课总分最高且单门成绩大于 60 的的学生
        top_students(students, num_students);
    
        // 输出统计结果到文本文件
        FILE *output_file = fopen("output.txt", "w");
        if (output_file == NULL)
        {
            printf("无法打开文件!\n");
            return 1;
        }
    
        fprintf(output_file, "男生的个数:%d\n", num_males);
        fprintf(output_file, "女生的个数:%d\n", num_females);
        fprintf(output_file, "平均身高:%.2f\n", avg_height);
        fprintf(output_file, "数学成绩的平均分:%.2f\n", math_avg);
        fprintf(output_file, "英语成绩的平均分:%.2f\n", english_avg);
        fprintf(output_file, "物理成绩的平均分:%.2f\n", physics_avg);
    
        fclose(output_file);
    
        free(students);
    
        return 0;
    }
    

    仅供参考,望采纳,谢谢。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月15日
  • 已采纳回答 1月7日
  • 创建了问题 1月2日

悬赏问题

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