鱼C论坛

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

二维矩阵的问题

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

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

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

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

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


  1. #include <stdio.h>

  2. int main()
  3. {
  4.         int a,b,i,j;
  5.            printf("请输入矩阵大小a*b ");
  6.         scanf("%d %d",&a,&b);
  7.         int s[a][b]={6};
  8.         for(i=0;i<a;i++)
  9.         {
  10.        
  11.                 for(j=0;j<b;j++)
  12.                 {               
  13.                 printf("%8d",s[i][j]);
  14.                 }   
  15.         printf("\n");                     
  16. }
  17.         return 0;
  18. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-1-2 14:09:17 | 显示全部楼层
不能这样初始化
  1. int s[a][b] = {6};
复制代码

  1. #include <stdio.h>

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

  7.         int s[a][b];

  8.         for(i = 0; i < a; i++)
  9.         {
  10.                 for(j = 0; j < b; j++)
  11.                 {               
  12.                         s[i][j] = 6;
  13.                 }
  14.         }

  15.         for(i = 0; i < a; i++)
  16.         {
  17.                 for(j = 0; j < b; j++)
  18.                 {               
  19.                         printf("%8d", s[i][j]);
  20.                 }
  21.                 printf("\n");                     
  22.         }

  23.         return 0;
  24. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

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

看了你写的 就是用内嵌for循环依次赋值   然后再用一个内嵌for循环表示矩阵  为什么不可以把定义矩阵里的元素直接全部赋值?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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


这样就可以
  1. int s[9] = {6};
复制代码


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

  1. #include <stdio.h>

  2. int main(void)
  3. {
  4.         int i, j;
  5.         int s[8][9] = {6};

  6.         for(i = 0; i < 8; i++)
  7.         {
  8.                 for(j = 0; j < 9; j++)
  9.                 {               
  10.                         printf("%8d", s[i][j]);
  11.                 }
  12.                 printf("\n");                     
  13.         }

  14.         return 0;
  15. }
复制代码

输出
       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
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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


不是这个问题,使用VLA,也就是C99标准的动态数组,就是不能初始化!
比如:
  1. scanf("%d", a);
  2. int p[a] = {0};
复制代码

这也不能编译的。
只有这样:
  1. scanf("%d", a);
  2. int p[a];
  3. for(i = 0; i < a; i++)
  4. {
  5.        p[i] = 0;
  6. }
复制代码

这才能初始化……
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

你完全可以自己尝试吗


  1. int i = 8, j = 9;

  2. int s2[i] = {6};
  3. int s3[i][j] = {6};
  4. //不管是一维还是二维,只要这样初始化,就报错
复制代码


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

  2. int s2[i];
  3. int s3[i][j];
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

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

也许是吧,我不知道还有其他方法
小甲鱼最新课程 -> https://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循环来自定义了  谢了啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

  3. int main(void)
  4. {
  5.         char s1[8][9];

  6.         memset(s1, 6, 8 * 9);

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

  13.                 printf("\n");
  14.         }

  15.         return 0;
  16. }
复制代码
小甲鱼最新课程 -> https://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可以这么用.长知识了....谢了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-11 14:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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