|
由于计算机的快速运算能力,非常适合做反复、大量的重复运算。C语言提供了丰富的循环运算控制语句。以下程序根据表达式oC = (5/9)( oF-32)计算。打印出华摄0-300oF,每隔20oF一个数据点上的华氏、摄氏对照表。
# include <stdio.h>
/* print Fahrenheit-Celsius table for fahr=0,20,…,300 */
main( )
{
int lower, upper , step ;
float fahr , celsius ;
lower = 0 ;
upper = 300 ;
step = 20 ;
fahr = lower ;
printf ( "Fahr Celsius\n" ) ;
while (fahr <= upper )
{
celsius = (5.0 / 9.0) * ( fahr - 32.0 ) ;
printf ( "%3.0f%6.1f\n",fahr,celsius ) ;
fahr = fahr + step ;
}
}
程序中符号 /* 和 */ 之间的内容为注释。在编译时系统对注释部分不作处理,故不会影响程序的执行。为了提高程序的可读性,可在程序中需要的地方加入注释。
程序先给变量fahr设置初值lower,打印表头后,fahr从lower开始。每次计算出celsius并打印后,fahr增加20再做同样的计算、打印,一直到fahr大于或等于300为止,整个循环用while循环控制语句控制。while语句的一般形式为:
while(条件)语句
括号内一般为一个条件表达式,首先判断条件是否满足,如条件满足,则执行一次其后所跟的语句,然后再判断条件。如满足,则再执行语句,如此反复循环,一直到条件不满足为止。语句即为循环体。循环体内一般总是有使条件逐步趋于不满足的语句。C语言语法规定语句部分只能有一句语句,一般而言,一个循环体需要有多句语句构成,为此,可以用一对花括号({ })将这些语句括起来。从语法上讲,花括号括起的一组语句被认为是一句语句,称为复合语句,任何只允许有一句语句的地方都可以使用复合语句,如前面介绍的if语句中的语句部分。程序中,while语句首先判断是否fahr小于等于upper,如满足,说明还未计算到300Fo,则逐条执行复合语句内的语句。计算并打印出华氏度及摄氏度,打印时华氏度占三位,不保留小数。摄氏度则占6位,保留1位小数,表达式:
celsius = (5.0 / 9.0 ) * ( fahr - 32.0 )
中,5.0、9.0等带有小数的常量称为实型常量,C语言规定整型数与整型数相除,其商亦为整型数,故如写为
celsius = (5 / 9 ) * ( fahr - 32.0 )
由于5和9均为整常量其相除结果为整型数0,整个表达式的值将为0。
语句:
fahr = fahr + step ;
使fahr在原来值的基础上再加上一个Step(20),然后重新判断条件、计算、打印。由于每次fahr均加上一个step,使得fahr逐渐向300接近并最后超过300。使条件趋于不成立,最终将退出while循环。
对于循环,C语言另外提供了功能强大的for语句,上例程序可以用for语句写成如下形式:
# indude <stdio.h>
# define LOWER 0
# define UPPER 300
# define STEP 20
main( )
{
float celsius,fahr;
printf("Fahr celsius\n");
for( fahr = LOWER ; fahr <= UPPER ; fahr = fahr + stop )
{
celsius=(5.0/9.0)%(fahr-32.0);
printf("%6.0f%6.1f\n",fahr,celsius);
}
}
for语句最基本的形式为:
for(循环变量赋初值 ;循环条件判断 ; 修改循环变量)
语句
首先计算表达式1:循环变量赋初值,然后进入循环:计算表达式2:判断循环条件是否满足,如满足,则执行for的语句部分,该部分可以为一条语句,或一条复合语句。最后计算表达式3:修改循环变量,完成一次循环操作,再判断循环条件,如满足再执行语句,修改循环变量,如此一直反复,直至循环条件不满足,即退出循环。在本例中,先执行fahr = lower,然后判断表达式 fahr <= upper ,如满足,则执行其后面的复合语句,完成一次计算、打印输出操作,再执行表达式fahr = fahr + STEP,修改循环变量(使fahr逐步趋于接近并最后大于upper),然后,再转回到判断表达式fahr <= upper,如满足再继续循环,如此反复,从而退出循环。可以看出,在for语句中,循环初值赋值及循环变量修改均在for语句体内完成,而不象while语句那样在语句外要赋初值。循环体内要用语句修改循环变量,同时后面还将介绍,for语句括号内可以为三个任意的表达式,故for语句可以用来代替其它的循环控制语句,它是语言中功能最强大,最灵活的循环控制语句。
可以将计算摄氏温度的表达式直接写在printf( )函数内,则循环可写为:
for( fahr = LOWER ; fahr <= UPPER ; fahr = fahr + STEP )
printf ( "%6.0f %6.1f \n " , fahr , ( 5.0 / 9.0 ) * ( fahr -32.0 ) ;
可以得到同样的结果,并且在变量定义语句中可以不定义变量Celsius。
|