Fivk 发表于 2020-10-25 11:28:47

二维数组作业,矩阵相乘。我错哪里了?

本帖最后由 Fivk 于 2020-10-25 11:31 编辑



#include<stdio.h>
int main()
{
        int m,p,n;
        scanf("%d %d %d",&m,&p,&n);
        int a,b,c={0};
        for(int i=0;i<m;i++)
        {
                for(int j=0;j<p;j++)
                {
                        scanf("%d",&a);
                }
        }
                for(int i=0;i<p;i++)
        {
                for(int j=0;j<n;j++)
                {
                        scanf("%d",&b);
                }
        }
        for(int i=0;i<m;i++)
        {
                for(int j=0;j<n;j++)
                {
                        for(int k=0;k<p;k++)
                        {
                                c +=a*b;
                        }
                }
        }
        for(int i=0;i<m;i++)
        {
                for(int j=0;j<n;j++)
                {
                        printf("%d ",c);
                }
                printf("\n");
        }
        return 0;
}

yuxijian2020 发表于 2020-10-25 11:36:20

本帖最后由 yuxijian2020 于 2020-10-25 11:42 编辑

首先你定义的m, p, n都是变量,变量是不可以定义数组长度的
后面的代码已经无关紧要了这里就已经报错了
你可以用vector嘛   什么年代了就模板库就完事儿了
c的话那就用二级指针吧0.0

shooan 发表于 2020-10-25 12:33:02

yuxijian2020 发表于 2020-10-25 11:36
首先你定义的m, p, n都是变量,变量是不可以定义数组长度的
后面的代码已经无关紧要了这里就已经报错了
...

你说的应该不对,C99标准,C的数组大小是可以变长的。这个应该是DevC++,默认用的是gcc,支持C99的。

yuxijian2020 发表于 2020-10-25 13:00:04

shooan 发表于 2020-10-25 12:33
你说的应该不对,C99标准,C的数组大小是可以变长的。这个应该是DevC++,默认用的是gcc,支持C99的。

既然你说gcc支持,我就跑了一遍
确实gcc可以用变量定义数组长度
这又出现一个问题,题主对c数组初始化其实并没有起作用
因为长度为变量,这里初始化必须要用双循环
然后我运行是并没有报错,只有c数组初始化那里有个警告
改了初始化之后,在程序上已经没什么错误了
至于题目逻辑这一块
我输入的所有值都是2
输出为:
8 8
8 8
int m,p,n;
      scanf("%d %d %d",&m,&p,&n);
      int a, b, c; //={0};
      for (int i = 0; i < m; ++i)
      {
                for (int j = 0; j < n; ++j)
                {
                        c = 0;
                }
      }
                for (int i = 0; i < m; i++)
                {
                        for (int j = 0; j < p; j++)
                        {
                              scanf("%d", &a);
                        }
                }
                for(int i=0;i<p;i++)
      {
                for(int j=0;j<n;j++)
                {
                        scanf("%d",&b);
                }
      }
      for(int i=0;i<m;i++)
      {
                for(int j=0;j<n;j++)
                {
                        for(int k=0;k<p;k++)
                        {
                              c +=a*b;
                        }
                }
      }
      for(int i=0;i<m;i++)
      {
                for(int j=0;j<n;j++)
                {
                        printf("%d ",c);
                }
                printf("\n");
      }
      return 0;

Fivk 发表于 2020-10-25 13:06:54

{:10_254:}{:10_254:}

Fivk 发表于 2020-10-25 13:08:47

yuxijian2020 发表于 2020-10-25 13:00
既然你说gcc支持,我就跑了一遍
确实gcc可以用变量定义数组长度
这又出现一个问题,题主对c数组初始化其 ...

我用一维数组的时候可以像我这上面

yuxijian2020 发表于 2020-10-25 13:14:23

Fivk 发表于 2020-10-25 13:08
我用一维数组的时候可以像我这上面

你可以实验一下,依然不可以
因为是变量定义的数组长度
初始化应该是只能用循环赋值

Fivk 发表于 2020-10-25 13:15:27

yuxijian2020 发表于 2020-10-25 13:14
你可以实验一下,依然不可以
因为是变量定义的数组长度
初始化应该是只能用循环赋值

可以帮我修改一下吗?

Fivk 发表于 2020-10-25 13:15:59

yuxijian2020 发表于 2020-10-25 13:14
你可以实验一下,依然不可以
因为是变量定义的数组长度
初始化应该是只能用循环赋值

这个定义数组是正确的

yuxijian2020 发表于 2020-10-25 13:18:53

Fivk 发表于 2020-10-25 13:15
这个定义数组是正确的

不懂你说的,改什么?
本帖的初始化已经改过了就在我之前回复中贴的代码上

Fivk 发表于 2020-10-25 13:24:10

yuxijian2020 发表于 2020-10-25 13:18
不懂你说的,改什么?
本帖的初始化已经改过了就在我之前回复中贴的代码上

我这个结果好像不对

sunrise085 发表于 2020-10-25 13:29:15

shooan 发表于 2020-10-25 12:33
你说的应该不对,C99标准,C的数组大小是可以变长的。这个应该是DevC++,默认用的是gcc,支持C99的。

程序运行没错啊。
你那里报什么错了?

shooan 发表于 2020-10-25 13:37:18

sunrise085 发表于 2020-10-25 13:29
程序运行没错啊。
你那里报什么错了?

我并没有去运行代码,我只是指出了C99标准,是可以用变长数组这种东西的。

yuxijian2020 发表于 2020-10-25 14:21:02

Fivk 发表于 2020-10-25 13:24
我这个结果好像不对

我按你例子中给出的数组输入了一遍,输出是正确的
不知道你的结果不对是啥意思

sunrise085 发表于 2020-10-25 20:04:04

shooan 发表于 2020-10-25 13:37
我并没有去运行代码,我只是指出了C99标准,是可以用变长数组这种东西的。

哦,不好意思。回复错人了,我以为你是楼主。。
页: [1]
查看完整版本: 二维数组作业,矩阵相乘。我错哪里了?