第4章 C语言的for循环语句 (二)

本文详细介绍了C语言中的for循环语法和执行流程,包括初始化、条件判断和迭代操作,并通过多个实例展示了for循环在求和、打印奇数、输出水仙花数、绘制图案等场景的应用。此外,还探讨了for循环的特殊用法,如表达式的省略以及嵌套结构,帮助读者深入理解for循环的灵活性和实用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文档视频讲解链接地址

  1. 腾讯课堂链接 : 26_控制语句_循环语句for
  2. 腾讯课堂链接 : 27_控制语句_循环语句for练习
  3. 腾讯课堂链接 : 28_控制语句_循环嵌套for

4.3 循环语句for

  1. for 循环的一般形式为:

    for(表达式1; 表达式2; 表达式3)
    {
        语句块;
    }
    
  2. for循环执行过程:

    for(expression1; expression2; expression3)
    {
        statements;
    }
    
    • 第一步: 初始化语句(expression1)仅执行一次。
    • 第二步: 执行表达式(expression2)结果为假,则循环终止。结果为真,则执行循环体内的语句(statements) 。
    • 第三步: 执行表达式(expression3)。
    • 以上是一个完整的循环过程
    • 第四步:再次执行表达式(expression2) 结果为假,则for循环终止。结果为真,则执行循环体内的语句(statements) 。
    • 第五步: 执行表达式(expression3)。
    • 第四步和第五步一直循环
    • 第n步 : 执行expression2, 直到结果为假, 退出循环
    • 例如 计算1+2+3+…+10之和
    #include <stdio.h>  
    
    int main(int argc, char const *argv[])
    {
        int sum =0;
        for(int i=1;i<11;i++)
        {
            printf("i=%d\n",i);
            sum +=i;
        }
        printf("sum=%d\n",sum);
        return 0;
    }
    
    
  3. for循环语句特殊用法

    • for语句中的表达式1可以省略,但在for循环之前应给循环变量赋值。

      • 例如:
      int i=1;
      for(;i<=100;i++) 
          sum=sum+i;
      
    • 表达式2也可以省略,但循环将陷入死循环。

      • 例如:
      for(i=1;;i++) 
          sum=sum+i;
      
    • 表达式3也可以省略,但应在循环体中增加使循环变量值改变的语句。

      • 例如:
      for(sum=0,i=0;i<=100;)
      { 
          sum=sum+i; 
          i++;
      }
      
    • for 循环中的“表达式1(初始化条件)”、“表达式2(循环条件)”和“表达式3(自增或自减)”都是可选项,都可以省略(但分号;必须保留)。

    • 表达式1和表达式3同时省略也允许。

      • 例如:
      int i=1;
      int sum=0;
      for(;i<=100;)
      {
          sum=sum+i;
       	i++}
      
    • 三个表达式都可以省略。

      • 例如:
      for(;;)    // 死循环 等价于 while(1)
          sum=sum+i;
      
      • 注意:循环将无休止的执行下去,相当于while(1)。
  4. 实例 33
    用for语句计算1+2+3+4+…+100 之和。

    • 源文件
    01-cbase\32-for.c
    
    • 源代码
    #include <stdio.h>
    
    int main(int argc, char const *argv[])
    {
        int sum = 0;
        for (int i = 1; i <= 100; i++) // c99允许在for循环内定义变量并初始化
        {
            sum = sum + i ; // sum += i 
        }
        printf("sum=%d\n",sum);
        /* 
        *  第1步:  执行(int i = 1) ; 
        *  第2步:  执行(i <= 100) , 结果为真  , 执行(sum = sum + i ) , sum = 1
        *  第3步:  执行(i++)   i = 2; 
        *  第4步:  执行(i <= 100) , 结果为真  , 执行(sum = sum + i ) , sum = 3
        *  第5步:  执行(i++)   i = 3; 
        *  ... 
        *  第n步:  i = 100 , 执行(i <= 100) , 结果为真  , 执行(sum = sum + i ) , 
        *  第n+1步: 执行(i++)   i = 101;  
        *  第n+2步:  i = 101 , 执行(i <= 100) , 结果为假  , for循环退出 sum (1+2+3+...+100)
        *  sum = 5050 
        */
        return 0;
    }
    
    
    • 运行结果
    sum=5050
    
  5. 实例34

    • 输出100以内的奇数
    • 源文件
    01-cbase\33-for.c
    
    • 源代码
    #include <stdio.h>
    
    int main(int argc, char const *argv[])
    {
        for (int i = 1; i <= 100; i++)
        {
            if (i % 2 == 1) // 这个数就是奇数
            {
                printf("i=%d\n", i);
            }
        }
    
        return 0;
    }
    
    
    • 输出结果
    i=1
    i=3 
    i=5 
    i=7 
    ...
    i=95
    i=97
    i=99
    
  6. 实例35

    • 输出三位数的水仙花数(100-999)

      个位的立方 + 十位的立方 + 百位的立方 还等于这个数 , 这个数就是水仙花数

      例如:

    153 == 1*1*1 + 3*3*3 + 5*5*5   // 个位的立方 + 十位的立方 + 百位的立方  还等于这个数 , 这个数就是水仙花数
    
    • 源文件
    01-cbase\34-flower.c
    
    • 源代码
    #include <stdio.h>
    
    int main(int argc, char const *argv[])
    {
        int ge, shi, bai, ret;
        for (int i = 100; i < 1000; i++)
        {
            ge = i % 10;        // 得到个位的数
            shi = i % 100 / 10; // 得到十位的数
            bai = i / 100;      // 得到百位的数
            ret = ge * ge * ge + shi * shi * shi + bai * bai * bai;
            if(ret == i )
            {
                printf("%d ",i);
            }
        }
        return 0;
    }
    
    
    • 运行结果
    153 370 371 407 
    
  7. for循环嵌套结构

    for (表达式1;表达式2;表达式3)
    {
        for (表达式1;表达式2;表达式3)
        {
            语句块1;
        }
    }
    
  8. 实例35

    • 用for循环嵌套语句实现如下图案, 5行5列的*
    * * * * *
    * * * * *
    * * * * *
    * * * * *
    * * * * *
    
    • 源文件
    01-cbase\35-for.c
    
    • 源代码
    #include <stdio.h>
    
    int main(int argc, char const *argv[])
    {
        for(int i=0;i<5;i++)  // 0,1,2,3,4, for循环可以循环5次
        {
            for(int j=0;j<5;j++) // 0,1,2,3,4 for循环可以循环5次
            {
                printf("* ") ;   // 外层循环5次  , 内层循环5次 , 一共25次 
            }
            printf("\n");
        }
    
        return 0;
    }
    
    • 运行结果
    * * * * *
    * * * * *
    * * * * *
    * * * * *
    * * * * *
    
  9. 实例36

    • 输出图案
    * 
    * * 
    * * * 
    * * * * 
    * * * * *
    
    • 源文件
    01-cbase\36-for.c
    
    • 源代码
    #include <stdio.h> 
    
    
    int main(int argc, char const *argv[])
    {
        for(int i=0;i<5;i++) // 外层循环控制行数 
        {
            for(int j=0;j<=i;j++) // 内层循环控制列数 随着行数的增加列也在增加,因此j<=i 
            {
                printf("* ");
            }
            printf("\n");
        }
        return 0;
    }
    
    
    • 运行结果
    * 
    * *
    * * *
    * * * *
    * * * * *
    
  10. 实例37

    • 输出图案
    * * * * *
    * * * * 
    * * * 
    * * 
    * 
    
    • 源文件
    01-cbase\37-for.c
    
    • 源文件
    #include <stdio.h> 
    
    
    int main(int argc, char const *argv[])
    {
        for(int i=0;i<5;i++) // 外层循环控制行数 
        {
            for(int j=0;j<5-i;j++) // 内层循环控制列数 随着行数的增加列也在减少,因此j<=i 
            {
                printf("* ");
            }
            printf("\n");
        }
        return 0;
    }
    
    
    • 运行结果
    * * * * * 
    * * * *
    * * *
    * *
    *
    
  11. 实例38

    • 输出图案
    * * * * *
    * * * * 
    * * * 
    * * 
    * 
    * * 
    * * * 
    * * * * 
    * * * * *
    
    • 源文件
    01-cbase\38-for.c
    
    • 源代码
    #include <stdio.h> 
    
    
    int main(int argc, char const *argv[])
    {
        for(int i=0;i<5;i++) // 外层循环控制行数 
        {
            for(int j=0;j<5-i;j++) // 内层循环控制列数 随着行数的增加列也在减少,因此j<=i 
            {
                printf("* ");
            }
            printf("\n");
        }
        for(int i=0;i<5-1;i++) // 外层循环控制行数 
        {
            for(int j=0;j<=i+1;j++) // 内层循环控制列数 随着行数的增加列也在增加,因此j<=i 
            {
                printf("* ");
            }
            printf("\n");
        }
        return 0;
    }
    
    
    • 运行结果
    * * * * * 
    * * * *
    * * *
    * *
    *
    * *
    * * *
    * * * *
    * * * * *
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值