第五章 循环控制(一)

2023-12-13 12:29:36

在C语言编程中,总有一些程序代码得要被反复多次执行,例如要计算从 1加到100的和是多少,这就要用到循环控制。

一、循环控制语句简介与 goto、while、do…while语句

1、循环控制语句介绍

前面讲过程序的三种基本结构顺序结构、选择结构、循环结构。

选择结构,就是前面章节所讲解的if语句、switch语句等。而循环结构,就是将要讲解的 goto语句、while语句、do...while语句以及后面要讲解的for语句。

几乎所有有实用价值的应用程序都会包含循环结构。比如计算点餐时数量和价格总数。

2、goto语句

goto语句被称为无条件转向语句。用来跳转到某个程序位置进行执行。

一般形式为:

goto语句标号;

其中,语句标号是一个标识符(只能由字母、数字、下划线三种字符组成,且第一个字符必须是字母或者下划线 ,并且标识符不可以是系统中的保留字 )。

goto num;? ? //合法

got 123;? ? ?? //不合法,因为第一个字符是数字

goto 是一个有争议的语句,有人说 goto 语句的使用会使程序的可读性变差,所以要限制使用 ,但作为程序开发人员,如果有使用的必要 ,能够简化程序流程、提高工作效率,那就用。

goto的主要用途:

1)与 if语句一起构成循环结构。

2)从循环体内跳转到循环体外(后面会介绍循环体的概念),不过并不推荐这种跳转方式,因为这破坏了结构化程序设计原则,除非万不得已,没有更好的实现办法时才这样用。

例:做1到100的加法运算。

上面的代码,loop是语句标号行,loop本身是一个标号名,后面跟一个冒号,当程序流程执行goto loop语句时可以直接跳转向loop标号所在行并重新继续往下执行,如此反复。if条件每成立一次,i值就不断加1(i++),sum 也不断累加最新的i值(sum=sum+i),当i值超过100时,if条件不再成立,程序执行流程直接跳过if语句,执行后面的printf 语句输出结果值。

在很多情况下 ,可以用其他的循环语句来代替 goto语句, 目前来看,goto语句的应用场合会比较少,除非觉得 goto语句特别有必要用的时候才用。还有,将来学习函数时,还要知道一点,goto语句不能跨函数使用。

例:

void func1(){
    val1:
        int k;
        k=1;
        goto val1;
}
void func2(){
    vall2:
        int a;
        a=1;
}

不能把funcl函数中的goto val1;修改为goto val2;? 这样会导致语法错误,val2标号处于 func2 函数中,goto语句不能跨函数跳转。

3、while语句

while语句是当型循环结构。

格式:

while(表达式) {? //只有1条语句时,可以省略{}

????????要执行的语句;

}

当型循环结构的最大特点是先判断表达式的值,如果表达式的值为真(非0),就执行循环体语句,如此反复。如果表达式的值在第一次判断时就为假 (0) ,那么"循环体语句”部分1次也不会执行。

例:做1到100的加法运算。

4、do...while语句

do...while语句是直到型循环结构。

do{?//只有1条语句时,可以省略{}

????????要执行的语句;

}while(表达式)

直到型循环结构的最大特点是先执行 一次循环体语句,然后判断表达式的值,如果表达式的值为真(非 0)时 ,继续执行循 环体语句 ,然后继续判断表达式的值,如此反复。一直到表达式的值为假(0)的 , 跳出整个 do…while循环继续往后执行。至少会执行循环体语句一次, 然后才判断表达式值是否为真(非 0) 。

例:做1到100的加法运算。

上面的结果与while语句的结果相同。

什么情况结果会不同?

例:如果"表达式"的值一开始就为假 (0)的时候, while与 do...while这两种循环语句所写的代码得到的结果就会不同 ,看看具体的写法:

(1)先用当型循环语句 while 实现一次下面的从 1 加到 10 的求和代码:

(2) 再用直到型循环语句 do…while实现一次和上面相同功能的代码:

结论:当循环语句中表达式第一次的判断结果为真(非 0)时,两种循环得到的最终结果相同,否则 ,两种循环得到的最终结果不同。

在实际应用中,while语句使用的场合更多,do...while语句使用的场合相对较少,因为多数情况下do...while语句可以被 while语句取代。

文章来源:https://blog.csdn.net/weixin_30479905/article/details/134967488
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。