我这写的有点恶心。。。你凑活看
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,i,j;
float *p;
printf("输入n:");
scanf("%d",&n);
p=(float*)malloc(sizeof(float)*n*n); //建立动态存储空间
printf("输入二维数组:\n"); //建立二维数组
for(i=0;i<n;i++){
for(j=0;j<n;j++)
scanf("%f",p+n*i+j);
}
int hi=0,lj=0; //计算平均值
printf("输入行数hi和列数lj(hi<=n,lj<=n):");
scanf("%d%d",&hi,&lj);
float sum=0,ave=0;
for(j=0;j<n;j++)
sum+=*(p+(hi-1)*n+j);
for(i=0;i<n;i++)
sum+=*(p+(lj-1)*n+i);
sum-=*(p+(hi-1)*n+(lj-1));
ave=sum/(2*n-1);
/*此处你说j行?那我就认为是刚才那个lj列数值不变,变成lj行了。。*/
float max=*(p+(lj-1)*n+0); //找到最大值
for(j=1;j<n;j++){
if(*(p+(lj-1)*n+j)>max)
max=*(p+(lj-1)*n+j);
}
for(j=0;j<n;j++){ //把lj行的最大值变成平均值
if(*(p+(lj-1)*n+j)==max)
*(p+(lj-1)*n+j)=ave;
}
printf("\n平均数ave=%0.2f\n",ave);
printf("输出改变后的二维数组:\n");
for(i=0;i<n;i++){
for(j=0;j<n;j++)
printf("%0.2f ",*(p+n*i+j));
printf("\n");
}
free(p);
return 0;
}