c语言打印菱形

 如果打印一个上半部分7行的效果如图:

 上半部分:

第一行  6个空格   

第二行  5个空格   

..........

第七行  0个空格   

所以 空格依次减1,可以写成 空格数=n-i

打印星号就非常简单了,每行1 3 5 7 9 ...奇数递增

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
    int n;
    scanf("%d", &n);
        // 上半部分
    for (int i = 1; i <= n; i++) {
        // 打印空格
        for (int j = 0; j < n - i; j++) {
            printf(" ");
        }
        // 打印*
        for (int j = 0; j < 2 * i - 1; j++) {
              printf("*");
          }
        // 换行
        printf("\n");
    }

   //下半部分在下面
   return 0;
}

下半部分 :

 还是拿上半部分七行的菱形举例,那下半部分只有6行

 

每行星号依次为  11   9   7   5   3   1

11=2*6-1                 9=2*6-3              7=2*6-5           .......

如果下半部分写循环的话,定义一个变量i

可以看出i=1      11=2*(7-1)-i 

               i=2      9=2*(7-1)-(2*i)+1

               i=3       7=2*(7-1)-(2*i)+1

               i=4        5=2*(7-1)-(2*i)+1

于是可以把第一个改成  i=1      11=2*(7-1)-(2*i)+1 

所以规律是  星号数量 =   2*(n-1-i)+1

代码实现:

// 下半部分
    for (int i = 1; i <= n - 1; i++) {
        // 打印空格
        for (int j = 0; j < i; j++) {
            printf(" ");
        }
        // 打印*
        for (int j = 0; j < 2*(n-1-i)+1; j++) {
            printf("*");
        }
        // 换行
        printf("\n");
    }

补充

其实还有一个办法:

11很容易想到2*6-1                       第一行7-1=6

9很容易想到2*5-1                         第二行7-2=5

7很容易想到2*4-1                         第三行7-3=4

刚好行数变量 每次增加1

所以  星号数量 =   2*(n-i)-1

// 下半部分
    for (int i = 1; i <= n - 1; i++) {
        // 打印空格
        for (int j = 0; j < i; j++) {
            printf(" ");
        }
        // 打印*
        for (int j = 0; j < 2*(n-i)-1; j++) {
            printf("*");
        }
        // 换行
        printf("\n");
    }

完整代码演示:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值