题为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;
}
实验结果(示例):
总结
通过本次习题,我们学会了如何自己去定义一个结构体,其和数组的本质区别就在于数组只能存放同一数据类型的元素而结构体之中可以存放各种不同数据类型的元素。