接上一节运算符、表达式和语句
C语言的循环语句有while循环,for循环和do
while循环,其中while循环和for循环在开发中常用,而且for循环的用法比较灵活,每种循环语句都需要使用到一个条件测试表达式,在这个表达式中常用到一些常见的比较运算符,下面首先介绍几个运算符。
一、C语言运算符
1、赋值运算符
C语言赋值运算有一种简写的形式,例如int a = a +1可简写为a+=1,类似地,其它减法、乘法、除法和取模都有类似的简写形式: -=、*=、/=、%=,代码例子:
int number = 9;
number += 2; // number = number + 2
printf("%d\n", number); // => 11
number -= 2; // number = number - 2
printf("%d\n", number); // => 9
number *= 2; // number = number * 2
printf("%d\n", number); // => 18
number /= 3; // number = number / 3
printf("%d\n", number); // => 6
number /= 5; // number = number % 5
printf("%d\n", number); // => 1
2、关系运算符
常用的关系运算符有:
运算符 | 含义 |
< | 小于 |
<= | 小于或等于 |
== | 等于 |
>= | 大于或等于 |
> | 大于 |
!= | 不等于 |
数据对象和关系运算符组成关系表达式,关系表达式的计算结果为布尔值0或1,可以用int创建布尔值,在C语言中比较特殊的是除了0是假其它值都是真。C99提供_Bool布尔类型,该类型创建布尔变量,只有0和1两种值,但是如果设置其它值会默认置为1,另外在头文件stdbool.h中提供bool类型,该类型是_Bool类型的别名,同时提供true和false宏,可以很方便直观地定义一个布尔变量,代码示例如下:
int status = 0; // 使用int类型创建布尔变量
_Bool isChecked = 1; // 使用_Bool类型创建布尔变量
bool remembered = false; // 使用_Bool的类型别名bool创建布尔变量
if(status){
printf("current status is ok.\n");
}
else{
printf("status error.\n");
}
if(isChecked){
printf("checkbox checked.\n");
}
if(!remembered){
printf("remembered password.\n");
}
3、逗号运算符
C语言可以使用逗号运算符将多个表达式连接成一个表达式,该表达式从左到右计算,若要取整个表达式的计算结果则为最后一个表达式的值,例如(a=a+1, b=3)这个表达式先计算a的值再将b赋值为3,如果要取该表达式的结果,则表达式的结果为3,示例代码如下:
int var_01 = 3;
int var_02 = 5;
// 使用逗号运算符连接多个表达式,运算顺序从左到右
bool status = (var_01 += 1, var_02 = var_01 % 3); // status = true,因为表达式结果为4%3==1
if(status){
printf("status ok: 200.\n");
}
else{
printf("status error: 500.\n");
}
二、while循环语句
while循环的语法格式为:
while(条件测试表达式){
一条或多条语句;
}
条件测试表达式的运算结果为布尔值,这个地方是用布尔值判断是否执行while内部的语句,其中花括号{}在一条语句的时候可以省略,但建议使用,在上面运算符中可以看到,在这个条件测试表达式可以使用比较运算符和逗号运算符,只要保证该表达式的运算结果是布尔值即可,如果计算结果是真则执行内部语句,执行完一次重新判断条件,跳出循环体使用break,跳过本次循环使用continue,下面使用while循环语句计算1+3+5+…+99:
// while循环示例
int count = 0;
int index = 1;
while (1){
if(index > 99)
break; // 使用break跳出循环体
if(index % 2 == 1)
count = count + index;
index++;
}
printf("count: %d\n", count);
三、for循环语句
for循环的语法格式为:
for(初始表达式 ; 条件测试表达式 ; 更新表达式){
一条或多条语句
}
初始表达式:该表达式在循环开始前执行,仅执行一次,不一定是变量初始化,也可以执行其它语句,它和其它普通表达式没什么两样,你可以在这里做初始化动作,也可以调用函数等。
条件表达式:该表达式用于计算布尔值,在执行完初始表达式后执行该表达式,每执行完一次循环体都会重新执行该表达式。
更新表达式:更新操作,一般在这里更新计数器或指定计数步长。
for循环开始,首先执行初始表达式,然后执行条件测试表达式,通过则执行循环体语句,执行完去执行更新表达式,接着再次执行条件测试表达式,依此循环,for循环的使用相对灵活,下面是for循环使用的完整实例:
// for循环使用完整实例
// 1、计算1+2+3+...+99的for循环实现
// 在更新表达式中修改计数步长可省去不必要的计算
int count = 0;
int i;
for(i = 1;i < 100;i += 2){
count += i;
}
printf("%d\n", count);
// 2、输出字符A-Z
// 因为字符也是整数,所以可以作为计数器
char ch;
for(ch = 'A';ch <= 'Z';ch++){
printf("%c ", ch);
}
printf("\n");
// 3、从1开始计算小于100的平方数,并输出
int j;
for(j = 1;pow(j, 2) < 100;j++){
printf("%d ", (int)pow(j, 2));
}
其中for循环中的三个表达式都可以使用逗号运算符连接多个表达式,要注意的是第二个条件测试表达式需要得到表达式计算结果的布尔值,在更新表达式中设计一个合适的步长可以减少计算量。
四、do while循环语句
do while循环的语法格式为:
do{
一条或多条语句
}
while (条件测试表达式);
该循环会首先执行循环体再去执行条件测试表达式,所以do while循环至少执行一次循环体,注意该循环语句结束有分号,示例代码如下:
// 输出A-Z
char ch = 'A';
do{
printf("%c ", ch);
ch++;
}
while (ch <= 'Z');