当前位置:嗨网首页>书籍在线阅读

02-循环简介

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

5.1 循环简介

程序清单5.1是一个简单的程序示例,该程序进行了简单的运算,计算穿9码男鞋的脚长(单位:英寸)。为了让读者体会循环的好处,程序的第1个版本演示了不使用循环编程的局限性。

程序清单5.1  shoes1.c 程序

/* shoes1.c -- 把鞋码转换成英寸 */
#include <stdio.h>
#define ADJUST 7.31                // 字符常量
int main(void)
{
     const double SCALE = 0.333;    // const变量
     double shoe, foot;
     shoe = 9.0;
     foot = SCALE * shoe + ADJUST;
     printf("Shoe size (men's)    foot length\n");
     printf("%10.1f %15.2f inches\n", shoe, foot);
     return 0;
}

该程序的输出如下:

Shoe size (men's) foot length
      9.0         10.31 inches

该程序演示了用 #define 指令创建符号常量和用 const 限定符创建在程序运行过程中不可更改的变量。程序使用了乘法和加法,假定用户穿9码的鞋,以英寸为单位打印用户的脚长。你可能会说:“这太简单了,我用笔算比敲程序还要快。”说得没错。写出来的程序只使用一次(本例即只根据一只鞋的尺码计算一次脚长),实在是浪费时间和精力。如果写成交互式程序会更有用,但是仍无法利用计算机的优势。

应该让计算机做一些重复计算的工作。毕竟,需要重复计算是使用计算机的主要原因。C提供多种方法做重复计算,我们在这里简单介绍一种—— while 循环。它能让你对运算符做更有趣地探索。程序清单5.2演示了用循环改进后的程序。

程序清单5.2  shoes2.c 程序

/* shoes2.c -- 计算多个不同鞋码对应的脚长 */
#include <stdio.h>
#define ADJUST 7.31                 // 字符常量
int main(void)
{
     const double SCALE = 0.333;    // const变量
     double shoe, foot;
     printf("Shoe size (men's)    foot length\n");
     shoe = 3.0;
     while (shoe < 18.5)          /* while循环开始 */
     {                            /* 块开始   */
          foot = SCALE * shoe + ADJUST;
          printf("%10.1f %15.2f inches\n", shoe, foot);
          shoe = shoe + 1.0;
     }                            /* 块结束        */
     printf("If the shoe fits, wear it.\n");
     return 0;
}

下面是 shoes2.c 程序的输出( ... 表示并未显示完整,有删节):

Shoe size (men's) foot length
        3.0         8.31 inches
        4.0         8.64 inches
        5.0         8.97 inches
        6.0         9.31 inches
...
        16.0        12.64 inches
        17.0        12.97 inches
        18.0        13.30 inches
If the shoe fits, wear it.

(如果读者对此颇有研究,应该知道该程序不符合实际情况。程序中假定了一个统一的鞋码系统。)

下面解释一下 while 循环的原理。当程序第1次到达 while 循环时,会检查圆括号中的条件是否为真。该程序中,条件表达式如下:

shoe < 18.5

符号<的意思是小于。变量 shoe 被初始化为 3.0 ,显然小于 18.5 。因此,该条件为真,程序进入块中继续执行,把尺码转换成英寸。然后打印计算的结果。下一条语句把 shoe 增加 1.0 ,使 shoe 的值为 4.0

shoe = shoe + 1.0;

此时,程序返回while入口部分检查条件。为何要返回 while 的入口部分?因为上面这条语句的下面是右花括号( } ),代码使用一对花括号( {} )来标出 while 循环的范围。花括号之间的内容就是要被重复执行的内容。花括号以及被花括号括起来的部分被称为块(block)。现在,回到程序中。因为 4 小于 18.5 ,所以要重复执行被花括号括起来的所有内容(用计算机术语来说就是,程序循环这些语句)。该循环过程一直持续到 shoe 的值为 19.0 。此时,循环的条件是 shoe18.5 ,相当于 1918.5 ,所以该条件为假。

出现这种情况后,控制转到紧跟 while 循环后面的第1条语句。该例中,是最后的 printf() 语句。

可以很方便地修改该程序用于其他转换。例如,把 SCALE 设置成 1.8ADJUST 设置成 32.0 ,该程序便可把摄氏温度转换成华氏温度;把 SCALE 设置成 0.6214ADJUST 设置成 0 ,该程序便可把公里转换成英里。注意,修改了设置后,还要更改打印的消息,以免前后表述不一。

通过 while 循环能便捷灵活地控制程序。现在,我们来学习程序中会用到的基本运算符。