首頁 > 軟體

C語言詳解實現字元菱形的方法

2022-04-14 19:00:39

前言

好,今天就來講一下如何解這道題。

#include<stdio.h>
 
main()
{
    char ch = getchar();
    printf("  %c  n %c%c%c n%c%c%c%c%cn %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語言 字元菱形內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com