首页 新闻 会员 周边

C语言用二维数组代码打印不出菱形

0
悬赏园豆:5 [已解决问题] 解决于 2020-05-01 14:02

我想打印这样的图形

首先建立了两个二维字符数组:
dia1[5][10]用来表示菱形1-5行;
dia2[4][10]用来表示菱形6-9行。
第一个和第二个大循环分别给菱形的上半部分元素和下半部分元素赋值,
在给菱形上半部分赋值的时候,我按行循环赋值,我的思路是这样子的:
当列标在(3-i)到(5+i)之间时,就是要打印星号的地方,其他的就打印空格,
但是我调试的时候发现它总是判断列标在(3-i)到(5+i)之间,因此只打印*,不打印空格,
就是这点我想不通。

include "stdio.h"

main ()
{
char dia1[5][10] = {0}, dia2[4][10] = {0};
int i, j, min, max;
for (i = 0; i < 5; i++)
for (j = 0; j < 9; j++)
{
min = 3 - i;
max = 5 + i;
if (min < j < max)
dia1[i][j] = '';
else
dia1[i][j] = ' ';
}
for (i = 0; i < 4; i++)
for (j = 0; j < 9; j++)
{
if (i < j < 8 - i) dia2[2][j] = '
';
else dia2[i][j] = ' ';
}
for (i = 0; i < 5; i++)
{
puts (dia1[i]);
printf ("\n");
}
for (i = 0; i < 4; i++)
{
puts (dia2[i]);
printf ("\n");
}
}

问题补充:

只看第一个循环就行

诸葛思颖的主页 诸葛思颖 | 初学一级 | 园豆:172
提问于:2020-05-01 11:43
< >
分享
最佳答案
0

if 后面的表达式不能那样写,得写成 if (j >= min && j <= max)

诸葛思颖 | 初学一级 |园豆:172 | 2020-05-01 14:01

我看了你打印菱形的思路,我觉得还有改进的地方,你说的思路是先用for循环把空格和*存储到数组里面,
那是不是可以不存储,可以把判断是否存储变成判断是否输出(即打印)?

以下是我根据你的代码改出来的

 1 #include "stdio.h"
 2 int main ()
 3 {
 4     int i,j,min,max;
 5     for(i=0;i<5;i++)
 6     {
 7         for(j=0;j<9;j++)
 8         {
 9             min=3-i;
10             max=5+i;
11             if(min<j&&j<max)   printf("*");
12             else    printf(" ");
13         }
14         printf("\n");
15     }
16     for(i=0;i<4;i++)
17     {
18         for(j=0;j<9;j++)
19         {
20             if(i<j&&j<8-i)    printf("*");
21             else    printf(" ");
22         }
23         printf("\n");
24     }
25     return 0;
26 }

 

Conan-jine | 园豆:1272 (小虾三级) | 2020-05-01 14:14

@Conan-jine: 对是的,我改进了一下:

诸葛思颖 | 园豆:172 (初学一级) | 2020-05-01 14:17

@Conan-jine:谢谢你,不过我做的这道题要求二维数组实现。
很感谢你能回答。

诸葛思颖 | 园豆:172 (初学一级) | 2020-05-01 14:19

@诸葛思颖: 嘿嘿,写代码嘛,就要灵活多变,题目的要求只是要你掌握二维数组的使用,并不妨碍你使用不同的方法,酱紫吧,假如这道题是输入一个数字输出一个对应的菱形,你要怎么做呢?

我先给出我的代码,这是我早些时候写的,应该还有其他比较好的方法,你可以参考参考

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int n,x,y,z;
 5     printf("请输入一个数以确定菱形的高度,高度由数字的大小来确定:");
 6     scanf("%d",&n);
 7     for(x=1;x<=n;x++)
 8     {
 9         for(z=n-x;z>0;z--)
10             printf(" ");
11         for(y=x*2-1;y>0;y--)
12             printf("*");
13         printf("\n");
14     }
15     for(x=n-1;x>0;x--)
16     {
17         for(z=n;z>x;z--)
18             printf(" ");
19         for(y=x*2-1;y>0;y--)
20             printf("*");
21         printf("\n");
22     }
23     return 0;
24 }
Conan-jine | 园豆:1272 (小虾三级) | 2020-05-01 14:26

@Conan-jine: 嗯嗯😊我试试

诸葛思颖 | 园豆:172 (初学一级) | 2020-05-02 07:52
其他回答(1)
1

1.可能是复制粘贴的问题,我这里看你的代码出了一些错误,你挑着看(我自己复制过来缩进了一下)

(1)这里的'*'没有出现

(2)

这里出现了两个问题,

1) C语言中不能a<b<c,而应该写成a<b&&b<c
2)dia2[i][j]你写成了dia2[2][j];

Conan-jine | 园豆:1272 (小虾三级) | 2020-05-01 14:05

是的,万分感谢

支持(0) 反对(0) 诸葛思颖 | 园豆:172 (初学一级) | 2020-05-01 14:20

@诸葛思颖: 看你用的好像是VC++6.0,我推荐你学习初期使用Dev C++,不是说VC++6.0不好,而是Dev用起来更顺一些

支持(0) 反对(0) Conan-jine | 园豆:1272 (小虾三级) | 2020-05-01 14:29

@Conan-jine: 嗯嗯,我下载过一直没有,我试试😊

支持(0) 反对(0) 诸葛思颖 | 园豆:172 (初学一级) | 2020-05-02 07:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册