C语言的循环语句

前言:循环语句是C语言中的重要组成部分,该部分也比较基础,希望大家好好学习,多动手实践,学完本节加上前面的分支语句,就已经可以实现大部分功能了。加油各位!

一、while 循环

*标准的while循环语句:
//bool_value的值决定了循环与否,如果是真则循环,如果是假不循环,此处常为判断表达式,与前文的if里的概念相似
while(bool_value)
{
    //循环内容;
}

循环的意义所在,就是减少重复代码的编写,使代码的可读性提高。例如:向屏幕依次打印1到100,如果写一百行代码,太麻烦了。那么我们用while循环语句来实现这个功能就非常简便了。下面,上代码。

int i=1;//从几开始,我们就初始化为几
while(i<=100)//当i小于等于100的时候进入循环体进行打印,否则就不进入
{
    printf("%d\n",i);
    i=i+1;//每次增加1

    //掌握后熟练运用运算操作符就可以将循环体简化为一行代码
    //printf("%d\n",i++);
}

下面介绍两个关键字continue 和 break

int i=0;
while(true)//或while(1)一直进行循环
{
    if(i<1) 
    {
        i++;
        continue;
    }
    if(i>100) break;
    printf("%d\n",i);
    i++;
}

这里我们没有直接将i赋值为1.而是从0开始,但我们还想打印1到100,怎么办,那就加一条作为判断的语句,i的值如果比1小,我们就 让加1,然后continue 跳过本次循环直到i加到1时正常参与循环的打印功能。聪明的小伙伴还注意到了一点,那就是,while的判断条件里是true(或1),一直循环怎么才能跳出循环执行后续代码呢,很简单,博主写了另一行作为判断的语句,当i比100大的时候就break打断循环。实际的运行如下。(ps:这里我们事先知道了i是从0开始的才这么设计代码的,不然还需要分析实际情况,优化本代码或进行更多的判断来确保每一种情况都能完成题目要求)

*do...while循环语句 

另外,while 和 do关键字构成了新的循环语句,即do...while语句。它和while语句类似,就不作过多讲解,只谈二者的区别。

do...while与while最本质的区别就在于前者会先进行一次循环,然后进行条件判断,而后者在最开始就进行判断再选择是否进行循环。这也就导致了do...while循环语句至少经历一次循环。下面我们尝试一下用两种方法解决上述问题。

#include <stdio.h>
int main()
{
    int i=1;
    while(i<=100)
    {
        printf("%-5d\n",i);
        i++;
    }
    printf("-----------------------------------------------------");//分割线
    i=1;//重新赋值
    do
    {
        printf("%-5d\n",i);
    }while(i<=100);//注意分号
    return 0;
}

乍看之下,结果一样,那还要do...while语句干嘛呢。实则不然,do-while循环适用于不知道循环具体执行次数,只知道满足某个条件继续执行或结束执行,并且循环肯定执行一次时的场景。有没有例子呢,肯定有的。下面,请听题:

#include "stdio.h"
#include "math.h"

int main()
{
    double t1,t2,t;
    int m=1
    int n=1;

    do{
        t1 = m*1.0/n;
        t2 = t1;
        t = m+n;
        m = n;
        n = t;
    }while(fabs(t1-t2)>1e-5);

    printf("常数=%.3f\n",t2);
    return 0;
}

 这时候我们得先经历一次循环为t1和t2确定具体的值才能进行判断,如果直接判断就需要将赋值操作在循环之前就进行一次,在这里只是重复了两行代码,但是如果在有些大项目里,可能就比较多了,代码显得十分冗余,可读性极差。所以要知道,存在即有意义,只是我们习惯于使用while,这样就省去了一些时间精力去分辨要不要先执行一次的问题。但学习嘛,就要打牢根基,一步一个脚印,不是没有while常用,学一个就能解决问题了没必要多学了,我们就不去学了,这是一个错误的认知和学习习惯。

二、for循环

for循环语句的基本语法:

for(表达式1;表达式2;表达式3)
{
    //循环体;
}

其中:表达式1-->赋值列表;表达式2-->条件判断语句;表达式3-->循环结束附加操作语句。

同样我们需要打印1-100这些数字,让我们来用for循环语句实现一下。

for(int i=1;i<=100;i++)//在有些编译环境下这里会报错,不能在表达式1处定义变量并初始化,只能对已有变量进行赋值操作
{
    printf("%d\n",i);
}


//等价于

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

 聪明的人已经发现规律了,如果你已经理解了while循环,那么恭喜你也已经了解了for循环。但,还不够。

int i=1;
for(;;)
{
    printf("%d\n",i);
    i++;
    if(i>100)break;
}

这段代码告诉我们,for语句里的表达式可以为空,除了赋值外的所有操作都可以在循环体内进行。

int i,j;
for(i=1,j=0;i<=100;i++,j++)
{
    //此处为空语句
}
printf("j=%d",j);//输出为j=100,也就是循环的次数

这段代码告诉我们,循环体可以为空,另外,既然是列表那就可以对多个变量进行赋值,追加操作也可以是多个(此时注意,和;的使用即可)。

善于思考的同学又该问了,那能不能表达式为空,循环体也为空呢。可以,让我们看一下

for(;;)
{ }

//其实他就等价于

while(1)
{ }

 这就是典型的两个死循环。此外,对于for循环语句我们只能省略表达式,但“ ; ”不可以省略喔。

其实到这里,你已经基本掌握了它的各种情况。为什么没有说完全掌握,那是因为,循环还有嵌套的情况没有叙述,下节我们就专门讲解循环的嵌套使用。

三、goto语句的跳转循环功能

goto语句又被称为无条件跳转语句,用于改变语句执行顺序。也正是因为无条件跳转,导致goto跳转语句不太常用,因为在庞大的项目里,它会使逻辑变得混乱,不宜理解以及维护修改。但既然存在,我们就要说一下它的作用和用法以及如何用跳转实现循环功能。

//首先,基本语法
goto Mark;
//注意,mark是自己标注的,在符合命名规则的约束下可以任意起名字

语法的基本定义是苍白无力的,想要更好的理解,需要用示例来作为辅助手段。请看示例代码

#include <stdio.h>

int main()
{
    printf("aaaaaa\n");
    goto Mark;
    printf("bbbbbb\n");
    Mark:
    printf("cccccc\n");
    return 0;
}

 正常情况下,代码按顺序执行,结果应该为aaaaaa-\n-bbbbbb-\n-cccccc。但实际情况却是:

跳过了printf("bbbbbb\n");这条输出语句。这就好比switch..case一样,根据case通道执行其后的操作,不回转,只往下进行。是不是好理解了一点。goto无条件跳转语句 可以与if语句搭配来形成有条件的跳转。我们顺便也将其如何实现循环也一并说了。还是老例子,打印1-100,使用goto实现。

#include <stdio.h>

int main()
{
    int i=1;
START:
    printf("%d\n",i++);
    if(i>100) goto EXIT;
    else goto START;  
EXIT:
    return 0;
}

 

重要的事情不怕说,希望大家记住,慎用goto语句。它会使得程序的执行循序变得混乱,cpu需要不停地进行跳转,效率比较低,而且goto语句任何程序可以修改,程序中如果出现多处相同的标签会使得程序逻辑变得复杂,因此,在开发中时慎用goto语句。但其也有应用场景,如下所示:

*------------------------------------------------------------------------------------------------------------------------------*

注意:下节课我们要讲循环的嵌套使用,这节课看完之后在网上找点题练习一下,多练多敲代码,发现问题,总结规律才是王道。 

  • 17
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值