for循环

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版本对比,很容易理解运行逻辑。
括号内由分号隔开三部分

  1. 初始化:i = 0
    只在循环开始前执行一次
  2. 循环条件判断:i <= 300
    计算条件,若结果为真,则执行循环体(本例就是一条printf);
  3. 增量表达式: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)
关键
  1. 初始化:i= 300
  2. 判断条件:i >= 0
  3. 迭代: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语句的括号里面。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注