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

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

第一题:运行结果如下:

img

代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>

typedef struct _student
{
    int id; //学号
    char sex; //性别:M/F
    int height; //身高
    int grade; //班级
    int math; //数学
    int eng; //英语成绩
    int phy; //物理成绩
}Student;


//输入学生数据
Student* input(int n)
{
    int i = 0;
    Student* stu = (Student*)malloc(sizeof(Student) * n);
    for (i = 0; i < n; i++)
    {
        printf("请输入第%d个学生的学号:", i + 1); scanf("%d", &stu[i].id); getchar();//吸收回车符
        printf("请输入第%d个学生的性别:", i + 1); scanf("%c", &stu[i].sex);
        printf("请输入第%d个学生的身高:", i + 1); scanf("%d", &stu[i].height);
        printf("请输入第%d个学生的班级:", i + 1); scanf("%d", &stu[i].grade);
        printf("请输入第%d个学生的数学成绩:", i + 1); scanf("%d", &stu[i].math);
        printf("请输入第%d个学生的英语成绩:", i + 1); scanf("%d", &stu[i].eng);
        printf("请输入第%d个学生的物理成绩:", i + 1); scanf("%d", &stu[i].phy);
    }
    return stu;
}


//统计男生、女生的个数
void Caculate(Student* stu, int n)
{
    int i;
    int nmbMale = 0, nmbFml = 0; //男生和女生的数量
    for (i = 0; i < n; i++)
    {
        if (stu[i].sex == 'F')
            nmbFml++;
        else if (stu[i].sex == 'M')
            nmbMale++;
    }
    printf("男生%d人,女生%d人\n", nmbMale, nmbFml);
}

//计算平均身高
void averageHeight(Student* stu, int n)
{
    float s = 0;
    int i;
    for (i = 0; i < n; i++)
        s += stu[i].height;
    s = s / n;
    printf("平均身高:%.2f\n",s); //保留2位小数
}
//统计每门课的平均成绩
void averageScore(Student* stu, int n)
{
    float math = 0, eng = 0, phy = 0;
    int i;
    for (i = 0; i < n; i++)
    {
        math += stu[i].math;
        eng += stu[i].eng;
        phy += stu[i].phy;
    }
    math /= n;
    eng /= n;
    phy /= n;
    printf("数学平均成绩:%.2f\n", math);
    printf("英语平均成绩:%.2f\n", eng);
    printf("物理平均成绩:%.2f\n", phy);
}

//3门课总分最高且单门成绩大于60的学生
void maxScore(Student* stu, int n)
{
    int i, maxIndex = 0, t, maxscore = 0;
    for (i = 0; i < n; i++)
    {
        t = stu[i].math + stu[i].eng + stu[i].phy;
        if (t > maxscore && stu[i].math > 60 && stu[i].eng > 60 && stu[i].phy > 60)
        {
            maxIndex = i;
            maxscore = t;
        }
    }
    printf("3门课总分最高且单门成绩大于60的学生:\n");
    printf("学号:%d,性别:%c,身高:%d,班级:%d,数学:%d,英语:%d,物理:%d\n", stu[maxIndex].id, stu[maxIndex].sex, stu[maxIndex].height, stu[maxIndex].grade,stu[maxIndex].math, stu[maxIndex].eng, stu[maxIndex].phy);
}

int main()
{
    Student* stu = 0;
    int n;
    printf("请输入学生个数:");
    scanf("%d", &n);
    stu = input(n); //输入学生信息
    Caculate(stu, n); //计算男生个数和女生个数
    averageHeight(stu, n); //计算平均身高
    averageScore(stu, n); //统计每门课的平均成绩
    maxScore(stu, n); //3门课总分最高且单门成绩大于60的学生
    return 0;
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632