
看看具体思路,解答以下,此实验题如何实现数组函数的传递,函数的值传递。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
//1、输出每个学生每门课的成绩和平均分
void task1(int **a,int L,int M){
int i,j;
float avg=0.0;
for(i=0;i<L;i++){
printf("学生%d{",i+1);
for(j=0;j<M;j++){
printf("课程%d:%d ",j+1,a[i][j]);
avg+=a[i][j];
}
printf(" 平均分:%4.1f}",avg/M);
avg=0.0;
printf("\n");
}
printf("\n");
}
//2、计算每门课的平均分
void task2(int **a,int L,int M){
int i,j;
float avg=0.0;
for(i=0;i<M;i++){
for(j=0;j<L;j++){
avg+=a[j][i];
}
printf("课程%d平均分:%4.1f\n",i+1,avg/L);
avg=0.0;
}
printf("\n");
}
//3、找出每门课程的最高分和最低分所对应的学生
void task3(int **a,int L,int M){
int i,j;
int max=0,min=100;
int indexmax=0,indexmin=0;
for(i=0;i<M;i++){
for(j=0;j<L;j++){
if(a[j][i]>max){max=a[j][i];indexmax=j+1;}
if(a[j][i]<min){min=a[j][i];indexmin=j+1;}
}
printf("课程%d最高分为学生%d,最低分为学生%d\n",i+1,indexmax,indexmin);
indexmax=0;
indexmin=0;
max=0;
min=100;
}
printf("\n");
}
//4、计算平均分方差
void task4(int **a,int L,int M){
float result=0.0,xi=0.0;
float avgi=0.0;
float avg[L];
int i,j;
//存储每一个学生的平均分
for(i=0;i<M;i++){
for(j=0;j<L;j++){
avgi+=a[j][i];
}
avg[i]=avgi/L;
avgi=0.0;
}
//计算Xi
for(i=0;i<L;i++){
xi=xi+avg[i];
}
for(i=0;i<L;i++){
result=result+(pow(avg[i],2)-pow(xi/L,2));
}
printf("平均分方差为:%.2f",result/L);
}
int main(){
int M,L;
printf("请输入L(人数)和M(课程)的值:(空格隔开数据)\n");
scanf("%d%d",&L,&M);
int **a=malloc(sizeof(int)*M*L);//动态申请数组
int i,j;
//获取学生的成绩
for(i=0;i<L;i++){
for(j=0;j<M;j++){
scanf("%d",&a[i][j]);
}
}
task1(a,L,M);
task2(a,L,M);
task3(a,L,M);
task4(a,L,M);
return 0;
}

参考链接