• C语言| 输出菱形*


    C语言| 输出*三角形-CSDN博客

    输出菱形

    【分析思路】

    学会输出*的三角形之后输出菱形就很简单了。我们分析一下,菱形是由两个对称的三角形组成的,也因为是对称的,所以输出的菱形的行数肯定是一个奇数。

    1 我们在编程的时候,要把菱形分成两个三角形,分别输出一个是正着的三角形,一个是倒着的三角形。
    2 又因为行数是奇数,所以肯定一个三角形的行数要比另一个三角形的行数多一行。我们把最中间的对称行放在上面的三角形里面。
    3 因为是将菱形分成两个三角形,所以下面三角形行数重新从1开始。

    等差数列{an}的通项公式为:an=a1+(n-1)d。a1为第一项, d为公差

    下面三角形的规律如下:
    ① 从每行输出的空格个数来看,第i行首先要输出i个空格
    ② 从每行输出的星号个数来看,虽然下面的三角形是倒着的,但它也是满足等差数列的,公差为-2。
    问题是这个等差数列的首项是多少。首项星号的个数实际是对称行前一行星号的个数。

    上面的三角形星号个数满足:
    j=a1+(n-1)*d=1+(i-1)*2=2×i-1

    (j代表第 j 行的*,n代表总行数,i代表第 i 行)

    其对称行前一行i的值为:(此时 i为左边的空格数量)

    总行数为n,上三角的行数=(n+1)/2行,所以对称前一行减1就行i=(n+1)/2-1

    代入得对称前一行的*为 j=n -2

    所以下面三角形等差数列的首项等于n -2。

    下面三角形不包含对称行,行数从1到i。
    所以下面三角形第i行星号个数为:an=a1+(n -1) d=(n -2)+(i -1)(-2)=n-2i。

    【程序代码】

    #include <stdio.h>

    int main(void)
    {
        int n = 0; //存储行数

        int i; //行循环变量
        int j; //空格和星号循环变量

        printf("请输入行数:");
        scanf("%d", &n);

        //上面的三角形,包含对称行,所以是(n+1)/2行
        for(i=1; i<=(n+1)/2; i++)
        {
            //打印空格
            for(j=0; j<(n+1)/2-i; j++)
            {
                printf(" ");
            }

            //打印星号
            for(j=0; j<2*i-1; j++)
            {
                printf("*");
            }

            printf("\n");
        }

        //下面的三角形,不包含对称行,所以是n/2行
        for(i=1; i<=n/2; i++)
        {
            //打印空格
            for(j=0; j         {
                printf(" ");
            }

            //打印星号
            for(j=0; j         {
                printf("*");
            }

            printf("\n");
        }

        return 0;
    }

  • 相关阅读:
    小程序存在优惠卷遍历,但是歪了
    253 - Cube painting (UVA)
    【单链表,循环链表和双向链表的时间效率比较,顺序表和链表的比较,有序表的合并------用顺序表实现,用链表实现】
    Java中xml转javaBean
    企业微信开发文档
    YoloR:又一个YOLO系列新框架!速度远远高于Yolov4(代码已开源)
    记录WPF的技巧(二)16-30
    MySQL如何恢复不小心误删的数据记录(binlog)
    MFC ExtTextOut函数学习
    力扣108. 将有序数组转换为二叉搜索树
  • 原文地址:https://blog.csdn.net/qq_40555264/article/details/139356548