有 5 个学生,每个学生的数据包括学号、姓名、3 门课的成绩。从键盘输入 5 个学生数据,要求输出 3 门课总平均成绩,以及最高分的学生的数据(包括学号、姓名、3 门课的成绩、平均分数)

题为c程序设计(第五版)谭浩强  课后习题第9章第5题


前言

C 数组允许定义可存储相同类型数据项的变量,结构是 C 编程中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项。

结构体中的数据成员可以是基本数据类型(如 int、float、char 等),也可以是其他结构体类型、指针类型等。

结构用于表示一条记录,假设您想要跟踪图书馆中书本的动态,您可能需要跟踪每本书的下列属性:

  • Title
  • Author
  • Subject
  • Book ID

一、题目复现

二、实现步骤

1.思路分析

1.定义结构体Student。

2.定义输入函数input。

3.定义求平均值函数average。

4.定义求最高分学生数据函数Student max。

到main函数中

5.调用input函数输入数据。

6.调用相应的函数求出平均值和最高分学生数据。

7.将所求输出。

2.具体实现

代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

struct Student {
    char studentNumber[20];
    char name[50];
    float grades[3];
};

void input(struct Student* students, int count) {
    for (int i = 0; i < count; i++) {
        printf("Enter details for student %d:\n", i + 1);
        printf("Student Number: ");
        scanf("%s", students[i].studentNumber);
        printf("Name: ");
        scanf("%s", students[i].name);
        for (int j = 0; j < 3; j++) {
            printf("Grade %d: ", j + 1);
            scanf("%f", &(students[i].grades[j]));
        }
        printf("\n");
    }
}

float average(struct Student* students, int count) {
    float sum = 0.0;
    for (int i = 0; i < count; i++) {
        for (int j = 0; j < 3; j++) {
            sum += students[i].grades[j];
        }
    }
    return sum / (count * 3);
}

struct Student max(struct Student* students, int count) {
    struct Student maxStudent = students[0];
    float maxAverage = (students[0].grades[0] + students[0].grades[1] + students[0].grades[2]) / 3;
    for (int i = 1; i < count; i++) {
        float currentAverage = (students[i].grades[0] + students[i].grades[1] + students[i].grades[2]) / 3;
        if (currentAverage > maxAverage) {
            maxStudent = students[i];
            maxAverage = currentAverage;
        }
    }
    return maxStudent;
}

int main() {
    struct Student students[5];
    input(students, 5);
    float totalAverage = average(students, 5);
    struct Student highestScorer = max(students, 5);

    printf("\nTotal Average: %.2f\n", totalAverage);
    printf("Details of the highest scorer:\n");
    printf("Student Number: %s\n", highestScorer.studentNumber);
    printf("Name: %s\n", highestScorer.name);
    printf("Grades: %.2f, %.2f, %.2f\n", highestScorer.grades[0], highestScorer.grades[1], highestScorer.grades[2]);
    printf("Average Score: %.2f\n", (highestScorer.grades[0] + highestScorer.grades[1] + highestScorer.grades[2]) / 3);

    return 0;
}



实验结果(示例):


总结

        通过本次习题,我们学会了如何自己去定义一个结构体,其和数组的本质区别就在于数组只能存放同一数据类型的元素而结构体之中可以存放各种不同数据类型的元素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fashia

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值