有一个班4个学生,5门课程。 1.求第2个学生5门课程的平均成绩; 2.求第1门课程的平均分; 3.找出有一门以上课程不及格的学生,输出 他们是第几个学生及每个学生的所有课程 成绩。 分别用3个函数实

有一个班4个学生,5门课程。 1.求第2个学生5门课程的平均成绩; 2.求第1门课程的平均分; 3.找出有一门以上课程不及格的学生,输出 他们是第几个学生及每个学生的所有课程 成绩。 分别用3个函数实

定义结构体,使用结构体数组;没学过结构体也可以使用二维数组

#include<stdio.h>
struct student {
    int a[5];
    double ave;
};
double fun1(struct student stu) {
    return stu.ave;
}
double fun2(struct student stu[], int n) {
    int i;
    double sum = 0;
    for(i = 0; i < n; i++) {
        sum += stu[i].a[0];
    }
    return sum / n;
}
void fun3(struct student stu[], int n) {
    int i,j,cnt;
    for(i = 0; i < n; i++) {
        cnt = 0;
        for(j = 0; j < 5; j++) {
            if(stu[i].a[j] < 60)
                cnt++;
        }
        if(cnt > 1) {
            printf("第%d个学生,该生所有成绩:", i + 1);
            for(j = 0; j < 5; j++) {
                printf("%d ",stu[i].a[j]);
            }
            printf("\n");
        }
    }
}
int main() {
    struct student stu[4];
    int i, j, sum;
    for(i = 0; i < 4; i++) {
        printf("请输入第%d个学生的5门成绩,以空格隔开:", i + 1);
        sum = 0;
        for(j = 0; j < 5; j++) {
            scanf("%d", &stu[i].a[j]);
            sum += stu[i].a[j];
        }
        stu[i].ave = sum / 5.0;
    }
    printf("第2个学生的平均成绩:%.2f\n", fun1(stu[1]));
    printf("第1门课的平均成绩:%.2f\n", fun2(stu, 4));
    printf("有一门以上课程不及格的学生:\n");
    fun3(stu,4);
}
#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
#include<stdlib.h>
#define N 4//N个学生
#define M 6//M - 1门课程
void print0() {
    printf("学号\t");
    for (int i = 0; i < M - 1; ++i) {
        printf("成绩%d\t", i + 1);
    }
}
void print(int i, double(*p)[M]) {
    printf("\n");
    for (int j = 0; j < M; ++j) {
        if (j == 0) {
            printf("%.0f\t", *(*(p + i) + j));
        }
        else {
            printf("%.3f\t", *(*(p + i) + j));
        }
    }
    printf("\n");
}
double class1_aver(int n, double(*p)[M]) {//计算第n门课的成绩
    double sum = 0;
    for (int i = 0; i < N; ++i) {
        sum += *(*(p + i) + n);
    }
    return sum / N;
}
void fail(double(*p)[M]) {
    int count = 0;
    double sum = 0;
    for (int i = 0; i < N; ++i) {
        count = 0;
        sum = 0;
        for (int j = 1; j < M; ++j) {
            if (*(*(p + i) + j) < 60.0) {
                count += 1;
            }
        }
        if (count >= 2) {
            for (int j = 1; j < M; ++j) {
                sum += *(*(p + i) + j);
            }
            printf("如下该学生有超过两门课程成绩不及格\n");
            print0();
            print(i, p);
            printf("\n平均成绩为%.3f\n\n", sum / (M - 1));
        }
    }
}
void excellent(double(*p)[M]) {
    int count = 0;
    double sum = 0;
    for (int i = 0; i < N; ++i) {
        count = 0;
        sum = 0;
        for (int j = 1; j < M; ++j) {
            sum += *(*(p + i) + j);
            if (*(*(p + i) + j) >= 85) {
                count += 1;
            }
        }
        if (count == M - 1) {
            printf("如下该学生有所有成绩均超过85分\n");
            print0();
            print(i, p);
            printf("\n平均成绩为%.3f\n", sum / (M - 1));
        }
        else if (sum / (M - 1) >= 90) {
            printf("如下该学生有所有成绩平均分超过90分\n");
            print0();
            print(i, p);
            printf("\n平均成绩为%.3f\n", sum / (M - 1));
        }
    }
}
void main() {
    double stu[N][M];
    double(*p)[M] = stu;
    for (int i = 0; i < N; ++i) {
        for (int j = 0; j < M; ++j) {
            if (j == 0) {
                printf("请输入第%d名学生的学号\n", i + 1);
                while (1) {
                    scanf("%lf", *(p + i) + j);
                    if (i == 0) {
                        break;
                    }
                    if (*(*(p + i) + j) != *(*(p + i - 1) + j)){
                        break;
                    }
                    printf("您的输入的学号与第%d名学生学号相同都为%.0f,请重新输入\n", i, *(*(p + i - 1) + j));
                }
                continue;
            }
            printf("请输入该学生的第%d门成绩\n", j);
            scanf("%lf", *(p + i) + j);
        }
        system("cls");
    }
    print0();
    for (int i = 0; i < N; ++i) {
        print(i, p);
    }
    printf("\n第一门课程的平均分为:\n%.3f\n\n", class1_aver(1, p));
    fail(p);
    excellent(p);
    system("pause");
}


img