最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言打印菱形實(shí)例詳解

 更新時(shí)間:2020年12月22日 10:46:15   作者:marwi_study  
這篇文章主要給大家介紹了關(guān)于C語言如何打印菱形的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

打印菱形這道題對于初學(xué)編程者來說簡直是噩夢,曾經(jīng)我就是栽在這上面的,后來編程編多了之后對打印菱形也覺得不再那么難了,去年在公眾號(hào)寫了一篇推送是關(guān)于打印菱形的,覺得對一些師弟師妹還是有所幫助的,今天就把這道題分享出來。

以下是我遇到的各種各樣的菱形:

普通菱形,輸入n,輸出n行n列的菱形

難度系數(shù):♥

n行空心菱形,輸入n,輸出n行空心菱形

難度系數(shù):♥♥

n行挖空菱形,輸入n,輸出n行n列空格菱形

難度系數(shù):♥♥♥

n行數(shù)字菱形,輸入n,輸入n行數(shù)字從外到內(nèi)遞增的數(shù)字菱形

難度系數(shù):♥♥♥♥

有邊框空心菱形,輸入n,輸出n行帶有邊框的空心菱形

難度系數(shù):♥♥♥♥♥

首先我們要明確這是一個(gè)隨著n的大小改變的菱形,所以我們肯定要用到循環(huán),并且循環(huán)的次數(shù)與n有關(guān)。如果題目要求是輸出n行,那我們的循環(huán)就是0(n-1)或者1n;如果要求是輸出(2n+1)行,那我們的循環(huán)就0-2n或者1~(2n+1)即可。(后面以輸出n行為例分析)

第一個(gè)是普通的實(shí)心菱形,循環(huán)n行大家都懂,問題就在列要怎樣循環(huán)。難道是看出來的嗎?不錯(cuò),我就是通過看得出來的循環(huán)次數(shù)。具體怎么看呢?

根據(jù)圖直接看有點(diǎn)難度,所以我們根據(jù)各行數(shù)據(jù)來看


我們需要將整個(gè)菱形分成四塊來考慮,從上到下空格的個(gè)數(shù)先從n/2遞減到0后遞增到n/2,而行循環(huán)因子i又從0遞增到n,故自然可聯(lián)想到用i與n/2來表示空格個(gè)數(shù)。因?yàn)榭崭駛€(gè)數(shù)是非負(fù)數(shù),所以我們引進(jìn)絕對值|n/2-i|表示空格個(gè)數(shù)。打完空格之后,我們就要正式用 ' * '打印菱形了。通過觀察我們發(fā)現(xiàn) * 號(hào)的個(gè)數(shù)為奇數(shù),并且變化規(guī)律跟空格正好相反,所以號(hào)個(gè)數(shù)即是-2*(空格個(gè)數(shù))+1+C(常數(shù))=-2*(空格個(gè)數(shù))+C(常數(shù)),通過觀察我們發(fā)現(xiàn)這個(gè)常數(shù)C正好是n/2。于是第一種菱形就可以順利完成了!

第二個(gè)是空心菱形,與實(shí)心菱形相似,可看成在實(shí)心菱形上再打了一個(gè)空格菱形。由于每行的號(hào)數(shù)不多,并且可以看到號(hào)正好位于空格菱形的外圍,所以我們可以將打印號(hào)放在打印空格菱形前后順便打印,即在打印空格菱形之前打號(hào),打印完空格菱形之后再打印號(hào)。同樣,我們將相關(guān)數(shù)據(jù)列出來然后觀察規(guī)律。號(hào)前空格與實(shí)習(xí)菱形一致,而我們發(fā)現(xiàn)n-2|n/2-i|-2的值除了首尾兩行外,其他都與空格菱形的空格個(gè)數(shù)一致,而首尾兩行是-1表示在該處不需打空格反而需要退一個(gè)格,但由于我們當(dāng)前位置為號(hào),而退格后依舊要打號(hào),所以我們可以直接判斷是否為第一行或最后一行,是則少打印一個(gè)號(hào)即可。

第三個(gè)是挖空菱形,該菱形是上述兩個(gè)的合體,我們可以看成把一個(gè)實(shí)心菱形的各個(gè)字符替換成另一種字符,再插入一個(gè)空心菱形。所以我們把該菱形分成輸出空心菱形前后號(hào)和輸出空心菱形兩部分。通過數(shù)據(jù)對比,我們不難發(fā)現(xiàn),輸出空心菱形前后號(hào)的數(shù)據(jù)與實(shí)心菱形輸出號(hào)前空格個(gè)數(shù)一致,然后就是輸出一個(gè)空心菱形,最后要記得在輸出空心菱形之后輸出空心菱形之后的號(hào),根據(jù)對稱可知,空心菱形后號(hào)個(gè)數(shù)與空心菱形前號(hào)一致。

第四個(gè)是數(shù)字菱形,該菱形的特點(diǎn)是數(shù)字從外到內(nèi)逐層遞增。我們發(fā)現(xiàn)該菱形中軸線數(shù)字的變化規(guī)律是先從1遞增到(n+1)/2,然后再遞減到1,并且每一行的數(shù)字也是從1遞增到中軸線,再遞減到1,因此我們要找到中軸線所在的位置(方便判斷循環(huán)因子是否到達(dá)中軸線)。通過列數(shù)據(jù)我們發(fā)現(xiàn)中軸線所在位置(j從0開始循環(huán))為n/2-|n/2-i|,所以在每一行中我們的數(shù)字加到“j==n/2-|n/2-i|”處時(shí)應(yīng)該轉(zhuǎn)成遞減,所以我們引進(jìn)要填充的數(shù)字k,在每一行開始時(shí)k為1,在j從0到n/2-|n/2-i|-1中,k逐次遞增,在j從n/2-|n/2-i|到n-2*|n/2-i|-1中k遞減。然后將打印星號(hào)改為打印數(shù)字即可。

第五個(gè)是邊框空心菱形。從名字可知,該菱形由邊框和空心菱形組成,我們可以將邊框和空心菱形分開來考慮。第一行和最后一行為邊框,可直接用從0到n-1打印號(hào)實(shí)現(xiàn)。左右邊框在每一行的開頭和結(jié)尾打印號(hào)即可實(shí)現(xiàn)。中間即是空心菱形的領(lǐng)域,基本上跟打印空心菱形一樣,只是要注意被邊框覆蓋的地方空格和號(hào)要省略。

將打印空格和打印號(hào)分開考慮,通過數(shù)字之間的關(guān)系特點(diǎn),運(yùn)用循環(huán)完成菱形的打印。

由于菱形是對稱的,所以絕對值是最好的數(shù)據(jù)描述工具,要巧妙地運(yùn)用絕對值,將對稱部分的循環(huán)用同一個(gè)帶有絕對值的表達(dá)式表示出來。

值得注意的是n/2為整數(shù)除,所以不會(huì)得到小數(shù),也不是四舍五入。

中軸線所在位置(j從0開始循環(huán))為n/2-|n/2-i|。

//挖空菱形
 for(i=0;i<n;i++){
  for(j=0;j<abs(n/2-i);j++)
   printf("*");
  printf("*");
  for(j=0;j<n-2*abs(n/2-i)-2;j++)
   printf(" ");
  if(j!=0)
   printf("*");
  for(j=0;j<abs(n/2-i);j++)
   printf("*");
  printf("\n");
 }
 printf("\n");
 //邊框菱形
 for(i=0;i<n;i++){
  if(i==0||i==n-1){
   for(j=0;j<n;j++)
    printf("*");
   printf("\n");
  }
  else{
   printf("*");
   for(j=0;j<abs(n/2-i)-1;j++)
    printf(" ");
   if(j!=0)
    printf("*");
   for(j=0;j<n-2*abs(n/2-i)-1;j++)
    printf(" ");
   if(j!=0)
    printf("*");
   for(j=0;j<abs(n/2-i)-1;j++)
    printf(" ");
   if(j!=0)
    printf("*");
   printf("\n");
  }
 }
 //數(shù)字菱形
 for(i=0;i<n;i++){
  int k=1;
  for(j=0;j<abs(n/2-i);j++)
   printf(" ");
  for(j=0;j<n-2*abs(n/2-i);j++){
   printf("%d",k);
   if(j<n/2-abs(n/2-i))
    k++;
   else
    k--;
  }
  printf("\n");
 }
 //實(shí)心菱形
 for(i=0;i<n;i++){
  for(j=0;j<abs(n/2-i);j++)
   printf(" ");
  for(j=0;j<n-2*abs(n/2-i);j++)
   printf("*");
  printf("\n");
 }
 printf("\n");
 //空心菱形
 for(i=0;i<n;i++){
  for(j=0;j<abs(n/2-i);j++)
   printf(" ");
  printf("*");
  for(j=0;j<n-2*abs(n/2-i)-2;j++)
   printf(" ");
  if(j!=0)
   printf("*");
  printf("\n");
 }

總結(jié)

到此這篇關(guān)于利用C語言打印菱形的文章就介紹到這了,更多相關(guān)C語言打印菱形內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 帶你了解C++中的sort函數(shù)

    帶你了解C++中的sort函數(shù)

    這篇文章主要給大家介紹了關(guān)于C++中sort函數(shù)的基礎(chǔ)入門使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧
    2021-08-08
  • 淺析VC++中的頭文件包含問題

    淺析VC++中的頭文件包含問題

    類中盡量采用指針或引用方式調(diào)用其它類,這樣就可以只聲明class xxx了。并且這也符合資源最優(yōu)利用,更利于使用多態(tài)
    2013-09-09
  • 關(guān)于Qt添加opencv和libtorch庫的問題

    關(guān)于Qt添加opencv和libtorch庫的問題

    這篇文章主要介紹了Qt添加opencv和libtorch庫的相關(guān)知識(shí),兩種方法一種是通過手動(dòng)添加,一種是通過qt creator添加,需要的朋友可以參考下
    2022-01-01
  • C語言編程PAT乙級(jí)學(xué)習(xí)筆記示例分享

    C語言編程PAT乙級(jí)學(xué)習(xí)筆記示例分享

    這篇文章主要為大家介紹了C語言編程PAT乙級(jí)學(xué)習(xí)筆記實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • OpenCV4.1.0+VisualStudio2019開發(fā)環(huán)境搭建(超級(jí)簡單)

    OpenCV4.1.0+VisualStudio2019開發(fā)環(huán)境搭建(超級(jí)簡單)

    這篇文章主要介紹了OpenCV4.1.0+VisualStudio2019開發(fā)環(huán)境搭建(超級(jí)簡單),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 一篇文章帶你了解C語言中volatile關(guān)鍵字

    一篇文章帶你了解C語言中volatile關(guān)鍵字

    這篇文章主要給大家介紹了關(guān)于C語言中volatile關(guān)鍵字,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-09-09
  • 使用QGraphicsView實(shí)現(xiàn)氣泡聊天窗口+排雷功能

    使用QGraphicsView實(shí)現(xiàn)氣泡聊天窗口+排雷功能

    這篇文章主要介紹了使用QGraphicsView實(shí)現(xiàn)氣泡聊天窗口+排雷,重點(diǎn)給大家介紹使用QWebEngineView控件內(nèi)嵌html+CSS的實(shí)現(xiàn)方式,需要的朋友可以參考下
    2022-04-04
  • C++實(shí)現(xiàn)LeetCode(114.將二叉樹展開成鏈表)

    C++實(shí)現(xiàn)LeetCode(114.將二叉樹展開成鏈表)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(114.將二叉樹展開成鏈表),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++詳解多線程中的線程同步與互斥量

    C++詳解多線程中的線程同步與互斥量

    線程間如何通信同步?一些伙伴好奇線程間的通信及同步方法,沒關(guān)系,下面小編就繼續(xù)給大家科普下線程間通信及同步的方法以及互斥量
    2022-05-05
  • Java C++ 題解leetcode1619刪除某些元素后數(shù)組均值

    Java C++ 題解leetcode1619刪除某些元素后數(shù)組均值

    這篇文章主要為大家介紹了Java C++ 題解leetcode1619刪除某些元素后數(shù)組均值示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09

最新評(píng)論

湘西| 宣汉县| 合作市| 万州区| 榕江县| 灌阳县| 长泰县| 新绛县| 尚义县| 綦江县| 修水县| 乐东| 广德县| 耿马| 临沭县| 武胜县| 广西| 牡丹江市| 巴林左旗| 监利县| 申扎县| 临澧县| 城固县| 甘南县| 宁津县| 津市市| 五华县| 黔东| 南皮县| 托克托县| 新沂市| 宿迁市| 建平县| 怀仁县| 酉阳| 罗平县| 图木舒克市| 息烽县| 田东县| 阳春市| 如东县|