C语言第九篇:各种输出小星星(循环控制)


一、几个疑惑


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;       
} 







版权声明:本文为qq_30866297原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。