|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
在做小甲鱼的课后作业S1E25动动手第0题(https://fishc.com.cn/forum.php?m ... peid%26typeid%3D570)
我把矩阵计算的结果储存在了数组c[m][n]里面,然后发现一个不能理解的事情
c[m][n]是动态数组,我先把每一个元素初始化为0以后,把计算结果逐个赋值进去了,最后打印得到的结果就跟答案一模一样
但是我要是没有初始化为0,虽然后面也是逐个赋值了,但是打印得到的却是一堆随机数
为什么会出现这种情况呢,初始化和不初始化有什么差别吗,不是最后都被我赋值了吗?
未初始化c[m][n]的结果
以下是我写的代码:
- #include<stdio.h>
- int main()
- {
- int m,n,p;
- int i,j,k;
- printf("请输入第一个矩阵的尺寸(M*P):");
- scanf("%d*%d",&m,&p) ;
- printf("请输入第二个矩阵的尺寸(P*N):");
- scanf("%d*%d",&p,&n) ;
- printf("请输入第一个矩阵的值:\n");
- // 申明
- int a[m][p];
- int b[p][n];
- // 录入
- for(i=0;i<m;i++)
- {
- for(j=0;j<p;j++)
- {
- scanf("%d",&a[i][j]);
- }
- }
- printf("请输入第二个矩阵的值:\n");
- for(i=0;i<p;i++)
- {
- for(j=0;j<n;j++)
- {
- scanf("%d",&b[i][j]);
- }
- }
- // 结果计算及储存
- int c[m][n];
- // 初始化
- // for(i=0;i<m;i++)
- // {
- // for(j=0;j<n;j++)
- // {
- // c[i][j]=0;
- // }
- // }
- for(i=0;i<m;i++)
- {
- for(j=0;j<n;j++)
- {
- for(k=0;k<p;k++)
- {
- c[i][j]+=a[i][k]*b[k][j];
- }
- }
- }
- // 打印
- printf("计算结果如下:\n");
- for(i=0;i<p;i++)
- {
- if(i<m)
- {
- printf("| ");
- for(j=0;j<p;j++)
- {
- printf("%d ",a[i][j]);
- }
- if(i+1==(p+1)/2)
- {
- printf("| * | ");
- }
- else
- {
- printf("| | ");
- }
- for(j=0;j<n;j++)
- {
- printf("%d ",b[i][j]);
- }
- if(i+1==(p+1)/2)
- {
- printf("| = | ");
- }
- else
- {
- printf("| | ");
- }
- for(j=0;j<n;j++)
- {
- printf("%d ",c[i][j]);
- }
- printf("|\n");
- }
- else
- {
- printf(" ");
- for(j=0;j<p;j++)
- {
- printf(" ");
- }
- printf(" | ");
- for(j=0;j<n;j++)
- {
- printf("%d ",b[i][j]);
- }
- printf("|\n");
- }
- }
- return 0;
- }
复制代码
- c[i][j]+=a[i][k]*b[k][j];
复制代码
等价于
- c[i][j] = c[i][j] + a[i][k]*b[k][j];
复制代码
没问题吧
所以,是先使用,还是先赋值?
|
|