本题要求编写程序,打印一个高度为n的、由“*”组成的正菱形图案。
输入格式:
输入在一行中给出一个正的奇数n。
输出格式:
输出由n行星号“*”组成的菱形,如样例所示。每个星号后跟一个空格。
输入样例:
7
结尾无空行
输出样例:
*
* * *
* * * * *
* * * * * * *
* * * * *
* * *
*
结尾无空行
思路:
先打印第一行到中间那一行
再打印中间的后面那行到最后一行
用行数来控制打印的空格数和星星的数量
这里要注意,i是用来控制行数的,j是用来控制空格的,k是用来控制星星的
找到i和j,k的关系。
由于我比较喜欢让for(i=0;i<n;i++)这样的循环方式,可以通过n直接知道循环了多少次,
但是在这题上,更直观的方法是用for(i=1;i<=n;i++)这样的循环,有助于建立i和j,k的关系
贴一个 找i和j,k关系的图
#include<stdio.h>
int main()
{
int n = 0, i = 0, j = 0,k=0;
scanf("%d", &n);
for (i = 1; i <= (n + 1) / 2; i++)
{
if (i != 1) // 我的思路是先换行再打印,第一行不用换行
{
printf("\n");
}
for (j = 0; j < n + 1 - i*2 ; j++)
{
printf(" ");
}
for (k = 0; k < i*2-1; k++)
{
printf("* ");
}
}
for (i = 1; i <= (n - 1) / 2; i++)
{
printf("\n"); // 这里直接换行就行了,因为光标还在上一行的最后
for (j = 0; j < i * 2; j++)
{
printf(" ");
}
for (k = 0; k < n - i * 2; k++)
{
printf("* ");
}
}
return 0;
}