C语言详解实现字符菱形的方法

字符菱形是指给定一个字符,用它构造一个对角线长5个字符,倾斜放置的菱形。输入输入只有一行,包含一个字符。输出该字符构成的菱形

前言

好,今天就来讲一下如何解这道题。

#include<stdio.h>
 
main()
{
    char ch = getchar();
    printf("  %c  \n %c%c%c \n%c%c%c%c%c\n %c%c%c \n  %c  \n",ch,ch,ch,ch,ch,ch,ch,ch,ch,ch,ch,ch,ch,ch);
}

好的,讲解完了再见。

等等,骗你的,上面是死方法,下面才是活方法。

1.定义stdio.h头文件

想必大家都会,我不信,有人不会。

#include<stdio.h>//定义stdio.h头文件

2.定义主函数

这也是很简单的。

int main()//主函数
{
    return 0;
}

3.定义行数-单数

制造一个字符菱形,我们先需要定义一个他的大小,也就是行数,一个完美的菱形,它的行数一定是单数。

{
    int hang;//定义行数-单数
    printf("定义行数-单数:");
    scanf("%d", &hang);//定义行数-单数
}

4.得出分割行数

通过我们定义的行数,得出上下分割部处的行数。

{
    int shang_xia = (hang / 2 + 1);//定义分割行数
}

5.定义字符

定义字符需要注意一点,我们先前定义了行数,其中缓存区有个回车,我们得先清除一下缓存区,这里我推荐用setbuf(stdin, NULL),清除缓存区,主要是方便。

{
    setbuf(stdin, NULL);//清除缓存域
	printf("定义字符:");
	char a = getchar();//定义字符
}

6.初始化打印字符数与打印空白数

刚开始我们打印的字符数,与空白数肯定要初始化一下,字符数刚开始都是1,这不用想,还有空白数的话,这是行数hang/2,因为行数是单数,所以/2后,会空出一个格子。

{
    int ci = 1,//定义打印字符数
		kon_ci = hang / 2;//定义打印空白数
}

7.循环打印菱形

首先我们打印菱形,肯定需要一个大循环,每打印一行,都需要一个回车,所以这边直接加上,行数减一防止多打一个回车影响美观。

for (int i = 0; i < hang; i++)//循环打印菱形
{
    //打印到上部分
    //打印剩下部分
	if(i<hang-1)//防止多打
	    printf("\n");//打印回车
}

8.打印上部分

打印上半部分,这时候就需要我们的分割行数,上半部分的打印是,先利用循环打印空白,再打印字符数,因为菱形每层更加饱满,所以空白数要减少一点,还打印的字符要加两个,再打印回车。按照这个原理循环,上半部分就成功了。

{
    if (i < shang_xia)//打印上部分
		{
			for (int j = 0; j < kon_ci; j++)//打印空白数
				printf(" ");打印空白
			for (int j = 0; j < ci; j++)//打印字符数
				printf("%c", a);//打印字符
			ci += 2;//每次打印字符数+2
			kon_ci--;//每次空白数-1
		}
}

9.打印剩下部分

打印剩下部分就比较简单了,上面每次空白减1,这里就加1,上面字符加2,这你就减2,跟他反着来就行了,不知道你们有没有注意到,上面有一个减一和加二,运算之后没有用到,所以我们得先减去。之后就完成了。

{
    if (i > hang / 2)//打印剩下部分
		{
			if (i == shang_xia)//打印到分割行数时多加一次没用,所以减去
			{
				ci -= 2;//每次打印字符数-2
				kon_ci++;//每次空白数+1
			}
			ci -= 2;//每次打印字符数-2
			kon_ci++;//每次空白数+1
			for (int j = 0; j < kon_ci; j++)//打印空白数
				printf(" ");//打印空白
			for (int j = 0; j < ci; j++)//打印字符数
				printf("%c", a);//打印字符
		}
}

10.完整代码

第1次做有点水,请多多海涵。

#include<stdio.h>//定义stdio.h头文件
 
int main()//主函数
{
	int hang;//定义行数-单数
	printf("定义行数-单数:");
	scanf("%d", &hang);//定义行数-单数
	int shang_xia = (hang / 2 + 1);//定义分割行数
	setbuf(stdin, NULL);//清除缓存域
	printf("定义字符:");
	char a = getchar();//定义字符
	int ci = 1,//定义打印字符数
		kon_ci = hang / 2;//定义打印空白数
	for (int i = 0; i < hang; i++)//循环打印菱形
	{
		if (i < shang_xia)//打印上部分
		{
			for (int j = 0; j < kon_ci; j++)//打印空白数
				printf(" ");打印空白
			for (int j = 0; j < ci; j++)//打印字符数
				printf("%c", a);//打印字符
			ci += 2;//每次打印字符数+2
			kon_ci--;//每次空白数-1
		}
		if (i > hang / 2)//打印剩下部分
		{
			if (i == shang_xia)//打印到分割行数时多加一次没用,所以减去
			{
				ci -= 2;//每次打印字符数-2
				kon_ci++;//每次空白数+1
			}
			ci -= 2;//每次打印字符数-2
			kon_ci++;//每次空白数+1
			for (int j = 0; j < kon_ci; j++)//打印空白数
				printf(" ");//打印空白
			for (int j = 0; j < ci; j++)//打印字符数
				printf("%c", a);//打印字符
		}
		if(i<hang-1)//防止多打
			printf("\n");//打印回车
	}
	return 0;
}

11.完整效果

录屏链接

到此这篇关于C语言详解实现字符菱形的方法的文章就介绍到这了,更多相关C语言 字符菱形内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!

本文标题为:C语言详解实现字符菱形的方法

基础教程推荐