结构体数组及结构体数组成员的访问方法

有4个学生,每个学生的信息包括学号、姓名、3门课程(数学、物理、计算机)的成绩,如下表所示:
学号
姓名
数学
物理
计算机
1001
Wang li
93
89
87
1002
Li shan
85
80
78
1003
Zhao min
65
70
60
1004
Ma yun
77
70
83
(1) 从键盘上输入4个学生的上述信息(要有提示性语句);
(2) 计算每个学生的平均成绩;
(3) 输出各位同学的学号、姓名、数学、物理、计算机成绩和平均成绩;
(4) 输出平均成绩最高的同学的学号、姓名、数学、物理、计算机成绩和平均成绩。

定义个学生结构,然后定义学生数组,逐个输入再求值

#include <stdio.h>

typedef struct _student
{
    int id;
    char name[20];
    float score[3];
    float avg;
}student;

void input(student *s,int n)
{
    for(int i=0;i<n;i++)
    {
        printf("请输入第%d个学生的学号:",i+1);
        scanf("%d",&s[i].id);
        printf("请输入第%d个学生的姓名:",i+1);
        getchar();
        gets(s[i].name);
        printf("请输入第%d个学生的数学成绩:",i+1);
        scanf("%f",&s[i].score[0]);
        printf("请输入第%d个学生的物理成绩:",i+1);
        scanf("%f",&s[i].score[1]);
        printf("请输入第%d个学生的计算机成绩:",i+1);
        scanf("%f",&s[i].score[2]);
        s[i].avg = (s[i].score[0] + s[i].score[1] + s[i].score[2])/3;
    }
}

void output(student *s,int n)
{
    printf("%-10s%-22s%-10s%-10s%-10s%-10s\n","学号","姓名","数学","物理","计算机","平均分");
    for(int i=0;i<n;i++)
        printf("%-10d%-22s%-10.1f%-10.1f%-10.1f%-10.1f\n",s[i].id,s[i].name,s[i].score[0],s[i].score[1],s[i].score[2],s[i].avg);
}

void getHigh(student *s,int n)
{
    int max = 0;
    for(int i=1;i<n;i++)
        if(s[i].avg > s[max].avg)
            max = i;
    printf("最高分学生信息为:");
    printf("学号: %d\n",s[max].id);
    printf("姓名: %s\n",s[max].name);
    printf("数学: %.1f\n",s[max].score[0]);
    printf("物理: %.1f\n",s[max].score[1]);
    printf("计算机: %.1f\n",s[max].score[2]);
    printf("平均分: %.1f\n",s[max].avg);
}

int main()
{
    student stu[4];
    input(stu,4);
    output(stu,4);
    getHigh(stu,4);
    return 0;
}

定义结构体,

img

代码如下:

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <stdlib.h>


typedef struct _student
{
    int id;
    char name[20];
    int score[3];
    float ave;
}student;

//1 输入
void intput(student stu[], int n)
{
    int i, j;
    printf("请输入%d个学生的信息:\n");
    for (i = 0; i < n; i++)
    {
        printf("请输入学生%d的学号:", i + 1);
        scanf("%d", &stu[i].id);
        getchar();
        printf("请输入学生%d的姓名:", i + 1);
        gets_s(stu[i].name);
        printf("请输入学生%d的数学、物理和计算机成绩(以空格分隔):",i+1);
        for (j = 0; j < 3; j++)
            scanf("%d", &stu[i].score[j]);
    }
}

//2 计算平均成绩
void average(student stu[], int n)
{
    int i, j;
    float sum = 0;
    for (i = 0; i < n; i++)
    {
        stu[i].ave = 0;
        for (j = 0; j < 3; j++)
            stu[i].ave += stu[i].score[j];
        stu[i].ave /= 3;//得到平均成绩
    }
}

//3 输出各位同学的学号、姓名、数学、物理、计算机成绩和平均成绩
void show1(student stu[], int n)
{
    int i, j;
    printf("输出各位同学的学号、姓名、数学、物理、计算机成绩和平均成绩:\n");
    printf("%6s %8s %6s %6s %8s %8s\n", "学号", "姓名", "数学", "物理", "计算机","平均分");
    for (i = 0; i < n; i++)
        printf("%6d %8s %6d %6d %8d %8.2f\n", stu[i].id, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].ave);
}

//输出平均成绩最高的同学的学号、姓名、数学、物理、计算机成绩和平均成绩
void show2(student stu[], int n)
{
    int i, j;
    student tmp;
    for (i = 0; i < n - 1; i++)
    {
        for (j = 0; j < n - 1 - i; j++)
        {
            if (stu[j].ave < stu[j + 1].ave)
            {
                tmp = stu[j];
                stu[j] = stu[j + 1];
                stu[j + 1] = tmp;
            }
        }
    }
    printf("平均分最高的同学的学号、姓名、数学、物理、计算机成绩和平均成绩:\n");
    printf("%6d %8s %6d %6d %8d %8.2f\n", stu[0].id, stu[0].name, stu[0].score[0], stu[0].score[1], stu[0].score[2], stu[0].ave);
}

int main()
{
    student stu[4];
    intput(stu, 4);
    average(stu, 4);
    show1(stu, 4);
    show2(stu, 4);
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632