程序要求:
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; }