有一个班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");
}