| 
 | 
 
 
发表于 2019-9-26 22:55:16
|
显示全部楼层
 
 
 
这是因为数组str3没有初始化,系统自主给数组初始一个值,因此不可以贸然使用没有赋初值的变量,因为你不知道它具体的值是多少,至于为什么39和56是正确的,你可以不赋初值给数组str3,直接在程序中打印看看就知道为什么了。(附上程序截图,可以看出str3[0][1]=0,str3[1][1]=0;其他不等于0,因此只有39,56正确)- #include <stdio.h>
 
  
- int main()
 
 - {
 
 -         int M, P, N, i, j, k;
 
 -         int row;
 
 -         
 
 -         printf("请输入第一个矩阵的尺寸(M * P):");
 
 -         scanf("%d * %d", &M, &P); 
 
 -         int str1[M][P];
 
 -         
 
 -         printf("请输入第二个矩阵的尺寸(P * N):");
 
 -         scanf("%d * %d", &P, &N); 
 
 -         int str2[P][N];
 
 -         
 
 -         int str3[M][N];
 
 -         
 
 -         //初始化存放乘积的二维数组 
 
 -   /*     //val函数不支持直接初始化操作 
 
 -         for(i = 0; i < M; i++)
 
 -         {
 
 -                 for(j = 0; j < N; j++)
 
 -                         str3[i][j] = 0; 
 
 -         }                                                                                            //我的问题是这一块为什么要对数组str3进行初始化为0的操作
 
 -     */   
 
 -     for(i = 0; i < M; i++)
 
 -         {
 
 -                 for(j = 0; j < N; j++)
 
 -                         printf("%d ",str3[i][j]);
 
 -                                 printf("\n") ;
 
 -         } 
 
 -     
 
 -         printf("请输入第一个矩阵的值:\n");
 
 -         for(i = 0; i < M; i++)
 
 -         {
 
 -                 for(j = 0; j < P; j++)
 
 -                         scanf("%d", &str1[i][j]);
 
 -         }
 
 -         
 
 -         printf("请输入第二个矩阵的值:\n");
 
 -         for(i = 0; i < P; i++)
 
 -         {
 
 -                 for(j = 0; j < N; j++)
 
 -                         scanf("%d", &str2[i][j]);
 
 -         }
 
  
-         for(i = 0; i < M; i++)
 
 -         {
 
 -                 for(j = 0; j < N; j++)
 
 -                         for(k = 0; k < P; k++)
 
 -                                 str3[i][j] += str1[i][k] * str2[k][j];
 
 -         }
 
 -         
 
 -         row = M > P ? M : P;
 
 -         
 
 -         printf("结果是:\n");
 
 -         for(i = 0; i < row; i++)
 
 -         {
 
 -                 //打印str1 
 
 -                 printf("|  ");
 
 -                 for(j = 0; j < P; j++)
 
 -                 {
 
 -                         if(i < M)
 
 -                         {
 
 -                                 printf("\b%d ", str1[i][j]);  
 
 -                                 printf("|");
 
 -                         }
 
 -                         
 
 -                         else
 
 -                                 printf("\b\b\b     ");
 
 -                 }
 
 -                 
 
 -                 //打印*
 
 -                 if(i == row/2)         //? 
 
 -                         printf(" * ");
 
 -                 else
 
 -                         printf("   ");
 
 -                 
 
 -                 //打印str2
 
 -                 printf("|  ");
 
 -                 for(j = 0; j < N; j++)
 
 -                 {
 
 -                         if(i < P)
 
 -                         {
 
 -                                 printf("\b%d ", str2[i][j]);
 
 -                                 printf("|");
 
 -                         }
 
 -                         
 
 -                         else
 
 -                                 printf("\b\b\b    ");
 
 -                  } 
 
 -                  
 
 -                  //打印=
 
 -                  if(i == row / 2)
 
 -                          printf(" = ");
 
 -                  else
 
 -                          printf("   ");
 
 -                           
 
 -                  
 
 -                  //打印str3 
 
 -                  printf("|  ");
 
 -                  for(j = 0; j < N; j++)
 
 -                  {
 
 -                          if(i < M)
 
 -                          {
 
 -                                  printf("\b%d ", str3[i][j]);
 
 -                                  printf("|");
 
 -                          }
 
 -                          
 
 -                          else
 
 -                                  printf("\b\b\b     ");
 
 -                   } 
 
 -                 
 
 -                 printf("\n");
 
 -         }
 
 -         
 
 -         return 0;        
 
 -         
 
 -  } 
 
  复制代码 
 
 
 |   
 
 
 
 |