文章目录
循环
while循环
通用形式
while ( expression )
statement
具体运用
-
while是入口条件循环,在while之前必须获取所需要的数据,并进行检查,必须满足循环条件才能进入循环体。
-
expression:循环条件。也就是说,expression是值之间的比较,可以使用任何表达式。通常用关系表达式作为测试条件的语句可以使用任何表达式作为测试条件,非零为真,零为假。
-
statement:这部分可以是以分号结尾的简单语句,也可以是用花括号括起来的复合语句。
-
迭代:如果expression为真,执行 statement部分一次,然后再次判断
expression。在expression为假之前,循环的判断和执行一直重复进行。
每次循环都被称为一次迭代。
for循环
形式
for ( initialize; test; update )
statement
具体运用
- 与while相同,for也是入口条件循环。
- initialize:初始化,只会在for循环开始时执行一次。
- test:是测试条件,在执行循环之前对表达式求值。
- update:执行更新,在每次循环结束时求值。
多种用法
- 可以使用递减运算符来递减计数器,如for (secs = 5; secs > 0; secs–)
- 可以让计数器递增2、10等
- 可以用字符代替数字计数:为字符在内部是以整数形式储存的,因此该循环实际上仍是用整数来计数。
- 可以让递增的量几何增长,而不是算术增长。如for (num = 1; numnumnum <= 216; num++)
- 可以省略一个或多个表达式(但是不能省略分号),如for (n = 3; ans <= 25;)
- 第1个表达式不一定是给变量赋初值,也可以使用printf()。
- 循环体中的行为可以改变循环头中的表达式。
do while循环
形式
do
statement
while ( expression );
具体运用
- do while是出口条件循环,即在循环的每次迭代之后检查测试条件,这保证了至少执行循环体中的内容一次。
- do是个前缀,具体执行什么看statement部分。
- 执行一次后会进行while的条件测试,在 expression 为假或 0 之前重复执行循环体中的内容。
- do while循环以分号结尾。
不确定循环和计数循环
- 不确定循环:在测试表达式为假之前,预先不知道要执行多少次循环。一般用于与用户存在交互的循环。
- 计数循环:在执行循环之前就知道要重复执行多少次。
循环的选择
- 确定是需要入口条件循环还是出口条件循环。
- 一般而言,当循环涉及初始化和更新变量时,用for循环比较合适,而在其他情况下用while循环更好。
嵌套循环
嵌套循环指在一个循环内包含另一个循环。嵌套循环常用于按行和列显示数据,也就是说,一个循环处理一行中的所有列,另一个循环处理所有的行。
案例
分析
第10行开始的for循环被称为外层循环,第12行开始的for循环被称为内层循环。
第1条语句是内层的for循环,该循环要执行10次,在同一行打印字符A~J;
第2条语句是外层循环的printf(“\n”);,该语句的效果是另起一行,这样在下一次运行内层循环时,将在下一行打印的字符。
关系表达式
循环经常依赖测试表达式作比较,这样的表达式被称为关系表达式,出现在关系表达式中间的运算符叫做关系运算符。
关系运算符
注
- ==是关系运算符是等于的意思,不能与=(赋值运算符)混用。赋值运算符把一个值赋给它左侧的变量;而关系相等运算符检查它左侧和右侧的值是否相等,不会改变左侧变量的值。
如果待比较的一个值是常量,可以把该常量放在左侧有助于编译器捕获错误,是因 为C语言不允许给常量赋值,编译器会把赋值运算符的这种用法作为语法错误标记出来。
- 虽然关系运算符也可用来比较浮点数,但是要注意:比较浮点数时,尽量只使用<和>。因为浮点数的舍入误差会导致在逻辑上应该相等的两数却不相等。
优先级
关系运算符的优先级比算术运算符(包括+和-)低,比赋值运算符高。与其他大多数运算符一样,关系运算符的结合律也是从左往右。
关系运算符之间有两种不同的优先级。
高优先级组: <<= >>=
低优先级组: == !=
真值
简介
一般而言,所有的非零值都视为真,只有0被视为假。
一些C程序使用下面的循环结构,由于1为真,所以循环会一直进行。
新的_Bool类型
在编程中,表示真或假的变量被称为布尔变量,所以_Bool是C语言中布尔变量的类型名。如果把其他非零数值赋给_Bool类型的变量,该变量会被设置为1。这反映了C把所有的非零值都视为真。
C99提供了stdbool.h头文件,该头文件让bool成为_Bool的别名,而且还把true和false分别定义为1和0的符号常量。包含该头文件后,写出的代码可以与C++兼容,因为C++把bool、true和false定义为关键字。
其他运算符
+= 、-= 、 *= 、/= 、%=
+= 、-= 、 *= 、/= 、%=,其用法都是左侧是一个变量名,右侧是一个表达式。赋给变量的新值是根据右侧表达式的值调整后的值。
a += 20 与 a = a + 20 相同,其他赋值运算符用法类似。
以上提到的赋值运算符与=的优先级相同,即比+或*优先级低。
逗号运算符
逗号运算符扩展了for循环的灵活性,以便在循环头中包含更多的表达式。它并不局限于在for循环中使用,但是这是它最常用的地方。
性质
它保证了被它分隔的表达式从左往右求值。
在该表达式中,先递增ounce,然后在第2个子表达式中使用ounce的新
值。
注意
逗号也可用作分隔符。如char ch, date;在此语句中的逗号是分隔符,不是逗号运算符。