C语言打印菱形升级版(记一种会多种)(扩展:用数组打印菱形)

C语言打印菱形升级版(记一种会多种)(扩展:用数组打印菱形)

前言

打印菱形这是对很多初学者都不是很友好的,当然也有很多的博主发表过很多解决的代码方法。一开始呢我看的也是这个点击(C语言打印菱形)博主发表的文章。

然后我找了规律以及总结方法,不像上面那个博主的代码(个人觉得有点复杂,要记很多),但今天,我向你们介绍一下我的方法——记一种会多种。

内容

  • 首先,我们应该明白这类题目一般都是问你输入一个数字n,打印出n行的菱形或者是问你输入一个数字n,打印出2n+1行或2n+1行的菱形。
  • 其次找规律。
  • 最后要懂得总结,灵活变通。

方法

就先拿一道简单的题目:(我就是从这道题上找到的规律)

输入一个正整数n;打印出2n+1行的菱形图案

在这里插入图片描述

首先要注意左边和上面是没有空格或空行的。

解法如下:

#include<stdio.h>
#include<math.h>
int main()
{
    int i,j,k,n;
    scanf("%d",&n);
    for(i=-n;i<=n;i++)
    {
        for(j=0;j<abs(i);j++)
            printf(" ");
        for(k=0;k<=2*n-2*abs(i);k++)//乘2就是相当于左右两边都要,下面将遇到只要一边的
            printf("*");
        printf("\n");
    }
    return 0;
}

接下来就是重点了:要是题目换成了n行的菱形我们只需在上面的代码中加上一行即可:

#include<stdio.h>
#include<math.h>
int main()
{
    int i,j,k,n;
    scanf("%d",&n);
    n=(n-1)/2;//就是这一行
    for(i=-n;i<=n;i++)
    {
        for(j=0;j<abs(i);j++)
            printf(" ");
        for(k=0;k<=2*n-2*abs(i);k++)//乘2就是相当于左右两边都要,下面将遇到只要一边的
            printf("*");
        printf("\n");
    }
    return 0;
}

这样就变成了在这里插入图片描述
同理2n-1也是。(自己试着找规律)然后以下的题目我们只要记住上面的模板稍加修改即可,我也是以输入n打印n行举例。

n行数字菱形,输入n,输入n行数字从外到内递增的数字菱形

#include<stdio.h>
#include<math.h>
int main()
{
    int i,j,k,l,n;
    scanf("%d",&n);
    n=(n-1)/2;
    for(i=-n;i<=n;i++)
    {
        for(j=0;j<abs(i);j++)
            printf(" ");
        for(k=1;k<=n-abs(i)+1;k++)//只要一边不用乘2
            printf("%d",k);
        for(l=n-abs(i);l>=1;l--)
            printf("%d",l);
        printf("\n");
    }
    return 0;
}

结果如图,

n行空心菱形,输入n,输出n行空心菱形

#include<stdio.h>
#include<math.h>
int main()
{
    int i,j,k,n;
    scanf("%d",&n);
    n=(n-1)/2;
    for(i=-n;i<=n;i++)
    {
        for(j=0;j<abs(i);j++)
            printf(" ");
            printf("*");
        for(k=0;k<=2*n-2*abs(i)-2;k++)
            printf(" ");
        if(k!=0)printf("*");//随机应变
        printf("\n");
    }
    return 0;
}

结果如图在这里插入图片描述

n行挖空菱形,输入n,输出n行n列空格菱形

#include<stdio.h>
#include<math.h>
int main()
{
    int i,j,k,n;
    scanf("%d",&n);
    n=(n-1)/2;
    for(i=-n;i<=n;i++)
    {
        for(j=0;j<=abs(i);j++)
            printf("*");
        for(k=0;k<=2*n-2*abs(i)-2;k++)
            printf(" ");
        for(j=0;j<=abs(i);j++)
        {
            if((j==0&&i==-n)||(i==n&&j==0))continue;
            printf("*");
        }
        printf("\n");
    }
    return 0;
}

结果如图在这里插入图片描述
注意要懂得随机应变。

有边框空心菱形,输入n,输出n行带有边框的空心菱形

#include<stdio.h>
#include<math.h>
int main()
{
    int i,j,k,l,n;
    scanf("%d",&n);
    n=(n-1)/2;
    for(i=-n;i<=n;i++)
    {
        if(i==-n||i==n){
        for(k=0;k<=2*n;k++)printf("*");
        }else{
        printf("*");
        for(j=0;j<abs(i)-1;j++)printf(" ");
        if(i!=0)printf("*");
        for(k=0;k<2*n-2*abs(i)-1;k++)printf(" ");
        printf("*");
        for(j=0;j<abs(i)-1;j++)printf(" ");
        if(i!=0)printf("*");
        }
        printf("\n");
    }
    return 0;
}

结果如图在这里插入图片描述
别看十分复杂,有些部分只是复制粘贴,然后一步一步敲出来就好了。

扩展:用数组打印菱形

代码如下:

#include<iostream>
using namespace std;
#include<math.h>
int main()
{
    int i,j,k,n,l;
    char a[100][100];
    cin >> n;
    j=0;
    for(i=-n;i<=n;i++)
    {
        j++;
        for(l=0;l<abs(i);l++) a[j][l]=' ';
        for(k=abs(i);k<=2*n-abs(i);k++)//乘2就是相当于左右两边都要,下面将遇到只要一边的
            a[j][k]='*';
            a[j][k]='\0';
    }
    for(i=1;i<=2*n+1;i++)
    {
    cout << a[i];
    cout << endl;
    }
    return 0;
}
    

其实和普通做法差不多。
运行如图:
在这里插入图片描述

小结

莫慌莫慌 你可以对照一面给的链接的博主答案 你也许会发现我这个会好记一点(当然没有讲解做法,有点不全面,做法链接里很详细)这是我个人摸索出来的,若与其它文章有相同之处,敬请原谅。
最后你的支持点赞收藏是我前进的动力!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值