003-流程控制与基本算法_第1页
003-流程控制与基本算法_第2页
003-流程控制与基本算法_第3页
003-流程控制与基本算法_第4页
003-流程控制与基本算法_第5页
已阅读5页,还剩126页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

1、第四章 顺序结构的程序设计1一、数据输出 C中没有专门的输入输出语句,输入中没有专门的输入输出语句,输入输出操作是通过输入、输出函数实现输出操作是通过输入、输出函数实现两个基本的输出函数:两个基本的输出函数:字符输出函数字符输出函数 putchar格式输出函数格式输出函数 printf24.3 数据输出一一字符输出函数字符输出函数q 格式:格式: putchar(字符变量字符变量)q 功能功能 :在标准输出设备上输出指定字符:在标准输出设备上输出指定字符q 说明:说明:一次调用只能输出一个字符一次调用只能输出一个字符 加上分号成为字符输出语句加上分号成为字符输出语句 使用时在程序开头用预编译指

2、令使用时在程序开头用预编译指令#include 34.3 数据输出二二格式输出函数格式输出函数q格式:格式:printf(格式字符串格式字符串,输出项表输出项表)q功能:从标准输出设备上,按指定的功能:从标准输出设备上,按指定的格式输出对应的输出项格式输出对应的输出项%d: 按按十进制整数十进制整数形式输出形式输出%u: 按按无符号无符号十进制整数十进制整数形式输出形式输出%o: 按按无符号无符号八进制整数八进制整数形式输出形式输出%x: 按按无符号无符号十六进制整数十六进制整数形式输出形式输出格格式式控控制制串串printf(“Output x=%dn”,x);44.3 数据输出%f: 输出

3、实数输出实数(6位小数位小数)%e: 按按指数形式指数形式输出实数输出实数%c: 输出单个输出单个字符字符%s: 输出一个输出一个字符串字符串%ld: 按十进制整数形式输出长整型按十进制整数形式输出长整型格格式式控控制制串串注意区分:注意区分: 输出位数输出位数 浮点数实际能表达浮点数实际能表达的有效数字的有效数字54.3 数据输出对格式的修饰对格式的修饰%md 输出整型数据输出整型数据至少至少占占m个字符位,右对齐个字符位,右对齐%-md 输出整型数据输出整型数据至少至少占占m个字符位,左对齐个字符位,左对齐%m.nf 输出实型数据输出实型数据至少至少占占m个字符位,小数点个字符位,小数点

4、后留后留n位,位,(对字符串,输出前对字符串,输出前n个字符个字符), 右对齐右对齐%-m.nf 同上,左对齐同上,左对齐修饰符与数据实际宽度不符时如何处理?修饰符与数据实际宽度不符时如何处理?64.3 数据输出 例:例:int a=1234; printf(“%5d”,a); printf(“%3d”,a); float b=123.45; printf(“%-8.3f”,b); printf(“%6.3f”,b)按实际输出按实际输出12341234左补空格左补空格123.450123.45074.3 数据输出几点说明:几点说明:1. 格式控制串的控制符号与变量表要一一格式控制串的控制符号与

5、变量表要一一对应,即:对应,即:类型相同类型相同,个数相等个数相等2. 格式控制符号之外的符号均照原样显示格式控制符号之外的符号均照原样显示3. 若需显示百分号,格式为:若需显示百分号,格式为:%4. 如果实际数据所占字符位大于指定的域如果实际数据所占字符位大于指定的域宽,宽,按实际输出按实际输出,但小数不会妥协,但小数不会妥协8二、数据输入一一字符输入函数字符输入函数功能:从标准输入设备上读一个字符功能:从标准输入设备上读一个字符getchar()#include 94.4 数据输入二二格式输入函数格式输入函数q 格式:格式:scanf(格式字符串格式字符串,输入项地址表输入项地址表)q 功

6、能:功能:按照格式要求,从终端上把数据按照格式要求,从终端上把数据送到地址参数所指定的内存空间中送到地址参数所指定的内存空间中q 格式控制符号同格式控制符号同printf 要求:类型相同,个数相等要求:类型相同,个数相等int a,b;scanf(“%d,%d”, &a ,&b);&b&a输入输入:5 , 858104.4 数据输入v练习练习int a,b;double c;scanf(“%f%f%f”,&a,&b,&c);scanf(“%d%d%lf”,&a,&b,&c);114.4 数据输入输入时不允许规定精度

7、,可以指定域宽输入时不允许规定精度,可以指定域宽int a ;scanf(“%3d”,&a);float x; scanf(“%8.2f ”,&x);124.4 数据输入 遇下列遇下列3种情况结束种情况结束当前数据当前数据的输入:的输入:1. 换行,换行,Tab,空格,空格2. 宽度结束宽度结束3. 非法输入非法输入int a,b; scanf(“%d%d”,&a,&b);输入:输入:12 34a为为12,b为为34int k; scanf(“%3d”,&k);输入:输入:12345k为为123还可以输入:还可以输入:12 34134.4 数据输入 例:

8、例:main() int a; float b,c; scanf(“%2d%3f%4f”,&a,&b,&c); printf(“a=%d,b=%f,c=%fn”,a,b,c);输入:输入:12345678987654321输出输出?a=12,b=345.000000,c=6789.00000014注意:注意:nscanf、printf设置的格式要与变量类型一致;设置的格式要与变量类型一致;n输入、输出输入、输出long int要用要用%ld;n输入输入double要用要用%lf或或%le;(输出可以用输出可以用%f)n可以用可以用%d输出输出char型,用型,用%c输出

9、输出int型;但输型;但输入,只能入,只能%c对对char,%d对对int;选择结构的程序设计16第5章 选择结构的程序设计 用if语句设计选择结构程序 用switch语句设计多分支结构程序 应用举例175.1 用if语句设计选择结构程序一一if语句的两种基本形式语句的两种基本形式1. 单选择单选择if语句语句功能:判断条件为真时执行功能:判断条件为真时执行 语句,否则语句,否则跳过跳过语句语句语句格式语句格式: :if (条件条件) 语句组语句组;条件条件可以是可以是关系表达式关系表达式或或逻辑表达式逻辑表达式例例: if (ab) x=a; 语句语句N条件条件Y单选择185.1 用if语句

10、设计选择结构程序2. 双选择双选择if语句语句语句格式语句格式: :if (条件条件) 语句组语句组1; else 语句组语句组2;功能:判断条件为真时执行语句功能:判断条件为真时执行语句 组组1,否则执行语句组,否则执行语句组2 条件条件 语句语句1 语句语句2YN双选择19 例:例:求求a和和b两数中较大的一个两数中较大的一个main( ) int a,b,max; printf(Input a and b=); scanf(“%d%d”, &a, &b); / /* *输入输入 a 和和 b* */ / if (ab) / /* *如果如果ab,则将,则将a赋给赋给max

11、* */ / max=a; else / /* *否则,将否则,将b赋给赋给max* */ / max=b; printf(The max of a and b: %dn, max);ab?max=bmax=aYN20 例:例:求求a和和b两数中较大的一个两数中较大的一个只用单选择只用单选择main( ) int a,b,max; printf(Input a and b=); scanf(%d%d,&a, &b); max=a; if (maxb) max=b; printf(The max of a and b: %dn,max);maxb) x=a; else x=b;

12、必须有分号必须有分号复合语句的表示复合语句的表示: if (ab) x=a; printf(“a=%dn”,x); else x=b; printf(“b=%dn”,x); 不能有分号不能有分号if或或else只能管辖只能管辖“一条一条”语句!语句!复合语句被视为复合语句被视为“一条一条”语句!语句!225.1 用if语句设计选择结构程序有关有关if语句的说明语句的说明q 条件后面不加分号条件后面不加分号q 语句之后有分号语句之后有分号q else不是语句,不能单独使用不是语句,不能单独使用q 当当if后有多个执行语句时,必须用后有多个执行语句时,必须用 将将多个语句括起来,构成一个复合语句,

13、多个语句括起来,构成一个复合语句,而而 之外不必有分号。之外不必有分号。; 是一条语句是一条语句 if ( ) ; if ( ) ; ;23是一条语句是一条语句(如果没有如果没有else)是一条语句是一条语句(如果没有如果没有else)是一条语句是一条语句if ( ) ; ; else ; ;24是一条语句是一条语句else ; ;不是语句不是语句255.1 用if语句设计选择结构程序 例:从键盘输入被除数例:从键盘输入被除数a和除数和除数b,求商,求商int main( ) int a,b;printf(Enter two numbers: );scanf(%d%d, &a, &am

14、p;b);if (b!=0) printf(%dn, a/b);else printf(“Cannot divide by zero.n);b?printf .printf.非非 00等价等价if (b)265.1 用if语句设计选择结构程序3. 多选择的多选择的if结构结构功能:从多组语句中选择满足条件的语句组功能:从多组语句中选择满足条件的语句组执行。用执行。用else if 实现多选择。实现多选择。语句格式语句格式: :if (条件条件1) 语句语句1;else if (条件条件2) 语句语句2;else if (条件条件3) 语句语句3;else if (条件条件m) 语句语句m;el

15、se 语句语句n;语句语句1N条件条件1Y条件条件2条件条件nYY语句语句2语句语句3语句语句nNN多选择27例:例:按分数统计学分,将分数分为五个分数段,按分数统计学分,将分数分为五个分数段,分别是:分别是:=90、80= 90、70= 80、60= 70、=90) xf=kc*1.3;else if (fs=80) xf=kc*1.2;else if (fs=70) xf=kc*1.1;else if (fs=60) xf=kc;else xf=0.0;printf (“xf=%fn”,xf);只做其一只做其一285.1 用if语句设计选择结构程序 说明说明q 在在if-else语句中,一

16、般采用语句中,一般采用“缩进缩进”的书写形式来表示的书写形式来表示“语句语句1”或或“语句语句2”所属的层次。所属的层次。q 注意:缩进仅是一种注意:缩进仅是一种书写形式书写形式,不具,不具有逻辑意义。有逻辑意义。q 例:例:银行存款本金计算:期满总金额银行存款本金计算:期满总金额= 本钱本钱 +本钱本钱 月息月息 月数月数29int main() int year; float money,rate,total; / /* *本金本金 月利率月利率 本利合计本利合计* */ / printf(Input money and year =?); scanf(%f%d, &money,

17、&year); / /* *输入本金和年输入本金和年* */ / if (year = 1) rate=0.0063; / /* *根据年限定利率根据年限定利率 * */ / else if (year = 2) rate=0.0066; else if (year = 3) rate=0.0069; else if (year = 5) rate=0.0075; else if (year = 8) rate=0.0084; else rate=0.0; total = money + money * rate *12 * year; printf( Total = %.2fn, t

18、otal);30 if (year = 1) rate=0.0063; else if (year = 2) rate=0.0066; else if (year = 3) rate=0.0069; else if (year = 5) rate=0.0075; else if (year = 8) rate=0.0084; else rate=0.0;315.1 用if语句设计选择结构程序二二if语句的嵌套语句的嵌套格式:格式:if (表达式表达式) if (表达式表达式1) 语句语句11; else语句语句12; else if (表达式表达式2) 语句语句21; else语句语句22;功

19、能:判断表达式的值,若为非功能:判断表达式的值,若为非0,再判断表达式,再判断表达式1的值,非的值,非0执行语句执行语句11,否则执行语句,否则执行语句12;若表达式的值为若表达式的值为0,再判断表达式,再判断表达式2的值,非的值,非0执行执行语句语句21,否则执行语句,否则执行语句22。外层外层if内嵌内嵌if32 例:例:下列程序段表示的数学式下列程序段表示的数学式? y=-1; if (x!=0) if (x0) y=2*sin(x); else y=0;程序段表示的数学式程序段表示的数学式1:0 (x0)讨论讨论:给第二个给第二个if行加行加 后后表示的数学式?表示的数学式?程序段表示

20、的数学式程序段表示的数学式2:-1 (x0)数学式数学式1程序可表示为程序可表示为:y=-1;if (x!=0) if (x0) y=2*sin(x); else y=0; 33 例:例:比较两个整数之间的关系比较两个整数之间的关系(大小、相等大小、相等)int main( ) int x, y; printf (Enter integer X and Y:); scanf (%d%d, &x, &y); if ( x != y ) if ( x y ) printf (XYn); else printf (Xb) /*1 */ if(ac) /*2 */ if(ad)flag

21、=1; /*3 */ elseflag=2;/*4 */ elseflag=3;/*5 */匹配规则:在嵌套的匹配规则:在嵌套的if-else语句语句中,中,else子句总是与子句总是与上面的上面的、离它最近的离它最近的、且、且在同在同一复合语句中还没有配对的一复合语句中还没有配对的if子子句配对。句配对。35 例:例:a=3,b=2,c=4,d=1; flag=?if (ab) if (ac) if (ad) flag=1; else flag=2;else flag=3;当当 ab) if (ac) if (ad) flag=1; else flag=2; else flag=3;当当 c

22、ab 时时flag=3365.1 用if语句设计选择结构程序if (y0)x=-y;elsex=y;(y0)?x=-y:x=y;等价等价等价等价x=(y0)?-y:y;说明:说明:if else可以完成可以完成与条件运算符与条件运算符( ? : )完全完全相同的任务,并且可以相同的任务,并且可以进行相应的转换。进行相应的转换。375.1 用if语句设计选择结构程序q if语句与条件运算的区别语句与条件运算的区别q 例:例:if (s=100) printf(“Perfect!”);else printf(“Just so so.”); 条件运算符的形式条件运算符的形式比较简单,有较强比较简单,

23、有较强的灵活性,可以替的灵活性,可以替代部分代部分if语句。语句。转换:转换:(s=100)? printf(“Perfect!”) : printf(“Just so so.”); 转换:转换:printf(s=100? “Perfect!”: “Just so so”);38第5章 选择结构的程序设计 用if语句设计选择结构程序 用switch语句设计多分支结构程序 应用举例39一一switch语句格式语句格式switch (表达式表达式) case 常量常量1:语句序列语句序列1break; case 常量常量2:语句序列语句序列2break; default: 语句序列语句序列n+1

24、执行语执行语句序列句序列1=常量常量1?计算表达式的值计算表达式的值相等相等不相等不相等break执行语执行语句序列句序列2=常量常量2?相等相等不相等不相等break执行语句序列执行语句序列n+1有有default?有有没有没有5.2 用switch语句设计多分支结构程序40switch (number) case 1: statement 1;break;case 2: statement 2;break;case 3: statement 3;break;default: statement 4;statement 5;当当number的值为的值为2时时5.2 用switch语句设计多分

25、支结构程序41二二几点说明几点说明q括号内可以是任何表达式,但括号内可以是任何表达式,但“取整取整”;qcase后的每个后的每个常量常量表达式必须表达式必须各不相同各不相同,而,而且必须是整型、字符型或枚举型;且必须是整型、字符型或枚举型;q每个每个case之后的执行语句可多于一个,之后的执行语句可多于一个,不必不必加加 ;q每一个每一个case之后应有一个之后应有一个break(间断语句间断语句)以跳出以跳出switch()结构;结构;qdefault和和case的的相对相对位置是任意的位置是任意的;qdefault子句可以省略。子句可以省略。5.2 用switch语句设计多分支结构程序42

26、int main() int n0=0,n6=0,n7=0,n8=0,n9=0; float fs; scanf(“%f”,&fs); switch (int)(fs/10) case 9: n9+; break; case 8: n8+; break; case 7: n7+; break; case 6: n6+; break; case 5: case 4: case 3:case 2:case 1: case 0: n0+; break; default: printf(“Data error!n”); printf (“%d,%d,%d,%d”,n9,n8,n7,n6,n0)

27、; 例:统计成绩分布:例:统计成绩分布:60分以下分以下,6070,7080,8089,90100。43int main() int n0=0,n6=0,n7=0,n8=0,n9=0; float fs; scanf(“%f”,&fs); switch (int)(fs/10) case 9: n9+; break; case 8: n8+; break; case 7: n7+; break; case 6: n6+; break; case 5: case 4: case 3:case 2:case 1: case 0: n0+; break; default: printf(“D

28、ata error!n”); printf (“%d,%d,%d,%d”,n9,n8,n7,n6,n0); 例:统计成绩分布:例:统计成绩分布:60分以下分以下,60以上,以上,70以上,以上,80以上以上,90以上以上。 ?44int main() int n0=0,n6=0,n7=0,n8=0,n9=0; float fs; scanf(“%f”,&fs); switch (int)(fs/10) case 9: n9+; case 8: n8+; case 7: n7+; case 6: n6+; break; case 5: case 4: case 3:case 2:case

29、 1: case 0: n0+; break; default: printf(“Data error!n”); printf (“%d,%d,%d,%d”,n9,n8,n7,n6,n0); 例:统计成绩分布:例:统计成绩分布:60分以下分以下,60以上,以上,70以上,以上,80以上以上,90以上以上。45 例:编写一个程序分别完成任意两个数的加减乘除运算。即求:例:编写一个程序分别完成任意两个数的加减乘除运算。即求:d1 op d2 的值。的值。main ( ) float d1, d2; char op; / /* *定义操作数、操作符变量定义操作数、操作符变量* */ / scanf

30、(“%f%c%f”, &d1, &op, &d2); / /* * 输入表达式输入表达式 * */ / switch ( op ) / /* * 根据操作符分别进行处理根据操作符分别进行处理 * */ / case + : / /* * 处理加法处理加法 * */ / printf(“%.2f+%.2f=%.2fn”,d1,d2,d1+d2);break; case - : / /* * 处理减法处理减法 * */ / printf (%.2f-%.2f=%.2fn,d1,d2,d1-d2);break; case * : / /* * 处理乘法处理乘法 * */ /

31、printf (%.2f*%.2f=%.2fn,d1,d2,d1*d2);break; case / : / /* * 处理除法处理除法 * */ / if ( d2=0 ) / /* * 判断除数是否为判断除数是否为0 * */ / printf (“Division by zero.n”); / /* * 0处理处理 * */ / else printf (“%.2f/%.2f=%.2fn”,d1,d2,d1/d2); break; default: printf (“Unknown operater.n”); 46第5章 选择结构的程序设计 用if语句设计选择结构程序 用switch语句

32、设计多分支结构程序 应用举例47 例:输入年月,计算该月有多少天。例:输入年月,计算该月有多少天。 闰年:能够被闰年:能够被4整除且不能被整除且不能被100整除的年份整除的年份 或或 能够被能够被400整除的年份整除的年份 例如:例如:1996年是闰年年是闰年 1900年是平年年是平年 2000年是闰年年是闰年 判断闰年的判断闰年的C语言公式语言公式year%4=0 & year%100!=0 | year%400=0 当当year=1996时,结果为时,结果为1 当当year=1997时,结果为时,结果为0 当当year=1900时,结果为时,结果为0 当当year=2000时,结果

33、为时,结果为1 若为闰年:结果为若为闰年:结果为1若为平年:结果为若为平年:结果为0485.5 应用举例int main() int year,month,days; printf(“Enter year&monthn”); scanf(“%d,%d”,&year,&month); switch(month) case 1:case 3:case 5:case 7:case 8:case 10: case 12:days=31;break; / /* *处理大月处理大月* */ / case 4:case 6:case 9: case 11:days=30;break;

34、 / /* *处理小月处理小月* */ /495.5 应用举例 case 2: / /* * 处理平月处理平月 * */ / if(year%4=0)&(year%100!=0)|(year%400)=0) days=29; / /* * 如果是闰年如果是闰年 * */ / else days=28; break; / /* * 不是闰年不是闰年 * */ / default: / /* * 月份错误月份错误 * */ / printf(“Enter error!n”);days=0; break; if (days!=0) printf(“%dn”,days); 第六章循环结构的程序

35、设计516.1 循环的基本概念q 循环循环 反复执行同一段程序,直到满足一定反复执行同一段程序,直到满足一定的条件后才停止执行该段程序。的条件后才停止执行该段程序。q C语言中控制循环的语句语言中控制循环的语句:q whileq forq do_while526.2 while语句一一while语句格式语句格式while (表达式表达式)语句;语句;说明:语句可是简单语句,也可是复合语句。说明:语句可是简单语句,也可是复合语句。二二while语句语句的执行流程的执行流程536.2 while语句表达式表达式?执行语句执行语句成立成立不成立不成立执行执行while循环之后的语句循环之后的语句循环

36、控制条件循环控制条件循环体循环体while (表达式表达式)语句;语句;54例:从键盘输入例:从键盘输入10个整数,求这个整数,求这10个整数之和个整数之和程序主体:程序主体:count10?输入输入num成立成立不成立不成立输出结果输出结果total计数器计数器count=0累加器累加器total=0total += numcount+开始开始结束结束while ( count10 )count+;scanf(%d, &num);total += num;55 #include int main ( ) int count,num,total; / /* * count:计数器,计数

37、器,num:输入的整数输入的整数 * */ / count=0; total=0; / /* * total:存放累加和存放累加和 * */ / while (count10) / /* * 循环控制条件循环控制条件 * */ / printf (Enter the No.%d=, count); / /* *循环体循环体* */ / scanf (%d, &num); total += num; / /* * 计算累加和计算累加和 * */ / count +; printf(Total=%dn, total);56 例:求例:求n的阶乘的阶乘n! (1=n=10)q程序主体:程序主

38、体: while(i=n) s*=i; i+; i1时时576.2 while语句 #include int main ( ) long s=1; / /* * s:存放累积结果存放累积结果 * */ / int i=1; / /* * i:计数器,同时是累积的对象计数器,同时是累积的对象 * */ / while (i=10) / /* * 循环控制条件循环控制条件 * */ / / /* * 循环体循环体 * */ / s*=i; / /* * 计算累积和计算累积和 * */ / i+; printf(“10!=%dn, s);以求以求10!为例为例586.2 while语句q 比较比较t

39、otal=0;count=0;while (count10) total += num; count +;s=1;i=1;while (i=10) s *= i; i +;10个数相加个数相加10个数相乘个数相乘59例:分析程序运行结果例:分析程序运行结果 #include int main ( ) int n=0;while ( n3 ) printf (“n is %dn”,n); n+;结果结果:程序将不停的打印:程序将不停的打印“n is 0”,直至终止程序,直至终止程序无法正常终止的程序,称为无法正常终止的程序,称为“死循环死循环”。结论结论:while语句循环体中,一定要有能够对循

40、环控语句循环体中,一定要有能够对循环控制条件产生影响的语句,避免出现制条件产生影响的语句,避免出现“死循环死循环”现象。现象。606.2 while语句三三循环嵌套循环嵌套在循环体中,又包含有循环语句。在循环体中,又包含有循环语句。whilewhile61例:输出下三角形乘法九九表。例:输出下三角形乘法九九表。 1 2 3 4 5 6 7 8 9- 1 2 4 3 6 9 4 8 12 16 5 10 15 20 25 6 12 18 24 30 36 7 14 21 28 35 42 49 8 16 24 32 40 48 56 64 9 18 27 36 45 54 63 72 81 假设

41、:行号为假设:行号为i ,列号为,列号为j 则第则第i行中一共要输出行中一共要输出i个乘积,每一项为个乘积,每一项为i*j。(1=i=9)(1=j=i)i=6j=5i*j屏幕上的字符只能从上到下逐屏幕上的字符只能从上到下逐行显示,同一行内,只能从左行显示,同一行内,只能从左到右逐字显示。到右逐字显示。6162l显示要求显示要求 屏幕上的字符只能从上到下逐行显示,同屏幕上的字符只能从上到下逐行显示,同一行内,只能从左到右逐字显示。一行内,只能从左到右逐字显示。l伪代码伪代码(Pseudocode) while (控制显示控制显示n行行 ) while (控制显示一行中的控制显示一行中的m个字符个

42、字符 ) 输出一个需要的字符输出一个需要的字符; 列计数器列计数器 j+; 行数计数器行数计数器 i+; 63 #include int main ( ) int i=1, j; /* i:行计数器行计数器 j:列计数器列计数器 */ while ( i = 9 ) /* 控制打印表头控制打印表头 */ printf ( %4d, i+ ); printf (n-n); i=1; while ( i= 9 ) j = 1; /* 列计数器置列计数器置1 */ while ( j = i ) /* 嵌套的二重循环,输出第嵌套的二重循环,输出第i行行 */ printf (%4d, i*j );

43、j +; /* 列计数器列计数器+1 */ printf (n); /* 一行输出结束后,输出一行输出结束后,输出n */ i +; /* 行计数器行计数器+1 */ 外层循环体执行外层循环体执行1次,内层循环要完整执行次,内层循环要完整执行i次次64第6章 循环结构的程序设计 循环的基本概念 while语句 for语句 do_while语句 转移语句 循环应用656.3 for语句一一for语句格式语句格式for (表达式表达式1;表达式表达式2;表达式表达式3) 语句;语句; 说明:语句可是简单语句,也可是复合语句。说明:语句可是简单语句,也可是复合语句。二二for语句语句的执行流程的执行

44、流程66循环初始条件循环初始条件循环控制条件循环控制条件表达式表达式2?执行语句执行语句成立成立不成立不成立执行执行for循环之后的语句循环之后的语句执行表达式执行表达式3执行表达式执行表达式1循环体循环体 for (表达式表达式1;表达式表达式2;表达式表达式3) 语句;语句;for语句等价于下列语句:语句等价于下列语句:表达式表达式1;while (表达式表达式2) 语句;语句; 表达式表达式3;676.3 for语句 #include int main ( ) long n=1; int i; i=1;while (i=10) n*=i; i+;printf(“10!=%dn, n);

45、for (i=1;i=10;i+) n*=i;for语句最常用的形式:语句最常用的形式:for (初值;控制条件;增量初值;控制条件;增量) 语句;语句;68 例:用例:用for语句实现打印乘法九九表语句实现打印乘法九九表 #include int main ( ) int i, j; for ( i=1; i= 9; i+ ) printf ( %4d, i); printf (n-n); for ( i=1; i= 9; i+ ) for ( j=1; j= i; j+ ) printf (j=i?%4dn: %4d,i*j );输出函数输出函数printf中使用了中使用了“?”操作,含义

46、相当于:操作,含义相当于: if ( j=i ) printf (%4dn, i*j ); else printf (%4d, i*j );69三三for语句的变化形式语句的变化形式 for语句中的三个表达式中的任意一个都是可以省语句中的三个表达式中的任意一个都是可以省略的,但是分号不能省略。略的,但是分号不能省略。1. 省略表达式省略表达式2,则:,则:for (表达式表达式1; ;表达式;表达式3)2. 省略表达式省略表达式1和表达式和表达式3,则:,则:for (;表达式;表达式2;) 据此可得结论:所有用据此可得结论:所有用 while 语句语句实现的循环都实现的循环都可以用可以用fo

47、r语句语句实现。实现。3. 表达式表达式1、2、3全省略,则:全省略,则:for ( ;)等同于:等同于: while (表达式表达式 )构成一个死循环构成一个死循环等同于:等同于: while (1)70 语句中的逗号语句中的逗号(,)运算运算逗号逗号(,)运算常见的三种用途是:运算常见的三种用途是:1. 在变量说明表中用来分隔变量,起分隔符的在变量说明表中用来分隔变量,起分隔符的作用,如:作用,如:int i, j, k, m3, *p;2. 在函数的参数表中分隔参数。如:在函数的参数表中分隔参数。如:printf (n=%d, x=%dn, n, x);3. 在语句中使用。其形式是:在语

48、句中使用。其形式是:表达式表达式n1, 表达式表达式n2; 用逗号分隔开的表达式从左到右进行计算,用逗号分隔开的表达式从左到右进行计算,结果的类型和值是最右边表达式的类型和值。结果的类型和值是最右边表达式的类型和值。716.3 for语句例:输出下列字符串例:输出下列字符串:a z b y c x d w e v f u g t h s i r j q k p l o m n 分析:分析:奇数位上的字符从奇数位上的字符从a开始逐次递增,偶开始逐次递增,偶数位上的字符从数位上的字符从z开始逐次递减。开始逐次递减。 #include int main ( ) char i, j; / /* * i

49、:奇位字符奇位字符 j:偶位字符偶位字符 * */ / for ( i=a, j=z; ij; i+, j- ) printf( %c %c, i, j); / /* * 输出两个字符输出两个字符 * */ / printf(n); a z b y c x d w e v f u g t h s i r j q k p l o m n726.4 do_while语句一一do_while语句格式语句格式do 语句语句; while (表达式表达式);二二do_while语句语句的执行流程的执行流程736.4 do_while语句表达式表达式?执行语句执行语句成立成立不成立不成立执行执行while

50、子句子句之后的语句之后的语句循环控制条件循环控制条件循环体循环体后判断后判断do 语句语句; while(表达式表达式);746.4 do_while语句三三do_while语句的特点语句的特点与与 while 和和 for 的区别:的区别: do_while 语句语句先执行循环体先执行循环体然后然后再再判断判断循环循环控制条件控制条件;使用;使用 do_while 构构成的循环,循环体部分成的循环,循环体部分至少要执行一次至少要执行一次,使用使用 while 和和 for 构成的循环,循环体构成的循环,循环体部分有可能一次也不会执行。部分有可能一次也不会执行。 do_while语句条件表达式

51、后面的分号语句条件表达式后面的分号不是空语句。不是空语句。756.4 do_while语句 #include int main ( ) long n=1; int i; i=1;while (i=10) n*=i; i+; printf(“10!=%dn, n); for (i=1;i=10;i+) n*=i;i=1;do n*=i; i+;while (i=0的整数,要求以相反的顺序的整数,要求以相反的顺序输出。例如:输入输出。例如:输入12345,则输出为,则输出为54321。 思路:可以从个位开始,按位输出整数的每一位思路:可以从个位开始,按位输出整数的每一位 int main( ) u

52、nsigned int num; printf (Input the number:); scanf (%d, &num); do printf(%d, num%10); num /= 10; / /* *num缩小缩小10倍倍* */ / while ( num != 0 );简单转变为简单转变为while语语句,程序将不能处理句,程序将不能处理数字数字0。77循环语句小结C语言提供三种循环:语言提供三种循环:for、while、do_while1.for和和while先判断循环条件后执行循环体,先判断循环条件后执行循环体,do-while语句先执行循环体后判断循环条件;语句先执行循

53、环体后判断循环条件;2.while和和do-while语句的条件表达式只有语句的条件表达式只有 1个,个,for语句有语句有3个表达式,表达式个表达式,表达式2是条件表达式;是条件表达式;3.while、do-while、for可以相互替换使用;可以相互替换使用;4.while语句多用于语句多用于不需要赋初值不需要赋初值的或的或循环次数不定循环次数不定的情况;的情况; for语句多用于语句多用于要赋初值要赋初值或或循环次数固定循环次数固定的情况;的情况; do-while语句多用于语句多用于至少要运行一次至少要运行一次的循环;的循环;78循环语句小结 为了保证循环正常运行,应该特别注意:为了保

54、证循环正常运行,应该特别注意:q循环控制条件循环控制条件q控制条件的初始状态控制条件的初始状态(初始值初始值)q循环体内部对控制条件的影响循环体内部对控制条件的影响 以上三个方面相互配合,相互影响,共同以上三个方面相互配合,相互影响,共同完成循环控制完成循环控制79第6章 循环结构的程序设计 循环的基本概念 while语句 for语句 do_while语句 转移语句 循环应用806.5 转移语句一一转移语句的作用转移语句的作用改变程序的运行流程改变程序的运行流程二二C语言转移语句语言转移语句qbreakqcontinueqgotoqreturn816.5.1 break语句一一格式格式brea

55、k;二二功能功能1.在在switch语句中结束语句中结束case子句,使控制转到子句,使控制转到switch语句之外。语句之外。2.在循环语句的循环体中使用,结束循环过程,在循环语句的循环体中使用,结束循环过程,使控制转移到整个循环语句之外的下一条语使控制转移到整个循环语句之外的下一条语句处。句处。82三三 break语句的执行流程语句的执行流程表达式表达式?成立成立不成立不成立后续语句后续语句break表达式表达式2?成立成立不成立不成立后续语句后续语句执行表达式执行表达式3执行表达式执行表达式1break表达式表达式?成立成立不成立不成立后续语句后续语句breakwhile语句语句for语

56、句语句do-while语句语句836.5.1 break语句 例:例:求求n的约数中最大的三位数的约数中最大的三位数int main() int j; long n; printf(Please input number:); scanf(%ld, &n); / /* *所求的约数的可能取值是从所求的约数的可能取值是从999到到100,j从大到小从大到小* */ / for (j=999; j=100; j-) if ( n%j=0 ) / /* * 若能被若能被j整除,则整除,则j是约数是约数 * */ / printf(3 digits in %ld=%dn, n, j ); br

57、eak; / /* * 控制退出循环控制退出循环 * */ / 846.5.1 break语句四四break语句使用注意语句使用注意1. 在嵌套循环中,在嵌套循环中,break 语句仅能退出语句仅能退出一层一层(当当前层前层)循环;循环;2. 若在循环语句中包含了若在循环语句中包含了switch 语句,那么语句,那么switch 语句中的语句中的 break 语句仅能使控制退语句仅能使控制退出出 switch 语句;语句;3. break 语句并不是程序设计中必不可少的语语句并不是程序设计中必不可少的语句,可以通过改变程序的结构去掉。句,可以通过改变程序的结构去掉。856.5.2 contin

58、ue语句一一格式格式 continue;二二功能功能 continue语句仅能在循环语句中使用:它的作语句仅能在循环语句中使用:它的作用不是结束循环,而是开始一次新的循环。用不是结束循环,而是开始一次新的循环。1. 对于对于for语句,将控制转到执行表达式语句,将控制转到执行表达式3和条和条件测试部分;件测试部分;2. 对于对于while和和do-while语句,将控制转到条件语句,将控制转到条件测试部分;测试部分;3. 从逻辑上讲,适当改变程序的结构就可以不从逻辑上讲,适当改变程序的结构就可以不需要使用需要使用continue语句。语句。86三三 continue语句的执行流程语句的执行流程

59、表达式表达式?成立成立不成立不成立后续语句后续语句continue表达式表达式2?成立成立不成立不成立后续语句后续语句执行表达式执行表达式3执行表达式执行表达式1continue表达式表达式?成立成立不成立不成立后续语句后续语句continuewhile语句语句for语句语句do-while语句语句87例:例:输入输入10个整数,求其中正数的个数及平个整数,求其中正数的个数及平均值,精确到小数点后两位。均值,精确到小数点后两位。 int main ( ) int i, count=0, j, sum=0; for ( i=1; i=10; i+) printf(Input integer:);

60、 scanf(%d, &j); if ( j 0 ) printf(Plus number:%d,average value:%.2f, count, 1.0*sum/count); else printf(Plus number: 0, average value: 0);88一一goto语句格式语句格式 goto 语句标号语句标号 语句标号语句标号:功能:无条件转向功能:无条件转向语句标号所标识的语句标号所标识的语句执行。语句执行。 int a;p: scanf(“%d”,&a); if (a0),公差为,公差为d(d0)。则该数列满足条件:则该数列满足条件: a+(a+d)+(a+2*d)+(a+3*d) = 4*a+6*d = 26 a*(a+d)*(a+2*d)*(a+3*d) = 880 可以推出,首项可以推出,首项a和公差和公差d的取值范围为:的取值范围为: 1 = a =5 1 = d =3 可以使用穷举的方法,在可以使用穷举的方法,在 首项首项a 和和 公差公差d 的取值范围内进行判断。的取值范围内进行判断。90

温馨提示

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

评论

0/150

提交评论