程序要求:
1、输入数字n如为偶数,则提示“输入错误,请重新输入!”
2、例如:输入13,生成以下*星号菱形图案
*
***
*****
*******
*********
***********
*************
***********
*********
*******
*****
***
*
解析思路:
程序要求输入一个菱形的*号图案,且要求输入n为偶数时,提示:“输入错误,请重新输入”。先创建一个用于判断数字是“奇数”还是“偶数”的while循环。然后将菱形图案的行数使用两个外层for,将图案的行数分成两部分来控制。每个外层fot循环再嵌套两个for循环分别来控制每行*号前”空格“的数量和”*“号的数量。
1、创建一个while循环来判断输入的是“奇数”还是“偶数”:
while(1)
{
if (0 == n % 2)
{
printf("输入错误,请重新输入!\n");
}
else
{
break; //输入的数字为奇数,退出判断循环。开始输出图案
}
}2、第一个嵌套循环生成”输入数字n的一半+1”的图案:
for (i = 1; i <= (n / 2 + 1); i++)
{
for (j = 1; j <= (n / 2 + 1) - i; j++) //*星号前空格数量控制循环
{
printf(" "); //输出*星号前空格
}
for (k = 1; k <= (i * 2 - 1); k++) //*星号数量控制循环
{
printf("*"); //输出*星号
}
printf("\n"); //每行“空格”和“*”号生成后换行
}3、第二个嵌套循环生成“输入数字n另一半”的图案:
for (i = (n / 2); i > 0; i--)
{
for (j = 1; j <= ((n / 2 + 1) - i); j++)
{
printf(" ");
}
for (k = 1; k <= (i * 2 - 1); k++)
{
printf("*");
}
if (1 == i) //最后一行图案生成后,为避免图案下面多生成一个换行。跳过最后一次的“换行符”
{
break;
}
printf("\n");
}完整代码:
//头文件
#include <stdio.h>
//主函数
int main()
{
int i = 0, j = 0, k = 0, n = 0;
while (1) //输入数是“奇数”/“偶数”判断部分
{
printf("请输入要生成的*号图案行数(请输入奇数):>");
scanf("%d", &n);
if (0 == n % 2)
{
printf("输入错误,请重新输入!\n");
}
else
{
break; //为奇数,则退出判断循环
}
}
for (i = 1; i <= (n / 2 + 1); i++) //第一个嵌套循环
{
for (j = 1; j <= ((n / 2 + 1) - i); j++)
{
printf(" ");
}
for (k = 1; k <= (i * 2 - 1); k++)
{
printf("*");
}
printf("\n");
}
for (i = (n / 2); i > 0; i--) //第二个嵌套循环
{
for (j = 1; j <= ((n / 2 + 1) - i); j++)
{
printf(" ");
}
for (k = 1; k <= (i * 2 - 1); k++)
{
printf("*");
}
if (1 == i)
{
break;
}
printf("\n");
}
return 0;
}