C語言第九篇:各種輸出小星星(迴圈控制)

qq_30866297發表於2016-03-25


一、幾個疑惑


1、疑惑(一)——for()語句中使用”++i“和”i++“對程式執行有影響嗎?

  • (1)理論上,++i少一次物件構建,故效率比i++高一點;實際上經過編譯器優化後就都一樣了。因此,在實際for()語句使用中,二者沒有區別
  • (2)作為表示式時,i++的取值是i,而++i的取值是i+1,如——int j=++i;和int j=i++; 二者是有區別的


2、疑惑(二)——for()語句中”++i“與”迴圈體“誰先執行誰後執行?


原始碼

/*
*Copyright (c)2016,劉兵馬俑
*All rights reserved.
*檔名稱:main.c
*作    者:劉兵馬俑
*完成日期:2016/03/25
*版 本 號:v1.0
*問題描述:for()語句中”++i“與”迴圈體“誰先執行誰後執行?
*程式輸出:
*/
#include <stdio.h>

int main()
{
    int i=0;
    for(i=1;i<=10;++i)
    {
        printf("*");
    }
    printf("\n");
    return 0;
}



單步執行驗證


通過單步執行,我可以十分確定地相信,程式是按照如下的流程圖順序執行的。


流程圖



結論:


程式首次執行到for()語句時,先判斷當前i的值是否符合迴圈的執行條件,如果符合,程式在執行第一遍迴圈體後,才第一次執行++i。





二、迴圈結構練習——輸出各種小星星


1、輸出




原始碼:


#include <stdio.h>
#define N 6  //N表示一共要列印多少行

int main()
{
    int i=0,j=0;
    for(i=N;i>=1;--i)
    {
        for(j=1;j<=2*i-1;++j)
        {
            printf("*");
        }
        printf("\n");
    }
    printf("\n");
    return 0;
}



2、輸出




原始碼:


#include <stdio.h>
#define N 6  //N表示一共要列印多少行

int main()
{
    int i=0,j=0;
    for(i=1;i<=N;++i)
    {
        for(j=1;j<=N-i;++j)
        {
            printf(" ");
        }
        for(j=1;j<=i;++j)
        {
            printf("*");
        }
        printf("\n");
    }
    printf("\n");
    return 0;
}



3、輸出




原始碼:


#include <stdio.h>
#define N 6  //N表示一共要列印多少行

int main()
{
    int i=0,j=0;
    for(i=1;i<=N;++i)
    {
        for(j=1;j<=i-1;++j)
        {
            printf(" ");
        }
        for(j=1;j<=11-2*(i-1);++j)
        {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}




4、輸出




原始碼


#include <stdio.h>
#define N 6  //N表示一共要列印多少行

int main()
{
    int i=0,j=0;
    for(i=1;i<=N;++i)
    {
        for(j=1;j<=6-i;++j)
        {
            printf(" ");
        }
        for(j=1;j<=11-2*(6-i);++j)
        {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}



5、輸出




原始碼


#include <stdio.h>
#define N 6  //N表示一共要列印多少行

int main()
{
    int i=0,j=0;
    printf("     *     \n");
    for(i=2;i<=5;++i)
    {
        for(j=1;j<=6-i;++j)
        {
            printf(" ");
        }
        printf("*");
        for(j=1;j<=9-2*(6-i);++j)
        {
            printf(" ");
        }
        printf("*\n");
    }
    printf("***********\n");
    return 0;
}




6、輸出




原始碼


#include <stdio.h>           
int main( )    
{    
    int i,j,n=6;  //n代表上三角行數    
    //先輸出上三角    
    for(i=1;i<=n;++i) //輸出n行    
    {    
        //輸出第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");    
    }    
    //下面輸出下三角    
    for(i=1;i<=n-1;++i) //輸出n-1行     
    {    
        //輸出第i行    
        for(j=1; j<=i; ++j) //輸出i個空格    
            printf(" ");    
        for(j=1; j<=2*(n-i)-1; ++j) //輸出2*i-1個星號    
            printf("*");    
        printf("\n");    
    }    
    return 0;       
} 






相關文章