①求第1门课程的平均分;
②找出有两门以上课程不及格的学生,输出他们的学号和全部课程成绩及平均成绩;
③找出平均成绩在90分以上或全部课程成绩在85分以上的学生。
分别编3个函数实现以上3个要求。
代码:
#include <stdio.h>
#include <string.h>
#define H 30
#define N 6
int stu;
int main(){
void average(float score[N][N]);
void find1(float score[N][N]);
void find2(float score[N][N]);
//course数组的行数=score数组列数
//定义字符二维数组course,每行存一个课程名
char course[N][H],(*p)[H]=course;
//定义整型二维数组,每行存一个同学的成绩
float score[N][N],(*q)[N]=score;
int i,j;
//第一行设置为字符串: id
strcpy(course[0],"NO");
//输入要统计的课程名
printf("请输入%d个课程名: ",N-1);
for(i=1;i<N;i++){
scanf("%s",p[i]);
}
//输入要统计多少个同学的成绩
printf("请输入要统计的人数: ");
scanf("%d",&stu);
//输入学号和成绩
for(i=0;i<stu;i++){
for(j=0;j<N;j++){
if(j==0){
printf("========================\n");
printf("请输入第%d个同学的学号:",i+1);
scanf("%f",q[i]+0);
}
else{
printf("请输入%s的成绩:",p[j]);
scanf("%f",q[i]+j);
}
}
}
printf("=============================\n");
//打印输入的数据
for(i=0;i<N;i++){
printf("%s ",p[i]);
}
printf("\n");
for(i=0;i<stu;i++){
for(j=0;j<N;j++){
if(j==0)
printf("%2.0f ",*(q[i]+j));
else printf("%.2f ",*(q[i]+j));
}
printf("\n");
}
average(score);
find1(score);
find2(score);
return 0;
}
//求第一门课程的平均成绩
void average(float score[N][N]){
float num=0;
float (*p1)[N]=score;
float aver;
for(int i=0;i<stu;i++){
num+=*(*(p1+i)+1);
}
aver=num/stu;
// printf("num=%d\n",num);
printf("=============================\n");
printf("第一门课程的平均成绩aver=%.2f\n",aver);
}
//找出两门以上课程成绩不及格的学生
void find1(float score[N][N]){
float (*p2)[N]=score;
//定义一维数组num记录每个同学不及格科目数
int num[N]={
0}
,i,j;
for(i=0;i<stu;i++){
for(j=1;j<N;j++){
if(*(*(p2+i)+j)<60){
num[i]++;
}
}
//每个同学的不及格科目数
// printf("num[%d]=%d\n",i,num[i]);
}
printf("=============================\n");
printf("不及格的学生的学号及成绩如下:\n");
for(i=0;i<stu;i++){
if(num[i]>2){
for(j=0;j<N;j++){
if(j==0)
printf("%.0f ",*(*(p2+i)+j));
else printf("%.2f ",*(*(p2+i)+j));
}
}
}
printf("\n");
}
//找出平均成绩在90分以上或者每科都大于85的
void find2(float score[N][N]){
float (*p3)[N]=score;
//定义一维数组num1记录每个同学的成绩高于85分以上的科目数
int num1[N]={
0}
,i,j;
//定义一维数组num2记录每个同学的平均成绩
float num2[N]={
0}
;
for(i=0;i<stu;i++){
for(j=1;j<N;j++){
if(*(*(p3+i)+j)>85){
num1[i]++;
}
num2[i]+=*(*(p3+i)+j);
}
num2[i]=num2[i]/(N-1);
// printf("num1[%d]=%d\n",i,num1[i]);
// printf("num2[%d]=%.2f\n",i,num2[i]);
}
printf("=============================\n");
printf("符合要求的学生的学号及成绩如下:\n");
for(i=0;i<stu;i++){
if(num1[i]==N-1||num2[i]>90){
for(j=0;j<N;j++){
if(j==0)
printf("%.0f ",*(*(p3+i)+j));
else printf("%.2f ",*(*(p3+i)+j));
}
printf("\n");
}
}
}
运行结果: