前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言循环结构-学习九

C语言循环结构-学习九

作者头像
XG.孤梦
发布2022-02-28 21:25:13
5060
发布2022-02-28 21:25:13
举报
文章被收录于专栏:日志随记日志随记

循环结构

  • 特点:在给定条件成立时,反复执行某程序段,直到条件不成立为止。

while语句

  • 一般形式:
代码语言:javascript
复制
    while(表达式){
        语句;
    }

流程图

  • 注意:
    • 在循环体中应有使循环趋向于结束的语句,否则程序会陷入死循环,无限执行语句。
    • 程序陷入死循环,结束用atrl+break
    • 循环体中如果包含一个以上的语句,要用{}括起来!
例子

在控制台输出1-30

代码语言:javascript
复制
#include <stdio.h>

void main() {
    int i = 1;

    while (i <= 30)
    {
        printf("%d,", i);
        i++;
    }
}

求sum = 1+2+3+...+100

解题思路

  • 令sum表示被加数(初始值为0)
  • 令i表示加数((初始值为1)
  • 进行100次加法后结束,或者加数大于100时结束
  • sum中存放计算结果
代码语言:javascript
复制
#include <stdio.h>

void main() {
    int sum = 0;
    int i = 1;

    while (i <= 100)
    {
        sum = sum + i;
        i++;
    }
    printf("%d\n", sum);
}

do while语句

先执行循环体,再判断, do...while 循环会确保至少执行一次循环

  • 一般形式:
代码语言:javascript
复制
    do{
        语句;
    }
    while (表达式);
例子

求sum = 1+2+3+...+100,用do...while实现

代码语言:javascript
复制
#include <stdio.h>

void main() {
    int sum = 0;
    int i = 1;

    do{
        sum = sum + i;
        i++;
    } while (i <= 100);

    printf("%d\n", sum);
}

for循环

  • 一般形式
代码语言:javascript
复制
for ( 表达式1; 表达式2; 表达式3)
{
   语句;
}

流程图

  • 首先会执行 表达式1 语句,且只会执行一次。这一步允许声明并初始化任何循环控制变量。也可以不在这里写任何语句,只要有一个分号出现即可。
  • 接下来会判断 表达式2 语句如果为真,则执行循环主体。如果为假,则不执行循环主体,会执行 for 循环后面的下一条语句。
  • 执行完 for 循环主体后,控制流会跳回上面的 表达式3 语句。该语句允许更新循环控制变量。该语句可以留空,只要在条件后有一个分号出现即可。
  • 条件再次被判断。如果为真,则执行循环,这个过程会不断重复。在条件变为假时,for 循环终止。
  • for和while可以完成同样的循环功能,但for更为简洁和高效。
例子

求sum = 1+2+3+...+100,用for实现

代码语言:javascript
复制
#include <stdio.h>

void main() {
    int sum = 0;

    for (int i = 1; i <= 100;i++) {
        sum = sum + i;
    }
    printf("%d\n", sum);
}
  • 一个或两个或三个表达式均可以省略,但 表达式后面的“;” 不能缺省
  • 为了程序正常运行,省略表达式1(循环变量赋初值)表达式3(循环变量增量)
  • 表达式2一般是关系表达式或逻辑表达式,但也可是数值表达式或字符表达式,只要其值非零,就执行循环体。

省略了表达式1

代码语言:javascript
复制
#include <stdio.h>

void main() {
    int sum = 0;
    int i = 1;
    for (; i <= 100;i++) {
        sum = sum + i;
    }
    printf("%d\n", sum);
}

省略了表达式2(循环条件),则不做其它处理时便成为死循环

代码语言:javascript
复制
#include <stdio.h>

void main() {
    int sum = 0;
    for (int i = 1;;i++) {
        sum = sum + i;
    }
    printf("%d\n", sum);
}

省略了表达式3

代码语言:javascript
复制
#include <stdio.h>

void main() {
    int sum = 0;
    
    for (int i = 1;i <= 100;) {
        sum = sum + i;
                i++;
    }
    printf("%d\n", sum);
}

goto语句

一般形式:

代码语言:javascript
复制
goto 语句标号;  //语句标号由字母、数字和下划线组成,不能使用整数
...
语句标号: 语句;

流程图

例子

求sum = 1+2+3+...+100,用goto和if实现

代码语言:javascript
复制
#include <stdio.h>

void main() {
    int sum = 0;
    int i = 1;

    loop: if (i <= 100) {
        sum = sum + i;
        i++;
        goto loop;
    }
    printf("%d\n", sum);
}

四种循环结构的区别

  1. 四种循环都可以用来处理同一个问题,一般可以互相代替。一般不提倡用goto型循环。
  2. while和do-while循环,循环体中应包含使循环趋于结束的语句。for语句功能更强,凡是用while循环能完成的,用for循环都能实现
  3. while和do-while循环时,循环变量初始化的操作应在while和do-while语句之前完成,而for语句可以在表达式1中实现循环变量的初始化。
  4. while循环、do-while循环和for循环,都可以用break语句跳出循环,用continue语句结束本次循环
例子
  • 思路:
    • 设置变量高度h,折叠次数n
    • 循环终止条件 h > 8848000
    • 折叠的算法 h = pow(2,n); n=n+1; (pow是计算次方的函数)

假设一张纸足够大并且可以无限折叠,这张纸的厚度是1mm,那么这张纸折叠多少次可以到达珠穆朗玛峰的高度(8848m)?

代码语言:javascript
复制
// while循环
#include <stdio.h>
#include <math.h>

void main() {
    int h = 0, n = 0;

    while (h <= 8848000)
    {
        h = pow(2, n);
        n++;
    }
    printf("%d\n", n - 1);
}

// for循环
#include <stdio.h>
#include <math.h>

void main() {
    int n, h=0;

    for (n=0;h <= 8848000;n++)
    {
        h = pow(2, n);
    }
    printf("%d\n", n - 1);
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-01-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 循环结构
    • while语句
      • 例子
    • do while语句
      • 例子
    • for循环
      • 例子
    • goto语句
      • 例子
      • 例子
  • 四种循环结构的区别
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档