hswangrui 发表于 2017-1-2 12:26:12

二维矩阵的问题

本帖最后由 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={6};
        for(i=0;i<a;i++)
        {
       
                for(j=0;j<b;j++)
                {               
                printf("%8d",s);
                }   
        printf("\n");                   
}
        return 0;
}

人造人 发表于 2017-1-2 14:09:17

不能这样初始化
int s = {6};

#include <stdio.h>

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

        int s;

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

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

        return 0;
}

hswangrui 发表于 2017-1-2 14:24:43

人造人 发表于 2017-1-2 14:09
不能这样初始化

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

看了你写的 就是用内嵌for循环依次赋值   然后再用一个内嵌for循环表示矩阵为什么不可以把定义矩阵里的元素直接全部赋值?

人造人 发表于 2017-1-2 14:53:34

本帖最后由 人造人 于 2017-1-2 14:54 编辑

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

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

不过也不是所有元素都初始化

#include <stdio.h>

int main(void)
{
        int i, j;
        int s = {6};

        for(i = 0; i < 8; i++)
        {
                for(j = 0; j < 9; j++)
                {               
                        printf("%8d", s);
                }
                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

hswangrui 发表于 2017-1-2 15:05:19

人造人 发表于 2017-1-2 14:53
只有数组元素个数确定时才能用大括号{}
以下会报错



你刚刚举得例子似乎说明一维数组可以 但二位数组就行不通了...小甲鱼视频演示的是初始化为0,事实上也就是初始化了第一个元素而不是把所有元素初始化......那么如果要把二维数组全部初始化就必须用嵌套for循环实现么{:5_94:}

zealstar 发表于 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 = {0};

这也不能编译的。
只有这样:
scanf("%d", a);
int p;
for(i = 0; i < a; i++)
{
       p = 0;
}

这才能初始化……

人造人 发表于 2017-1-2 15:19:04

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

你完全可以自己尝试吗


int i = 8, j = 9;

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

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

int s2;
int s3;

人造人 发表于 2017-1-2 15:21:11

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

int s0;
int s1;
int s2 = {6};
int s3 = {6};
//这样就可以

人造人 发表于 2017-1-2 15:27:25

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

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

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

hswangrui 发表于 2017-1-2 16:33:26

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

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

谢了!其实直接把s =6合并到下面的printf函数之前就行了 不用分两个for循环
我查了查本来以为可以用meset函数实现后来试了半天发现messt只能初始化为特定的-1 0两个值
其余都是乱码。看来只能是用for循环来自定义了谢了啊

人造人 发表于 2017-1-2 16:51:47

“其实直接把s =6合并到下面的printf函数之前就行了 不用分两个for循环”
不理解你的意思,不妨举个例子

要用memset,数组必须是char类型的

#include <stdio.h>
#include <string.h>

int main(void)
{
        char s1;

        memset(s1, 6, 8 * 9);

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

                printf("\n");
        }

        return 0;
}

hswangrui 发表于 2017-1-2 17:01:50

本帖最后由 hswangrui 于 2017-1-2 17:03 编辑

#include <stdio.h>
#include <string.h>

int main(void)
{
      int s1;

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

                printf("\n");
      }

      return 0;
}
[/code
哦 原来如此....memset可以这么用.长知识了....谢了
页: [1]
查看完整版本: 二维矩阵的问题