2d阵列添加

时间:2010-06-30 21:24:49

标签: c++ c

这个程序增加了两个矩阵,但它给出了太多错误,我无法解决它们。

错误:

  

ARRAY BOUNDS MISSING

  

EXPRESSION SYNTAX

有什么想法吗?

#include<stdio.h>
#include<conio.h>

#define ROW=3
#define COL=3

int result[][COL];
void input(int arr[][COL]);
void add(int mat1[][COL],mat2[][COL]);
void print(int result[][COL]);

void main(void)
{
    int mat1[ROW][COL],mat2[ROW][COL];
    input(mat1);
    input(mat2);
    add(mat1,mat2);
    print(result);
    getch();
}

void input(int arr[][COL]);
{
    for(int i=0;i<row;i++)
        for(int j=0;j<col;j++)
        {
            printf("Enter element");
            scanf("%d",&arr[i][j]);
        }
}

void add(int mat1[][COL],int mat2[][COL])
{
    for(int i=0;i<row;i++)
        for(int j=0;j<col;j++)
        {
            result[i][j]=mat1[i][j]+mat2[i][j];
        }
}

void print(int result[][COL])
{
    for(int i=0;i<row;i++)
        for(int j=0;j<col;j++)
            printf("%d",result[i][j]);
}

3 个答案:

答案 0 :(得分:13)

这不是一次糟糕的第一次尝试。至少你在寻求帮助之前尝试过,这比一些人在这里做的更多。您有以下问题:

  • 您的定义格式错误。
  • 您使用的是非标准内容(conio)。
  • 您使用小写rowcol作为常量。
  • 您的input函数有一个无关的分号。
  • 您没有正确定义result
  • 主要功能应始终返回int

更详细:

(1)您的定义格式错误。

您不要在定义中使用=,因为它们应该是相对简单的文本替换。所以行#define ROW=3并不是你想要的,因为那基本上是试图将符号ROW=3定义为空值。

要获得带有ROW值的符号3,您需要使用#define ROW 3

当然,在更现代的代码中,您将使用static const int ROW = 3;,因为这将为您提供一流的编译器符号,而不仅仅是文本替换。现在确实没有必要对常量(使用const)或函数(使用inline)使用预处理器定义。

(2)您使用的是非标准内容(conio)。

ISO C(标准)不包含conio.h头文件。我知道您正在使用它,以便您可以使用getch函数,但ISO C提供了一个非常合适的getchar函数,它在此处起到了相同的作用。

好的使用该语言的扩展,只要注意它们通常会使您的代码不那么便携。

(3)对常量使用小写rowcol

由于您对行和列常量使用了大写ROWCOL,因此应在for语句中使用大写。 C是区分大小写的语言,使用rowcol将导致编译器抱怨它们不存在。

(4)您的input函数有一个无关的分号。

这只是该函数第一行中错误放置的;,位于包含函数devclaration的行的末尾。

(5)您没有正确定义result

result变量应该有一个确定的大小。定义int result[][10];是所谓的不完整类型,因为无法知道大小。

(6)主要功能应始终返回int

C中的主要功能有两种标准形式:

int main(void);
int main (int c, char *v[]);

其他人可以通过实现提供,但是,如果你想要在任何地方运行的代码,你应该将自己限制在其中之一。


这消除了所有语法错误,现在你可以努力使界面不那么难看: - )

#include<stdio.h>

#define ROW 3
#define COL 3

int result[ROW][COL];
void input(int arr[][COL]);
void add(int mat1[][COL],int mat2[][COL]);
void print(int result[][COL]);

int main(void)
{
    int mat1[ROW][COL],mat2[ROW][COL];
    input(mat1);
    input(mat2);
    add(mat1,mat2);
    print(result);
    getchar();
    return 0;
}
void input(int arr[][COL])
{
    for(int i=0;i<ROW;i++)
        for(int j=0;j<COL;j++)
        {
            printf("Enter element");
            scanf("%d",&arr[i][j]);
        }
}
void add(int mat1[][COL],int mat2[][COL])
{
    for(int i=0;i<ROW;i++)
        for(int j=0;j<COL;j++)
            result[i][j]=mat1[i][j]+mat2[i][j];
}
void print(int result[][COL])
{
    for(int i=0;i<ROW;i++)
        for(int j=0;j<COL;j++)
            printf("%d",result[i][j]);
}

使其更好的一些建议:

  • 通过显示矩阵编号和坐标,使您输入的值更明显。
  • 在输出数字之间设置打印空格。
  • 让它在输出行之间打印换行符。
  • 让它打印固定宽度的数字(排成一行)。
  • 评论你的代码(我不能强调这一点)。

答案 1 :(得分:3)

#define ROW=3
#define COL=3

对于C预处理器不正确。尝试:

#define ROW 3
#define COL 3

有关如何使用预处理器的更多信息,请参阅this page

答案 2 :(得分:1)

现在首先出现了代码格式化的东西:

#define ROW=3
#define COL=3

应该是

#define ROW 3
#define COL 3