C语言求救 急 十万火急

一个班有5名学生,每个学生修了五门课,1)求每个学生的平均成绩,并输出每个学生的学号,每门课程的成绩及平均成绩。2)求某门课程的平均分;
实现要求:
1、分别编写2个函数实现以上2个要求。
2、第1个函数用数组名作参数。第2个函数用指针作为参数,并在函数体内用指针对数组操作。
[实验提示]
(1)程序数据结构
定义一个一维数组存储5学生学号:int num[5];定义一个二维数组存储5学生的成绩int sco[5][5],再定义一个一维数组存储5个学生的平均成绩int avsco[5];
(2)函数编写
求每个学生的平均成绩函数:void averscore ( int sco[][5] ,avsco[5] ),函数体中算法是计算sco[][5]每一行的平均值赋给avsco[5]的对应元素。
求某门课程的平均分函数:int avercourse( int(*psco)[5], n ) ,形参中int(*psco)[5] 是指向5个元素组成的一维数组的指针变量,n表示要查找第n门课程的成绩。如函数调用:avercourse(sco, 3),sco是二维数组名,3表示要计算第3门课程的平均分。函数体中计算sco所指向二维数组的第3列的平均值;

现在编程序如下
有问题
#include<stdio.h>
void main()
{
int num[5],sco[5][5];
float avsco[5];
void averscore(int sco[][5],float avsco[5]);
int n;
int avercourse(int (*psco)[5],int x);
int (*psco)[5];
psco=sco;
int i,j;
for(i=0;i<5;i++)
scanf("%d ",num[i]);
for(i=0;i<5;i++)
{
for(j=0;i<5;j++)
scanf("%d ",sco[i][j]);
printf("\n");
}
for(i=0;i<5;i++)
{
printf("%d ",num[i]);
for(j=0;i<5;j++)
printf("%d ",sco[i][j]);
printf("\n");
}
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
averscore(sco[i][j],avsco[i]);
}
scanf("%d\n",n);
avercourse(psco,n);
}
void averscore(int sco[][5],avsco[i])
{
int i,j;
float sum;
for(i=0;i<5;i++)
{
sum=0;
for(j=0;j<5;j++)
{
sum=sum+sco[i][j];
}
avsco[i]=sum/5;
printf("学号为%d的平均成绩为:%d\n",num[i],avsco[i]);
}
}
void avercourse(int (*psco)[5],int n)
{
int i;
float sum,averagel;
sum=0.0;
for(i=0;i<5;i++)
sum=sum+(*(psco+n-1+5*i));
averagel=sum/5;
printf("第%d门课程的平均成绩为%7.2f",n,averagel);
}


10分钟内解决问题追加30分!

你的程序有问题,Merge(int
a[],int
m,int
b[],int
n)这个函数里的c[],是新定义的,对主函数的c【】不会产生影响。应该把c【】,最为一个参数传递给Merge函数。
一下是修改过的程序,运行过了没有任何问题,有什么问题可以交流下。
#include
<stdio.h>
#define
M
5
#define
N
5
void
main()
{
int
i;
int
a[M],b[N],c[M+N];
void
Merge(int
a[],int
m,int
b[],int
n,int
c[]);
printf("请输入一个序列:\n");
for(i=0;i<M;i++)
scanf("%d",&a[i]);
printf("请输入一个序列:\n");
for(i=0;i<N;i++)
scanf("%d",&b[i]);
Merge(a,M,b,N,c);
for(i=0;i<M+N;i++)
printf("%d,
",c[i]);
printf("\n");
}
void
Merge(int
a[],int
m,int
b[],int
n,int
c[])
{
int
i=0,j=0,k=0;
while(i<m&&j<n)
{
if(a[i]<=b[j])
{
c[k]=a[i];
i++;
k++;
}
else
{
c[k]=b[j];
j++;
k++;
}
}
while(j<n)
{
c[k++]=b[j++];
}
while(i<m)
{
c[k++]=a[i++];
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-08-16
int num[5],sco[5][5];
float avsco[5];
void averscore(int sco[][5],float avsco[5]);
int n;
int avercourse(int (*psco)[5],int x);
int (*psco)[5];
psco=sco;
int i,j;
for(i=0;i<5;i++)
scanf("%d ",num[i]); /*改为scanf("%d ",&num[i]); */
for(i=0;i<5;i++)
{
for(j=0;i<5;j++)
scanf("%d ",sco[i][j]); /*改为scanf("%d ",&sco[i][j]); */
printf("\n");
}
for(j=0;j<5;j++)
averscore(sco[i][j],avsco[i]);
}
scanf("%d\n",n); /*改为scanf("%d\n",&n); */

void averscore(int sco[][5],avsco[i]) /*改为void averscore(int sco[][5],float avsco[i]) */
别外你的变量定义应这样改:
int num[5],sco[5][5];
int i,j;
int n;
float avsco[5];
void averscore(int sco[][5],float avsco[5]);
int avercourse(int (*psco)[5],int x);
int (*psco)[5];
psco=sco;本回答被提问者采纳
相似回答