我写了一个程序来添加两个矩阵,但它不起作用。对于什么是错的任何建议?

时间:2018-04-20 07:04:01

标签: c for-loop matrix multidimensional-array nested-loops

该程序从用户获取两个数组并添加它们并打印总和。该程序使用嵌套for循环来获取值并打印值。编译器返回未在此作用域中声明的错误array1。如果我删除总和打印部分,程序也会停止工作。任何缩短该计划的建议都表示赞赏。

#include<stdio.h>

int a,b;

int i,j;

main()
{

    printf("Enter the size of the array  \n Rows : ");
    scanf("%d",&a);
    printf("Columns : ");
    scanf("%d",&b);

    int array[a][b];

    printf("Enter the values of the %dx%d array : \n",a,b);

    for(i=0;i<a;i++)
    {
        for(j=0;j<b;j++)
        {
            scanf("%d",&array[i][j]);
        }
    }

    printf("The values of the First Matrix are :\n");


    for(i=0;i<a;i++)
    {
        for(j=0;j<b;j++)
        {
            printf("%d\t",array[i][j]);
        }

        printf("\n");
    }

    int input;
    printf("If you want to do further operations on Matrices press 1\n");
    scanf("%d",&input);

    if(input==1)
    {
        printf("Enter the size of the array  \n Rows : ");
    scanf("%d",&a);
    printf("Columns : ");
    scanf("%d",&b);

    int array1[a][b];

    printf("Enter the values of the %dx%d array : \n",a,b);

    for(i=0;i<a;i++)
    {
        for(j=0;j<b;j++)
        {
            scanf("%d",&array1[i][j]);
        }
    }

    printf("The values of the Second Matrix are :\n");


    for(i=0;i<a;i++)
    {
        for(j=0;j<b;j++)
        {
            printf("%d\t",array1[i][j]);
        }

        printf("\n");
    }

    }


    input = 0;
    printf("If you want to add the two matrices press 1 \n");
    scanf("%d",input);

    int array2[a][b];

    if(input==1)
    {
        for(i=0;i<a;i++)
    {
        for(j=0;j<b;j++)
        {
            array2[i][j] =  array[i][j]+array1[i][j];
        }
    }

    }

    printf("The Sum of the first and Second array is : \n ");


    for(i=0;i<a;i++)
    {
        for(j=0;j<b;j++)
        {
            printf("%d\t",array2[i][j]);
        }

        printf("\n");
    }


}

2 个答案:

答案 0 :(得分:2)

您在代码中遇到很多问题,建议您正确使用花括号{..}。也可以使用int main(void) { }代替main() { }

编译器是否返回未在此范围内声明的错误array1?因为array1if(input==1)块内声明,并且您正在该范围之外访问。

同样声明scanf("%d",input);是错误的,它会发出警告,用-Wall标志编译你的程序。

最后避免对这个小任务使用全局变量,或者使用#define来定义rowcolumn值。

这是修改后的代码

int main() {
        printf("Enter the size of the array  \n Rows : ");
        int a = 0,b = 0;
        scanf("%d",&a);
        printf("Columns : ");
        scanf("%d",&b);
        int array[a][b];
        printf("Enter the values of the %dx%d array : \n",a,b);

        for(int i=0;i<a;i++) {
                for(int j=0;j<b;j++) {
                        scanf("%d",&array[i][j]);
                }
        }
        printf("The values of the First Matrix are :\n");
        for(int i=0;i<a;i++) {
                for(int j=0;j<b;j++) {
                        printf("%d\t",array[i][j]);
                }
                printf("\n");
        }
        int input;
        printf("If you want to do further operations on Matrices press 1\n");
        scanf("%d",&input);
        if(input==1) {
                printf("Enter the size of the array  \n Rows : ");
                scanf("%d",&a);
                printf("Columns : ");
                scanf("%d",&b);
                int array1[a][b];
                printf("Enter the values of the %dx%d array : \n",a,b);
                for(int i=0;i<a;i++) {
                        for(int j=0;j<b;j++) {
                                scanf("%d",&array1[i][j]);
                        }
                }
                printf("The values of the Second Matrix are :\n");
                for(int i=0;i<a;i++) {
                        for(int j=0;j<b;j++) {
                                printf("%d\t",array1[i][j]);
                        }
                        printf("\n");
                }

                input = 0;
                printf("If you want to add the two matrices press 1 \n");
                scanf("%d",&input);/* use &input */
                int array2[a][b];
                if(input==1) {
                        for(int i=0;i<a;i++) {
                                for(int j=0;j<b;j++) {
                                        array2[i][j] =  array[i][j]+array1[i][j];
                                }
                        }
                }
                printf("The Sum of the first and Second array is : \n ");
                for(int i=0;i<a;i++) {
                        for(int j=0;j<b;j++) {
                                printf("%d\t",array2[i][j]);
                        }
                        printf("\n");
                }
        }
        return 0;
}

答案 1 :(得分:0)

在块中声明array1,以:

开头
if(input==1)

然后你尝试在该块之外使用它,这会给你编译错误。

array2[i][j] =  array[i][j]+array1[i][j];

最快的解决方案是将代码嵌入其中的blok,因此array1保留在范围内。