鱼C论坛

 找回密码
 立即注册
查看: 1022|回复: 6

[已解决]C语言 数组求矩阵问题

[复制链接]
发表于 2020-4-13 20:36:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码如下。我有个问题一直解决不了, 就是 m和j的同时取值问题。  希望高手相助一下,帮忙改一下代码。  或者说一下改的方式   , 谢谢  

  1. #include <stdio.h>

  2. int main()
  3. {
  4.         int A[2][3] = {{1, 2, 3}, {4, 5, 6}};
  5.         int B[3][2] = {{1, 4}, {2, 5}, {3, 6}};
  6.         int C[2][2] = {0};
  7.         int i, j , m, n;
  8.        
  9.         //  两矩阵相乘 A[i][j]*B[m][n]= C[i][n]  不管结果 先只管中间过程
  10.         for(i = 0; i < 2; i++) //  以A为第一项 进行计算
  11.         {
  12.                 for(m = 0; m < 3; m++) // B的行数依次选取
  13.                 {
  14.                         if (m = 0) // 问题来了,如果要让这个程序正常运行,那么 m和j必须同时改变  
  15.                         {
  16.                                 j = 0;
  17.                         }
  18.                         else
  19.                         {
  20.                                 j += 1;
  21.                         }            // 我想的是下面for循环结束后 直接到上面的for循环  取 m = 0
  22.                         // 事与愿违, 是个死循环,直接读if-else 语句了
  23.                         for( n=0; n<2; n++)
  24.                         {
  25.                                 C[i][n] += A[i][j] * B[m][n];
  26.                                 printf("C %d %d = %d  %d \n", i, n, C[i][n], j);       
  27.                                
  28.                                 if( (i == 1 && j ==2) == 1)
  29.                                 {
  30.                                         goto FINDIT;
  31.                                 }
  32.                         }
  33.                 }
  34.         }
  35. FINDIT: printf("C %d %d = %d\n", i, n, C[i][n]);       
  36.        
  37.         return 0;
  38. }
复制代码
最佳答案
2020-4-13 21:04:41
哪有你想的那么麻烦,j和m本来就一个是同一个量啊。
外两层循环就是C的行和列,最内层循环就是求C对应的值
  1. #include <stdio.h>
  2. int main()
  3. {
  4.     int A[2][3] = {{1, 2, 3}, {4, 5, 6}};
  5.     int B[3][2] = {{1, 4}, {2, 5}, {3, 6}};
  6.     int C[2][2] = {0};
  7.     int i, j , m, n;
  8.    
  9.     for(i = 0; i < 2; i++)  
  10.     {
  11.         for( n=0; n<2; n++)
  12.         {
  13.             for(j=0;j<3;j++)
  14.                 C[i][n] += A[i][j] * B[j][n];
  15.             printf("C[%d][%d] = %d\n", i, n, C[i][n]);
  16.         }
  17.     }
  18.         return 0;
  19. }
复制代码

评分

参与人数 1鱼币 +1 收起 理由
永恒的蓝色梦想 + 1 不会做,鱼币还给你吧……

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-13 20:36:44 | 显示全部楼层

回帖奖励 +1 鱼币

先领个鱼币啦
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-13 20:37:01 | 显示全部楼层
这个问题在于 第二个for循环下面的if-eslse语句,我知道好像不能这么用了,但还是没有好的解决方法
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-13 21:00:37 | 显示全部楼层
  1. if (m = 0)
  2. if (m == 0)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-13 21:04:41 | 显示全部楼层    本楼为最佳答案   
哪有你想的那么麻烦,j和m本来就一个是同一个量啊。
外两层循环就是C的行和列,最内层循环就是求C对应的值
  1. #include <stdio.h>
  2. int main()
  3. {
  4.     int A[2][3] = {{1, 2, 3}, {4, 5, 6}};
  5.     int B[3][2] = {{1, 4}, {2, 5}, {3, 6}};
  6.     int C[2][2] = {0};
  7.     int i, j , m, n;
  8.    
  9.     for(i = 0; i < 2; i++)  
  10.     {
  11.         for( n=0; n<2; n++)
  12.         {
  13.             for(j=0;j<3;j++)
  14.                 C[i][n] += A[i][j] * B[j][n];
  15.             printf("C[%d][%d] = %d\n", i, n, C[i][n]);
  16.         }
  17.     }
  18.         return 0;
  19. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-13 21:33:40 | 显示全部楼层
sunrise085 发表于 2020-4-13 21:04
哪有你想的那么麻烦,j和m本来就一个是同一个量啊。
外两层循环就是C的行和列,最内层循环就是求C对应的值 ...

忘了矩阵的m和j是一样的了。谢谢dl
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-13 21:39:24 | 显示全部楼层

还是谢谢了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-13 07:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表