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

目录
  • 前言
  • 1.定义stdio.h头文件
  • 2.定义主函数
  • 3.定义行数-单数
  • 4.得出分割行数
  • 5.定义字符
  • 6.初始化打印字符数与打印空白数
  • 7.循环打印菱形
  • 8.打印上部分
  • 9.打印剩下部分
  • 10.完整代码
  • 11.完整效果

前言

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

#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语言 字符菱形内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 适合初学者的C语言字符串讲解

    这一篇博客我们来了解一下字符串,看下面这个我们熟知的也是最先学习的代码 "Hello world!" 这一堆的字母就是字符串字面值,简称字符串,每一个字母都是一个字符,字符串需要用" "双引号来引起,字符需要用’ '单引号来引起,就像下面 "Hello world!"  //字符串'a'  //字符'!'  //字符 字符串也算常量,上面三条都算字面常量,之前的讲常量的时候就举过这种例子 那么字符串有什么用呢? 假设我们要把下面的字符串存起来,那

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

    目录 前言 1.定义stdio.h头文件 2.定义主函数 3.定义行数-单数 4.得出分割行数 5.定义字符 6.初始化打印字符数与打印空白数 7.循环打印菱形 8.打印上部分 9.打印剩下部分 10.完整代码 11.完整效果 前言 好,今天就来讲一下如何解这道题. #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,

  • C语言fgetc和fputc函数用法详解(以字符形式读写文件)

    在C语言中,读写文件比较灵活,既可以每次读写一个字符,也可以读写一个字符串,甚至是任意字节的数据(数据块).本节介绍以字符形式读写文件. 以字符形式读写文件时,每次可以从文件中读取一个字符,或者向文件中写入一个字符.主要使用两个函数,分别是 fgetc() 和 fputc(). 字符读取函数 fgetc fgetc 是 file get char 的缩写,意思是从指定的文件中读取一个字符.fgetc() 的用法为: int fgetc (FILE *fp); fp 为文件指针.fgetc() 读

  • C语言详解如何应用模拟字符串和内存函数

    目录 1.strlen 求字符串长度 使用案例: 1.计数法 2.不创建临时变量计数器-递归 3.指针-指针的方式 2.长度不受限制的字符串函数 1.strcpy 使用案例: 模拟实现: 2.strcat 使用案例: 模拟实现: 3.strcmp-比较字符串首字母的大小 使用案例: 模拟实现: 3.长度受限制的字符串函数  1.strncpy 使用案例: 2.strncat  使用案例: 3.strncmp 使用案例: 4.strstr-找子串  使用案例: 模拟实现: 5.strtok 用法:

  • C语言详解数据结构与算法中枚举和模拟及排序

    目录 枚举 连号区间数 递增三元组 二分 双指针 前缀和 模拟 特别数的和 错误票据 排序 快速排序 归并排序 枚举 连号区间数 来源:第四届蓝桥杯省赛C++B组,第四届蓝桥杯省赛JAVAB组 小明这些天一直在思考这样一个奇怪而有趣的问题: 在 1∼N 的某个排列中有多少个连号区间呢? 这里所说的连号区间的定义是: 如果区间 [L,R] 里的所有元素(即此排列的第 L 个到第 R 个元素)递增排序后能得到一个长度为 R−L+1 的“连续”数列,则称这个区间连号区间. 当 N 很小的时候,小明可以

  • C语言 详解字符串基础

    目录 一.字符串的概念 二.字符数组与字符串 三.字符串字面量的秘密 四.字符串的长度 五.小结 一.字符串的概念 字符串是有序字符的集合 字符串是程序中的基本元素之一 C 语言中没有字符串的概念 C 语言中通过特殊的字符数组模拟字符串 C 语言中的字符串是以 ‘\0’ 结尾的字符数组 二.字符数组与字符串 在C语言中,双引号引用的单个或多个字符是—种特殊的字面量 存储于程序的全局只读存诸区 本质为字符数组,编译器自动在结尾加上 ‘\0' 字符 下面看一段字符数组与字符串的代码: #includ

  • C语言详解Z字形变换排列的实现

    目录 方法一 方法二 题目链接:Z 字形变换 方法一 ——找规律模拟数组 题目要求构造一个从左到右的Z型矩阵. 通过分析,可以看出这个Z型矩阵的特点 Z型矩阵就是如图中的橙色,绿色这样部分组合在一起的,Z型矩阵就是由一个个这样相同周期组成的. 这里有一种情况需要特殊讨论,当矩阵只有一行时,直接返回原字符. 其余情况均可满足. 其周期的构成满足这样一个规律: 在第一列向下填写矩阵行数r个字符,接着向其右上部分共(r-2)列分别填写一个字符.Z型矩阵的周期t=r+r-2=2*r-2,每个周期会占用矩

  • C语言详解strcmp函数的分析及实现

    目录 1.函数介绍 1.1.函数接口 1.2.函数分析 1.3.函数的简单使用 1.4.函数使用结果分析 2.库函数strcmp源代码 2.1.库函数源代码 2.2.库函数分析 3.模拟实现 strcmp 函数 3.1.模拟实现 3.2.模拟实现分析 1.函数介绍 1.1.函数接口 int __cdecl strcmp (const char * src,const char * dst); 这里是库函数里面的函数定义接口.这个函数是将 src 和 dst 两个字符串进行比较,即为字符串比较函数

  • C语言详解用char实现大小写字母的转换

    目录 一.例题 二.例题 三.总结 一.例题 将多个字母进行小写转换成大写 代码: #include <stdio.h> int main (void) { char a,b,c,d; //定义一个四个字符量 printf("请输入你想要的四个小写字母:"); scanf("%c%c%c%c",&a,&b,&c,&d); //在键盘输入得到想要的四个字母 a=a-32; //通过ASCII得到字母相差数 b=b-32; c

  • C语言详解关键字sizeof与unsigned及signed的用法

    目录 最冤枉的关键字sizeof理解 被误解为函数 sizeof(int)*p 表示什么意思 signed与unsigned 关键字 有符号整数vs无符号整数 整形在内存的存储 原码 反码 补码 存储的本质 十进制二进制快速转化 为什么存储的是补码 大小端 最冤枉的关键字sizeof理解 sizeof:确定一种类型在开辟空间的时候的大小. 被误解为函数 sizeof是关键字而不是函数,可以借助编译器来确定它的身份. #include<stdio.h> int main() { int a =

  • C语言详解实现猜数字游戏步骤

    目录 前言 一.猜数字游戏是什么 二.使用步骤 总结 前言 本文详细介绍了猜数字游戏的具体实现逻辑 一.猜数字游戏是什么 1.电脑自动生成一个1-100以内的数字 2.我们输入一个我们猜的数字 3.如果我们猜的数字比电脑随机生成的数字大,那么输出(猜大了) 4.如果我们猜的数字比电脑随机生成的数字小,那么输出(猜小了) 5.如此循环往复,猜到正确的数字之后游戏结束 二.使用步骤 1.首先应该打印菜单 代码如下 void menu() { printf("*********************

随机推荐