for 语句
很多时候,我们需要完成同一个任务,可以写出多种不同的程序。如果比如我们希望打印一张温度转换的对照表,方便搭建查阅,而不是每次执行程序来查看。我们只需要改变输入值,然后重复执行转换公式,就可以得到对应的温度了。
前面我们用到了while循环,这里我们使用另外一种循环语句,叫for循环。
我们来改写温度转换程序。
#include <stdio.h>
/* 打印华氏温度-摄氏温度对照表 */
int main()
{
int i ;
for (i= 0; i<= 300; i= i+ 20)
printf("%3d %6.1f\n", i, (5.0/9.0)*(i-32));
}Code language: C++ (cpp)
执行结果
C:\cdemo>gcc hello.c -o hello.exe
C:\cdemo>hello
0 -17.8
20 -6.7
40 4.4
60 15.6
80 26.7
100 37.8
120 48.9
140 60.0
160 71.1
180 82.2
200 93.3
220 104.4
240 115.6
260 126.7
280 137.8
300 148.9Code language: CSS (css)
程序输出结果和之前版本完全一致,但代码写法截然不同。
最大改动:大量变量被精简,只保留整型变量i 对应上节课中的fahr。
循环起始值、上限、步长全部直接写在for语句中;
摄氏温度计算公式直接作为printf第三个参数,不再单独使用赋值语句。
这条改动体现一条通用规则:凡是允许使用某类型数值的地方,都可以使用同类型的复杂表达式。printf格式符%6.1f要求对应参数是浮点数,因此此处可以直接放入浮点运算表达式。
for是循环语句,可以看作while循环的通用形式。和前面的while版本对比,很容易理解运行逻辑。
括号内由分号隔开三部分:
- 初始化:
i = 0
只在循环开始前执行一次。 - 循环条件判断:
i <= 300
计算条件,若结果为真,则执行循环体(本例就是一条printf); - 增量表达式:
i = i + 20
循环体执行完毕后运行增量,随后再次判断条件。
一旦条件为假,循环结束。
和while一样,循环体可以是单条语句,也可以是大括号包裹的多条语句。初始化、条件、增量都可以是任意合法表达式。
选用while还是for没有硬性规定,以代码清晰为准。
当循环初始化、自增语句简洁且逻辑关联紧密时,优先使用for:它把循环控制逻辑集中写在一起,代码更加紧凑。
例子
修改温度转换程序,反向打印表格:从300度向下打印至0度。
#include <stdio.h>
int main(void)
{
int i;
// 初始300,条件 >=0,每次减20
for (i= 300; i>= 0; i= i- 20)
{
printf("%3d %6.1f\n", i, (5.0/9.0)*(i- 32));
}
return 0;
}Code language: PHP (php)
执行结果
C:\cdemo>gcc hello.c -o hello.exe
C:\cdemo>hello
300 148.9
280 137.8
260 126.7
240 115.6
220 104.4
200 93.3
180 82.2
160 71.1
140 60.0
120 48.9
100 37.8
80 26.7
60 15.6
40 4.4
20 -6.7
0 -17.8Code language: CSS (css)
关键
- 初始化:
i= 300 - 判断条件:
i >= 0 - 迭代:
i= i- 20(也可简写i-= 20)
简写版本
#include <stdio.h>
int main(void)
{
for (int i= 300; i>= 0; i-= 20)
printf("%3d %6.1f\n", i, (5.0/9.0)*(i-32));
return 0;
}Code language: PHP (php)
i的声明甚至都可以直接放到for语句的括号里面。
