* * * *
* * *
* *
*
然而作为初学者,可能尚未建立编程思维,所以我们先从最简单的开始。
int main(int argc, char *argv[]) {
for (int i = 0; i < 4; i++) { // 1️⃣
for (int j = 0; j < 4; j++) { // 2️⃣
printf("*");
}
printf("\n");
}
return 0;
}
这里定义了两个循环,每个循环都是 4 次,代码中我用1️⃣和2️⃣做了标注。
下面来分析一下循环流程:
i = 0j = 0j = 1j = 2j = 3i = 1j = 0j = 1j = 2j = 3i = 2j = 0j = 1j = 2j = 3i = 3j = 0j = 1j = 2j = 3int main(int argc, char *argv[]) {
for (int i = 4; i > 0; i--) { // 1️⃣
for (int j = i; j > 0; j--) { // 2️⃣
printf("*");
}
printf("\n");
}
return 0;
}
可以看到我修改了第二个循环,从for (int j = 0; j < 4; j++)修改为了for (int j = i; j > 0; j--)。
同时循环条件i的初始值定义为了4,循环条件j的初始值定义为了i。
这样修改后,外循环1️⃣每次循环都会自减 1 ,而内循环2️⃣每次循环都会根据新的i来定义循环次数。
相应的循环流程也变为了:
i = 4j = 0j = 1j = 2j = 3i = 3j = 0j = 1j = 2i = 2j = 0j = 1i = 1j = 0题目中要求我们要打印一个倒三角形的图案,那么我们是不是需要打印出空格来填补空缺呢?
没错!通过分析题目我们可以得到,第一行打印出了 0 个空格,第二行 1 个空格,第三行... ...
所以,我们只需要在上一节代码的基础上增加打印空格的代码就大功告成了。
int main(int argc, char *argv[]) {
for (int i = 4; i > 0; i--) { // 1️⃣
for (int j = 4 - i; j > 0; j--) { // 3️⃣
printf(" ");
}
for (int j = i; j > 0; j--) { // 2️⃣
printf("*");
}
printf("\n");
}
return 0;
}
是不是不理解for (int j = 4 - i; j > 0; j--),即我们新增加的3️⃣循环?
别着急,接下来我结合循环逻辑来解释。
i = 4 第一次总循环j = 4 - 4 -> j = 0 打印一次空格j = 0 打印一次”*“j = 1 打印一次”*“j = 2 打印一次”*“j = 3 打印一次”*“i = 3 第二次总循环j = 4 - 3 -> j = 1 打印一次空格j = 3 - 3 -> j = 0 打印一次空格j = 0 打印一次”*“j = 1 打印一次”*“j = 2 打印一次”*“i = 2 第三次总循环j = 4 - 2 -> j = 2 打印一次空格j = 3 - 2 -> j = 1 打印一次空格j = 2 - 2 -> j = 0 打印一次空格j = 0 打印一次”*“j = 1 打印一次”*“i = 1 第四次总循环j = 4 - 1 -> j = 3 打印一次空格j = 4 - 1 -> j = 2 打印一次空格j = 3 - 1 -> j = 1 打印一次空格j = 2 - 1 -> j = 0 打印一次空格j = 0 打印一次”*“通过最后的代码,我们可以得到如下输出:

是不是看起来和题目给出的结果还有细微差距?

最后的完善任务,就交给你聪明的脑瓜去自己完成吧!