初识C语言——分支与循环(下)

 3 循环结构

3.1 for 循环

        在C语言提供的3种循环语句中,for循环是使用最多的,其语法形式如下:

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

        其中,表达式1用于循环变量的初始化;表达式2用于循环结束条件的判断;表达式3用于循环变量的调整;另外,各个表达式之间一定要用英文状态下的分号(;)隔开,不能使用其他符号。

        for 循环的执行过程:在for循环中,首先执行一次表达式1的初始化操作;然后执行表达式2中的判断操作,当满足表达式2时,则执行循环语句;该操作完成后,执行表达式3的变量调整操作;随后再次进入表达式2进行判断,若满足条件,则重复上述操作,不满足则结束循环。(注:在整个循环过程中,表达式1的初始化操作只被执行1次。)

        下面,继续举例练习:

        例4:在屏幕上打印1~20的值

#include <stdio.h>

int main()
{
    for(int num = 1; num<=20; num++)
    {
        printf("%d ", num);
    }
    return 0;
}

3.2 while 循环

        接下来,我们继续谈一下while循环,其语法结构与if 的语法结构类似:

while (表达式)
{  
    语句;
}

        while 循环的执行过程:首先执行判断表达式,满足条件则执行循环语句,执行完后再次进行判断,以此循环下去;若不满足,则直接结束循环。

        现在,我们仍以例4为例,要求使用while循环对其进行实现,其代码如下:

#include <stdio.h>

int main()
{
    int i = 1;
    while(i<=20)
    {
        printf("%d ",i);
        i++;
    }
    return 0;
}

3.3 do...while 循环

        最后,我们介绍一种使用最少的循环,其语法为:

do
    语句
while(表达式)

        从上述语法中可以看出,do...while循环是先直接进入循环体,执行循环语句;然后再执行while后的判断表达式;表达式条件成立,则继续进行下次循环,不成立,则跳出循环。

        这里继续引用例4来进行do...while循环的说明,代码如下:

# include <stdio.h>

int main()
{
    int num = 1;
    do
    {
        printf("%d ", num)
        num++;
    }
    while(num<=10);
    return 0;
}

        例5:输入一个正整数,计算这个整数是几位数?

#include <stdio.h>

int main()
{
    int num = 0;
    scanf("%d",&num);
    int count = 0;
    do
    {
        count++;
        num = num/10;
    }while(num != 0);
    printf("该整数共有%d位",count);
    return 0;
}

        在例5中,我们随机输入一个整数(如:23574),考虑到不管输入什么数,该数至少有一位,故该数进入do...while中的循环体后首先进行count+1操作;完成加1操作后,我们需要将该数去掉一位,以便再次计数(如:对23574除以10得到商2357,将商赋值给该数num,则完成去除一位的操作);执行完上述步骤后,将新的num输入到while中的判断部分,若满足条件(num不等于0)则继续执行循环,不满足,则停止循环,顺序执行剩下的代码。

        该例题中,并不是必须使用do...while循环,只是因为即使输入数字0,它也是1位数,需要统计位数,故此该题代码使用do...while循环比较合适。

3.4 for、while、do...while三者的区别

for循环while循环do...while循环

        观察上表内容可知,

        (1) for循环和while循环的语法结构均是先判断后进入循环体;do...while是先进入循环体再判断,故该循环的循环体至少执行一次;

        (2) for循环的初始化、判断和调整三部分非常集中,便于代码维护,故在平时使用频率最高

        (3) while循环的这三部分比较分散,当代码较多时,不方便维护,故使用频率次之;

        (4) 由于do...while具有特殊的语法结构,该循环一般使用在循环体至少被执行一次的场景中,因此其使用频率会比前面两种低很多;

3.5 循环中的 break 和 continue 语句

        在执行循环过程中,有时候会因为一些情况需要提前终止循环,那遇到这种情况我们该怎么办呢?这时,C语言大手一挥拨给我们两个帮手 break 和 continue。虽然它们两个都是用来终止循环的,但这两者还是有一些区别的:

  • break : 用于永久的终止循环,当我们在某个条件发生的时候,不想再继续循环时,就可以使用break直接跳出循环。其中,break 在 for、while 及 do...while 三种循环中的作用几乎是一模一样的,详情见例6;
  • continue:用于跳过本次循环 continue 后面的代码。while、do...while 语句中的continue作用相同,但 for 循环中的 continue 与前面两者的有所差异,详情见例7。

        例6: for、while 以及 do...while 循环中的 break

        (1) for 循环中的 break

#include <stdio.h>

int main()
{
    int i = 1;
    for(i=1;i<=10;i++)
    {
        if(i==5)
        {
            break;
        }
        printf("%d ",i);
    }
    return 0;
}

 (2) while 循环中的 break

#include <stdio.h>

int main()
{
    int i = 1;
    while(i<=10)
    {
        if(i==5)
        {    
            break;
        }
        printf("%d ",i);
        i++;
    }
    return 0;
}

 (3) do...while 循环中的 break

#include <stdio.h>

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

       观察上述三种循环的结果,当 i 等于5时,执行break语句,终止循环。另外,由于break在这三种循环中的作用是相同的,所以这三种循环的运行结果都只能打印出1 2 3 4。

        例7: for、while 以及 do...while 循环中的 continue

        (1) for 循环中的 continue

#include <stdio.h>

int main()
{
    int i = 1;
    for(i=1;i<=10;i++)
    {
        if(i==5)
        {
            continue;
        }
        printf("%d ",i);
    }
    return 0;
}

  

      (2) while 循环中的 continue

#include <stdio.h>

int main()
{
    int i = 1;
    while(i<=10)
    {
        if(i==5)
        {    
            continue;
        }
        printf("%d ",i);
        i++;
    }
    return 0;
}

        (3) do...while 循环中的 continue

#include <stdio.h>

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

        观察例7运行结果可知,continue在 for 循环中作用后的结果与在while 循环和do...while 循环中的结果有一些不同。这是因为for 循环中continue的作用是跳过本次循环中continue后的代码,直接去到循环的调整部分,在本例 for 循环中,当 i 增长到 5 时进入到 if 语句中,遇到 continue 则跳过后面的代码,来到 i++的调整部分继续执行下次循环,所以 continue 在 for 循环中作用后的结果是打印了除5以外的1~10个数;而 while 循环和 do...while 循环中 continue 的作用是跳过本次循环continue后边代码,直接到循环的判断部分,进行下一次循环的判断,如果循环的调整部分在continue后边的话,可能会造成死循环,因此在例7的 while 循环和 do...while 循环中,当 i 等于5时执行 continue,直接跳过其后面的代码,去到循环的判断部分,因为这里跳过了 i++,所以 i 一直是5,程序陷入到死循环。

       3.6 goto 语句

        在这篇博客中,我们讲到了三种循环 for、while、do...while ,在日常工作中这三者往往会嵌套在一起使用,这个也叫循环嵌套。另外,在此处,我们也介绍一种特别的语句—— goto 语句。

        goto 语句:可以实现在同一个函数内跳转到设置好的标号处;由于一个break只能跳出一个循环,如果想要快速跳出多层循环,则可以使用goto语句,下面我们仍举一个例子来进行说明。

        例8:打印9*9乘法表前4行,当行数大于等于5时打印“over"。

#include <stdio.h>

int main()
{
    for (int i = 1; i < 10; i++)
    {
        for (int j = 1; j <= i; j++)
        {
            if (i >= 5)
            {
                goto next;
            }
            printf("%d*%d=%d ", i, j, i * j);
        }
        printf("\n");
    }
next:
    printf("over");
    return 0;
}

        在本例中,我们结束循环时便采用了goto语句,当你想要从某处跳出循环时,则在该处使用goto 语句和跳转标号,其中本例中我们命名了next作为跳转标号,你在使用跳转标号时可以自定义名称。

        3.7 结语

        到此为止,分支与循环的知识点都已介绍完毕啦!由于笔者的能力有限,可能还存在一些遗漏之处,还请大家多多谅解。如有发现遗漏之处,欢迎大家批评指正,我也会定期检查和补充。好啦,这周的内容就到这里啦,感谢各位赏光!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值