1.描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的X形图案。
输入描述:
多组输入,一个整数(2~20),表示输出的行数,也表示组成“X”的反斜线和正斜线的长度。
输出描述:
针对每行输入,输出用“*
”组成的X形图案。
示例图:
解题思路
我们可以先通过数组的方式来理解一下这个图。
我们可以把这个*
分成两条对角线。
正对角线的数组下标:[0][0]
,[1][1]
,[2][2]
,[3][3]
,[4][4]
。这些下标都相等。
然后我们看一下零一条对角线的下标:[0][4]
,[1][3]
,[2][2]
,[3][1]
,[4][0]
我们发现,这组对角线的下标之和是4。这个4就是数组元素容量减去1。
发现规律后,我们就可以开始写代码了。
具体代码
#include <stdio.h>
int main()
{
int n = 0;
while(scanf("%d", &n) != EOF)//便于程序结束一次后继续输入
{
for(int i=0; i<n; i++) //外循环为行
{
for(int j=0; j<n; j++) //内循环为列
{
if(i == j || i+j == n-1)
//最关键的地方,正斜线为[i][i]处是*, 反斜杠为[i][n-1-j]处是*,一行打印1个或2个*
printf("*");
else
printf(" ");
}
printf("\n"); //打印完一行,换行
}
}
return 0;
}
代码讲解
- 先定义未知数n,方便形成不同行的X型图案
- 进入while循环,
scanf("%d", &n) != EOF
是为了便于程序结束一次后继续输入 - 两个for循环嵌套,外循环为行,内循环为列
if(i == j || i+j == n-1)
,正斜线为[i][i]
处是*
, 反斜杠为[i][n-1-j]
处是*
- 除了这些打印
*
号的地方,其他地方打印空格。 - 一行结束后打印
\n
换行,进入下一行。
为[i][n-1-j]
处是*
5. 除了这些打印*
号的地方,其他地方打印空格。
6. 一行结束后打印\n
换行,进入下一行。