```
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define NUM_STUDENTS 4
#define NUM_COURSES 5
// 存储学生信息的结构体
struct student {
int id;
float grades[NUM_COURSES];
float average;
};
// 存储课程信息的结构体
struct course {
char name[20];
float average;
};
int main() {
// 定义变量
struct student students[NUM_STUDENTS];
struct course courses[NUM_COURSES];
int i, j;
float sum;
// 输入课程信息
for (i = 0; i < NUM_COURSES; i++) {
scanf("%s", courses[i].name);
}
// 输入学生信息并计算平均成绩
for (i = 0; i < NUM_STUDENTS; i++) {
scanf("%d", &students[i].id);
sum = 0;
for (j = 0; j < NUM_COURSES; j++) {
scanf("%f", &students[i].grades[j]);
sum += students[i].grades[j];
}
students[i].average = sum / NUM_COURSES;
}
// 计算每门课程的平均分
for (i = 0; i < NUM_COURSES; i++) {
sum = 0;
for (j = 0; j < NUM_STUDENTS; j++) {
sum += students[j].grades[i];
}
courses[i].average = sum / NUM_STUDENTS;
}
// 输出第一门课程的名称和平均分
printf("%s %.2f\n", courses[0].name, courses[0].average);
}
void findFailingStudents(struct student students[], int numStudents, int numCourses) {
int i, j;
int failingCount;
for (i = 0; i < numStudents; i++) {
failingCount = 0;
for (j = 0; j < numCourses; j++) {
if (students[i].grades[j] < 60) {
failingCount++;
}
}
if (failingCount >= 2) {
// 输出学生的学号和全部课程成绩
printf("%d ", students[i].id);
for (j = 0; j < numCourses; j++) {
printf("%.2f ", students[i].grades[j]);
}
printf("%.2f\n", students[i].average);
}
}
}
// 找出平均成绩在90分以上或全部课程成绩在85分以上的学生,并输出他们的学号和全部课程成绩及平均成绩
void findHighAchievingStudents(struct student students[], int numStudents, int numCourses) {
int i, j;
int highAchieving;
for (i = 0; i < numStudents; i++) {
highAchieving = 0;
if (students[i].average >= 90) {
highAchieving = 1;
}
else {
for (j = 0; j < numCourses; j++) {
if (students[i].grades[j] >= 85) {
highAchieving = 1;
break;
}
}
}
if (highAchieving) {
// 输出学生的学号和全部课程成绩
printf("%d ", students[i].id);
for (j = 0; j < numCourses; j++) {
printf("%.2f ", students[i].grades[j]);
}
// 输出学生的平均成绩
printf("%.2f\n", students[i].average);
}
}
}
```为什么只能输出第1个结果?
因为求平均分两门以上不及格的学生信息的函数findFailingStudents()和求平均分90分以上或全部成绩85分以上的函数findHighAchievingStudents()函数没有调用,然后findHighAchievingStudents()函数求全部成绩在85分以上那里的逻辑需要修改下,修改如下:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define NUM_STUDENTS 4
#define NUM_COURSES 5
// 存储学生信息的结构体
struct student {
int id;
float grades[NUM_COURSES];
float average;
};
// 存储课程信息的结构体
struct course {
char name[20];
float average;
};
void findFailingStudents(struct student students[], int numStudents, int numCourses);
void findHighAchievingStudents(struct student students[], int numStudents, int numCourses);
int main() {
// 定义变量
struct student students[NUM_STUDENTS];
struct course courses[NUM_COURSES];
int i, j;
float sum;
// 输入课程信息
for (i = 0; i < NUM_COURSES; i++) {
scanf("%s", courses[i].name);
}
// 输入学生信息并计算平均成绩
for (i = 0; i < NUM_STUDENTS; i++) {
scanf("%d", &students[i].id);
sum = 0;
for (j = 0; j < NUM_COURSES; j++) {
scanf("%f", &students[i].grades[j]);
sum += students[i].grades[j];
}
students[i].average = sum / NUM_COURSES;
}
// 计算每门课程的平均分
for (i = 0; i < NUM_COURSES; i++) {
sum = 0;
for (j = 0; j < NUM_STUDENTS; j++) {
sum += students[j].grades[i];
}
courses[i].average = sum / NUM_STUDENTS;
}
// 输出第一门课程的名称和平均分
printf("%s %.2f\n", courses[0].name, courses[0].average);
findFailingStudents(students,NUM_STUDENTS,NUM_COURSES) ;
findHighAchievingStudents(students,NUM_STUDENTS,NUM_COURSES);
}
void findFailingStudents(struct student students[], int numStudents, int numCourses) {
int i, j;
int failingCount;
printf("\n");
for (i = 0; i < numStudents; i++) {
failingCount = 0;
for (j = 0; j < numCourses; j++) {
if (students[i].grades[j] < 60) {
failingCount++;
}
}
if (failingCount >= 2) {
// 输出学生的学号和全部课程成绩
printf("%d ", students[i].id);
for (j = 0; j < numCourses; j++) {
printf("%.2f ", students[i].grades[j]);
}
printf("%.2f\n", students[i].average);
}
}
}
// 找出平均成绩在90分以上或全部课程成绩在85分以上的学生,并输出他们的学号和全部课程成绩及平均成绩
void findHighAchievingStudents(struct student students[], int numStudents, int numCourses) {
int i, j;
int highAchieving;
int num; //每个学生85以上课程的个数
printf("\n");
for (i = 0; i < numStudents; i++) {
highAchieving = 0;
num=0;
if (students[i].average >= 90) {
highAchieving = 1;
}
else {
for (j = 0; j < numCourses; j++) {
if (students[i].grades[j] >= 85) {
// highAchieving = 1;
// break;
num++;
}
}
}
if (highAchieving||num==5) { //打印5门功课都是85分以上或平均分90分以上的学生信息
// 输出学生的学号和全部课程成绩
printf("%d ", students[i].id);
for (j = 0; j < numCourses; j++) {
printf("%.2f ", students[i].grades[j]);
}
// 输出学生的平均成绩
printf("%.2f\n", students[i].average);
}
}
}
详细过程如下,望采纳
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define NUM_COURSES 5
#define NUM_STUDENTS 4
// 定义学生结构体
typedef struct {
int id;
int grades[NUM_COURSES];
double average;
} student;
// 计算学生的平均成绩
double calculateAverage(student s) {
int sum = 0;
for (int i = 0; i < NUM_COURSES; i++) {
sum += s.grades[i];
}
return (double)sum / NUM_COURSES;
}
int main() {
char courses[NUM_COURSES][20]; // 存储课程名称
student students[NUM_STUDENTS]; // 存储学生信息
// 读取课程名称
for (int i = 0; i < NUM_COURSES; i++) {
scanf("%s", courses[i]);
}
// 读取学生信息
for (int i = 0; i < NUM_STUDENTS; i++) {
scanf("%d", &students[i].id);
for (int j = 0; j < NUM_COURSES; j++) {
scanf("%d", &students[i].grades[j]);
}
students[i].average = calculateAverage(students[i]);
}
...
}
double calculateCourseAverage(student students[]) {
int sum = 0;
for (int i = 0; i < NUM_STUDENTS; i++) {
sum += students[i].grades[0];
}
return (double)sum / NUM_STUDENTS;
}
int main() {
...
// 输出第一门课程的平均分
printf("%s Average: %.2lf\n", courses[0], calculateCourseAverage(students));
...
}
void printFailingStudents(student students[]) {
for (int i = 0; i < NUM_STUDENTS; i++) {
int numFailing = 0;
for (int j = 0; j < NUM_COURSES; j++) {
if (students[i].grades[j] < 60) {
numFailing++;
}
}
if (numFailing >= 2) {
printf("ID: %d\n", students[i].id);
for (int j = 0; j < NUM_COURSES; j++) {
printf("%d ", students[i].grades[j]);
}
printf("\nAverage: %.2lf\n", students[i].average);
}
}
}
int main() {
char courses[NUM_COURSES][20]; // 存储课程名称
student students[NUM_STUDENTS]; // 存储学生信息
// 读取课程名称
for (int i = 0; i < NUM_COURSES; i++) {
scanf("%s", courses[i]);
}
// 读取学生信息
for (int i = 0; i < NUM_STUDENTS; i++) {
scanf("%d", &students[i].id);
for (int j = 0; j < NUM_COURSES; j++) {
scanf("%d", &students[i].grades[j]);
}
students[i].average = calculateAverage(students[i]);
}
// 输出第一门课程的平均分
printf("%s Average: %.2lf\n", courses[0], calculateCourseAverage(students));
// 输出有两门以上课程不及格的学生
printFailingStudents(students);
// 输出平均成绩在 90 分以上或全部课程成绩在 85 分以上的学生
printHighPerformingStudents(students);
return 0;
}