• 三、循环结构


    循环类语句包括for循环语句、while循环语句和do...while循环语句三种,用它们来解决实际应用中需要重复处理的问题。如当统计全班同学总分时,就需要重复地做加法,依次把每个人的分数累加起来。

    1. for语句

    • 格式

      for (控制变量初始化; 条件表达式; 增量表达式) {
          语句1;
          语句2;
          ...
      }
      

      说明:花括号中的内容为循环体部分,如果循环体中只有一条语句花括号可以省略;如果循环体中应该有多条语句,但是忘了加花括号,则编译器会把离for最近的一条语句当做循环体

    • for语句的执行过程可由以下4步来描述:

      1. 执行“控制变量初始化”语句,使控制变量获得一个初值。
      2. 判断控制变量是否满足“条件表达式”,若满足条件则执行一遍循环体后,继续第3步;否则结束整个for语句,继续执行for循环下面的句子。
      3. 根据增量表达式,计算出控制变量所得到的新值。
      4. 自动转到第2步。
    • 格式举例

      • for(i = 1; i <= 100; ++i)  //将控制变量从1变到100,增量为1
        for(i = 100; i >= 1; --i)  //将控制变量从100变到1,增量为-1 
        for(i = 7; i <= 77; i += 7)//控制变量从7变到77,增量为7
        for(int i = 20; i >= 2; i -= 2)//控制变量从20变到2,增量为-2
        for(int j = 99; j >= 0; j -= 11)//按所示数列改变控制变量值:99、88、77、66、55、44、33、22、11、0,增量为-11
        for (int i = 1, j = 2; i <= 99 && j <= 100;i += 2,j += 2)//控制变量i和j共同进行循环控制,i从1变到99,j从2变到100,增量均为2。
        
      • 需要说明的是:可以在for循环“ 控制变量初始化语句”中声明变量(如上面最后3个例子),这些变量只在for循环结构中有效,离开了该for结构,变量就无效了。

      • 例题:利用for循环,计算输出(1+2+…+100)的和。

      • #include <cstdio>
        int main() {
            int sum = 0;
            for (int i = 1; i <= 100; ++i) {
                sum += i;
            }
            printf("%d
        ", sum);
            return 0;
        }
        

    2. while语句

    • 格式

      while (条件表达式) {
          语句1;
          语句2;
          ...
      }
      

      说明:while语句循环体部分与for语句的规则相同

    • 语句执行过程

      1. 计算作为循环控制条件表达式的值,得到逻辑真或假,假定用M表示。
      2. 若M为真,则执行了一遍循环体,否则离开循环,结束整个while语句的执行。
      3. 循环体中的所有语句执行结束后,自动转向第1步执行。
    • 格式举例

      1. 当i的值小于10,重复执行++i语句

        i=0;
        while (i < 10)
            ++i;
        
      2. 当输入的数据小于0时,重复读数据。

        scanf("%d", &x);
        while (x < 0)
            scanf("%d", &x);
        
    • 例题:求(s=1+2 +3……+n),当加到第几项时,(s)的值会超过(1000)

      #include <cstdio>
      int main() {
      	int n = 0, sum = 0;
      	while (sum <= 1000) {
      		++n;
      		sum += n;
      	}
      	printf("加到第%d项时,s会超过1000
      ", n);
      	return 0;
      }
      

    3. do...while语句

    • 格式

      do {
          语句1;
          语句2;
          ...
      } while (条件表达式);
      

      说明:循环体部分的规则与上面的两种相同

    • 语句执行过程

      1. 执行一遍循环体。
      2. 求出作为循环条件的“条件表达式”的值,若为逻辑值真则自动转向第1步,否则结束do循环的执行过程,继续执行其后面的语句。
    • 例题:对于求两个正整数m, n的最大公约数可以用do—while实现。

      #include <cstdio>
      int main() {
          int m, n, r;
          scanf("%d%d", &m, &n);
          do {
              r = m % n;
              m = n;
              n = r;
          } while (r != 0);
          printf("最大公约数为:%d
      ", m);
          return 0;
      }
      

    4. 循环的嵌套

    • 类似于选择结构,循环结构同样可以嵌套执行。
    • 例题:给定正整数(n),请计算出(1!+2!+cdots +n!)的结果,其中(n!)表示阶乘,即(n!=1 imes 2 imes cdots imes n)
    #include <cstdio>
    int main() {
        int n = 0, t = 1, sum = 0;
        scanf("%d", &n);
        for (int i = 1; i <= n; ++i) {
            t = 1;
            for (int j = 1; j <= i; ++j) {
                t *= j;
            }
            sum += t;
        }
        printf("%d
    ", sum);
    }
    

    问题:

    1. 请同学们计算一下,当n = 5时,该程序总共循环了多少次?
    2. (star)(star)(star)怎样修改代码可以让程序的循环次数减少?
  • 相关阅读:
    每天一个JavaScript实例-从一个div元素删除一个段落
    Ewebeditor最新漏洞及漏洞大全
    WebKit历史项管理的实现
    C# 字符串处理
    Handler具体解释系列(四)——利用Handler在主线程与子线程之间互发消息
    (linux shell)第一章--小试牛刀(上)
    关于如何使用three.js的小教程&lt;一&gt;
    Readprocessmemory使用方法
    CentOS 6.4 U盘启动盘制作、安装及遇到的问题解决
    poj 2774 Long Long Message,后缀数组,求最长公共子串 hdu1403
  • 原文地址:https://www.cnblogs.com/hbhszxyb/p/12232076.html
Copyright © 2020-2023  润新知