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;
}
其实和普通做法差不多。
运行如图:
小结
莫慌莫慌 你可以对照一面给的链接的博主答案 你也许会发现我这个会好记一点(当然没有讲解做法,有点不全面,做法链接里很详细)这是我个人摸索出来的,若与其它文章有相同之处,敬请原谅。
最后你的支持点赞收藏是我前进的动力!!!!