×

C语言 C语言学习随笔 初始C语言 C语言实例小程序

C语言学习随笔:输入要生成的*星号图案行数,自动生成菱形*星号图案

一哥 一哥 发表于2022-11-05 23:16:25 浏览810 评论0

抢沙发发表评论

程序要求:

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;
}


少长咸集

群贤毕至

访客