首页 > 其他分享 > 循环

循环

时间:2023-02-13 21:01:29浏览次数:24  
标签:语句 逗号 运算符 while 循环 表达式

对于计算机科学而言,一门语言应该提供以下三种形式的程序流:执行语句序列;如果满足某些条件就会重复执行语句序列;通过测试选择执行哪一个语句序列。对于第一种顺序执行的语句序列,我们已经很熟悉了,前面介绍的大部分都是顺序执行;对于第二种循环形式有三种:while循环、for循环和do while循环;第三种形式用于在不同的条件下,执行不同的方案。

1.while循环

while语句是一种入口条件循环,也就是说,在执行循环体之前必须判断是否满足循环条件,因此,循环又可能不被执行,循环体可以是简单语句,也可以是复合语句。

while循环的通用格式如下:

while(expression)
statement;

对于expression都使用关系表达式,实际上,就是对expression值的一次判断,如果值非0(表达式为真),就执行statement部分一次,然后再判断expression的值,直到其值为0(表达式为假),则跳出循环。statement部分可以是以分号结尾的简单语句,也可以是用花括号括起来的复合语句。每次循环都称为一次迭代。

循环中有一点非常重要,那就是避免无限循环。在构建while循环时,必须让测试表达式的值有变化,并最终变为0,以跳出循环;或者使用break等跳出循环。while循环整体就是一个语句,即使statement部分是复合语句,它们整体被看作是一个迭代语句。

while循环中的测试表达式,通常用关系表达式,即关系运算符与运算对象的表达式。关系表达式为真,求值为1;关系表达式为假,求值为0。下表将列出所有C语言的关系运算符:

运算符

含义

<

小于

<=

小于或等于

==

等于

>=

大于或等于

>

大于

!=

不等于

我们看下面的例子,

5 = n1;     //语法错误,C语言不允许给常量赋值
5 == n1; //判断n1的值是否为5

我们平时熟悉的都是5<n1等类似的语句,实际上5==n1的语句在构建是否相等的表达式时,比n1==5更常用。

关系运算符的优先级比算数运算符低,比赋值运算符高。像-x < -y + 5,等价于-x < (-y + 5),对于判断的结果返回0或1,即_Bool类型。另外,如果添加了头文件stdbool.h,能够直接使用bool声明,因为bool是_Bool的别名;如果系统不支持_Bool类型,也能够直接使用int替换_Bool。同时在关系算符当中,也有两种不同的优先级:<、<=、>、>=的优先级高于==和!=,与大部分运算符一样,关系运算符的结合律也是从左往右(=和一元-、一元+是从右往左)。结合我们之前学的运算符,下面将给出C运算符的完整优先级表:

运算符(优先级从高到低)

结合律

()

从左往右

-、+、++、--、sizeof

从右往左

*、/、%

从左往右

+、-(二元)

从左往右

<、>、<=、>=

从左往右

==、!=

从左往右

=

从右往左

2.for循环

在创建一个while循环时,有时需要初始化计数器、计数器与有限值作比较、每次循环时改变计数器的值,虽然看上去很简单,但实际上总会出现各种错误。因此,针对上述3个行为(初始化、测试、更新),我们使用了for循环。

for语句使用3个表达式控制循环过程,分别用分号隔开。for循环的通用格式如下:

for( initialize; test; update)
statement;

initialize表达式在执行循环体之前,只执行一次;然后对test表达式求值,如果表达式为真,则执行循环体;接着对update表达式求值(副作用更新计数器的值),并再次检查test表达式。for循环是一种入口条件循环,与while循环相同,因此,for循环也可能一次都不执行。

C有许多赋值运算符。最基本、最常用的是=,它把右侧表达式的值赋给左侧的变量。其它赋值运算符都用于更新变量,其用法与=相同,其它赋值运算符分别是+=、-=、*=、/=、%=,并且它们的优先级也与=相同。并非一定要使用其它赋值运算符,但是它们能够代码更紧凑。而且与一般形式相比,组合形式的赋值运算符生成的机器代码更加高效。当for循环中有一些复杂的表达式时,用它们代替非常有效。

接下来,将介绍一个大家可能很熟悉的运算符—逗号运算符,。逗号运算符扩展了for循环的灵活性,以便在循环头中塞进一些复杂的表达式,当然大家感觉更常见的可能时,声明多个变量时使用​​int n1, n2;​​。

for(rate = 4, profit= 10; rate < 0; profit *= rate, rate--)
statement;

可以看到使用逗号运算符后,for语句更为灵活,并且将复杂的表达式,能够用逗号运算符化简。除此之外,逗号运算符有两个其它性质:第一,逗号运算符保证了被它分割的表达式,从左往右开始求值(即逗号运算符是一个序列点,所有逗号左侧项的副作用都在程序执行逗号右侧项之前发生);第二,整个逗号表达式的值,是右侧项的值。

price = 249, 500; //等价于下面的语句,此逗号表达式的值是500
price = 249;
500;

price = (249, 500); //等价于下面的语句,括号里的逗号表达式值为500
price = 500;

3.do while循环

前面介绍了两个入口条件循环,即在每次迭代之前检查测试条件,所以有可能根本不执行循环体;而do while循环则输入出口条件循环,即在循环的每次迭代后检查测试条件,这保证了循环体至少被执行一次。下面是do while循环的通用格式:

do
statement;
while(expression);

4.嵌套循环

嵌套循环指在一个循环内包含另一个循环。嵌套循环常用于按行和列显示数据,也就是说,一个循环处理所有的行,另一个循环处理所有的列;像二维数组,稀疏表等。其次,内层循环在每次外层循环迭代时都执行完所有的循环。




标签:语句,逗号,运算符,while,循环,表达式
From: https://blog.51cto.com/u_15944236/6054708

相关文章