引言
在C语言学习中,通过解决实际问题来加深对语言特性的理解是非常重要的。谭浩强先生的《C程序设计》是一本深受欢迎的入门教材,其第六章习题涵盖了C语言中的基础概念。本章习题3通常要求读者编写一个程序,实现特定的功能。以下是对该习题的深度解析。
习题描述
假设我们有一个数组,其中包含了学生的成绩,包括语文、数学、英语三门课程的分数。编写一个程序,计算每个学生的平均分,并输出每个学生的姓名和平均分。
解题思路
- 定义数据结构:首先定义一个结构体来存储学生的姓名和成绩。
- 输入数据:通过循环输入学生的姓名和三门课程的成绩。
- 计算平均分:计算每个学生的平均分。
- 输出结果:打印出每个学生的姓名和平均分。
代码实现
#include <stdio.h>
#define MAX_STUDENTS 100
#define SUBJECTS 3
// 定义学生结构体
typedef struct {
char name[50];
int scores[SUBJECTS];
float average;
} Student;
int main() {
Student students[MAX_STUDENTS];
int n, i, j;
// 输入学生数量
printf("请输入学生数量(最多 %d 人): ", MAX_STUDENTS);
scanf("%d", &n);
// 输入学生信息
for (i = 0; i < n; i++) {
printf("请输入第 %d 个学生的姓名: ", i + 1);
scanf("%s", students[i].name);
printf("请输入第 %d 个学生的语文、数学、英语成绩: ", i + 1);
for (j = 0; j < SUBJECTS; j++) {
scanf("%d", &students[i].scores[j]);
}
// 计算平均分
students[i].average = 0;
for (j = 0; j < SUBJECTS; j++) {
students[i].average += students[i].scores[j];
}
students[i].average /= SUBJECTS;
}
// 输出结果
printf("\n学生姓名\t平均分\n");
for (i = 0; i < n; i++) {
printf("%s\t\t%.2f\n", students[i].name, students[i].average);
}
return 0;
}
代码解析
- 定义结构体:
Student结构体包含了学生的姓名、成绩数组以及平均分。 - 输入学生数量:使用
MAX_STUDENTS和SUBJECTS宏来定义数组的大小和科目数量。 - 输入学生信息:通过两层循环分别输入学生的姓名和成绩。
- 计算平均分:将每个学生的成绩相加,然后除以科目数量来计算平均分。
- 输出结果:使用格式化输出打印学生的姓名和平均分。
总结
通过解决这个实际问题,我们不仅复习了C语言的结构体和循环控制,还学会了如何处理和计算数组数据。这是一个很好的练习,有助于加深对C语言基础概念的理解。
