分支与循环(三)

目录

1. do-while循环

1)do-while语法形式

2) do while循环的执行流程

3) do while循环的实例

4) 练习

2. break和continue语句

1) break举例

2) continue举例

3) for循环中的break和continue

4) do while循环中的 break 和 continue

3.循环的嵌套

4.goto语句


1. do-while循环
1)do-while语法形式
do
    语句;
while(表达式);

while 和for 这两种循环都是先判断,条件如果满足就进入循环,执行循环语句,如果不满足就跳出循环
而 do while 循环则是先直接进入循环体,执行循环语句,然后再执行 while 后的判断表达式,表达式为真,就会进行下一次,表达式为假,则不再继续循环

2) do while循环的执行流程 

在 do while 循环中先执行图上的“语句”,执行完语句,在去执行“判断表达式”,判断表达式的结果是!=0,则继续循环,执行循环语句;判断表达式的结果==0,则循环结束。


所以在 do while 语句中循环体是至少执行一次的,这是 do while 循环比较特殊的地方

3) do while循环的实例
#include <stdio.h>
int main()   //在屏幕上打印1~10的值
{
    int i = 1;
    do
    {
        printf("%d ", i);
        i = i + 1;
    }while(i<=10);
    return 0;
}
4) 练习

输入一个正整数,计算这个整数是几位数?
例如:
输入:1234 输出:4
输入:12 输出:2

#include <stdio.h>
int main()
{
    int n = 0;
    scanf("%d", &n);
    int cnt = 0;
    do
    {
        cnt++;
        n = n / 10;
    } while (n);
    printf("%d\n", cnt);
    return 0;
}

2. break和continue语句

• break 的作用是用于永久的终止循环,只要break 被执行,直接就会跳出循环,继续往后执
行。
• continue 的作用是跳过本次循环continue 后边的代码,在for 循环和while 循环中有所
差异的。

1) break举例
#include <stdio.h>
int main()
{
    int i = 1;
    while(i<=10)
    {
    if(i == 5)
        break;//当i等于5后,就执行break,循环就终止了
    printf("%d ", i);
    i = i+1;   
    }                                    //1 2 3 4
    return 0;
}

2) continue举例
#include <stdio.h>
int main()
{
    int i = 1;
    while(i<=10)
    {
    if(i == 5)
    continue;
    //当i等于5后,就执行continue,直接跳过continue的代码,去循环的判断的地方
    //因为这里跳过了i = i+1,所以i一直为5,程序陷入和死循环
    printf("%d ", i);
    i = i+1;
    }
    return 0;
}
3) for循环中的break和continue

<1> break举例

#include <stdio.h>
int main()
{
    int i = 1;
    for(i=1; i<=10; i++)
    {
    if(i == 5)
    break;
    printf("%d ", i);
    }                    //1 2 3 4
    return 0;
}

<2> continue举例

#include <stdio.h>
int main()
{
    int i = 1;
    for(i=1; i<=10; i++)
    {
    if(i == 5)
    continue;//这里continue跳过了后边的打印,来到了i++的调整部分
    printf("%d ", i);
    }                 //1 2 3 4 6 7 8 9 10
    return 0;
}

for 循环中continue 的作用是跳过本次循环中 continue 后的代码,直接去到循环的调整部分。未来当某个条件发生的时候,本次循环无需再执行后续某些操作的时候,就可以使用continue 来实现。

4) do while循环中的break和continue

do.while 语句中的 break 和 continue 的作用和 while 循环中几乎相同

#include <stdio.h>
int main()
{
    int i = 1;
    do
    {
    if(i == 5)
    break;
    printf("%d ", i);
    i = i + 1;
    }while(i<=10);
    return 0;
}


#include <stdio.h>
int main()
{
    int i = 1;
    do
    {
    if(i == 5)
    continue;
    printf("%d ", i);
    i = i + 1;
    }while(i<=10);
    return 0;
}

3.循环的嵌套

三种循环 while , do while , for ,这三种循环通过嵌套在一起来解决问题

练习
找出100~200之间的素数,并打印在屏幕上。
注:素数又称质数,只能被1和本身整除的数字。

题目解析:
1. 要从100~200之间找出素数,首先得有100~200之间的数,这里可以使用循环解决。
2. 假设要判断i是否为素数,需要拿2~i-1之间的数字去试除i,需要产生2~i-1之间的数字,也可以使用
循环解决。
3. 如果2~i-1之间有数字能整除i,则i不是素数,如果都不能整除,则i是素数。

#include <stdio.h>
int main()
{
    int i = 0;
    //循环产生100~200的数字
    for(i=100; i<=200; i++)
    {
    //判断i是否为素数
    //循环产生2~i-1之间的数字
        int j = 0;
        int flag = 1;//假设i是素数
        for(j=2; j<i; j++)
        {
            if(i % j == 0)
            {
                flag = 0;
                break;
            }
        }
    if(flag == 1)
    printf("%d ", i);
    }
    return 0;
}

优化:

例如 判断16是否为素数 与% 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ==0

16 == 2 * 8( 4 * 4 )所以除数最大值小于等于被除数的平方开根号 for(j = 2;j<sqrt(i);j++)

包含include <math.h> 头文件

4.goto语句

是 goto 语句和跳转标号, goto 语句可以实现在同一个函数内跳转到设置好的标号处

#include <stdio.h>
int main()
{
    printf("hehe\n");
    goto next:
    printf("haha\n");
    next:
    printf("跳过了haha的打印\n");
    return 0;
}

注意:

1)goto 语句如果使用的不当,就会导致在函数内部随意乱跳转,打乱程序的执行流程

2)在多层循环的代码中,如果想快速跳出使用 goto 就非常方便

for(...)
{
    for(...)
    {
        for(...)
        {
            if(disaster)
            goto error;
        }
    }
}
error:
//...

本来for 循环想提前退出得使用 break ,一个break 只能跳出一层for 循环,如果3层循环嵌套就得使用3个break 才能跳出循环,所以在这种情况下我们使用 goto 语句就会更加的快捷方便

#include<stdio.h>

int main()
{
    int i = 0;
    int j = 0;
    for(;i<5;i++)
    {
        for(;j<5;j++)
        {
            printf("hello")    //打印5个hello
        }
    }
    return 0;
}

因为j只初始化一次 所以当i=1时 j 经过++ 已经到 5了 当 i= 2 3 4 时 j 没有初始化 for循环直接为假

谢谢观看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值