一、打印下面的图形(菱形)
我们可以先来看一个简单点的菱形:
输入描述:
输入一个char类型字符
输出描述:
输出一个用这个字符填充的对角线长5个字符,倾斜放置的菱形:
1、思路:
我们看到这个图形,可以直接打印出来,这个方法也是最简单的:
#include<stdio.h>
int main()
{char ch;scanf("%c", &ch);printf(" %c\n", ch);printf(" %c%c%c\n", ch,ch,ch);printf("%c%c%c%c%c\n",ch,ch, ch, ch, ch);printf(" %c%c%c\n", ch, ch, ch);printf(" %c\n", ch);return 0;
}
通过我们敲代码的过程可以发现,这种敲法太累了,不能节省时间。所以我们可以仔细看看这题,发现图形中的规律。
我们可以分成上下两个部分来发现规律,首先定义一个变量i,用它来表示行数,这里我是从0开始计算的,所以我们i的初值就赋值成0。第0行的时候,空格有2个,符号有1个;第1行的时候,空格有1个,符号有3个;第2行的时候,空格有0个,符号有5个,这就是上半部分的规律。
附一个图(便于理解):
我们再来看看下半部分:
我们依然可以从0开始算行数,一共有1行。
然后我们可以发现空格与行数之间的关系,以下半部分为例:
行数是0,空格可以用1乘以0+1表示,也就是(1*行数+1),这个式子对于第1行也同样适用,所以,我们的规律找到了,符号也是如此去寻找规律。
2、代码:
#include<stdio.h>
int main()
{char ch;scanf("%c", &ch);int i = 0;//上半部分for (i = 0; i < 3; i++) //3是上半部分的行数{//根据图形,我们先要打印空格for (int j = 0; j <2-i; j++)//j是我们打印多少个空格{printf(" ");}//打印符号for (int j = 0; j < 2 * i + 1; j++){printf("%c", ch);}printf("\n");}//打印下半部分for (i = 0; i < 3; i++){//空格for (int j = 0; j < 1 * i + 1; j++){printf(" ");}//字符for (int j = 0; j < 2 * (2 - i) - 1; j++){printf("%c", ch);}printf("\n");}return 0;
}
输入一个字符:#
我们可以发现这个方法比直接输出要难理解许多,而且写的也很多,但是直接输出有很大的弊端,如果像下面这个图形的话,就不能简单的直接输出了。
3、菱形(大)
像这种图形就不适合一个一个的输出,这就需要我们去找规律,也是一样,分成上下部分去找。
发现规律的原则是一样的,大家可以自己下去找找看。
4、代码:
#include<stdio.h>
int main()
{char ch;scanf("%c", &ch);int i = 0;for (i = 0; i < 7; i++){for (int j = 0; j <6-i; j++){printf(" ");}for (int j = 0; j < 2 * i + 1; j++){printf("%c", ch);}printf("\n");//换行,每打印完一行要换行}for (int i = 0; i < 7; i++){for (int j = 0; j < i + 1; j++){printf(" ");}for (int j = 0; j < 2 * (6 - i)-1; j++){printf("%c", ch);}printf("\n");}return 0;
}
二、不知道行数的情况下,自己输入行数
上面的代码写完之后我们可以发现,每个代码都需要我们自己输入行数,但如果题目没有告诉行数就让我们输出菱形,我们该如何写?其实只需要用一个字母代表上面那些代码中的数字就行了,但是我们只需要输入菱形图一半的行数就可以了。
#include<stdio.h>
int main()
{char ch;scanf("%c", &ch);int n = 0;scanf("%d", &n);for (int i = 0; i < n; i++){for (int j = 0; j < n - 1 - i; j++){printf(" ");}for (int j = 0; j < 2 * i + 1; j++){printf("%c", ch);}printf("\n");}for (int i = 0; i <n; i++){for (int j = 0; j < i+1; j++){printf(" ");}for (int j = 0; j < 2 * (n - 1 - i) - 1; j++){printf("%c", ch);}printf("\n");}return 0;
}
老样子,最后附上一张图片吧(希望大家喜欢!)