耒阳一中 2022-12-24 11:35 采纳率: 81.3%
浏览 33
已结题

C3.s:/^0eSZ#$ydLA^3.s:/^0eSZ#$ydLA^

```

#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个结果?

  • 写回答

3条回答 默认 最新

  • a5156520 2022-12-24 13:34
    关注

    因为求平均分两门以上不及格的学生信息的函数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);
            }
        }
    }
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月25日
  • 已采纳回答 12月24日
  • 修改了问题 12月24日
  • 修改了问题 12月24日
  • 展开全部

悬赏问题

  • ¥15 不小心不正规的开发公司导致不给我们y码,
  • ¥15 我的代码无法在vc++中运行呀,错误很多
  • ¥50 求一个win系统下运行的可自动抓取arm64架构deb安装包和其依赖包的软件。
  • ¥60 fail to initialize keyboard hotkeys through kernel.0000000000
  • ¥30 ppOCRLabel导出识别结果失败
  • ¥15 Centos7 / PETGEM
  • ¥15 csmar数据进行spss描述性统计分析
  • ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿