c语言打印 符号形状的分析流程

题目:打印一下图形
*






*   

分析:
1,图形补全为 i = 7 * j = 7 的图案如下








for(int i = 0; i < 7; i++){
for(int j = 0; j < 7; j++){
printf("*");
}
printf("\n");
}

2,原题且套循环 i 和 j 的规律:
i j
0 0
1 2
2 4
3 6
4 4
5 2
6 1

3,可见当 i = 3 时,j = 6 到达最大值,那么可分解为两个单向的合并;i 和 j 的关系为 j = i * 2,修改原式:
for(int i = 0; i < 4; i++){
for(int j = 0; j <= i 2; j++){
printf("
");
}
printf("\n");
}




4,空白字符 i 和 j 的关系:
i j
0 2
1 1
2 0
j = 2 - i
###*
##***
#*****


int i,j ;
for(i = 0; i < 4; i++){
for(j = 0; j <= 2 - i; j++){
printf(" “);
}
for(j = 0; j <= i * 2; j++){
printf(”");
}
printf("\n");
}
5,图形第二段, 星号 i j 关系,空白字符和 i j 的关系,最终结果
#*****
##
**
###*
i j i j
0 4 0 0
1 2 1 1
2 0 2 2
j = 4-2*i j = i

int i,j;
for(i = 0; i < 4; i++){
for(j = 0; j <= 2 - i; j++){
printf(" “);
}
for(j = 0; j <= i * 2; j++){
printf(”");
}
printf("\n");
}
for(i = 0; i < 3; i++){
for(j = 0; j <= i; j++){
printf(" “);
}
for(j = 0; j <= (4 - 2 * i); j++){
printf(”
");
}
printf("\n");
}

总结:循环中 i 控制行数(换行输出\n),j 控制列(输出内容)
升级题目:生成用户自定义的正菱形
分析: 菱形至少需要三行三列,如果用户输入如下:
*


则:i=0 i >= 2, j=0 j <= 2, i = j;

int num, i, j;
while(1){
printf(“请输入不小于3的奇数做为正菱形初始值”);
scanf("%d", &num);
if(num >= 3){
break;
}

}
for(i = 0; i < (num + 1) / 2; i++){
for(j = 0; j <= ((num + 1) / 2) - i; j++){
printf(" “);
}
for(j = 0; j <= i * ((num + 1) / 2); j++){
printf(”");
}
printf("\n");
}
for(i = 0; i < (num - 1) / 2; i++){
for(j = 0; j <= i; j++){
printf(" “);
}
for(j = 0; j <= num -3; j++){
printf(”
");
}
printf("\n");
}

#####*
***





11==>8 9==>6 7==>4 5==>2 3==>0 j = num-3 ===> 7-3 ==> 4 - 2 * 0
0 8
1 4
2 2
3 0
#***
##*
#*
0 2
1 0

for(i = 0; i < (num + 1) / 2; i++){
for(j = 0; j <= 2i; j++){
printf("
");
}
printf("\n");
}

3
*


0 0
1 2

0 0

5
*



0 0
1 2
2 4

0 1
1 0

7
*




0 0
1 2
2 4
3 6
4 8

0 2
1 1
2 0

9
*





0 3
1 2
2 1
3 0

3
#*
0 0

5
#***
##*
0 2 2-2*i
1 0

7
#*****
##***
###*
0 4 4 - 2 * i
1 2
2 0

9
#*******
##*****
###***
####*
0 6 j = 6 - 2 * i ((num-1)/2-1)*2
1 4
2 2
3 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值