鱼C论坛

 找回密码
 立即注册
查看: 1583|回复: 11

二维矩阵的问题

[复制链接]
发表于 2017-1-2 12:26:12 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 hswangrui 于 2017-1-2 12:27 编辑

我想写一个自定义矩阵大小.并把所有元素赋值为6,然后输出...但结果却是一些乱码  查了好几遍没发现自己哪里写错了 ...不知道哪里出了问题。求解!!

#include <stdio.h>

int main()
{
        int a,b,i,j;
           printf("请输入矩阵大小a*b ");
        scanf("%d %d",&a,&b);
        int s[a][b]={6};
        for(i=0;i<a;i++)
        {
        
                for(j=0;j<b;j++)
                {               
                printf("%8d",s[i][j]); 
                }    
        printf("\n");                     
}
        return 0;
 }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-1-2 14:09:17 | 显示全部楼层
不能这样初始化
int s[a][b] = {6};
#include <stdio.h>

int main(void)
{
        int a, b, i, j;
        printf("请输入矩阵大小a*b:");
        scanf("%d %d", &a, &b);

        int s[a][b];

        for(i = 0; i < a; i++)
        {
                for(j = 0; j < b; j++)
                {               
                        s[i][j] = 6;
                }
        }

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

        return 0;
 }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-1-2 14:24:43 | 显示全部楼层

谢谢啊 为什么呢   不是说数组用大括号{}里面写个数字 表示给所有元素赋值么

看了你写的 就是用内嵌for循环依次赋值   然后再用一个内嵌for循环表示矩阵  为什么不可以把定义矩阵里的元素直接全部赋值?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-2 14:53:34 | 显示全部楼层
本帖最后由 人造人 于 2017-1-2 14:54 编辑

只有数组元素个数确定时才能用大括号{}
以下会报错
int i= 9;
int s[i] = {6};

这样就可以
int s[9] = {6};

不过也不是所有元素都初始化
#include <stdio.h>

int main(void)
{
        int i, j;
        int s[8][9] = {6};

        for(i = 0; i < 8; i++)
        {
                for(j = 0; j < 9; j++)
                {               
                        printf("%8d", s[i][j]); 
                }
                printf("\n");                     
        }

        return 0;
 }
输出
       6       0       0       0       0       0       0       0       0
       0       0       0       0       0       0       0       0       0
       0       0       0       0       0       0       0       0       0
       0       0       0       0       0       0       0       0       0
       0       0       0       0       0       0       0       0       0
       0       0       0       0       0       0       0       0       0
       0       0       0       0       0       0       0       0       0
       0       0       0       0       0       0       0       0       0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-1-2 15:05:19 | 显示全部楼层
人造人 发表于 2017-1-2 14:53
只有数组元素个数确定时才能用大括号{}
以下会报错

你刚刚举得例子似乎说明一维数组可以 但二位数组就行不通了...小甲鱼视频演示的是初始化为0,事实上也就是初始化了第一个元素  而不是把所有元素初始化......那么如果要把二维数组全部初始化就必须用嵌套for循环实现么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-2 15:18:57 | 显示全部楼层
本帖最后由 zealstar 于 2017-1-2 15:20 编辑
hswangrui 发表于 2017-1-2 15:05
你刚刚举得例子似乎说明一维数组可以 但二位数组就行不通了...小甲鱼视频演示的是初始化为0,事实上也就 ...


不是这个问题,使用VLA,也就是C99标准的动态数组,就是不能初始化!
比如:
scanf("%d", a);
int p[a] = {0};
这也不能编译的。
只有这样:
scanf("%d", a);
int p[a];
for(i = 0; i < a; i++)
{
       p[i] = 0;
}
这才能初始化……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-2 15:19:04 | 显示全部楼层
hswangrui 发表于 2017-1-2 15:05
你刚刚举得例子似乎说明一维数组可以 但二位数组就行不通了...小甲鱼视频演示的是初始化为0,事实上也就 ...

你完全可以自己尝试吗

int i = 8, j = 9;

int s2[i] = {6};
int s3[i][j] = {6};
//不管是一维还是二维,只要这样初始化,就报错

不初始化就,不报错
int i = 8, j = 9;

int s2[i];
int s3[i][j];
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-2 15:21:11 | 显示全部楼层
hswangrui 发表于 2017-1-2 15:05
你刚刚举得例子似乎说明一维数组可以 但二位数组就行不通了...小甲鱼视频演示的是初始化为0,事实上也就 ...
int s0[8];
int s1[8][9];
int s2[8] = {6};
int s3[8][9] = {6};
//这样就可以
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-2 15:27:25 | 显示全部楼层
hswangrui 发表于 2017-1-2 15:05
你刚刚举得例子似乎说明一维数组可以 但二位数组就行不通了...小甲鱼视频演示的是初始化为0,事实上也就 ...

"那么如果要把二维数组全部初始化就必须用嵌套for循环实现么"

也许是吧,我不知道还有其他方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-1-2 16:33:26 | 显示全部楼层
人造人 发表于 2017-1-2 15:27
"那么如果要把二维数组全部初始化就必须用嵌套for循环实现么"

也许是吧,我不知道还有其他方法

谢了!其实直接把s[a][b] =6合并到下面的printf函数之前就行了 不用分两个for循环  
我查了查本来以为可以用meset函数实现后来试了半天发现messt只能初始化为特定的-1 0两个值
其余都是乱码。看来只能是用for循环来自定义了  谢了啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-2 16:51:47 | 显示全部楼层
“其实直接把s[a] =6合并到下面的printf函数之前就行了 不用分两个for循环  ”
不理解你的意思,不妨举个例子

要用memset,数组必须是char类型的
#include <stdio.h>
#include <string.h>

int main(void)
{
        char s1[8][9];

        memset(s1, 6, 8 * 9);

        for(int i = 0; i < 8; i++)
        {
                for(int j = 0; j < 9; j++)
                {
                        printf("%d        ", s1[i][j]);
                }

                printf("\n");
        }

        return 0;
 }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-1-2 17:01:50 | 显示全部楼层
本帖最后由 hswangrui 于 2017-1-2 17:03 编辑

[code]#include <stdio.h>
#include <string.h>

int main(void)
{
        int s1[8][9];

        for(int i = 0; i < 8; i++)
        {
                for(int j = 0; j < 9; j++)
                {
                            s1[i][j]=6;       //可以合并到这里
                        printf("%6d", s1[i][j]);
                }

                printf("\n");
        }

        return 0;
}
[/code
哦 原来如此....memset可以这么用.长知识了....谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-27 20:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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