第3章 C程序的基本结构_第1页
第3章 C程序的基本结构_第2页
第3章 C程序的基本结构_第3页
第3章 C程序的基本结构_第4页
第3章 C程序的基本结构_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第3章 C程序的基本结构目的要求1. 了解C语句的类型;2. 掌握程序的三种结构;3. 掌握if、 switch语句;4. 掌握if语句的嵌套;5. 会用if语句、switch语句编写程序;6. 掌握while语句、do while语句、for语句;7. 会用while语句、do while语句、for语句编写程序;8. 掌握循环的嵌套;9. 掌握break语句和continue语句的使用;10.用多种结构语句编写综合程序。基本内容1. C语言的基本语句;2. C程序的三种基本结构及框图;3. 选择结构语句及程序设计;4. 循环结构语句及程序设计;5. break语句和continue语句;6

2、. 综合程序设计。重点难点1. 重点: 选择结构程序设计、循环结构程序设计。2. 难点: 多重循环。课时安排 8学时。3.1 格式化输出printf()函数 printf()函数的作用:向计算机系统默认的输出设备(一般指终端或显示器)输出一个或多个任意类型的数据 。 3.1.1 printf()函数的一般格式 已知圆半径 radius=1.5,求圆周长和圆面积。 main() float radius,length,area,pi=3.1415926; radius=1.5; length=2*pi*radius; /* 求圆周长 */ area=pi*radius*radius; /* 求圆

3、面积 */ printf(“radius=%fn”,radius); /* 输出圆半径 */ printf(“length=% ,area=% n”,length,area); /* 输出圆周长、面积 */ 程序运行结果如下: radius=1.500000 length= 9.42,area= 7.07 printf()函数的一般格式如下: printf(" 格式字符串 " ,输出项表) ; 1.格式字符串。“格式字符串”也称“转换控制字符串”,可以包含三种字符: (1)格式指示符。格式指示符的一般形式如下: %标志输出最小宽度.精度长度类型 详细内容见教材(2)转义字符

4、 例如,中printf()函数中的'n'就是转义字符,输出时产生一个“换行”操作。 (3)普通字符除格式指示符和转义字符之外的其它字符。格式字符串中的普通字符,原样输出。 2输出项表 输出项表是可选的。如果要输出的数据不止1个,相邻2个之间用逗号分开。下面的printf()函数都是合法的: (1) printf("I am a student.n"); (2) printf("%d",3+2); (3) printf("a=%f b=%5dn", a, a+3); 格式指示符 输出不同类型的数据,要使用不同的类型转换字

5、符。 1类型转换字符d以带符号的十进制整数形式输出。 类型转换字符d的使用。 main() int num1=123; long num2=123456; /* 用 3 种不同格式,输出 int 型数据 num1 的值 */ printf("num1=%d,num1=%5d,num1=%-5d,num1=%2dn", num1,num1,num1,num1); /* 用 3 种不同格式,输出 long 型数据 num2 的值 */ printf("num2=%ld,num2=%8ld,num2=%5ldn",num2,num2,num2); printf

6、("num1=%ldn",num1);  程序运行结果如下: num1=123,num1= 123,num1=123 ,num1=123 num2=123456,num2= 123456,num2=123456 num1=16908411 对于整数,还可用八进制、无符号形式(%o(小写字母o))和十六进制、无符号形式(%x)输出。对于unsigned型数据,也可用%u格式符,以十进制、无符号形式输出。 所谓无符号形式是指,不论正数还是负数,系统一律当作无符号整数来输出。例如, printf("%d,%o,%xn",-1,-1,-1); 2.类型

7、转换字符f以小数形式、按系统默认的宽度,输出单精度和双精度实数。 类型转换字符f的使用。 main( ) float f=123.456; double d1,d2; d2=2222222222222.222222222; printf("%f,% 12f ,% ,% ,% .2f n",f,f,f,f,f); printf("d1+d2=%fn",d1+d2); 程序运行结果如下: 123.456001, 123.456001, 123.46,123.46 ,123.46 d1+d2=3333333333333.333010 对于实数,也可使用格式符%

8、e,以标准指数形式输出:尾数中的整数部分大于等于1、小于 10,小数点占一位,尾数中的小数部分占5位;指数部分占4位(如e-03 ),其中e占一位,指数符号占一位,指数占2位,共计11位。 也可使用格式符%g,让系统根据数值的大小,自动选%f或%e格式、且不输出无意义的零。 3.类型转换字符c输出一个字符(只占一列宽度)。 类型转换字符c的使用。 main() char c='A' int i=65; printf("c=%c,% 5c ,%dn",c,c,c); printf("i=%d,%c",i,i); 程序运行结果如下: c=A,

9、 A,65 i=65,A 需要强调 的是:在 C 语言中,整数可以用字符形式输出,字符数据也可以用整数形式输出。将整数用字符形式输出时,系统首先求该数与 256 的余数,然后将余数作为 ASCII 码,转换成相应的字符输出。 4.类型转换字符s输出一个字符串。 类型转换字符s的使用。 main() printf("%s,%5s,%-10s","Internet","Internet","Internet"); printf("%10.5s,%-10.5s,%4.5sn","Intern

10、et","Internet","Internet"); 程序运行结果如下: Internet,Internet,Internet , Inter,Inter ,Inter 3.2 格式化输入-scanf()函数 scanf() 函数是用来从外部输入设备向计算机主机输入数据的。 scanf()函数的一般格式 已知圆柱体的底半径 radius=1.5 ,高 high=2.0 ,求其体积。 main() float radius=1.5, high=2.0, pi=3.14159, vol; vol=pi*radius*radius*high; /*

11、 求体积 */ printf(“vol=% n”,vol); /* 输出求出的体积 */ 案例 3.7 已知圆柱体的底半径为 radius ,高为 high ,求其体积。 /* 功能:说明函数 scanf() 的格式及作用。 */ main() float radius,high,vol,pi=3.1415926; printf("Please input radius & high: "); scanf("%f%f",&radius,&high); /* 从键盘输入两个实数赋给变量 r,h*/ vol=pi*radius*rad

12、ius*high; printf("radius=% , high=% , vol=% n", radius,high,vol); 程序运行结果如下: Please input radius & high: 1.5 2.0 radius= 1.50,high= 2.00,vol= 14.14 在程序中给计算机提供数据,可以用赋值语句,也可以用输入函数。在C语言中,可使用 scanf()函数,通过键盘输入,给计算机同时提供多个、任意的数据。 1.scanf()函数的一般格式 scanf("格式字符串", 输入项首地址表); (1)格式字符串。格式字

13、符串可以包含3种类型的字符:格式指示符、空白字符(空格、Tab键和回车键)和非空白字符(又称普通字符)。 格式指示符与printf()函数的相似,空白字符作为相邻2个输入数据的缺省分隔符,非空白字符在输入有效数据时,必须原样一起输入。 (2)输入项首地址表由若干个输入项首地址组成,相邻2个输入项首地址之间,用逗号分开。 输入项首地址表中的地址,可以是变量的首地址,也可以是字符数组名或指针变量。 变量首地址的表示方法:&变量名 其中“&”是地址运算符。例如中的“&radius”是指变量radius在内存中的首地址。 2.scanf() 函数的功能:从键盘上接收格式化输入。

14、 运行的程序时,从键盘上输入2个实数,分别存入&radius 、&high起始的存储单元中,即输入两个实数分别赋给radius和high。 格式指示符 格式指示符的一般形式为:%*宽度F|Nh|l类型字符 1.类型字符 类型字符如表3-6所示。例如,在的scanf()函数语句中,格式字符串“%f%f”。 2.宽度n 指定该项输入数据所占列数为n 。 换句话说,读取输入数据中相应的n位,但按需要的位数赋给相应的变量,多余部分被舍弃。 例如,scanf("% 3c % 3c ",&ch1,&ch2); printf("ch1=%c,ch

15、2=%cn",ch1,ch2); 假设输入“abcdefg”,则系统将读取的“abc”中的“a”赋给变量ch1 ;将读取的 “def”中的“d”赋给变量ch2,所以printf()函数的输出结果为:ch1=a,ch2=d 。 3.赋值抑制字符 * 表示本输入项对应的数据读入后,不赋给相应的变量(该变量由下一个格式指示符输入)。 例如, scanf("%2d%*2d%3d",&num1,&num2); printf("num1=%d,num2=%dn",num1,num2); 假设输入“123456789”,则系统将读取“12”并

16、赋值给 num1 ;读取“34”、但舍弃掉(“*”的作用);读取“567”并赋值给num2。所以,printf()函数的输出结果为: num1=12,num2=567 。 4.类型修饰符 F 、N 、h 、l 。 其含义与printf()中的一样,分别为远指针、近指针、短整型和长整型。 数据输入操作 2个格式指示符之间,不指定数据分隔符(如逗号、冒号等),则相应的 2 个输入数据之间,至少用一个空格分开,或者用Tab键分开,或者输入1个数据后,按回车,然后再输入下 1 个数据。 2.“格式字符串”中出现的普通字符(包括转义字符形式的字符),务必原样输入。 例如,scanf("%d,%

17、d",&num1,&num2); 假设给num1输入12,给num2输入36,正确的输入操作为:12,36 另外,scanf()函数中、格式字符串内的转义字符 ( 如 n) ,系统并不把它当转义字符来解释,从而产生一个控制操作,而是将其视为普通字符,所以也要原样输入。 例如:scanf("num1=%d,num2=%dn",&num1,&num2); 假设给num1输入 2,给num2输入36 ,正确的输入操作为: num1=12 , num2=36n 提高人机交互性建议 :为改善人机交互性,同时简化输入操作,在设计输入操作时,一般

18、先用printf()函数输出一个提示信息,再用scanf()函数进行数据输入。 例如,将scanf("num1=%d,num2=%dn",&num1,&num2); 改为:printf("num1="); scanf("%d",&num1); printf("num2="); scanf("%d",&num2); 3.输入数据时,遇到以下情况,系统认为该数据结束: (1)遇到空格,或者回车键,或者 Tab 键。 (2)遇到输入域宽度结束。例如“%3d”,只取3列。

19、 (3)遇到非法输入。例如,在输入数值数据时,遇到字母等非数值符号 ( 数值符号仅由数字字符 0-9 、小数点和正负号构成 ) 。 4.使用格式说明符“%c”输入单个字符时,空格和转义字符均作为有效字符被输入。 3.3 单个字符输入输出-getchar()和putchar()函数 单个字符的输出putchar()函数 putchar()函数的格式和使用方法。 /* 功能:说明putchar()函数的格式和使用方法。 */ #include "stdio.h" /* 编译预处理命令:文件包含 */ main() char ch1='N', ch2='E

20、', ch3='W' putchar(ch1); putchar(ch2); putchar(ch3); /* 输出 */ putchar('n'); putchar(ch1); putchar('n'); /* 输出 ch1 的值,并换行 */ putchar('E'); putchar('n'); /* 输出字符 'E' ,并换行 */ putchar(ch3); putchar('n'); 程序运行结果如下: NEW N E W 单个字符的输入 getchar()函数

21、说明 getchar()函数的格式和作用。 /* 功能:说明 getchar() 函数的格式和作用。 */ #include "stdio.h" /* 文件包含 */ main() char ch; printf("Please input two character: "); ch=getchar(); /* 输入 1 个字符并赋给 ch */ putchar(ch);putchar('n'); putchar(getchar(); /* 输入一个字符并输出 */ putchar('n');  程序运行情况如下

22、: Please input two characters: ab a b 3.4 顺序结构程序设计 在顺序结构程序中,各语句(或命令)是按照位置的先后次序,顺序执行的,且每个语句都会被执行到。 输入任意三个整数,求它们的和及平均值。 /* 功能:设计一个顺序结构程序,求三个整数的和及平均值。 */ main() int num1,num2,num3,sum; float aver; printf("Please input three numbers:"); scanf("%d,%d,%d",&num1,&num2,&num3)

23、;/* 输入三个整数 */ sum=num1+num2+num3; /* 求累计和 */ aver=sum/3.0; /* 求平均值 */ printf("num1=%d,num2=%d,num3=%dn",num1,num2,num3); printf("sum=%d,aver=% n",sum,aver); 在顺序结构程序中,一般包括以下几个部分: 1.程序开头的编译预处理命令。 在程序中要使用标准函数(又称库函数),除printf()和scanf()外,其它的都必须使用编译预处理命令,将相应的头文件包含进来。 2.顺序结构程序的函数体中,是完成具体

24、功能的各个语句和运算,主要包括: (1)变量类型的说明。 (2)提供数据语句。 (3)运算部分。 (4)输出部分。 3.5 关系运算及其表达式 所谓“关系运算”实际上就是“比较运算”,即将两个数据进行比较,判定两个数据是否符合给定的关系。 例如,“a > b”中的“>”表示一个大于关系运算。如果a的值是5,b的值是3,则大于关系运算“>”的结果为“真”,即条件成立;如果a值是2,b的值是,则大于关系运算“>” 的结果为“假”,即条件不成立。 3.5.1 关系运算符及其优先次序 1.关系运算符 C 语言提供6关系运算符: <(小于), <=(小于或等于),&g

25、t;(大于), >=(大于或等于), =(等于), !=(不等于) 2.优先级 (1)在关系运算符中,前4个优先级相同,后2个也相同,且前4个高于后2个。 (2)与其它种类运算符的优先级关系 关系运算符的优先级,低于算术运算符,但高于赋值运算符。 3.5.2 关系表达式 1.系表达式的概念 所谓关系表达式是指,用关系运算符将两个表达式连接起来,进行关系运算的式子。 2.系表达式的值 - 逻辑值(非“真”即“假”)。 由于语言没有逻辑型数据,所以用整数“”表示“逻辑真”,用整数“”表示“ 逻辑假”。 例如,假设 num1=3, num2=4, num3=5,则: (1)num1>nu

26、m2的值=0。 (2)(num1>num2)!=num3的值 =1。 (3)num1<num2<num3 的值=1。 (4)(num1<num2)+num3的值 =6 ,因为num1<num2的值=1,1+5=6。 再次强调:C 语言用整数“1”表示“逻辑真”,用整数“0”表示“逻辑假”。所以,关系表达式的值,还可以参与其它种类的运算,例如算术运算、逻辑运算等。 3.6 逻辑运算及其表达式 关系表达式只能描述单一条件,例如“x>=0”。如果需要描述“x>=0”、同时“x<10 ,就要借助于逻辑表达式了。 3.6.1 逻辑运算及其优先次序 .逻辑运

27、算符及其运算规则 (1)C语言提供三种逻辑运算符: && 逻辑与(相当于“同时”) | 逻辑或(相当于“或者”) ! 逻辑非(相当于“否定”) 例如,下面的表达式都是逻辑表达式: (x>=0)&&(x<10),x<1)|(x>5),(x= =0), (year%4=0)&&(year%100!=0)|(year%400=0) (2)运算规则 1) &&:当且仅当两个运算量的值都为“真”时,运算结果为“真”,否则为“假”。 2) |:当且仅当两个运算量的值都为“假”时,运算结果为“假”,否则为“真”。 3)

28、! :当运算量的值为“真”时,运算结果为“假;当运算量的值为“假 时,运算结果为“真”。 例如,假定 x=5 ,则 (x>=0) && (x<10) 的值为“真”,(x<-1) | (x>5) 的值为“假”。 2.运算符的运算优先级 (1)逻辑非的优先级最高,逻辑与次之,逻辑或最低,即: !(非)&&(与)|(或)(2)与其它种类运算符的优先关系 !算术运算关系运算&&|赋值运算3.6.2 逻辑表达式 1.逻辑表达式的概念 所谓逻辑表达式是指,用逻辑运算符将1个或多个表达式连接起来,进行逻辑运算的式子。在C语言中,用逻辑表

29、达式表示多个条件的组合。 例如,(year%4=0)&&(year%100!=0)|(year%400=0) 就是一个判断一个年份是否是闰年的逻辑表达式。 和非 语言用整数“”表示“逻辑真”、用“”表示“逻辑假”。但在判断一个数据的 “真”或“假”时,却以和非为根据:如果为,则判定为“逻辑假”;如果为非,则判定为“逻辑真”。 例如,假设num=12,则:!num的值 =,num>=1num<=31的值=,num | num>31的值=1。 3.7 if 语句和条件运算符 3.7.1 if 语句 案例 3.11 输入任意三个整数num1、num2、 num3,求

30、三个数中的最大值。 /* 功能:说明 if 语句的格式。 */ main() int num1,num2,num3,max; printf("Please input three numbers:"); scanf("%d,%d,%d",&num1,&num2,&num3); if (num1>num2) max=num1; else max=num2; if (num3>max) max=num3; printf("The three numbers are:%d,%d,%dn",num1,num

31、2,num3); printf("max=%dn",max); 程序运行情况如下: Please input three numbers:11,22,18 The three numbers are:11,22,18 max=22 本案例中的第1个if语句,可优化为如下不带else子句的形式: max=num1; if(num2>max) max=num2; 这种优化形式的基本思想是:首先取一个数预置为max(最大值),然后再用max依次与其余的数逐个比较,如果发现有比max大的,就用它给max重新赋值,比较完所有的数后,max 中的数就是最大值。这种方法,对从3个或

32、3个以上的数中找最大值的处理,非常有效。1.if 语句的一般格式 if( 表达式 ) 语句组 1; else 语句组 2; (1)if语句中的“表达式”必须用“(”和“)”括起来。 (2)else子句(可选)是if语句的一部分,必须与if配对使用,不能单独使用。 (3)当if和else下面的语句组,仅由一条语句构成时,也可不使用复合语句形式(即去掉花括号)。 2.if语句的执行过程 (1)缺省else子句时 当“表达式”的值不等于0(即判定为“逻辑真”)时,则执行语句组1,否则直接转向执行下一条。(2)指定else子句时 当“表达式”的值不等于0(即判定为“逻辑真”)时,则执行语句组1,然后转

33、向下一条语句;否则,执行语句组2。3.if语句的嵌套与嵌套匹配原则 if语句允许嵌套。所谓if语句的嵌套是指,在“语句组1”或(和)“语句组2”中,又包含有if语句的情况。 if语句嵌套时,else子句与if的匹配原则:与在它上面、距它最近、且尚未匹配的if配对。 为明确匹配关系,避免匹配错误,强烈建议:将内嵌的if语句,一律用花括号括起来。 3.7.2 条件运算符 1.一般格式:表达式1?表达式2:表达式3条件表达式中的“表达式1”、“表达式2”、“表达式3”的类型,可以各不相同。 2.运算规则 如果“表达式1”的值为非0( 即逻辑真 ),则运算结果等于“表达式2”的值;否则,运算结果等于“

34、表达式3”的值。3.运算符的优先级与结合性 条件运算符的优先级,高于赋值运算符,但低于关系运算符和算术运算符。其结合性为“从右到左”(即右结合性)。 例 3.12 从键盘上输入一个字符,如果它是大写字母,则把它转换成小写字母输出;否则,直接输出。 main() char ch; printf("Input a character: "); scanf("%c",&ch); ch=(ch>='A' && ch<='Z') ? (ch+32) : ch; printf("ch=%c

35、n",ch); 3.8 switch语句 C语言提供了switch语句直接处理多分支选择。 案例3.13从键盘上输入一个百分制成绩score,按下列原则输出其等级:score 90,等级为 A ;80 score<90 ,等级为B;70 score<80 ,等级为 C;60 score<70 ,等级为D;score<60,等级为E 。 main() int score, grade; printf( “ Input a score(0100): ” ); scanf( “ %d ” , &score); grade = score/10; /* 将成绩

36、整除 10 ,转化成 switch 语句中的 case 标号 */ switch (grade) case 10: case 9: printf( “ grade=An ” ); break; case 8: printf("grade=Bn"); break; case 7: printf("grade=Cn"); break; case 6: printf("grade=Dn"); break; case 5: case 4: case 3: case 2: case 1: case 0: printf( “ grade=En ”

37、 ); break; default: printf( “ The score is out of range!n ” ); 程序运行情况如下: Input a score(0100): 85 grade=B 1.switch 语句的一般形式 switch( 表达式 ) case 常量表达式 1 :语句组; break ; case 常量表达式 2 :语句组; break; . case 常量表达式:语句组; break ; default :语句组; break; 2.执行过程 (1) 当switch后面“表达式”的值,与某个case后面的“常量表达式”的值相同时, 就执行该case后面的语

38、句(组);当执行到break语句时,跳出switch语句,转向执行switch 语句的下一条。 (2)如果没有任何一个case后面的“常量表达式 ”的值,与“表达式”的值匹配,则执行default后面的语句(组)。然后,再执行switch语句的下一条。 3.说明 (1)switch后面的“表达式”,可以是int、char和枚举型中的一种。 (2)每个case后面“常量表达式”的值,必须各不相同,否则会出现相互矛盾的现象(即对表达式的同一值,有两种或两种以上的执行方案)。 (3)case后面的常量表达式仅起语句标号作用,并不进行条件判断。系统一旦找到入口标号,就从此标号开始执行,不再进行标号判断

39、,所以必须加上break语句,以便结束 switch 语句。 (4)各case及default子句的先后次序,不影响程序执行结果。 (5)多个case子句,可共用同一语句(组)。 (6)用switch语句实现的多分支结构程序,完全可以用if语句或if语句的嵌套来实现。 3.9 选择结构程序设计举例 案例 3.14 求一元二次方程 ax2+bx+c=0 的解( a 0 )。 /* 功能:求一元二次方程的解。 */ #include "math.h" main() float a,b,c,disc,x1,x2,p,q; scanf( “ %f,%f,%f ” , &a,

40、 &b, &c); disc=b*b-4*a*c; if (fabs(disc)<=1e-6) /*fabs() :求绝对值库函数 */ printf( “ x1=x2=% n ” , -b/(2*a); /* 输出两个相等的实根 */ else if (disc>1e-6) x1=(-b+sqrt(disc)/(2*a); /* 求出两个不相等的实根 */ x2=(-b-sqrt(disc)/(2*a); printf("x1=% ,x2=% n", x1, x2); else p=-b/(2*a); /* 求出两个共轭复根 */ q=sqrt

41、(fabs(disc)/(2*a); printf( “ x1=% + % in “ , p, q); /* 输出两个共轭复根 */ printf( ” x2=% - % in “ , p, q); 说明:由于实数在计算机中存储时,经常会有一些微小误差,所以本案例判断disc是否为0的方法是:判断disc的绝对值是否小于一个很小的数。 3.10 循环语句概述 例:求 1100的累计和。 根据已有的知识,可以用“1+2+ 100”来求解,但显然很繁琐。现在换个思路来考虑: 首先设置一个累计器sum,其初值为0,利用sum += n来计算(n依次取1 、2 、 、 100),只要解决以下3个问题即

42、可: (1)将n的初值置为1; (2)每执行1次“sum+=n”后,n增1; (3)当n增到101时,停止计算。此时,sum的值就是1100的累计和。 根据已有的知识,单独实现每一步都不难。但是,由于需要经常使用这种重复计算结构(称为循环结构),C语言提供了3条循环语句来实现,以简化、并规范循环结构程序设计。 在语言中,可用以下语句实现循环: (1)用for语句。 (2)用do-while语句。 (3)用while语句。 (4)用goto语句和if语句构成循环。使用goto语句实现求解1100累计和的程序可以如下: main() int n=1, sum=0; loop: sum += n;

43、n+; if (n<=100) goto loop; printf(“sum=%dn”, sum); 其中“loop:”为语句标号(格式:标号:语句行),其命名遵循标识符命名规则。goto语句格式:goto标号,功能为:使系统转向标号所在的语句行执行。 注意:结构化程序设计方法,主张限制使用goto语句。因为滥用goto语句,将会导致程序结构无规律、可读性差。 另外,从功能上说,for语句可完全代替当型循环语句while,所以该语句也不是必需的。 3.11 for语句和while语句 在3条循环语句中,for语句最为灵活,不仅可用于循环次数已经确定的情况,也可用于循环次数虽不确定、但给出

44、了循环继续条件的情况。 案例3.15 求1100的累计和。 /* 程序功能:求 1100 的累计和 */ main() int i,sum=0; /* 将累加器 sum 初始化为 0*/ for(i=1; i<=100; i+) sum += i; /* 实现累加 */ printf("sum=%dn",sum); 程序运行情况如下: sum=5050 案例3.16求n的阶乘n!(n!=1*2*n)。 /* 程序功能:求 n ! */ main() int i, n; long fact=1; /* 将累乘器 fact 初始化为 1*/ printf(“Input n

45、: ”); scanf(“%d”, &n); for(i=1; i<=n; i+) fact *= i; /* 实现累乘 */ printf("%d ! = %ldn", n, fact); 程序运行情况如下: Input n: 5 5 ! = 120 1.for 语句的一般格式 for(变量赋初值;循环继续条件;循环变量增值) 循环体语句组; 2.for语句的执行过程 (见教材流程图)(1)求解“变量赋初值”表达式。 (2)求解“循环继续条件”表达式。如果其值非0,执行(3);否则,转至(4)。 (3)执行循环体语句组,并求解“循环变量增值”表达式,然后转向

46、(2)。 (4)执行for语句的下一条语句。 3.说明 (1)“变量赋初值”、“循环继续条件”和“循环变量增值”部分均可缺省,甚至全部缺省,但其间的分号不能省略。 (2)当循环体语句组仅由一条语句构成时,可以不使用复合语句形式,如上例所示。 (3)“循环变量赋初值”表达式,既可以是给循环变量赋初值的赋值表达式,也可以是与此无关的其它表达式(如逗号表达式)。 例如,for(sum=0;i<=100;i+) sum += i; for(sum=0,i=1;i<=100;i+) sum += i; (4)“循环继续条件”部分是一个逻辑量,除一般的关系(或逻辑)表达式外,也允许是数值(或字

47、符)表达式。 4.while 语句 (1)一般格式 while( 循环继续条件 ) 循环体语句组; (2)执行过程 (见教材流程图)1)求解“循环继续条件”表达式。如果其值为非0,转2);否则转3)。 2)执行循环体语句组,然后转1)。 3)执行 while 语句的下一条。 显然, while 循环是 for 循环的一种简化形式(缺省“变量赋初值”和“循环变量增值” 表达式)。 案例3.17 用while语句求1100的累计和。 /* 程序功能:求1100的累计和 */ main() int i=1,sum=0; /* 初始化循环控制变量 i 和累计器 sum*/ while( i<=1

48、00 ) sum += i; /* 实现累加 */ i+; /* 循环控制变量 i 增 1*/ printf(“sum=%dn”,sum); 程序运行情况如下: sum=5050 5.循环嵌套 (1)循环语句的循环体内,又包含另一个完整的循环结构,称为循环的嵌套。循环嵌套的概念,对所有高级语言都是一样的。 (2) for语句和while语句允许嵌套,do-while语句也不例外。 3.12 直到型循环 do-while 语句 1.一般格式 do 循环体语句组 ; while( 循环继续条件 ); /* 本行的分号不能缺省 */ 当循环体语句组仅由一条语句构成时,可以不使用复合语句形式。 2.执行过程 (1)执行循环体语句组。 (2)计算“循环继续条件”

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论