题目:打印一下图形
*
*
分析:
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