我是初学者,就是今天尝试做了c语言的一个矩阵运算乘积和加法,我调用函数用的是指针传递,参数也涉及指针,但我第一个矩阵A代表的指针p1,里面指向的值不知道咋消失了,就是运行结果最后都只有第二个矩阵B的数据进行运算,就是B矩阵自己乘自己,自己加自己。有没有大佬能帮我看看我代码啥问题,怎么把p1指向的数据取出来,或者我这思路顺下去咋解决问题!!跪求帮助,薅了我一天的头发了,哭了。 下面是我这题的全部代码内容,有没有好心人帮我看看,可能有点繁琐的思路!!
#include<stdio.h> #include<stdlib.h> #include<time.h>
int *random(int k) //k表示随机量个数。 { int i,x,y; int a[100]={0}; int *p=a; srand((unsigned)time(NULL)); printf("请输入产生随机数的范围(举例“0 100”表示0-100之间产生随机数)"); scanf("%d%d",&x,&y);
for(i=0;i<k;i++) {a[i] =x+rand()%(y-x); } //利用指针(下标法)p[i]引用一维数组。 return p; //返回随机数数组的首地址p(指向a[0])。 }
int* zhuanhuan(int k,int m,int n) //k表示随机量个数.m、n表示二维数组的行、列数 { int i,j; int a[10][10]; int p;p=random(k); printf("随机数矩阵为:\n"); for (i=0;i<m;i++) { for (j=0;j<n;j++) a[i][j]=p[in+j];}
for (i=0;i<m;i++)
{ for (j=0;j<n;j++)
{printf("%d\t",a[i][j]);}
printf("\n");
}
return p;
} void mul(int p1,int p2,int m1,int m2,int n1,int n2) { int m[10][10]={0}; int i,j,k; if (n2!=m1) {printf("!出错,两矩阵无法相乘!"); } for ( i=0; i<m1; i++) { for ( j=0; j<n2; j++) { for ( k=0; k<n1; k++) { m[i][j]+=(p1[in1+k]p2[kn2+j]); } } } printf("矩阵AB结果\n"); for(i=0;i<m1;i++) {for(j=0;j<n2;j++) { printf("%d\t",m[i][j]);} printf("\n");} } void sum(int *p1,int *p2,int m1,int m2,int n1,int n2) { int s[10][10]={0}; int i,j; if ((m1!=m2) && (n1!=n2)) {printf("!出错,矩阵无法相加!");} for ( i=0; i<m1; i++) { for ( j=0; j<n1; j++) {
s[i][j]=(p1[i*n1+j]+p2[i*n2+j]);
}
}
printf("矩阵A+B结果\n");
for(i=0;i<m1;i++)
{for(j=0;j<n1;j++)
{ printf("%d\t",s[i][j]);}
printf("\n");} }
void main() { int k1,k2,m1,n1,m2,n2; int *p1,*p2; printf("请输入第一个矩阵A要生成的随机数个数(回车确认)"); scanf("%d",&k1); printf("请输入需生成的第一个矩阵行列数(举例“5 5”表示五行五列)数据不足将自动补零\n"); scanf("%d%d",&m1,&n1); p1=zhuanhuan(k1,m1,n1); printf("请输入第二个矩阵B要生成的随机数个数(回车确认)"); scanf("%d",&k2); printf("请输入需生成的第二个矩阵行列数(举例“5 5”表示五行五列)数据不足将自动补零\n"); scanf("%d%d",&m2,&n2); p2=zhuanhuan(k2,m2,n2); mul(p1,p2,m1,m2,n1,n2); sum(p1,p2,m1,m2,n1,n2); }