C

C 知识量:16 - 74 - 317

6.2 while语句><

while基本语法- 6.2.1 -

while循环的通用形式如下:

while (expression)
    statement

其中,statement部分可以是简单语句(以分号结尾),也可以是复合语句(以花括号括起来)。expression用于循环条件的判断,通常使用关系表达式,如果expression为真(或者说为非零),执行statement一次,然后再次判断expression。如果expression为假(0),结束循环,执行while循环体后面的语句。每次循环都被称为一次迭代。

终止while循环- 6.2.2 -

使用while循环一个很重要的事情就是确定while循环结束的条件必须能够实现。要做到这一点,通常需要让测试表达式的值有变化,表达式最终要为假,否则,循环就不会终止。

只有在对测试条件求值时,才决定是终止还是继续循环。

while循环是使用入口条件的有条件循环,所谓“有条件”指的是语句部分的执行取决于测试表达式描述的条件,该表达式是一个入口条件,必须满足条件才能进入循环体。下面示例的两个while循环,一个会进入循环体执行循环,一个从始至终不会执行循环。

#include <stdio.h>

int main(void) {
    int i = 5;
    while (i < 10) {  /*会执行循环*/
        printf("while No.1 is going,now,i=%d\n", i);
        i++;
    }
    i = 5; /*重置i为5*/
    while (i > 6) {  /*不会执行循环*/
        printf("while No.2 is going,now,i=%d\n", i);
        i++;
    }
    system("pause");
    return 0;
}

关系运算符- 6.2.3 -

while循环经常依赖测试表达式作比较,这样的表达式被称为关系表达式,出现在关系表达式中间的运算符叫做关系运算符。

C语言的关系运算符:

运算符含义
<小于
<=小于或等于
==等于
>=大于或等于
>大于
!=不等于

关系运算符常用于构造while语句和其他语句中用到的关系表达式,这些语句都会检查关系表达式为真还是为假。需要注意的是:不能用关系运算符比较字符串;可以用关系运算符比较浮点数,但是,尽量只使用<和>,不要使用=或含有=的关系表达式,因为浮点数的舍入误差会导致在逻辑上应该相等的两数却不相等。可以使用fabs()函数(声明在math.h头文件中)比较浮点数,该函数返回一个浮点值的绝对值。

通常,表达式为真的值是1,表达式为假的值是0。其实,对C语言来说,所有的非零值都被视为真,只有0被视为假。

新的_Bool类型- 6.2.4 -

C99标准针对关系表达式求值结果的真假值新增了_Bool类型。在编程中,表示真或假的变量被称为布尔变量,所以_Bool是C语言中布尔变量的类型名。_Bool类型的变量只能存储1(真)或0(假),如果把其他非零数赋值给_Bool类型的变量,该变量会被设置为1。这也体现了C语言把所有非零值都视为真。

C99标准提供了stdbool.h头文件,该头文件让bool成为_Bool的别名,而且将true和false分别定义为1和0的符号常量。包含该头文件后,写出的代码可以与C++兼容,在C++中,bool、true和false被定义为关键字。如果系统不支持_Bool类型,可以把_Bool替换成int。

优先级和关系运算符- 6.2.5 -

关系运算符的优先级比算术运算符低,比赋值运算符高。关系运算符之间有两种不同的优先级:

  • 高优先级组:<、<=、>、>=

  • 低优先级组:==、!=

与其他大多数运算符一样,关系运算符的结合律也是从左往右。