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

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

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

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