1
C语言程序设计
1.4.6.1 3.6.1 while语句

3.6.1 while语句

while语句的一般形式为:

  while(表达式) 语句;

这里语句为循环体,是单语句,若循环体需执行多条语句,须采用复合语句。

while语句执行过程如下:

首先计算表达式,当表达式的值为真时,执行一次循环体中的语句,重复上述操作到表达式的值为假时才退出循环。流程控制如图3.6.1所示。

img262

图3.6.1 while循环流程控制

这种循环控制结构也称为“先判定”循环结构,特点是当条件成立时,执行循环结构;若一开始条件就不成立,则一次循环也不执行。

例如:计算1+2+3+…+100。

img263

  }

上面的语句同前节的for语句一样完成100个自然数求和。由于while语句中有控制循环结束的条件表达式,因此要保证循环结构正常执行,在进入循环之前应先给有关循环控制变量赋初值(如此例中i=1),以保证循环控制表达式中的所有变量都有确定的值,并且在循环体内必须有修改循环控制变量的语句(如此例中i++;),以便使循环判定条件表达式的值能由“真”变到“假”,保证循环能达到结束条件,正常退出。

将此例与前节完成同样求和计算的for语句相比,可以看出,对于循环次数预知的计数循环,采用for语句更简便,而while语句适用于循环次数不能确定的条件循环。

例如:读入字符并回显,直到读入'#'字符为止。

img264

程序段中的getchar()和putchar()是第三章中已介绍过的简单的输入输出函数。程序段的功能是输入一个字符并显示,循环操作直到输入了字符'#'后退出循环。预先不能确定循环次数。该程序段也可写成下面简洁的形式:

img265

又如:将读入的小写字母转换成大写字母,一旦读入其他字符时,结束转换处理。

img266

表达式中的两对小括号可以不加,运算优先顺序不变,但多加小括号使程序更准确和清楚易读。

例3-9 编写程序显示所有可见字符的ASCII码标准代码。

在实用中经常需要查找字符的ASCII码,ASCII码包括可见字符的代码及若干控制字符的代码。我们现在编写一个程序按以下方式显示所有可见字符的ASCII码(从ASCII代码32开始至ASCII代码126为止)。

程序如下:

  1 //3-9.cpp ASCII码标准代码显示

  2 #include 〈stdio.h〉

img267

程序的执行结果如下:

img268

img269

例3-10 输入数字d=0~9,找1~100中满足以下条件的数:该数的本身及它的平方中都含有数字d。

程序如下:

img270

img271

程序的执行结果是:

输入:

  1

输出:

  d=1

  1  1

  10  100

  11  121

  12  144

  13  169

  14  196

  19  361

  21  441

  31  961

  41  1681

  51  2601

  61  3721

  71  5041

  81  6561

  91  8281

  100 10000

程序首先读入数字d,然后考虑整数i(i=1~100)是否满足要求。程序中的第一个while语句检查数字i的各位中是否有和d相等的数,如果没有,那么改变i值,检查下一个数。如果有,则执行第二个while语句,检查数字i的平方的各位中是否有和d相等的数,如果有,则输出相应的i值。第15行和第16行的“k=j%10,j/=10”依次取出j的个位、十位、百位……

例3-11 编程序显示2的各次幂的值,直到某次幂的值大于给定的整数时为止。

程序如下:

img272

程序的执行结果是:

  Enter the largest value to be printed:

输入:1222

输出:

  0    1

  1    2

  2    4

  3    8

  4    16

  5    32

  6    64

  7    128

  8    256

  9    512

  10    1024