本题的实现要求用函数实现,主函数只负责进行函数调用。函数的参数要求全部用到的情况是:
用数组名作函数参数;
用指向数组元素的指针变量作函数参数;
用指向一维数组的指针变量作函数参数;
题目:输入两个行、列数相同的矩阵(实际上是二维数组)A、B,以矩阵的方式分别输出A、B;求矩阵的和并输出;求出每个矩阵中的最大值及其位置;求出每个矩阵中绝对值最大的元素及其位置。下面的各要求通过编写函数实现:
① 输入矩阵(实际上是二维数组);
② 输出矩阵;
③ 求出两个矩阵的和。设A=(aij)m×n,B=(bij)m×n,则C=A+B=(cij)m×n,cij= aij+ bij;
④ 求矩阵中的最大值及其位置;
⑤ 求矩阵中绝对值最大的元素及其位置。
程序一直没有编译成功
#include<stdio.h>
#define M 4
#define N 4
int input_A(double a[][N])
{
int j,k;
printf("Please input A:\n");
for(j=0;j<M;j++)
for(k=0;k<N;k++)
{
scanf("%5d",&a[j][k]);
}
}
int input_B(double b[][N])
{
int j,k;
printf("Please input B:\n");
for(j=0;j<M;j++)
for(k=0;k<N;k++)
{
scanf("%5d",&b[j][k]);
}
}
int output(double a[][N],double b[][N])
{
int j,k;
printf("output A:\n");
for(j=0;j<N;j++)
{
for(k=0;k<N;k++)
{
printf("%5d",a[j][k]);
}
printf("\n");
}
printf("output B:\n");
for(j=0;j<N;j++)
{
for(k=0;k<N;k++)
{
printf("%5d",b[j][k]);
}
printf("\n");
}
}
double sum(double *p,double *q,double *c[N])
{
int j,k;
double sum;
for(j=0;j<N;j++)
for(k=0;k<N;k++)
{
c[j][k]=*(*(p+j)+k)+*(*(q+j)+k);
}
for(j=0;j<N;j++)
for(k=0;k<N;k++)
{
sum=sum+*(*(c+j)+k);
}
printf("总和为%lf",sum);
}
int max(double *p,double *q)
{
double *ma,*mb;
int j,k,jm,km;
ma=p;mb=q;
for(j=0;j<N;j++)
{
for(k=0;k<N;k++)
{
if(*(*(p+j)+k)>*ma)
{
jm=j;
km=k;
*ma=*(*(p+j)+k);
}
}
}
printf("A矩阵中最大值为%lf,位置:%d行%d列\n",*ma,j+1,k+1);
for(j=0;j<N;j++)
{
for(k=0;k<N;k++)
{
if(*(*(q+j)+k)>*mb)
{
jm=j;
km=k;
*mb=*(*(q+j)+k);
}
}
}
printf("B矩阵中最大值为%lf,位置:%d行%d列\n",*mb,j+1,k+1);
}
int abs_max(double a[][N],double b[][N])
{
double *ma,*mb;
int j,k,jm,km;
ma=a[0][0];mb=b[0][0];
for(j=0;j<N;j++)
{
for(k=0;k<N;k++)
{
if(((a[j][k]>=0)?a[j][k]:-a[j][k])>*ma)
{
jm=j;
km=k;
*ma=a[j][k];
}
}
}
printf("A矩阵中绝对最大值为%lf,位置:%d行%d列\n",*ma,j+1,k+1);
for(j=0;j<N;j++)
{
for(k=0;k<N;k++)
{
if(((b[j][k]>=0)?b[j][k]:-b[j][k])>*mb)
{
jm=j;
km=k;
*mb=b[j][k];
}
}
}
printf("B矩阵中绝对最大值为%lf,位置:%d行%d列\n",*mb,j+1,k+1);
}
main()
{
double A[M][N],B[M][N],C[M][N];
input_A(A);
input_B(B);
output(A,B);
sum(A,B,C);
max(A,B);
abs_max(A,B);
}
新手一枚
谢谢大佬们指教
下面是根据评论区大神建议修改后的代码:
#include<stdio.h>
#define M 4
#define N 4
int input_A(double a[][N])
{
int j,k;
printf("Please input A:\n");
for(j=0;j<M;j++)
for(k=0;k<N;k++)
{
scanf("%lf",&a[j][k]);
}
}
int input_B(double b[][N])
{
int j,k;
printf("Please input B:\n");
for(j=0;j<M;j++)
for(k=0;k<N;k++)
{
scanf("%lf",&b[j][k]);
}
}
int output(double a[][N],double b[][N])
{
int j,k;
printf("output A:\n");
for(j=0;j<N;j++)
{
for(k=0;k<N;k++)
{
printf(" %5.2lf ",a[j][k]);
}
printf("\n");
}
printf("output B:\n");
for(j=0;j<N;j++)
{
for(k=0;k<N;k++)
{
printf(" %5.2lf ",b[j][k]);
}
printf("\n");
}
}
double sum(double (*p)[N],double (*q)[N],double (*c)[N])
{
int j,k;
double sum;
for(j=0;j<N;j++)
for(k=0;k<N;k++)
{
c[j][k]=*(*(p+j)+k)+*(*(q+j)+k);
}
for(j=0;j<N;j++)
for(k=0;k<N;k++)
{
sum=sum+*(*(c+j)+k);
}
printf("总和为%.2lf\n",sum);
}
int max(double (*p)[N],double (*q)[N])
{
double *ma,*mb;
int j,k,jm,km;
ma=*p;mb=*q;
for(j=0;j<N;j++)
{
for(k=0;k<N;k++)
{
if(*(*(p+j)+k)>*ma)
{
jm=j;
km=k;
ma=*(p+j)+k;
}
}
}
printf("A矩阵中最大值为%lf,位置:%d行%d列\n",*ma,jm+1,km+1);
for(j=0;j<N;j++)
{
for(k=0;k<N;k++)
{
if(*(*(q+j)+k)>*mb)
{
jm=j;
km=k;
mb=*(q+j)+k;
}
}
}
printf("B矩阵中最大值为%lf,位置:%d行%d列\n",*mb,jm+1,km+1);
}
int abs_max(double a[][N],double b[][N])
{
double *ma,*mb;
int j,k,jm,km;
ma=&a[0][0];mb=&b[0][0];
for(j=0;j<N;j++)
{
for(k=0;k<N;k++)
{
if(((a[j][k]>=0)?a[j][k]:-a[j][k])>*ma)
{
jm=j;
km=k;
ma=&a[j][k];
}
}
}
printf("A矩阵中绝对最大值为%lf,位置:%d行%d列\n",*ma,jm+1,km+1);
for(j=0;j<N;j++)
{
for(k=0;k<N;k++)
{
if(((b[j][k]>=0)?b[j][k]:-b[j][k])>*mb)
{
jm=j;
km=k;
mb=&b[j][k];
}
}
}
printf("B矩阵中绝对最大值为%lf,位置:%d行%d列\n",*mb,jm+1,km+1);
}
main()
{
double A[M][N],B[M][N],C[M][N];
input_A(A);
input_B(B);
output(A,B);
sum(A,B,C);
max(A,B);
abs_max(A,B);
}
可以_正常运行_