【C】输出任意行的菱形,你真的理解吗

【C】输出任意行的菱形,你真的理解吗_第1张图片

其实像这种菱形代码、爱心代码、水仙花数代码等本质上是循环嵌套的灵活运用、是代码与数学的结合。本质上是将代码作为工具,来解决数学问题。所以只需分析问题、想出解决方法,至于复杂的计算,交给计算机就好了

分析问题

要想输出任意行的菱形,就得写个模板,可以先定义一个变量n来表示这个任意数

#include
int main()
{
    int n;
    return 0;
}

要写模板,得先找个例子,首先我们先分析这个行数为5的菱形。

【C】输出任意行的菱形,你真的理解吗_第2张图片

这个菱形可以分为以上三个部分,只要分别打印出这三个部分的图案,那么这个菱形就成了!

解决方法

第一部分

【C】输出任意行的菱形,你真的理解吗_第3张图片

 第一部分要打印两行,也就是5/2行,即n/2行。

第一行要打印三个字符(两个空格),第二行要打印四个字符(一个空格),即 n-本行空格数

所以可以把控制行的for循环,以递减的形式写,即

#include
int main()
{
    int n = 5;
    for(int i = n/2;i>0;i--)
    return 0;
}

这样,打印第一行时,i==2,打印第二行时,i==1,正好是本行的空格数。

然后要再嵌套一个循环来打印本行的字符(空格 和 *)

#include
int main()
{
    int n = 5;
    for(int i = n/2;i>0;i--){
        for(int j = 0;j < n-i;j++)
    }
    return 0;
}

如何判断时打印空格还是星号*?

第一行要打印两个空格,第二行要打印一个空格,正好等于i,所以,j

正好用三目运算符来实现,代码如下

#include
int main()
{
    int n = 5;
    for(int i = n/2;i>0;i--){
        for(int j = 0;j < n-i;j++)
            printf(j < i?" ":"*");
        printf("\n");//每行打印完后,换行
    }
    return 0;
}

运行结果,成功!!!

【C】输出任意行的菱形,你真的理解吗_第4张图片

万事开头难,写完了第一部分,剩下的两个部分就简单多了

第二部分

【C】输出任意行的菱形,你真的理解吗_第5张图片

代码如下

#include
int main()
{
    int n = 5;
    //第一部分
    for(int i = n/2;i>0;i--){
        for(int j = 0;j < n-i;j++)
            printf(j < i?" ":"*");
        printf("\n");//每行打印完后,换行
    }
    //第二部分
    for(int i = 0;i

 第三部分

第三部分的思路和第一部分相同,只是打印出一个倒三角

【C】输出任意行的菱形,你真的理解吗_第6张图片

 先写一个for循环控制行(i要代表空格数,所以循环要从1开始)

for(int i = 1;i<=n/2;i++)

然后再嵌套一个for循环,打印字符(空格 和 星号*),代码和第一部分是一样的

//第三部分
for(int i = 1;i<=n/2;i++){
    for(int j = 0;j < n-i;j++)
            printf(j < i?" ":"*");
        printf("\n");//每行打印完后,换行
}

至此,我们的模板就完成了(n=5)

#include
int main()
{
    int n = 5;
    //第一部分
    for (int i = n / 2; i > 0; i--) {
        for (int j = 0; j < n - i; j++)
            printf(j < i ? " " : "*");
        printf("\n");//每行打印完后,换行
    }
    //第二部分
    for (int i = 0; i < n; i++)
        printf("*");
    printf("\n");
    //第三部分
    for (int i = 1; i <= n / 2; i++) {
        for (int j = 0; j < n - i; j++)
            printf(j < i ? " " : "*");
        printf("\n");//每行打印完后,换行
    }
    return 0;
}

下面我们只需加一点小小的修改,加上一个scanf函数(vs编译器中,用scanf_s),来接受用户输入的行数n。

完整代码

#include
int main()
{
    int n = 5;
    printf("请输入菱形行高:");
    scanf_s("%d", &n);
    //第一部分
    for (int i = n / 2; i > 0; i--) {
        for (int j = 0; j < n - i; j++)
            printf(j < i ? " " : "*");
        printf("\n");//每行打印完后,换行
    }
    //第二部分
    for (int i = 0; i < n; i++)
        printf("*");
    printf("\n");
    //第三部分
    for (int i = 1; i <= n / 2; i++) {
        for (int j = 0; j < n - i; j++)
            printf(j < i ? " " : "*");
        printf("\n");//每行打印完后,换行
    }
    return 0;
}

运行结果

【C】输出任意行的菱形,你真的理解吗_第7张图片

你可能感兴趣的:(c语言,开发语言)