C语言for语句

for语句是控制重复的指令,在表达式为真时,重复执行语句。for语句是C语言中应用最频繁的语句,for循环语句可以用于循环次数已经确定的情况,也可以用于循环次数不确定的情况。可以完全代替while及do…while语句。

for循环结构

for语句的一般形式为:

        for(表达式1;表达式2;表达式3)
          语句

for语句的执行过程如下:
首先执行表达式1,表达式1是用于初始值的设定的。然后,执行表达式2,表达式2是结束for语句循环的条件表达式。在语句执行之后,才执行表达式3。所以,表达式3用于计数器的增量等方面。表达式2的判别是重复的开头的开始。如图所示。

C语言for语句

示例:使用for语句求100以内正整数的和。

#include <stdio.h>
void main()
{
    int i, sum = 0;
    for (i = 1; i <= 100; i++)
        sum += i;                    /*循环体*/
    printf("1+2+3+…+100=%d\n", sum); /*输出结果*/
}

运行结果为:

        1+2+3+…+100=5050

这里说明以下几点:

(1) 表达式1 用于初始值设定,有时为了对多个变量进行初始化,可以用逗号隔开设定,例如:

        for(i=0,j=0;i<100;i++)
        {  …   }

(2) 表达式2常用的是关系表达式或逻辑表达式,是用于控制循环的条件。若表达式2的值为0即为假,退出循环;如果为非0即为真,则执行循环语句,计算表达式2的值,进入下一轮的循环。

(3) 表达式3可以像表达式1一样,用逗号运算符将多个表达式连接起来。例如:

    for(i=0,j=0;i<100;i++,j++)
    {  …  }

(4) for语句的表达式1,表达式2,表达式3都可以省略。但是,分号一定要保留。

  • 省略表达式1,一般形式为:
            for(;表达式2;表达式3)
              语句
    

    表达式1用于设定初始值,如果省略表达式1,应在for语句之前给循环变量赋初值。

    #include <stdio.h>
    void main()
    {
        int i, sum = 0;
        i = 1;
        for (; i <= 100; i++)
            sum += i;                    /*循环体*/
        printf("1+2+3+…+100=%d\n", sum); /*输出结果*/
    }
    

    运行结果为:

            1+2+3+…+100=5050
    
  • 省略表达式2,一般形式为:
            for(表达式1;;表达式3)
                语句
    

    表达式2用于控制循环的条件,如果表达式2省略,即不判断循环条件,循环会无休止地进行下去。即默认状态下,表达式2始终为真。这时就需要在for语句的循环体中设置相应的语句来结束循环。

            #include<stdio.h>
            void main()
            {
                int i;
                for(i=1;;i++)
                    printf("%d",i);
            }
    

    省略表达式2,循环将无终止地进行下去。

  • 省略表达式3,一般形式为:

            for(表达式1; 表达式2;)
                语句
    

    省略表达式3则不计算表达式3的值,也将产生一个无穷循环。为了保证循环能正常结束,可以将表达式3放在循环语句中控制。

    #include <stdio.h>
    void main()
    {
        int i, sum = 0;
        for (i = 1; i <= 100;) /*省略表达式3*/
        {
            sum += i;
            i++; /*表达式3放在循环体中*/
        }
        printf("1+2+3+…+100=%d\n", sum); /*输出结果*/
    }
    程序运行的结果为:
    ```shell
            1+2+3+…+100=5050
    
  • 同时省略表达式1和表达式3,一般形式为:
            for(; 表达式2;)
              语句
    

    此时的for循环语句完全等价于while语句,例如:

            int i;
            for(;i<=10;)                  /*省略表达式1和表达式3*/
            {
                printf("%d",i);           /*依次输出变量i*/
                i++;
            }
    

    相当于:

            int i;
            while(i<=10)
            {
                printf("%d",i);            /*依次输出变量i*/
                i++;
            }
    
  • 同时省略表达式1,表达式2,表达式3,一般形式为:
            for(;;)
              语句
    

    此时的for循环语句相当于循环控制条件始终为真,不修改循环变量,故循环将无终止地进行下去。相当于:

            while(1)
                语句
    

(5)在for语句中,循环语句可以是单个语句,也可以是用 “{ }”括起来的复合语句,也可以是空语句,空语句是指循环体不做任何操作,可以用来实现延时,即在程序执行中等待一定的时间。
例如:

        for(i=1;i<5000;i++);

for循环体为空,程序不做任何操作。但是循环中最后的分号不能省略,它表示一个空语句。

(6)for语句的作用可以用while语句描述,如图所示。
C语言for语句

for循环语句的嵌套

for循环语句的嵌套就是在for循环语句的循环体使用另一个或几个for循环语句。for循环语句的嵌套有二重嵌套、三重嵌套、四重嵌套等。
例如:二重嵌套:

        for(;;)
        {
            …
            for(;;)
            {
                …
            }
        }

三重嵌套:

        for(;;)
        {
            …
            for(;;)
            {
                …
                for(;;)
                {
                    …
                }
            }
        }

示例:编一个程序,求 s=1!+2!+3!+…+n!(n由输入决定)。
程序分析:

        1!=1
        2!=2*1=2*1!
        3!=3*2*1=3*2!
        4!=4*3*2*1=4*3!
        …
        n!=n*(n-1)!

设变量i、j、t,i从1依次增加到n,使用变量j从1到i求出i!的阶乘即:

        for(j=1;j<=i;j++)
              t=t*j;

使用t来存放每个阶乘的值。

        sum=sum+t;

求各个阶乘的累加和。

#include <stdio.h>
void main()
{
    int i, j, n;
    long int t = 1, sum = 0; /*t存放每项阶乘值,sum存放累加和*/
    printf("input n:", &n);
    scanf("%d", &n);
    for (i = 1; i <= n; i++)
    {
        t = 1;
        for (j = 1; j <= i; j++) /*求i!值*/
            t = t * j;
        sum = sum + t; /*累加*/
    }
    printf("n!=%ld", sum);
}

运行结果为:

        input n:9↙
        n!=409113
赞(0)

评论 抢沙发

评论前必须登录!