有一个班,3个学生,4门课,计算每个学生的平均分数以及输出至少有两门课不及格的学生学号和成绩,用C语言函数实现。
时间: 2024-09-19 15:04:01 浏览: 10
在C语言中,我们可以设计一个结构体`Student`来存储学生的信息,包括学号、姓名和每门课程的成绩。然后创建一个函数来计算平均分,并遍历数组找出至少两门课程不及格的学生。
首先,我们需要定义一个`Student`结构:
```c
typedef struct {
int student_id;
char name[50];
float scores[4]; // 学生四门课程的成绩
} Student;
```
接下来,编写一个函数来计算平均分:
```c
float calculate_average(Student* students, int num_students) {
float total = 0.0;
for (int i = 0; i < num_students; i++) {
total += students[i].scores[0] + students[i].scores[1] + students[i].scores[2] + students[i].scores[3];
}
return total / num_students;
}
```
为了找出至少两门不及格的学生,我们可以在主程序中遍历并检查:
```c
void find_students_with_fails(Student* students, int num_students) {
int fail_count[4] = {0}; // 初始化各科不及格次数
for (int i = 0; i < num_students; i++) {
for (int j = 0; j < 4; j++) {
if (students[i].scores[j] < 60) { // 将及格线设为60分
fail_count[j]++;
}
}
// 检查是否有两门及以上科目不及格
bool has_two_or_more_fails = false;
for (int k = 0; k < 4 && !has_two_or_more_fails; k++) {
if (fail_count[k] >= 2) {
has_two_or_more_fails = true;
printf("学生 %d 的学号和成绩如下:\n", students[i].student_id);
for (int l = 0; l < 4; l++) {
printf("课程 %s: %.2f\n", "ABC"[l], students[i].scores[l]);
}
}
}
}
}
```
现在你可以调用这两个函数来获取结果:
```c
int main() {
Student students[] = {
{1, "张三", {70, 80, 90, 65}}, // 示例数据
{2, "李四", {60, 75, 85, 55}}, // 至少一门不及格
{3, "王五", {95, 100, 90, 80}}
};
int num_students = sizeof(students) / sizeof(students[0]);
printf("所有学生的平均分: %.2f\n", calculate_average(students, num_students));
find_students_with_fails(students, num_students);
return 0;
}
```