如何在 C/C++ 中对二维数组求和

Posted

技术标签:

【中文标题】如何在 C/C++ 中对二维数组求和【英文标题】:How to sum 2D arrays in C/C++ 【发布时间】:2018-11-06 10:17:31 【问题描述】:

我无法在 c 中添加两个二维数组 可能是什么问题 ?我正在尝试从用户输入添加两个多维数组,但输出不正确。 下面是我的代码

#include<stdio.h>
#include<conio.h>
void main()

     int m,n,p,q,c,d,k;
     int first[10][10],second[10][10],sum[10][10];
     clrscr();
     printf("\nEnter the number of rows and columns of the first matrix");
     scanf("%d %d",&m,&n);
     printf("\nEnter the elements of the first matrix");
     for (c = 0;c < m;c++)
         for (d = 0;d < n;d++)
             scanf("%d",&first[c][d]);
     printf("\nEnter the number of rows and columns of the second matrix");
     scanf("%d %d",&p,&q);
     printf("\nEnter the elements of the second matrix");
     for (c = 0;c < p;c++)
         for (d = 0;d < p;d++)
             scanf("%d",&second[c][d]);
     for (c = 0;c < m;c++)
         for (d = 0;d < n;d++)
             for (k = 0;k < p;k++)
             
                  sum[c][d] = first[c][k] + second[k][d];
             
     printf("\nThe sum of the two matrices is : \n\n");
     for (c = 0;c < m;c++)
         for (d = 0;d < n;d++)
         
              printf("%d",&sum[c][d]);
              if (d == n-1)
              
                  printf("\n\n");
              
         
     getch();

【问题讨论】:

c 还是 c++ ?请格式化您的代码 c++。我在 TurboC++ 中使用它 for (d = 0;d &lt; p;d++) 似乎是错误的。 d 应该一直运行到 q,不是吗? @BBKiVines int m,n,p,q,c,d,k; -- 如果您使用了更有意义的变量名,您可能更容易发现其中一个错误。 为什么允许两者有不同的维度?如果m != pn != q 你的总和是错误的 【参考方案1】:

改变这个:

for (d = 0;d < p;d++)

到这里:

for (d = 0;d < q;d++)

当您填充第二个数组时,因为您使用了第一个维度而不是第二个维度。


改变这个:

printf("%d", &sum[c][d]);

到这里:

printf("%d", sum[c][d]);

因为你想打印一个整数。


PS:这是 C,不是 C++。

【讨论】:

【参考方案2】:

请检查所有索引的范围。你有一些错误,其中之一是 d 应该运行到 q (我猜)为你的变量使用更好的名称,这样你就可以记住你在做什么。另外,如果您想在最后打印总和,为什么要使用:

printf("%d", &sum[c][d]);

你不需要那里的 &

【讨论】:

【参考方案3】:

当你考虑两个矩阵相加时,那么两个矩阵的维度应该是相同的。所以你不需要输入不同矩阵的维度。 其次,尽量使用一些有意义的变量,合理安排代码,让用户更容易理解代码。 您提供的代码是 C 语言的。

您的代码中的问题是:

   printf(" %d \n",&sum[c][d]);

    for (c = 0;c < m;c++)
    for (d = 0;d < n;d++)
    for (k = 0;k < p;k++)
    
     sum[c][d] = first[c][k] + second[k][d];
    

对您的代码的改进可以是:

        #include<stdio.h>
        #include<conio.h>
        int main()
        
         int m,n,c,d;
         int first[10][10],second[10][10],sum[10][10];
         clrscr();
         printf("\nEnter the number of rows and columns of the first matrix");
         scanf("%d %d",&m,&n);

         printf("\nEnter the elements of the first matrix");
         for (c = 0;c < m;c++)
           for (d = 0;d < n;d++)
              scanf("%d",&first[c][d]);

              printf("\nEnter the elements of the second matrix");  //Both the matrix 
              should have same dimensions in case of addition

         for (c = 0;c < m;c++)
           for (d = 0;d < n;d++)
             scanf("%d",&second[c][d]); 

         for (c = 0;c < m;c++)   //Addition matrix have same dimensions 
           for (d = 0;d < n;d++)
          
             sum[c][d] = first[c][d] + second[c][d];
          

         printf("\nThe sum of the two matrices is : \n\n");
         for (c = 0;c < m;c++)
            for (d = 0;d < n;d++)
             
               printf(" %d \n",sum[c][d]);
             

         getch();
         return 0;
        

【讨论】:

其次...你使用相同的变量名;) 我刚刚修复了他的代码。让他很容易理解。 @user463035818

以上是关于如何在 C/C++ 中对二维数组求和的主要内容,如果未能解决你的问题,请参考以下文章

二维数组求和

如何在 Java 中对二维数组进行深拷贝?

如何在 C# 中对二维(矩形)数组进行排序?

C语言如何在子函数中对主函数中的二维数组值进行修改? 二维数组已经在主函数中用动态数组分配了空间。

如何在python中对存储xy坐标的二维数组进行排序?

Clickhouse - 矩阵逐项加法:如何对二维数组求和?