【问题标题】:garbage value is being printed when a two multi dimensional array is sent as a parameter to a function将二维多维数组作为参数发送给函数时,正在打印垃圾值
【发布时间】:2020-12-01 13:45:01
【问题描述】:

我编写的这个程序可以在满足条件时将任何类型的矩阵相乘

大部分代码只用于输入,函数需要输入的部分似乎是麻烦的区域, 无法得到正确的结果,并且在结果矩阵中也得到了垃圾值。

#include<stdio.h>
#include<math.h>
void multiply(int,int,int,int,int [][100],int [][100]);
void main()
{
    int i,j,e;
    int m,n,p,q;
    int a[m][n],b[p][q];
    printf("\n enter m and n");
    scanf("%d %d",&m,&n);
    printf("\n enter the matrix elements");
    for(i=0;i<m;i++)
        for(j=0;j<n;j++)
            scanf("%d",&a[i][j]);
    printf("\n enter p and q");
    scanf("%d %d",&p,&q);
    printf("\n enter the matrix elements");
    for(i=0;i<p;i++)
        for(j=0;j<q;j++)
            scanf("%d",&b[i][j]);
    printf("if u want to multliply the matrix enter 1");
    scanf("%d",&e);
    {
    printf("a matrix n is columns and m is rows \n");
    for(int i =0;i<m;i++){
        for(int j = 0;j<n;j++){
            printf("%d ",a[i][j]);

        }
         printf("\n");
    }
  printf("a matrix q is columns and p is rows \n");
     for(int i =0;i<m;i++){
        for(int j = 0;j<n;j++){
            printf("%d ",b[i][j]);

        }
         printf("\n");
    }
    printf("\n\n\n");
    if(e==1&&n==p)

    multiply(m,n,p,q,a,b);

}
}
void multiply(int m,int n,int p,int q,int a[][100],int b[][100])
{
    printf("a matrix n is columns and m is rows \n");
    for(int i =0;i<m;i++){
        for(int j = 0;j<n;j++){
            printf("%d ",a[i][j]);

        }
         printf("\n");
    }
  printf("a matrix q is columns and p is rows \n");
     for(int i =0;i<m;i++){
        for(int j = 0;j<n;j++){
            printf("%d ",b[i][j]);

        }
         printf("\n");
    }
    int s[m][q],sum=0,i,j,k;
    for(i=0;i<m;i++)
    {
        for(j=0;j<q;j++)
        {
         s[i][j]=0;
            for(k=0;k<n;k++)
            {
                s[i][j]=s[i][j]+a[i][k]*b[k][j];
            }
        printf("\t %d",s[i][j]);
        }
        printf("\n");
    }
}

如何解决这个问题?

【问题讨论】:

  • scanf 要求输入时,您是否将int a[m][n] 中的n 设置为1000?否则你会一团糟。编译器使用基于multiply() 中的sizeof(int) * 1000 的算术运算,如果将n 设置为不同的值,则会得到错误的值。
  • 如果mnpq 还没有值,如何声明ab 数组的维度? C++是顺序语言,应该在scanf之后完成
  • 您使用什么语言CC++?这:int m,n,p,q; int a[m][n],b[p][q]; 不是有效的 C++,即使那些 int 变量已初始化。
  • C 和 C++ 是非常不同的语言。除非您特别询问它们的区别,否则请不要同时标记两者。
  • 使用的语言是 c

标签: arrays c function matrix


【解决方案1】:

至少这个问题:

代码有未定义的bahvaior (UB),因为m, n, p, q 的值不一定是数组a, b 定义的时间。

int m,n,p,q;
int a[m][n],b[p][q];

改为:

int m,n,p,q;
// int a[m][n],b[p][q];
printf("\n enter m and n");
// scanf("%d %d",&m,&n);
if (scanf("%d %d",&m,&n) != 2 || m <= 0 || n <= 0) {
  puts("Bad input");
  return -1;
}
int a[m][n];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    • 2016-12-31
    • 2023-01-10
    • 2012-01-22
    • 2021-10-25
    • 2022-11-14
    相关资源
    最近更新 更多