鱼C论坛

 找回密码
 立即注册
查看: 1835|回复: 14

[已解决]二维数组作业,矩阵相乘。我错哪里了?

[复制链接]
发表于 2020-10-25 11:28:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

题目

题目
20201025111927.png
#include<stdio.h>
int main()
{
        int m,p,n;
        scanf("%d %d %d",&m,&p,&n);
        int a[m][p],b[p][n],c[m][n]={0};
        for(int i=0;i<m;i++)
        {
                for(int j=0;j<p;j++)
                {
                        scanf("%d",&a[i][j]);
                }
        }
                for(int i=0;i<p;i++)
        {
                for(int j=0;j<n;j++)
                {
                        scanf("%d",&b[i][j]);
                }
        }
        for(int i=0;i<m;i++)
        {
                for(int j=0;j<n;j++)
                {
                        for(int k=0;k<p;k++)
                        {
                                c[i][j] +=a[i][k]*b[k][j]; 
                        }
                }
        }
        for(int i=0;i<m;i++)
        {
                for(int j=0;j<n;j++)
                {
                        printf("%d ",c[i][j]);
                }
                printf("\n");
        }
        return 0;
}
最佳答案
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[m][p], b[p][n], c[m][n]; //={0};
        for (int i = 0; i < m; ++i)
        {
                for (int j = 0; j < n; ++j)
                {
                        c[i][j] = 0;
                }
        }
                for (int i = 0; i < m; i++)
                {
                        for (int j = 0; j < p; j++)
                        {
                                scanf("%d", &a[i][j]);
                        }
                }
                for(int i=0;i<p;i++)
        {
                for(int j=0;j<n;j++)
                {
                        scanf("%d",&b[i][j]);
                }
        }
        for(int i=0;i<m;i++)
        {
                for(int j=0;j<n;j++)
                {
                        for(int k=0;k<p;k++)
                        {
                                c[i][j] +=a[i][k]*b[k][j];
                        }
                }
        }
        for(int i=0;i<m;i++)
        {
                for(int j=0;j<n;j++)
                {
                        printf("%d ",c[i][j]);
                }
                printf("\n");
        }
        return 0;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-25 11:36:20 | 显示全部楼层
本帖最后由 yuxijian2020 于 2020-10-25 11:42 编辑

首先你定义的m, p, n都是变量,变量是不可以定义数组长度的
后面的代码已经无关紧要了  这里就已经报错了
你可以用vector嘛   什么年代了  就模板库就完事儿了
c的话  那就用二级指针吧  0.0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

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

你说的应该不对,C99标准,C的数组大小是可以变长的。这个应该是DevC++,默认用的是gcc,支持C99的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[m][p], b[p][n], c[m][n]; //={0};
        for (int i = 0; i < m; ++i)
        {
                for (int j = 0; j < n; ++j)
                {
                        c[i][j] = 0;
                }
        }
                for (int i = 0; i < m; i++)
                {
                        for (int j = 0; j < p; j++)
                        {
                                scanf("%d", &a[i][j]);
                        }
                }
                for(int i=0;i<p;i++)
        {
                for(int j=0;j<n;j++)
                {
                        scanf("%d",&b[i][j]);
                }
        }
        for(int i=0;i<m;i++)
        {
                for(int j=0;j<n;j++)
                {
                        for(int k=0;k<p;k++)
                        {
                                c[i][j] +=a[i][k]*b[k][j];
                        }
                }
        }
        for(int i=0;i<m;i++)
        {
                for(int j=0;j<n;j++)
                {
                        printf("%d ",c[i][j]);
                }
                printf("\n");
        }
        return 0;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-25 13:06:54 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

我用一维数组的时候可以像我这上面
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-25 13:14:23 | 显示全部楼层
Fivk 发表于 2020-10-25 13:08
我用一维数组的时候可以像我这上面

你可以实验一下,依然不可以
因为是变量定义的数组长度
初始化应该是只能用循环赋值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

可以帮我修改一下吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

这个定义数组是正确的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-25 13:18:53 | 显示全部楼层
Fivk 发表于 2020-10-25 13:15
这个定义数组是正确的

不懂你说的,改什么?
本帖的初始化已经改过了就在我之前回复中贴的代码上
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我这个结果好像不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

程序运行没错啊。
你那里报什么错了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-25 13:37:18 | 显示全部楼层
sunrise085 发表于 2020-10-25 13:29
程序运行没错啊。
你那里报什么错了?

我并没有去运行代码,我只是指出了C99标准,是可以用变长数组这种东西的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-25 14:21:02 | 显示全部楼层
Fivk 发表于 2020-10-25 13:24
我这个结果好像不对

我按你例子中给出的数组输入了一遍,输出是正确的
不知道你的结果不对是啥意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

哦,不好意思。回复错人了,我以为你是楼主。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-11 07:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表