1
C语言程序设计
1.4.6.2 3.6.2 do while语句

3.6.2 do while语句

do while语句的一般形式为:

  do语句;while(表达式);

这里语句为循环体。

执行过程:

首先执行一次循环体,然后再计算表达式,如果表达式的值为真,则再执行一次循环体。重复上述操作,直到表达式的值为假时,退出循环。流程控制见图3.6.2。

img273

图3.6.2 do while循环流程控制

do while语句可实现一种“后判定”循环结构。do while语句与while语句不同之处是,先执行循环体,后判断条件,因此无论条件是否成立,将至少执行一次循环。而while语句先判断条件,后执行循环体,因此可能一次循环也不执行。

例如:跳过输入的任意多个空格字符,读入一个非空格字符。

img274

程序首先读入一个字符,如果为空格,继续读入字符直到读入一个非空格字符时退出循环。

以上功能也可用while语句实现:

img275

在循环之前,先读入一个字符,为循环控制变量赋初值,如果读入的字符为空格符,继续循环读入下一字符,直到读入非空格字符时退出循环,但若读入的第一个字符为非空格字符时,则一次循环也不执行。

当循环体为单语句时,可不加花括号,但为使程序清晰易读,通常加上花括号。

例3-12 编程序输入一串字符,以句号“.”作为输入结束标志,显示其中字母和数字的个数(请注意程序中使用do while语句的表达方式)。

程序如下:

img276

程序的执行结果是:

输入:

  I'm a beginer of C programming.

输出:

  The number of chars is 24.

  The number of digital is 0.

程序中用了两个变量ch_num和dig_num分别对输入的字母和数字字符计数,如果输入的字符数值在A~Z之间或a~z之间则它是一个字母,因此ch_num加1。如果输入的字符数值在0~9之间,则它是一个数字,因此dig_num加1。

例3-13 编制程序输入两个整数num和k,求num所对应的十六进制数从右往左数起的第k位。

程序如下:

  1 // 3-13.cpp

  2 #include 〈stdio.h〉

img277

程序的执行结果是:

输入:

  83 2

输出:

The 2th digit of the hexadecimal number 0x0053 is 5.

程序中第12到第17行的do while循环取出num所对应的十六进制数从右往左数起的第k位。第16行根据i和k的关系决定第k位的值,如果i〈k,说明num中不存在第k位,因而该位应为零,否则该位为变量j的值。第19行判别j是否大于等于10,如果是,则要用相应的字母来表示该位数,即用a表示数字10,用b表示数字11……

常见的编程错误3.3

img278 遗漏do语句最后的分号。

img279 在while语句的循环体中,没有提供使while条件最终变为假的运算表达式,通常会导致一个称为无限循环的错误。

img280 没有初始化各种计数器变量和总数变量导致逻辑错误。

img281 假定整数除法的结果采取四舍五入法(而不是截取整数部分)的话,会产生不正确的结果。

img282 企图用0做除数将导致一个致命的逻辑错误。

img283 将浮点数当做准确值来用可能导致错误的结果。

良好的编程习惯3.2

img284 多层的嵌套会使程序难于理解,因此设法避免使用超过三层的嵌套。

img285 在while语句或for语句的条件中使用终值,并使用关系运算符〈=,有助于避免相差一次的运算。