C語言詳解實現(xiàn)字符菱形的方法
前言
好,今天就來講一下如何解這道題。
#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.定義主函數(shù)
這也是很簡單的。
int main()//主函數(shù) { return 0; }
3.定義行數(shù)-單數(shù)
制造一個字符菱形,我們先需要定義一個他的大小,也就是行數(shù),一個完美的菱形,它的行數(shù)一定是單數(shù)。
{ int hang;//定義行數(shù)-單數(shù) printf("定義行數(shù)-單數(shù):"); scanf("%d", &hang);//定義行數(shù)-單數(shù) }
4.得出分割行數(shù)
通過我們定義的行數(shù),得出上下分割部處的行數(shù)。
{ int shang_xia = (hang / 2 + 1);//定義分割行數(shù) }
5.定義字符
定義字符需要注意一點,我們先前定義了行數(shù),其中緩存區(qū)有個回車,我們得先清除一下緩存區(qū),這里我推薦用setbuf(stdin, NULL),清除緩存區(qū),主要是方便。
{ setbuf(stdin, NULL);//清除緩存域 printf("定義字符:"); char a = getchar();//定義字符 }
6.初始化打印字符數(shù)與打印空白數(shù)
剛開始我們打印的字符數(shù),與空白數(shù)肯定要初始化一下,字符數(shù)剛開始都是1,這不用想,還有空白數(shù)的話,這是行數(shù)hang/2,因為行數(shù)是單數(shù),所以/2后,會空出一個格子。
{ int ci = 1,//定義打印字符數(shù) kon_ci = hang / 2;//定義打印空白數(shù) }
7.循環(huán)打印菱形
首先我們打印菱形,肯定需要一個大循環(huán),每打印一行,都需要一個回車,所以這邊直接加上,行數(shù)減一防止多打一個回車影響美觀。
for (int i = 0; i < hang; i++)//循環(huán)打印菱形 { //打印到上部分 //打印剩下部分 if(i<hang-1)//防止多打 printf("\n");//打印回車 }
8.打印上部分
打印上半部分,這時候就需要我們的分割行數(shù),上半部分的打印是,先利用循環(huán)打印空白,再打印字符數(shù),因為菱形每層更加飽滿,所以空白數(shù)要減少一點,還打印的字符要加兩個,再打印回車。按照這個原理循環(huán),上半部分就成功了。
{ if (i < shang_xia)//打印上部分 { for (int j = 0; j < kon_ci; j++)//打印空白數(shù) printf(" ");打印空白 for (int j = 0; j < ci; j++)//打印字符數(shù) printf("%c", a);//打印字符 ci += 2;//每次打印字符數(shù)+2 kon_ci--;//每次空白數(shù)-1 } }
9.打印剩下部分
打印剩下部分就比較簡單了,上面每次空白減1,這里就加1,上面字符加2,這你就減2,跟他反著來就行了,不知道你們有沒有注意到,上面有一個減一和加二,運算之后沒有用到,所以我們得先減去。之后就完成了。
{ if (i > hang / 2)//打印剩下部分 { if (i == shang_xia)//打印到分割行數(shù)時多加一次沒用,所以減去 { ci -= 2;//每次打印字符數(shù)-2 kon_ci++;//每次空白數(shù)+1 } ci -= 2;//每次打印字符數(shù)-2 kon_ci++;//每次空白數(shù)+1 for (int j = 0; j < kon_ci; j++)//打印空白數(shù) printf(" ");//打印空白 for (int j = 0; j < ci; j++)//打印字符數(shù) printf("%c", a);//打印字符 } }
10.完整代碼
第1次做有點水,請多多海涵。
#include<stdio.h>//定義stdio.h頭文件 int main()//主函數(shù) { int hang;//定義行數(shù)-單數(shù) printf("定義行數(shù)-單數(shù):"); scanf("%d", &hang);//定義行數(shù)-單數(shù) int shang_xia = (hang / 2 + 1);//定義分割行數(shù) setbuf(stdin, NULL);//清除緩存域 printf("定義字符:"); char a = getchar();//定義字符 int ci = 1,//定義打印字符數(shù) kon_ci = hang / 2;//定義打印空白數(shù) for (int i = 0; i < hang; i++)//循環(huán)打印菱形 { if (i < shang_xia)//打印上部分 { for (int j = 0; j < kon_ci; j++)//打印空白數(shù) printf(" ");打印空白 for (int j = 0; j < ci; j++)//打印字符數(shù) printf("%c", a);//打印字符 ci += 2;//每次打印字符數(shù)+2 kon_ci--;//每次空白數(shù)-1 } if (i > hang / 2)//打印剩下部分 { if (i == shang_xia)//打印到分割行數(shù)時多加一次沒用,所以減去 { ci -= 2;//每次打印字符數(shù)-2 kon_ci++;//每次空白數(shù)+1 } ci -= 2;//每次打印字符數(shù)-2 kon_ci++;//每次空白數(shù)+1 for (int j = 0; j < kon_ci; j++)//打印空白數(shù) printf(" ");//打印空白 for (int j = 0; j < ci; j++)//打印字符數(shù) printf("%c", a);//打印字符 } if(i<hang-1)//防止多打 printf("\n");//打印回車 } return 0; }
11.完整效果
到此這篇關(guān)于C語言詳解實現(xiàn)字符菱形的方法的文章就介紹到這了,更多相關(guān)C語言 字符菱形內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++面試題之?dāng)?shù)a、b的值互換(不使用中間變量)
這篇文章主要介紹了不使用中間變量,C++實現(xiàn)數(shù)a、b的值互相轉(zhuǎn)換操作,感興趣的小伙伴們可以參考一下2016-07-07

C語言實現(xiàn)大數(shù)據(jù)文件的內(nèi)存映射機制

C++實現(xiàn)LeetCode(88.混合插入有序數(shù)組)