《C語言及程序設計》實踐參考——輸出小星星(之3)

返回:賀老師課程教學連接  項目要求html


要輸出的星號圖是:算法


  
將一個圖,看做爲6行,完成了第一級的分解,提到的算法框架爲:
框架

i=1;  
While(i<=6)  //須要輸出6行  
{  
  輸出第i行;  
  換行;  
  ++i;  
}

對於「輸出第i行」的任務,能夠進行細化:
先輸出若干空格(多少個空格?第1行0個,第2行1個,第3行2……第6行5個);  
再輸出若干個星號(多少星號?第一行11個,第2行9個……第6行1個)
其實把空格數和星號數和表示行數的變量 i 掛起鉤來,上面的「若干個」能夠用 i 表示出來,簡單地作些推算能夠寫出式子。
對於「輸出第i行」的任務,能夠進行細化:
先輸出 i-1 個空格;   
再輸出 2*(6-i)+1 個星號;
因而,算法就是:
i=1;  
While(i<=6)  //須要輸出6行  
{  
  //輸出第i行  
  先輸出 i-1 個空格;   
  再輸出 2*(6-i)+1 個星號;   
  換行;  
  ++i;  
}
將輸出若干個空格/星號等寫成代碼,獲得了下面的代碼
//參考解答一  
#include <stdio.h>  
int main( )  
{  
    int i,j;  
    i=1;  
    while(i<=6)  //須要輸出6行  
    {  
        //輸出第i行  
        for(j=1; j<=i-1; ++j)  
            printf(" ");;  
        for(j=1; j<=2*(6-i)+1; ++j)  
            printf("*");;  
        printf("\n");  
        ++i;  
    }  
    return 0;  
}

下面給出程序的另外一種寫法,其中引入了兩個變化:(1)三角的行數能夠由變量n控制;(2)最外層控制輸出n行的循環改成了for循環,實際上,內層的循環用while也無不可。
//參考解答二  
#include <stdio.h>  
int main( )  
{  
    int i,j,n=15; //用n來靈活對待可能的行數  
    for(i=1;i<=n;++i)  //將上一種解法中的while循環改造爲for循環  
    {  
        //輸出第i行  
        for(j=1; j<=i-1; ++j) //內層的這個for循環能夠寫做while循環  
            printf(" ");;  
        for(j=1; j<=2*(n-i)+1; ++j) //這兒也能夠用其餘循環,可嘗試改造  
            printf("*");;  
        printf("\n");  
    }  
    return 0;  
}

下面的程序採用的是讓控制循環的變量由大變小(與三角上大下小呼應)的思路,相應地,只須要改變控制空格數和星號數的式子便可
//參考解答三  
#include <stdio.h>  
int main( )  
{  
    int i,j,n=6;   
    for(i=n;i>=1;--i) //i由大變小  
    {  
        //輸出第i行  
        for(j=1; j<=n-i; ++j) //關鍵:輸出的是n-i個空格  
            printf(" ");;  
        for(j=1; j<=2*i-1; ++j) //關鍵:輸出的是2*i-1個星號  
            printf("*");;  
        printf("\n");  
    }  
    return 0;  
}
其餘的星號圖,思路相似。
相關文章
相關標籤/搜索