程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> c語言如何輸出菱形

c語言如何輸出菱形

編輯:更多關於編程

     適有同學問起一些C語言題目,本想上網搜索了事,但網上的方法都是分為上下部分用兩個嵌套for循環輸出。我想有沒有合起來輸出的呢,這樣符合簡潔又美觀的要求呢?答案是有的。

    題目:輸出行列都相等的菱形,如5行5列:

    行列 12345

    1      *

    2     ***

    3    *****

    4     ***

    5      *

    1.  

      分析:

      當行數等於總行數的一半時,'*'是遞增的,遞增為2。

      當行數大於總行數的一半時,'*'是遞減的,遞增為2。

       

      設有一個行列為n的菱形,

      我們用變量i作為行數,以0開始,i<n。

      k作為n菱第i行要輸出的'*'個數。

       

      則i<=n的中值(用m表示,m=(n-1)/2)時,k遞增,i>m時,k遞減。

      因為k相對於m行對稱,所以:

      當i>m時,i每增加i-m時的k值就和第m-i行的k值相等,即第i-m行和第m-(i-m)相對稱。

      所以得出結果:

      當i<=m時,k=2i+1

      當i>m時,k=2(m-(i-m))+1,(m=(n-1)/2)。即k=2n-2i-1

       

      由於我們只需要輸出'*'左邊的空格即可,所以每行'*'左邊的空格的個數為:(n-每行的k)/2。

      每行循環輸出空格,再循環輸出每行的'*',再輸出回車,結束一行。

       

      這樣我們就可以開始編程了。

    2.  

      #include<stdio.h>

      int main()

      {

       int i,j,k,n;//定義四個變量:i是行,j每行*號前的空格數,k每行的*號數

       printf("please input odd n:");

       scanf("%d",&n);  //輸入奇數n

       for (i=0;i<n;i++)  //循環所有行

       {

        if(n>=2*i+1)  //判斷k值

          k=2*i+1;

        else

          k=2*n-2*i-1;

        for(j=(n-k)/2;j>0;j--)  //循環輸出空格

          printf(" ");

        for(;k>0;k--)  //循環輸出*號

          printf("*");

        printf("n");  //輸出回車結束一行

      }

       

    3.  

      本來呢題目就到止結束了,但上面的程序還不夠完美

      比如說,別人輸入n值為偶數怎麼辦?輸入非數值呢?

      我們加一點東西進去:

      #include<stdio.h>

       

      int main()

      {

      int i,j,k,n=0;  //這裡給n賦初值,即使輸入非數值,n也可有確切的值。

      do{             //增加一個大循環,可以令n可以輸入多次以觀察不同的結果。

      printf("please input odd n, 0 to exit:");//當輸入0的時候,退出大循環,結束程序。

      scanf("%d",&n);

      if (!(n%2))     //增加對輸入偶數的判斷。

      {

      printf("you input a even, please input again.n");

      continue;

      }

      for (i=0;i<n;i++)

      {

      if(n>=2*i+1)

      k=2*i+1;

      else

      k=2*n-2*i-1;

      j=(n-k)/2;

      for(;j>0;j--)

      printf(" ");

      for(;k>0;k--)

      printf("*");

      printf("n");

      }

      }while(n);

      return 0;

      }

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved