对于计算机科学而言,一门语言应该提供三种形式的程序流:
(1)执行语句序列
(2)循环
(3)分支
一、while循环
(1)while循环通用形式
while(expression)
{
statement;
}
(2)expression是值之间的比较,可以使用任何表达式。若expression为真,执行statement一次,然后再次判断expression。在expression为假之前,循环的判断和执行一直重复进行。每一次循环都被称为一次迭代
(3)在构建while循环时,必须让测试表达式的值有变化,表达式的值最终要为假。否则,循环就不会终止。
(4)只有在对测试条件求值的时候,才决定是终止还是继续循环。
(5)while循环是使用入口条件的有条件循环。必须满足测试条件才能进入循环体。所以while循环可能一次都不执行。
(7)while循环的测试条件属于完整表达式,是程序的序列点,表达式的所有副作用都在执行下一条语句之前进行。
(6)只有在测试条件后面的单独语句(简单或复合)才是循环部分。
while(scanf("%d", &num) == 1)
; //跳过整数输入
在C语言中,单独的分号表示空语句,什么也不做。
二、用关系运算符和表达式比较大小
(1)while循环经常依赖测试表达式作比较,这样的表达式被称为关系表达式,出现在关系表达式中间的运算符被称为关系运算符
(2)在关系运算符中,需要特别留意的是判等运算符==的形式。在C语言中,两个由紧邻的等号组成的运算符(==)表示相等,一个单独的等号(=)表示赋值运算符。如果待比较的值是一个常量,可以将该常量放在==的左侧,有助于编译器捕捉错误。
(3)在比较浮点数时,尽量只是用大于(>)或小于(<),因为浮点数在计算机中通常是一个近似值,会导致逻辑上应该相等的两个数实际上却不相等。
(4)在C语言中,非零为真,零值为假
(5)关系运算符的优先级低于算术运算符,高于赋值运算符
三、for循环
for循环的通用形式:
for(initialize; test; update)
{
statement;
}
(1)for循环将初始化、测试和更新组合在一处,三个表达式之间以分号隔开。
(2)初始化表达式只在for循环开始时执行一次;测试条件在执行循环之前对表达式求值,若值为假,循环结束;更新表达式在每次循环体结束时求值,然后对测试条件求值。
(3)for圆括号中的表达式也叫控制表达式,都是完整表达式,所以每个表达式的副作用都在开始执行下一个表达式之前发生。
(4)可以省略for圆括号中的一个或多个表达式,但是不能省略分号
int count;
count = 0; //初始化
for(; count < 10; ) //圆括号中只有一个测试条件
{
printf("OK!\n");
count++; //更新
}
四、逗号运算符
逗号运算符扩展了for循环的灵活性,以便在循环头中包含更多的表达式。但逗号运算符并不局限于在for循环中使用。
(1)逗号运算符是一个序列点,保证被它分隔的表达式从左向右求值。(非常重要)
(2)整个逗号表达式的值是最右侧项的值。
x = (y = 3, z = y * y, 55); //x = 55
num = 345, 678; //这个表达式被逗号分为num = 345和678两部分,整个表达式的值是678
五、出口条件循环:do-while
do-while通用形式
do{
statement;
}while(expression); //()之后一定要以分号结尾
(1)do-while在循环的每次迭代之后检查测试条件,所以do-while循环的循环体至少能够执行一次
(2)在while(expression)之后,一定要留意,必须以分号结尾
六、嵌套循环
嵌套循环是指在一个循环中包含另一个循环,常被用于按行和列显式数据,一个循环负责处理行,另一个循环负责处理一行中的所有列。