程序描述:
一个班中有四个学生,每个学生有五门课程
要求:
- 求第一门课程的平均分
- 找出有两门以上不及格学生,输出学号,全部课程成绩及平均分
- 找出平均成绩在90分以上或全部课程成绩在85分以上的学生
编写三个函数实现以上三个要求
代码
#include <stdio.h>
int main(){
//声明函数
float getAvage(float arr[3][6]);
void getFailure(float (*p)[6]);
void getSuccess(float (*p)[6]);
int i,j;
//定义二维数组,用于保存数据,四行六列,多出来的一列用于保存学号
//为方便输入数据,这个地方仅设三个学生
float arr[3][6];
printf("请按照以下顺序输入数据,学号,数学,语文,英语,物理,化学\n");
for(i=0;i<3;i++){
printf("第%d个学生:\n",i+1);
for(j=0;j<6;j++){
scanf("%f",*(arr+i)+j);
}
}
printf("第一门的平均值为:%5.2f\n",getAvage(arr));
getFailure(arr);
getSuccess(arr);
return 0;
}
//实现第一个功能
float getAvage(float arr[3][6]){
int i;
float ava=0,sum=0,(*p)[6]=arr;
for(i=0;i<3;i++)
sum+=*(*(p+i)+1);
ava=sum/3;
return ava;
}
//实现第二个功能:找出有两门以上不及格学生,输出学号,全部课程成绩及平均分
//参数为一个指向浮点型数组的指针变量
void getFailure(float (*p)[6]){
int i,j,k,std_num,num=0;
float sum=0;
for(i=0;i<3;i++){
for(j=0;j<6;j++){
if(*(*(p+i)+j)<60){
num++;
}
}
if(num>=2){//成绩两门不及格
//输出学号
std_num=(int)*(*(p+i));
printf("成绩两门不及格的学生学号:%d\n",std_num);
//输出成绩
printf("各科成绩:\n");
for(k=1;k<6;k++){
//计算该学生成绩总和
sum+=*(*(p+i)+k);
printf("%3.2f",*(*(p+i)+k));
}
//输出平均分
printf("\n平均分:\n");
printf("%3.2f\n",sum/5);
}
//计数器归零
num=0;
//成绩归零
sum=0;
}
}
//第三个功能:找出平均成绩在90分以上或全部课程成绩在85分以上的学生
void getSuccess(float (*p)[6]){
int i,j,k,n;
float sum;
printf("优秀学生:\n");
//循环遍历计算平均分
for(j=0;j<3;j++){
for(i=1;i<6;i++){
if(*(*(p+j)+i)>85) n++;
sum+=*(*(p+j)+i);
}
//平均成绩在90分以上或全部课程成绩在85分以上的学生
if(sum/5>90||n==5){
printf("学号为:%d",(int)*(*(p+j)));
}
//成绩归零
sum=0;
//计数器归零
n=0;
}
}