c語言如何輸出菱形

來源:互聯網
上載者:User

 適有同學問起一些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;

    }

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.