C 知识量:16 - 74 - 317
循环可以分为不确定循环和计数循环:
不确定循环是指在测试表达式为假之前,预先不知道要执行多少次循环。例如:让用户在每次循环时输入数据,以确定是否要继续循环。
计数循环是指在执行循环之前就知道要重复执行多少次。要创建计数循环需要做到:1、必须初始化计数器。2、计数器与有限的值作比较。3、每次循环时递增或递减计数器。
使用计数循环时,一定不要漏掉计数器的递增或递减,否则就开启了无限循环模式。有一种更好的循环模式可以避免出现以上情况,那就是for循环。
for循环将计数循环的3个行为(初始化、测试和更新)组合在一起。示例:
#include <stdio.h> int main(void) { int i; for (i = 5; i < 10; i++) { printf("Body of for is going,now,i=%d\n", i); } system("pause"); return 0; }
关键字for后面的圆括号中有3个表达式,分别用两个分号隔开:
第1个表达式是初始化,只会在for循环开始时执行一次。
第2个表达式是测试条件,在执行循环之前对表达式求值。
第3个表达式执行更新,在每次循环结束时求值。
完整的for语句还包括后面的简单语句或复合语句。for圆括号中的表达式也叫做控制表达式,它们都是完整表达式,所以每个表达式的副作用(例如:变量i递增)都发生在对下一个表达式求值之前。
for循环是非常灵活的,灵活性远超过while循环。以下是一些for循环的用法:
可以使用递减运算符来递减计数器,不一定非要递增。
可以让计数器递增2、5、10等等。
for (i = 5; i < 100; i = i + 5) {;}
可以用字符代替数字计数。
char i; for (i = 'a'; i <= 'z'; i++) {;}
除了测试迭代次数外,还可以测试其他条件。
for (i = 5 ; i * i <= 3125 ; i++) {;} /*测试平方数*/
可以让递增的量几何增长,而不是算术增长。
for (i = 10; i <= 1000; i = i * 1.1) {;} /*每次增长10%*/
第3个表达式可以是任意合法的表达式,每迭代一次都会更新该表达式。
for (i = 2; j <= 1000; j = (++i * 5)) {;}
可以省略一个或多个表达式(但是不能省略分号),只要在循环体中包含能够结束循环的语句即可。
for (i = 1; i <= 10;) { i++; }
第1个表达式不一定是给变量赋初值,也可以使用printf()函数,注意:执行循环时,第1个表达式只执行1次。
int i = 1; for (printf("hello!"); i <= 10; i++) {;}
循环体中的行为可以改变循环头中的表达式。
C语言有许多赋值运算符,其中最基本的是=,其他赋值运算符都用于更新变量,其用法都是左侧是一个变量名,右侧是一个表达式。
赋值运算符示例 | 等价表达式 |
---|---|
i+=100 | i=i+100 |
i-=100 | i=i-100 |
i*=100 | i=i*100 |
i/=100 | i=i/100 |
i%=100 | i=i%100 |
以上赋值运算符的优先级与=相同。这些组合形式的赋值运算符可以让代码更紧凑,生成的机器代码更高效。
逗号运算符扩展了for循环的灵活性,以便在循环头中包含更多的表达式。例如:
#include <stdio.h> int main(void) { int i; for (printf("hello!\n"), i = 0; i <= 10; i++, printf("step:%i\n", i)) { ; } system("pause"); return 0; }
运行结果为:
hello! step:1 step:2 step:3 step:4 step:5 step:6 step:7 step:8 step:9 step:10 step:11
for初次循环前执行一次printf()函数,打印“hello”。此后每完成一次循环,打印一次“step”。
逗号运算符有两个其他性质:
1、保证了被它分隔的表达式从左往右求值,也就是说,逗号是一个序列点,所以逗号左侧项的所有副作用都在程序执行逗号右侧项之前发生。
x++, y = x * 3;
以上表达式中,先对x进行递增,再用于y的求值。
2、整个逗号表达式的值是右侧项的值。
x = (100, 200);
以上表达式中,x的值等于200。此外,x=100,200;等价于x=100;200;其中,200;也是一条语句,但是什么也不做。
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6