《四章节程序流程控制语句》由会员分享,可在线阅读,更多相关《四章节程序流程控制语句(75页珍藏版)》请在金锄头文库上搜索。
1、越尘淬怒旨伊禁财开稠见帅迫煌旷偶堆娇具降防针余拾基矢禾躇龋吾括挺四章节程序流程控制语句四章节程序流程控制语句驼奉儒变向升宾肤维匪辜扳疗汤暂蝎求笨蔑旁赠们血糟洋占蛹兴盼康扳协四章节程序流程控制语句四章节程序流程控制语句第四章第四章 程序流程控制语句程序流程控制语句 C C语言的基本语句语言的基本语句 上机调试程序的方法上机调试程序的方法 基本的程序设计方法基本的程序设计方法 输出简单图形输出简单图形 穷举法穷举法本本 章章 要要 点点戳锻涸蠕兑漆玄蒲煮棵妊懊造拜手元盘雌刊失隆堰哥徒淖汲转少疥铺柠操四章节程序流程控制语句四章节程序流程控制语句2第四章第四章 程序流程控制语句程序流程控制语句第一节第
2、一节 C C语言语句概述语言语句概述第四章第四章第四章第四章第二节第二节 注释语句注释语句第四章第四章第四章第四章第三节第三节 复合语句复合语句第四章第四章第四章第四章第四节第四节 选择语句选择语句第五章第五章第五章第五章第五节第五节 循环语句循环语句第六章第六章第六章第六章第六节第六节 转移语句转移语句第六章第六章第六章第六章第七节第七节 简单应用综合举例简单应用综合举例吻适黄凄奸淑褪归痞直乡庶赢丽遥后基躁课潭义莽假鄂麻啸扦耿梧飘宗屑四章节程序流程控制语句四章节程序流程控制语句34-1 C4-1 C语言语句概述语言语句概述l按照按照C语言语句的语言语句的作用作用分类:分类:说明语句说明语句注
3、释语句注释语句程序流程控制语句程序流程控制语句声明变量名称、数据类型及声明变量名称、数据类型及其存储属性的说明性语句其存储属性的说明性语句编程者对程序本身的解释编程者对程序本身的解释是是“可执行可执行”的语句,的语句,构成程序的主体构成程序的主体人盗影奠妇再死栋插穿恒词行藏遣畔斩辫绕缆列粥伐铡汕快腰仅解排丛袱四章节程序流程控制语句四章节程序流程控制语句44-1 C4-1 C语言语句概述语言语句概述- -语句分类语句分类选择语句选择语句if - elseswitchforwhiledo - while循环语句循环语句转移语句转移语句breakcontinuegotoreturn标号语句标号语句表
4、达式语句表达式语句casedefault标号标号赋值表达式赋值表达式+分号分号(;)惭刊荫亏寝偶汹铱谩膜萄菇藏息晾懦盗骄惕腰芒潭陀慎颧汀烽猎花澈材赂四章节程序流程控制语句四章节程序流程控制语句54-1 C4-1 C语言语句概述语言语句概述- -语句分类语句分类l按照按照C语言语句的语言语句的功能功能分类:分类:控制语句控制语句 函数调用语句函数调用语句 表达式语句表达式语句 空语句空语句 复合语句复合语句控制程序的走向(流程)控制程序的走向(流程)由一个函数调用加一个分号由一个函数调用加一个分号赋值表达式加分号赋值表达式加分号只有一个分号只有一个分号 ;一对一对 括起来的语句序列括起来的语句序
5、列角来刊牟竖谁蔼糙碾涂照踩龙亨暂卷泡赠硒蜗曾份搁撬杏殆驮鸽健仙责虎四章节程序流程控制语句四章节程序流程控制语句64-1 C4-1 C语言语句概述语言语句概述- -简单实例简单实例#include main( ) /* * 简单程序实例简单程序实例 */*/ int a=10,b=20,c; if (ba) c=a+b; printf(”%dn”,c); else ; 控控制制语语句句表达式语句表达式语句复合语句复合语句函数调用语句函数调用语句空语句空语句说明语句说明语句注释语句注释语句C的语句以分号的语句以分号(;)结束结束拈蚂盘咯芥姬鹤驶盅漏复还唆变灾沟猿圃睹峻夸恬瘫伪盎吠蜂尘贸崔吝烽四章节
6、程序流程控制语句四章节程序流程控制语句74-2 4-2 注释语句注释语句l注释语句格式注释语句格式以以“/*/*”开头、以开头、以“*/*/”结尾的说明性文字结尾的说明性文字说明说明( (注释注释) )信息可以是中文,也可以是英文信息可以是中文,也可以是英文l注释语句的目的注释语句的目的备忘作用备忘作用增加程序的可读性,便于编程者和其它程序增加程序的可读性,便于编程者和其它程序阅读者理解程序阅读者理解程序l注释语句的使用方法注释语句的使用方法 可以注释程序的可以注释程序的功能功能、变量的含义变量的含义、函数间、函数间接接口关系口关系、编程使用的、编程使用的算法算法和和技巧技巧等信息等信息毛掸鲍
7、蒂短滔氖乓雕塑胯背锤产恒棋砒举贬鄂吨间白肖勺淖钟挎躇株北绞四章节程序流程控制语句四章节程序流程控制语句84-24-2 注释语句注释语句- -实例实例l实例实例 #include stdio.h #include stdio.hmain( )main( ) printf(Hello !n); printf(Hello !n); /*/* printf(Thanks !n); printf(Thanks !n); */*/ l合法的注释合法的注释x = y+5;x = y+5; /*/* x is integer number, xx is integer number, x是整型是整型 */*/
8、x = 10 +x = 10 + /*/* 合法的注释但不是好的注释合法的注释但不是好的注释 */*/ 5;5;l不合法的注释不合法的注释swiswi/*/* 不能在标识符中间插入注释不能在标识符中间插入注释 */*/tch(c) .tch(c) ./*/* this is an outer commentthis is an outer comment x = y/a; x = y/a; /*/* 注释不允许嵌套注释不允许嵌套 */*/ */*/渣种锄盟屉庙辆酚粒坚伏牺欺抹兔尹贵肖煞肘厂影舱昏稳健肄锅跟疤狼炭四章节程序流程控制语句四章节程序流程控制语句94-3 4-3 复合语句复合语句l复合
9、语句格式复合语句格式 用用 和和 括起来的若干合法的括起来的若干合法的C C语句。语句。l复合语句的目的复合语句的目的语法上语法上等价等价于于单一单一语句。因此在语言中,语句。因此在语言中,凡是可以使用单一语句的地方,均可使用复凡是可以使用单一语句的地方,均可使用复合语句。合语句。明确层次关系明确层次关系l复合语句的使用方法复合语句的使用方法复合语句允许嵌套,且嵌套层次没有限制复合语句允许嵌套,且嵌套层次没有限制对于复合语句,右花括号对于复合语句,右花括号“”的后面不必的后面不必再跟一个分号(再跟一个分号(;)招钦寞猿弛乾迟政艰骄瘪醋沈燕肝横驹乖租官漠崭箔掩埃颠称绩俊蛰挤渍四章节程序流程控制语
10、句四章节程序流程控制语句104-3 4-3 复合语句复合语句- -实例实例l例例C3_3001.C: C3_3001.C: 判断输入整数的正负性和奇偶性。判断输入整数的正负性和奇偶性。1.main( )1.main( )2.2. int x;int x;3. 3. printf(Enter a integer:); scanf(%d,&x); printf(Enter a integer:); scanf(%d,&x); 4.4.if if (x!=0)(x!=0)5. 5. /* /* 处理处理x x不等于不等于0 0的情况的情况 */ */6. 6. ifif (x0) (x0) /* /
11、* 若若x x大于大于0 0成立成立 */ */7. 7. x = x%2; x = x%2; /* /* 则计算则计算x x除以除以2 2的余数的余数 */ */8. if (x=0) printf(8. if (x=0) printf(”Is a plus even.n);Is a plus even.n);9. else printf(9. else printf(”Is a plus odd numbern);Is a plus odd numbern);10. 10. 11. 11. else else /* /* 否则,处理否则,处理x x为负数的情况为负数的情况 */ */12.
12、 12. x = x%2; x = x%2; /* /* 计算计算x x除以除以2 2的余数的余数 */ */13. if (x=0) printf(13. if (x=0) printf(”Is a minus even.n);Is a minus even.n);14. else printf(14. else printf(”Is a minus odd numbern);Is a minus odd numbern);15. 15. 16.16. 17.17. elseelse printf (This integer is zero.n); printf (This integer
13、is zero.n);18.18. 仅卧九柏腻恤则男钡食节塞函尔汹缓读援炯观罢堵乔堆萌泉顷瑰茧淮攻硝四章节程序流程控制语句四章节程序流程控制语句114-4 4-4 选择语句选择语句l提出问题提出问题l二重分支的条件语句二重分支的条件语句 ifl多重分支的条件语句多重分支的条件语句 switch根据学生分数判断是否及格?根据学生分数判断是否及格?根据学生分数如何进行分级?根据学生分数如何进行分级?如何解决如何解决?自然语言:自然语言:如果如果 那么那么 否则否则C语言:语言: 分支语句分支语句劣妥置垫驻冯赂匡宗门安四潮阎祝窥细豫俗片或从翘骇浪缸婆庸崖藐胖旺四章节程序流程控制语句四章节程序流程控制
14、语句124-4-1 4-4-1 选择语句选择语句-if-if语句语句lif语句格式语句格式 格式格式1 1:ifif ( (表达式表达式) ) 语句语句; 格式格式2 2:ifif ( (表达式表达式) ) 语句语句1 1;elseelse 语句语句2 2;lifif语句的执行流程语句的执行流程流程流程1 1: 流程流程2 2:表达式表达式执行语句执行语句成立成立不成立不成立表达式表达式执行语句执行语句2执行语句执行语句1成立成立不成立不成立分支条件分支条件煞按娇肚陈喘舶宪蚤对许颗巨咐撮卿窗勇力桐柬玫昏粪起诣莱碉臆裔搭伎四章节程序流程控制语句四章节程序流程控制语句134-4-1 4-4-1 选
15、择语句选择语句-if-if语句语句l 例例C3_4101.CC3_4101.C:求:求a a和和b b两数中较大的一个。两数中较大的一个。#include #include main( ) main( ) /* /* 程序功能:求程序功能:求a a和和b b的最大值的最大值 */ */ int a,b,max; int a,b,max; printf(Input a and b=); printf(Input a and b=); scanf(%d%d,&a, &b); scanf(%d%d,&a, &b); /* input number a and b */* input number a
16、 and b */ if if ( ( ab ab ) ) max=amax=a; ; /* /* 如果如果abab,则将,则将a=max */a=max */ elseelse max=b;max=b; /* /* 否则,否则, b=max */ b=max */ printf(The max of a and b : %dn, max); printf(The max of a and b : %dn, max); ab?max=bmax=a成立成立不成立不成立例例例例C3_4101C3_4101C3_4101C3_4101ifif语句中进行条件判断语句中进行条件判断的的“表达式表达式”必
17、须用必须用( )( )括起来且不可省略括起来且不可省略闻磅喝否宝哈集池略喂灶击唉念伐姿陌脉徒蜡省吐织拟藕怪播励畅掖悦数四章节程序流程控制语句四章节程序流程控制语句144-4-1 4-4-1 选择语句选择语句-if-if语句语句l 例例C3_4101.CC3_4101.C:求:求a a和和b b两数中较大的一个。两数中较大的一个。#include #include main( ) main( ) /* /* 程序功能:求程序功能:求a a和和b b的最大值的最大值 */ */ int a,b,max; int a,b,max; printf(Input a and b=); printf(Inp
18、ut a and b=); scanf(%d%d,&a, &b); scanf(%d%d,&a, &b); max=a; max=a; if if ( ( maxbmaxb ) ) max=bmax=b; ; printf(The max of a and b : %dn, max); printf(The max of a and b : %dn, max); 例例例例C3_41011C3_41011C3_41011C3_41011以上两个程序等价以上两个程序等价maxbmax=b成立成立不成立不成立宠茂瞬询蒂若殆煮祈击星捞斡修链够芥怀事桌困撂烈旬怠施虫哆舰堪境网四章节程序流程控制语句四章节
19、程序流程控制语句154-4-1 4-4-1 选择语句选择语句-if-if语句语句l 例例C3_4102.CC3_4102.C:从键盘输入被除数:从键盘输入被除数a a和除数和除数b b,求商。,求商。 main( )main( ) int a,b; int a,b; printf(Enter two numbers: ); printf(Enter two numbers: ); scanf(%d%d, &a, &b); scanf(%d%d, &a, &b); if if (b!=0) (b!=0) printf(%dn, a/b);printf(%dn, a/b); else else p
20、rintfprintf(cannot divide by zero.n);(cannot divide by zero.n); b?printf .printf.非非 00ifif ( (b b) ) printf(%dn, a/b);printf(%dn, a/b);elseelse printfprintf( (”error.n);error.n);等价!等价!究琶疏赋续溺柞倍提湃漂汾期逸诛椎较传咨妹咸话谷伺装锣式看爹夕哉过四章节程序流程控制语句四章节程序流程控制语句164-4-1 4-4-1 选择语句选择语句-if-if语句语句lifif语句嵌套义:语句嵌套义:在在ifif语句的语句的“
21、语句语句1 1”或或“语句语句2 2”中又包含着中又包含着ifif语句语句例例C3_4103.CC3_4103.C:比较两个整数的之间的关系(大小比较两个整数的之间的关系(大小/ /相等)。相等)。 #include #include main( )main( ) int x, y; int x, y; printf (Enter integer X and Y:); printf (Enter integer X and Y:); scanf (%d%d, &x, &y); scanf (%d%d, &x, &y); ifif ( x != y ) ( x != y ) ifif ( x y
22、 ) ( x y ) printfprintf (XYn); (XYn); elseelse printfprintf (XYn); (Xb)if(ab) /*/*1 1 */*/ if(ac) if(ac) /*/*2 2 */ */ if(ad) flag=1; if(ad) flag=1;/*/*3 3 */ */ else flag=2; else flag=2;/*/*4 4 */ */ else flag=3; else flag=3;/*/*5 5 */ */ 问题:问题:第四行和第五行的第四行和第五行的elseelse语句与哪一个语句与哪一个ifif语句语句相匹配呢相匹配呢?
23、? 分析:分析:匹配方案可以有很多种匹配方案可以有很多种,(2-4,1-5),(3-4,2-,(2-4,1-5),(3-4,2-5),(1-4,5),(1-4,) )l匹配规则匹配规则:在嵌套的:在嵌套的if-elseif-else语句中,语句中,elseelse子子句总是与句总是与上面的上面的、离它最近的离它最近的、且、且在同一复在同一复合语句中还没有配对的合语句中还没有配对的ifif子语配对。子语配对。唐抑衅垫载野咬绢囚茫唬疥塑狠雄典舍虾黎话门木鞘蛙霸兢淘绵博颖敌占四章节程序流程控制语句四章节程序流程控制语句184-4-1 4-4-1 选择语句选择语句-if-if语句语句1 1、ifif
24、(ab) (ab)ifif (ac) (ac) if (ad) flag=1; if (ad) flag=1; else flag=2; else flag=2;elseelse flag=3; flag=3;程序含义:当程序含义:当 c=ab c=ab 时,时,flag=3flag=32 2、if if (ab)(ab) ifif (ac) (ac) if (ad) flag=1; if (ad) flag=1; else else flag=2;flag=2; /* /* 以上是一个完整的以上是一个完整的复合复合语句语句 */ */elseelse flag=3; flag=3;程序含义:
25、当程序含义:当 a=b a=b 时,时,flag=3flag=3 廉谋憨理蔷碰模父榆晒韩专番缚蝇饼露沂宰决涤燎白钉榆幌疫袄凳篆莹胀四章节程序流程控制语句四章节程序流程控制语句194-4-1 4-4-1 选择语句选择语句-if-if语句语句3 3、if (a=b)if (a=b) if (b=c) printf(a=b=cn); if (b=c) printf(a=b=cn); else printf( else printf(”a!=bna!=bn”);); 尽管尽管书写书写格式如此,真实的格式如此,真实的正确正确的含义是:的含义是: ifif (a=b) (a=b) ifif (b=c) p
26、rintf(a=b=cn); (b=c) printf(a=b=cn); elseelse printf(a!=bn printf(a!=bn”);); 通过加通过加 ,可以改变配对关系:可以改变配对关系: ifif (a=b) (a=b) ifif (b=c) printf(a=b=cn); (b=c) printf(a=b=cn); elseelse printf( printf(”a!=bna!=bn”);); 辉禄惰浇哄村守糙植粮延搓酚晃嵌宝躯堤大蝇箭弓偶收久封赦社吝驰吗踏四章节程序流程控制语句四章节程序流程控制语句204-4-1 4-4-1 选择语句选择语句-if-if语句语句l例例
27、C3_4104.CC3_4104.C:已知银行整存整取存款月息利:已知银行整存整取存款月息利率分别为率分别为: 一年期:一年期:0.63% 0.63% 二年期:二年期:0.66%0.66% 三年期:三年期:0.69% 0.69% 五年期:五年期:0.75%0.75% 八年期:八年期:0.84% 0.84% 其它:其它:0 0 要求输入存钱的本金和期限,求到期时利息要求输入存钱的本金和期限,求到期时利息与本金合计。银行到期利息计算公式:与本金合计。银行到期利息计算公式:利息本金利息本金月息利率月息利率1212存款年限存款年限 程序中应当根据存款的年限确定利率程序中应当根据存款的年限确定利率帅碘沦
28、猫季诊箭滚义捶绷丽寄彼瞎侍徊廖尔撮要坷雾了帘捂屯桌识卡皮互四章节程序流程控制语句四章节程序流程控制语句214-4-1 4-4-1 选择语句选择语句-if-if语句语句 #include #include main( )main( ) int year; int year; float money,rate,total; float money,rate,total; /* /* 本金,月利率,本利合计本金,月利率,本利合计*/*/ printf(Input money and year =?); printf(Input money and year =?); scanf(%f%d, &mon
29、ey, &year); scanf(%f%d, &money, &year); /* /* 输入本金和年限输入本金和年限 */ */ ifif ( year = 1 ) rate=0.0063; ( year = 1 ) rate=0.0063; /* /* 根据年限定利率根据年限定利率 */ */ else else ifif ( year = 2 ) rate=0.0066; ( year = 2 ) rate=0.0066; elseelse ifif ( year = 3 ) rate=0.0069; ( year = 3 ) rate=0.0069; elseelse ifif (
30、year = 5 ) rate=0.0075; ( year = 5 ) rate=0.0075; elseelse ifif ( year = 8 ) rate=0.0084; ( year = 8 ) rate=0.0084; elseelse rate=0.0; rate=0.0; total = money + money * rate *12 * year; total = money + money * rate *12 * year; printf( Total = %.2fn, total); printf( Total = %.2fn, total); 释片盆熙衫均吱缎兆摆镊
31、添珐续牵奉辛撕嚎脏琉雌触雷臭叠班佩午账疹节四章节程序流程控制语句四章节程序流程控制语句224-4-1 4-4-1 选择语句选择语句-if-if语句语句l采用采用if-else ifif-else if结构改写。结构改写。 #include #include main( )main( ) int year; int year; float money,rate,total; float money,rate,total; /* /* 本金,月利率,本利合计本金,月利率,本利合计*/*/ printf(Input money and year =?); printf(Input money and
32、 year =?); scanf(%f%d, &money, &year); scanf(%f%d, &money, &year); /* /* 输入本金和年限输入本金和年限 */ */ ifif ( year = 1 ) rate=0.0063; ( year = 1 ) rate=0.0063; /* /* 根据年限定利率根据年限定利率 */ */ else else ifif ( year = 2 ) rate=0.0066; ( year = 2 ) rate=0.0066; elseelse if if ( year = 3 ) rate=0.0069;( year = 3 ) ra
33、te=0.0069; elseelse ifif ( year = 5 ) rate=0.0075; ( year = 5 ) rate=0.0075; elseelse ifif ( year = 8 ) rate=0.0084; ( year = 8 ) rate=0.0084; else else rate=0.0; rate=0.0; total = money + money * rate *12 * year; total = money + money * rate *12 * year; printf( Total = %.2fn, total); printf( Total
34、= %.2fn, total); 涤蒂矿观柿愤锌汰朔砚映协喧男客唾奈褐造烦裳竭皿陨彪吴踪往汀鲜炬共四章节程序流程控制语句四章节程序流程控制语句234-4-1 4-4-1 选择语句选择语句-if-if语句语句l例例C3_4105.CC3_4105.C:通过键盘输入字符,将输入的字符分为:通过键盘输入字符,将输入的字符分为控控制制、数字数字、大写大写字母、字母、小写小写字母和字母和其他其他字符等五类。字符等五类。ASCIIASCII码表中的前码表中的前3232个字符为控制字符,个字符为控制字符,0 09 9为数字为数字, , A AZ Z为大写字母为大写字母, , a az z为小写字母,为小写字
35、母,其它其它。 #include #include main ( )main ( ) char c; char c; printf (Enter a character:); printf (Enter a character:); c=getch( ); c=getch( ); ifif ( (c0x20c=c=0 0 & c= & c=c=A A & c= & c= ( c=a a & c= & c=z z ) ) printf (nIs a lower character.n); printf (nIs a lower character.n); else else printf pri
36、ntf (nIs a other character.n);(nIs a other character.n); 例例例例C3_4105C3_4105C3_4105C3_4105茸道伯隔厕裁耶声报仑胎婶尉痒版阳化馋椭觉求煽坡匙抉炕狠弥指歧唤泳四章节程序流程控制语句四章节程序流程控制语句244-4-1 4-4-1 选择语句选择语句-if-if语句语句lif语句与条件运算的关系语句与条件运算的关系l例:例:求一个数的绝对值求一个数的绝对值if ( y0 ) x=-y;elsex=y;(y0) ? x=-y : x=y;等价等价等等价价x = (y0) ? y : y;说明:说明:if elseif
37、 else可以完可以完成与条件运算符成与条件运算符( ? : )完完全相同的任务,并且可全相同的任务,并且可以进行相应的转换。以进行相应的转换。邪炽冲肝讨邦澜计构漂秸容氏治棕群捉钠幻嫩述沏绒掇毡膜湾止粕必箱茅四章节程序流程控制语句四章节程序流程控制语句254-4-1 4-4-1 选择语句选择语句-if-if语句语句lifif语句与条件运算的区别:语句与条件运算的区别:条件运算符形式比较简单,条件运算符形式比较简单,有较强的灵活性,可以替代部分有较强的灵活性,可以替代部分ifif语句。语句。l例:例:if ( cans=1 ) printf(”You need 1 can of paint.”)
38、; else printf(”You need 2 cans of paint. ”); 转换:转换:(cans=1)? printf(”You need 1 can of paint.”) : printf(”You need 2 cans of paint.”); 转换:转换:printf(cans=1? ”You need 1 can of paint.” : ”You need 2 cans of paint.”); 转换:转换:printf (”You need %d %s of paint.”, cans , cans=1 ? ”can” : ”cans” );可以在函数中方便地使
39、用条件运算可以在函数中方便地使用条件运算昼雪削打硒蒙遵雹浇祈凑殴礁茵荐样劳腕效摇草混褂狠坤和多制钢驮不硼四章节程序流程控制语句四章节程序流程控制语句264-4-2 4-4-2 选择语句选择语句-switch-switch语句语句lswitch语句格式语句格式 switch ( switch (表达式表达式) ) casecase 常量常量1 1: : 语句序列语句序列1 1 breakbreak; ; casecase 常量常量2 2: : 语句序列语句序列2 2 breakbreak; ; default default: : 语句序列语句序列n+1 n+1 执行语句序列序列1=常量常量1?
40、计算计算表达式表达式的值的值相等相等不相等不相等break执行语句序列序列2=常量常量2?相等相等不相等不相等break执行语句序列序列n+1有有default?有有没有没有吃把动泛猎瓮诲膘壮粱拭乡牧矢季臻呈提沛霉腰辟孕滴霹岂压蜂胃邦鸣汁四章节程序流程控制语句四章节程序流程控制语句274-4-2 4-4-2 选择语句选择语句-switch-switch语句语句switch (number) case 1: statement 1;break;case 2: statement 2;break;case 3: statement 3;break;default: statement 4;stat
41、ement 5;当当number的值为的值为2时时三匡傲悍捅玲匠瑶副棠惟诊湖曰娃熙磅昨祷贸示脆邢恐愧染棺疽灿洽俐抹四章节程序流程控制语句四章节程序流程控制语句284-4-2 4-4-2 选择语句选择语句-switch-switch语句语句lswitch语句使用注意事项语句使用注意事项1.1.switchswitch语句与语句与ifif语句不同,仅能判断一种关系:是否语句不同,仅能判断一种关系:是否恒等恒等。2.2.switchswitch语句中语句中casecase子句的子句的常量常量可以是整型常量、字符型常量、可以是整型常量、字符型常量、枚举型数据,或是整型常量表达式,枚举型数据,或是整型常
42、量表达式,不允许是变量不允许是变量。3.3.在在同一个同一个switchswitch中,中,casecase子句的子句的常量不能相同常量不能相同;在;在嵌套嵌套的的switchswitch语句中,不同层次的语句中,不同层次的switchswitch之间,可有相同的常量。之间,可有相同的常量。4.4.defaultdefault子句可以省略子句可以省略。5.5.case case 和和 default default 子句只能在子句只能在switchswitch语句中使用,且语句中使用,且 casecase和和 default default 只起标号作用只起标号作用,可出现在,可出现在swit
43、chswitch中的任何位置。中的任何位置。6.6.casecase 和和 defaultdefault 子句后面的语句序列允许由多个可执行语子句后面的语句序列允许由多个可执行语句组成,且不必用句组成,且不必用“ ”括起来,也可以为括起来,也可以为空空语句。语句。7.7.switchswitch语句中语句中可省略可省略breakbreak语句语句,但省略后会改变流程。,但省略后会改变流程。烙噬给银诵趟止拌攘毅彼仕盘易烫相膝汉漾就掂儒吟旗念咖挫柄拥渔布苟四章节程序流程控制语句四章节程序流程控制语句294-4-2 4-4-2 选择语句选择语句-switch-switch语句语句l例例C3_4104
44、.CC3_4104.C:计算存款本利。采用:计算存款本利。采用switchswitch改写。改写。 #include #include main( )main( )int year;int year; float money,rate,total; float money,rate,total; /* /* 本金,月利率,本利合计本金,月利率,本利合计*/*/ printf(Input money and year =?); printf(Input money and year =?); scanf(%f%d, &money, &year); scanf(%f%d, &money, &yea
45、r); /* /* 输入本金和年限输入本金和年限 */ */ switch switch ( year ) ( year ) /*/*根据年限定利率根据年限定利率*/*/ case case 1 1: : rate=0.0063; rate=0.0063; breakbreak; ; casecase 2 2: :rate=0.0066; rate=0.0066; breakbreak; ; casecase 3 3: :rate=0.0069; rate=0.0069; breakbreak; ; casecase 5 5: :rate=0.0075; rate=0.0075; breakb
46、reak; ; casecase 8 8: :rate=0.0084; rate=0.0084; breakbreak; ; defaultdefault: :rate=0;rate=0; total = money + money * rate *12 * year; total = money + money * rate *12 * year; printf( Total = %.2fn, total); printf( Total = %.2fn, total); 亭树足赃啄泼养芹驭搀层琵熬扣曹礼屡邦很嘘枣冲惯殆苫小沽盯绵脏浇攘四章节程序流程控制语句四章节程序流程控制语句304-4-2
47、 4-4-2 选择语句选择语句-switch-switch语句语句l例例C3_4203.CC3_4203.C:输入:输入yearyear年份和月年份和月monthmonth,求该月天数。,求该月天数。l如何判断闰年如何判断闰年? 闰年:能够被闰年:能够被4 4整除整除且且不能不能被被100100整除整除的年份的年份 或或 能够被能够被400400整除整除的年份的年份 例如:例如:19961996年、年、19801980年是年是闰年闰年 19701970年、年、19001900年是年是平年平年 2000 2000年是年是闰年闰年l判断闰年的判断闰年的C C语言公式语言公式year%4=0 yea
48、r%4=0 & year%100!=0 year%100!=0 | year%400=0 year%400=0 当当year=year=19961996时,结果为时,结果为1 1 当当year=year=19971997时,结果为时,结果为0 0 当当year=year=19001900时,结果为时,结果为0 0 当当year=year=20002000时,结果为时,结果为1 1 若为若为闰年闰年:结果为:结果为1若为若为平年平年:结果为:结果为0走运砧净夯挚阮屠诽族衅瑟庚截态临垫驮芜绑栽晰匡类兆敏硷咆岔国灵骗四章节程序流程控制语句四章节程序流程控制语句314-4-2 4-4-2 选择语句选择
49、语句-switch-switch语句语句 main( ) main( ) int year, month, days; int year, month, days; scanf(%d%d, &year, &month); scanf(%d%d, &year, &month); switch switch (month)(month) casecase 1 1: case: case 3 3: case: case 5 5: case: case 7 7: : casecase 8 8: case: case 1010: case: case 1212: : /* /* 处理处理“大大”月月 *
50、/ */ days=31; days=31; breakbreak; ; case case 4 4: case : case 6 6: case : case 9 9: case : case 1111: : /* /* 处理处理“小小”月月 */ */ days=30; days=30; breakbreak; ; case 2:case 2: /* /* 处理处理“平平”月月 */ */ ifif ( year%4=0 & year%100!=0 | year%400=0 ) ( year%4=0 & year%100!=0 | year%400=0 ) days=29; days=29
51、; /* /* 如果是闰年如果是闰年 */ */ elseelse days=28; days=28; /* /* 不是闰年不是闰年 */ */ breakbreak; ; default:default: /* /* 月份错误月份错误 */ */ printf(Input error!n); printf(Input error!n); days=0; days=0; ifif (days!=0) printf( (days!=0) printf(”%d,%d is %ddaysn,year,month,days);%d,%d is %ddaysn,year,month,days); 省略省
52、略case子句之后的语句子句之后的语句衙敷吵怯芦夜舌膛沁僧烧唤府鸣力怜棕储梢晴柞脸坠张仇捐辞没初锁誊称四章节程序流程控制语句四章节程序流程控制语句324-4-2 4-4-2 选择语句选择语句-switch-switch语句语句l省略省略breakbreak语句语句 例如:某程序段中,例如:某程序段中,errorerror是进行出错处理的函数。是进行出错处理的函数。 flag=-1; /* error marker */flag=-1; /* error marker */switchswitch (i) (i) casecase 1: 1: casecase 2: 2: casecase 3:
53、 3: flag=0; /* no error */flag=0; /* no error */ breakbreak; ; casecase 4: 4: flag=1; /* error #1 */flag=1; /* error #1 */ casecase 5: 5: error(flag); /* error process */error(flag); /* error process */ breakbreak; ; default: default: flag=2; /* other error */flag=2; /* other error */ /* /* 假定函数假定函数
54、errorerror是出错处理函数是出错处理函数 */ */当当 i=1i=1,2 2,3 3 时:时:flagflag=0=0;退出。;退出。当当 i=5 i=5 时:时:flag flag = -1= -1;调用;调用erorr(flag)erorr(flag);退出。;退出。当当 i=4 i=4 时:时:flag flag = 1= 1;调用;调用 error(flag) error(flag);退出。;退出。抒海沏挺蝉碘穿槛俯邑肃弊碉真艳甭绚藕镑心尘说宏洱氰蛙闲听蒜渝稀盖四章节程序流程控制语句四章节程序流程控制语句334-4-2 4-4-2 选择语句选择语句-switch-switch
55、语句语句l例例C3_4202.CC3_4202.C:请编写一个程序计算表达式:请编写一个程序计算表达式:data1 data1 opop data2 data2的值。的值。 main ( ) main ( ) float data1, data2;char op;float data1, data2;char op; /* /* 定义操作数、操作符变量定义操作数、操作符变量 */ */printf(Enter your expression:);printf(Enter your expression:);scanf (scanf (”%f%c%f%f%c%f”, &data1, &op, &
56、data2); , &data1, &op, &data2); /* /* 输入表达式输入表达式 */*/switchswitch ( ( opop ) ) /* /* 根据操作符分别进行处理根据操作符分别进行处理 */ */ casecase + + : : /* /* 处理加法处理加法 */ */ printf(%.2f+%.2f=%.2fn, data1, data2, data1+data2); printf(%.2f+%.2f=%.2fn, data1, data2, data1+data2);breakbreak; ; casecase - - : : /* /* 处理减法处理减法
57、 */ */printf (%.2f-%.2f=%.2fn, data1, data2, data1-data2);printf (%.2f-%.2f=%.2fn, data1, data2, data1-data2);breakbreak; ; casecase * * : : /* /* 处理乘法处理乘法 */ */printf (%.2f*%.2f=%.2fn, data1, data2, data1*data2);printf (%.2f*%.2f=%.2fn, data1, data2, data1*data2);breakbreak; ; casecase / / : : /* /
58、* 处理除法处理除法 */ */if if ( ( data2data2=0 0 ) ) /* /* 若除数为若除数为 */ */ printf (Division by zero.n); printf (Division by zero.n);elseelse printf (%.2f/%.2f=%.2fn, data1, data2, data1/data2); printf (%.2f/%.2f=%.2fn, data1, data2, data1/data2); breakbreak; ; defaultdefault: : /* /* 输入其它运算符输入其它运算符 */ */ pri
59、ntf (Unknown operater.n);printf (Unknown operater.n); 例例例例C3_4202C3_4202C3_4202C3_4202与药匹曰何妹组剂所订掌橇皆墙癌醛郴酵乍劣咽炯袄膀吭诧循猛感微邻喊四章节程序流程控制语句四章节程序流程控制语句344-5 4-5 循环语句循环语句l提出问题提出问题提问:提问:从键盘上输入从键盘上输入10个整数并求和,怎么编程?个整数并求和,怎么编程?回答:回答:在程序中写入在程序中写入10个个scanf( )语句。语句。提问:提问:从键盘上输入从键盘上输入500个整数并求和,怎么编程?个整数并求和,怎么编程?回答:回答:这个
60、,嗯这个,嗯? 不会让我写不会让我写500个个.老师:老师:让我们换一个角度来看待这些问题,让我们换一个角度来看待这些问题, 以上问题的实质是:将以上问题的实质是:将scanfscanf函数重复执行函数重复执行N N遍。遍。学生:学生:对!好象是这么回事对!好象是这么回事.老师:老师:我们可以引出一个概念我们可以引出一个概念“循环循环”,简单而言:,简单而言:循环循环就是不断反复地执行同一段程序。就是不断反复地执行同一段程序。学生:学生:这就是我们今天要学的新东西?这就是我们今天要学的新东西?忧恒嘛磊能何奔烬佩酝遍裹向荷记扯反蕾步涝凳嫉印瘤堕娩穗传督再泣华四章节程序流程控制语句四章节程序流程控
61、制语句354-5 4-5 循环语句循环语句l循环循环 反复执行同一段程序,直到满足反复执行同一段程序,直到满足一定的条件后才停止执行该段程序。一定的条件后才停止执行该段程序。lC语言中控制循环的语句:语言中控制循环的语句: while for do-while牛活渝苑侥劫垄酬缆河彰排辰凌快庄兜笋疼笔曳烤乱十脯烦惕侗悯椭化岩四章节程序流程控制语句四章节程序流程控制语句364-5-1 while4-5-1 while语句语句lwhile语句格式语句格式while ( while ( 表达式表达式 ) ) 语句语句;说明:语句说明:语句部分可以是部分可以是简单语句简单语句,也可,也可以是以是复合语句
62、复合语句。lwhilewhile语句的执行流程语句的执行流程表达式表达式?执行语句语句成立成立不成立不成立执行while循环之后的语句循环控制条件循环控制条件循环体循环体堪练椒搽碱蒜状赵始乒入疗残卷油碘狂占城宣才吁蔡泛植浴亲载胎凤庸择四章节程序流程控制语句四章节程序流程控制语句374-5-1 while4-5-1 while语句语句- -实例实例l例例C3_5101.C C3_5101.C 从键盘输入从键盘输入1010个整数,求这个整数,求这1010个整数个整数的和。的和。 #include #include main ( )main ( ) int count,num,total; int
63、count,num,total; /* count:/* count:计数器,计数器,num:num:输入的整数输入的整数 */ */ count=0; total=0; count=0; total=0; /* total:/* total:存放累加和存放累加和 */ */ while while ( ( count10count10 ) ) /* /* 循环控制条件循环控制条件 */ */ count +; count +; /* /* 循环体循环体 */ */ printf (Enter the No.%d=, count); printf (Enter the No.%d=, coun
64、t); scanf (%d, &num); scanf (%d, &num); total += num; total += num; /* /* 计算累加和计算累加和 */ */ printf(Total=%dn, total); printf(Total=%dn, total); 例例例例C3_5101C3_5101C3_5101C3_5101塔辑惠路秘付栽截缉厌飘踌绽皮更畴芒辅顶拙锑摹踞吮藤年赖加有氟彩把四章节程序流程控制语句四章节程序流程控制语句384-5-1 while4-5-1 while语句语句- -实例实例l例:例:分析程序的运行结果分析程序的运行结果 #include #in
65、clude main ( )main ( ) int n=0;int n=0;while ( n3 )while ( n3 )printf (printf (”n is %dnn is %dn”,n);,n);n+;n+;printf(printf(”Thats all this program Thats all this program does.ndoes.n”);); 结果:结果:程序将不停的打印程序将不停的打印“n is 0”,直至终止程序,直至终止程序l无法正常终止的程序,称为无法正常终止的程序,称为“死循环死循环”。结论:结论:while语句语句循环体循环体中,一定要有能够中,一
66、定要有能够对循环控制对循环控制条件产生影响的语句条件产生影响的语句。避免出现。避免出现“死循环死循环”现象。现象。例例例例C3_51011C3_51011C3_51011C3_51011萌汪礁粱葱煮醛凉势价陆竟提份眩夯省您贞淹斗述谷造铲贿灯渤蔽遁搽俩四章节程序流程控制语句四章节程序流程控制语句394-5-1 while4-5-1 while语句语句- -实例实例l例例1:分析下列程序段分析下列程序段 index=1;index=1;while ( while ( index index 5 ) 5 )printf(printf(”Good morning!nGood morning!n”);)
67、;分析:分析: 程序段将无限制打印字符串。程序段将无限制打印字符串。 因为循环中因为循环中没有没有任何语句可以改变循环控制变任何语句可以改变循环控制变量量indexindex的初值的初值1 1。贯冠俏俭骑露商敖闻泅唾豆志运瘸烂凶手肪关惹醇诊谱买余秆睫劈使乞郝四章节程序流程控制语句四章节程序流程控制语句404-5-1 while4-5-1 while语句语句- -实例实例l例例2 2:分析下列程序段分析下列程序段 index=1;index=1;while( - while( - index index 5 ) 5 )printf(printf(”Good morning!nGood morni
68、ng!n”););分析:分析: 仍有问题,程序改变了仍有问题,程序改变了indexindex,但方向错了。,但方向错了。 在在indexindex达到系统能够处理的最大负数时,将会达到系统能够处理的最大负数时,将会产生下溢而终止程序。产生下溢而终止程序。结论:结论: 循环体中必须有能够使循环循环体中必须有能够使循环正常停止正常停止的条件。的条件。球敲翻炎备俐可皋倦衣派楚连乳独迁砂擦范亨擞晕荡丽协勃著茂县乍浓棱四章节程序流程控制语句四章节程序流程控制语句414-5-1 while4-5-1 while语句语句- -实例实例l例例C3_5103.CC3_5103.C:从键盘中读入一系列字符,直到输
69、入字从键盘中读入一系列字符,直到输入字母母a a时才停止。时才停止。分析:分析:由于不知道要输入的字符数量,只知停止条件由于不知道要输入的字符数量,只知停止条件是输入字母是输入字母a a,则只能将循环控制条件设为,则只能将循环控制条件设为ch!=ch!=a a。 #include #include main( )main( ) char ch= char ch= ; ; while while ( ( ch!=ch!=a a ) ) putchar(putchar( ch = getch( )ch = getch( ) ) ); 例例例例C3_5103C3_5103C3_5103C3_5103
70、 改写:改写: #include #include main( )main( ) char ch; char ch; while while ( ( ( (ch = getch( )ch = getch( ) ) !=!=a a ) ) ; 例例例例C3_51031C3_51031C3_51031C3_51031循环体为空语句循环体为空语句廓捆纤此洱豢抿浆慰租兼都耿钡墅拌电翌老息紊亩耿哆捎酶乙贬窄央栗喜四章节程序流程控制语句四章节程序流程控制语句424-5-1 while4-5-1 while语句语句- -实例实例l例例C3_5104.CC3_5104.C:对输入的行和字符进行计数。对输入的行
71、和字符进行计数。分析:分析:nn作为作为行结束行结束标记的,标记的,DOSDOS中有中有CTRL+ZCTRL+Z作为作为文件结束文件结束标记标记 #define EOF -1 #define EOF -1#include #include main ( )main ( ) int c,nl=0,nc=0; int c,nl=0,nc=0; whilewhile ( ( ( c = getchar( ) )( c = getchar( ) ) != != EOF EOF ) ) + nc;+ nc; ifif ( c = ( c = nn ) ) + nl; + nl; printf(chars
72、=%d, lines=%dn, nc, nl);printf(chars=%d, lines=%dn, nc, nl); 例例例例C3_5104C3_5104C3_5104C3_5104 定义文件结束标记定义文件结束标记 nl nl行计数器行计数器ncnc字符计数器字符计数器 进行字符计数进行字符计数 如果找到如果找到nn,则行计数,则行计数忠峰淄毯劈罪各驳涯片瞄盂滩踊漱锐煽衡焉十训迢暖垄糙眨洁坛稍办热仍四章节程序流程控制语句四章节程序流程控制语句434-5-1 while4-5-1 while语句语句- -实例实例l例例3 3:求求1 1到到100100的之和。的之和。 main ( ) m
73、ain ( ) int total=0, int total=0, i=1i=1; ; while while ( ( i = 100i = 100 ) ) total = total + i;total = total + i; i +;i +; printf( printf(”Total=%dn, total);Total=%dn, total); 例例例例C3_51041C3_51041C3_51041C3_51041 变形变形1 1:whilewhile ( ( i = 100i total+=i;= total+=i; +i+i 变形变形2 2:int int i=i=0;0; wh
74、ile while ( ( +i = 100i +i; = +i; 判断判断i=100i=100 total += i total += i; ; 变形变形3 3:int int i=0i=0; ; while while ( i ( i+ + = 判断判断i100i100;i+i+ total += i total += i; ; 变形变形4 4:int int i=0i=0; ; while while ( i ( i 100 +i; total+=i= +i; total+=i经呼事壳躺还昌痴万弗沧披颧不莉牌劝徘幼句褂减克颠滤茬钢藐燃贺缉纂四章节程序流程控制语句四章节程序流程控制语句44
75、4-5-1 while4-5-1 while语句语句- -实例实例l循环嵌套循环嵌套 在循环体中,又在循环体中,又包含包含有有循环循环语句,构成语句,构成循环嵌套循环嵌套。例例C3_5107.CC3_5107.C:输出下三角形乘法九九表。:输出下三角形乘法九九表。 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9- 1 1 2 4 2 4 3 6 9 3 6 9 4 8 12 16 4 8 12 16 5 10 15 20 25 5 10 15 20 25 6 12 18 24 30 36 6 12 18 24 30 36 7 14 21 28 35 42 49 7 14
76、 21 28 35 42 49 8 16 24 32 40 48 56 64 8 16 24 32 40 48 56 64 9 18 27 36 45 54 63 72 81 9 18 27 36 45 54 63 72 81 假设假设:行号为:行号为i i ,列号为,列号为j ji i= =6 6j j= =5 5i i* *j j( (1 1=i=i=9 9) )( (1 1=j j=i i) ) 则则:第:第 i i 行中一共要输出行中一共要输出 i i 个乘积个乘积贼述玲石南醒痕钳张宣祥筏疏腺奸喇盼滋械归削恒吸琵太肾氦杯粟灌应彦四章节程序流程控制语句四章节程序流程控制语句454-5-1
77、 while4-5-1 while语句语句- -实例实例 #include #include main ( )main ( ) int int i i=1, j; =1, j; /* /* i i: :行行计数器计数器 j j: :列列计数器计数器 */ */ whilewhile ( ( i i = 9 ) = 9 ) /* /* 控制打印表头控制打印表头 */ */ printf ( %4d, printf ( %4d, i i+ ); + ); printf (n-n); printf (n-n); i=1i=1; ; while while ( ( i i= 9 )= 9 ) j j
78、= 1; = 1; /* /* 列列计数器置计数器置1 */1 */ while while ( ( j j = 1 n1 时时 #include #include main ( )main ( ) long int n=1; long int n=1; int i; int i; forfor ( ( i = 1i = 1; ; i =10i =10; ; i+i+ ) ) n = n * i; n = n * i; /* /* 求求N! */N! */printf ( %2d!=%ldn, i, n);printf ( %2d!=%ldn, i, n); 例例例例C3_5203C3_520
79、3C3_5203C3_5203lforfor语句最常用的形式语句最常用的形式for for (初值初值;控制条件控制条件;增量增量) 语句;语句;劈秆烷浮驱函充咐侨危稚晨抑也贿渤酗便蹿浪贾氛踞伙仲槐伐酞郁时裕网四章节程序流程控制语句四章节程序流程控制语句494-5-2 for4-5-2 for语句语句- -实例实例l例例C3_5202.CC3_5202.C:用:用forfor语句实现打印乘法九九表。语句实现打印乘法九九表。 #include #include main ( )main ( ) int i, j; int i, j;forfor ( ( i=1; i=1; i10i10; ; i
80、+i+ ) ) printf (%4d,i); printf (%4d,i); /* /* 打印表头打印表头 */ */ printf (n-n); printf (n-n);forfor ( ( i=1i=1; ; i10i10; i+; i+ ) ) /* /* 控制打印表体控制打印表体 */ */ forfor ( ( j=1j=1; ; j=ij=3n=3)为求出第为求出第N N项的值,请编写程序。项的值,请编写程序。 根据递推通项公式,可用根据递推通项公式,可用递推法递推法编写程序,计算编写程序,计算第第N N项的值。项的值。l递推法递推法:由初始的已知条件开始,由初始的已知条件开始
81、,先计算出第先计算出第(N(N1)1)步的结果,步的结果,再再利用前面已知的利用前面已知的(N(N1)1)项结果,按照递项结果,按照递推公式(或遵照递推规则),推公式(或遵照递推规则),推出第推出第N N步结果步结果。递推法递推法是程序设计中最常用的方法之一,使用递推法是程序设计中最常用的方法之一,使用递推法必须有明确的必须有明确的递推初始值递推初始值和和递推规则递推规则(递推公式)。(递推公式)。磅突庇焙哀嗅认俺痪素杏剃丙坐陌屋节最韦抑涣岗蹄娜维庄藉韧符龚匹勿四章节程序流程控制语句四章节程序流程控制语句524-5-2 for4-5-2 for语句语句- -实例实例l例例C3_5204.CC3
82、_5204.C程序程序#include #include main( )main( ) int n,i,un1,un2,un; int n,i,un1,un2,un; for for ( ( ; ; ; ) ) printf (Input n=?); scanf (%d,&n); printf (Input n=?); scanf (%d,&n); ifif ( n = 3 ) ( n = 3 ) breakbreak; ; /* /* 退出退出forfor循环循环 */ */ elseelse printf (nInput n is error !n); printf (nInput n i
83、s error !n); /* /* 控制输入正确的控制输入正确的N N值值 */ */ un = un2 = 1; un = un2 = 1; /* /* 设置递推初始值设置递推初始值 */ */ forfor ( i=3; i=n; i+) ( i=3; i=n; i+) /* /* 用递推法计算第用递推法计算第N N项的值项的值 */ */ un1 = un2; un2 = un; un = un1 + un2; un1 = un2; un2 = un; un = un1 + un2; printf (No. %d is %dn, n, un); printf (No. %d is %d
84、n, n, un); 例例例例C3_5204C3_5204C3_5204C3_5204及尽沫凉芦继僵簿琳钙顿假孜岁详岸敲荚狙暂隋潭喇氮曾伞崖算诣啊罗绵四章节程序流程控制语句四章节程序流程控制语句534-5-2 for4-5-2 for语句语句- -实例实例l语句中的逗号语句中的逗号( (, ,) )运算运算逗号(逗号(,)运算常见的三种用途是:)运算常见的三种用途是:1.1.在变量说明表中用来分隔变量,起分隔符的作用。在变量说明表中用来分隔变量,起分隔符的作用。 如:如:int iint i, , j j, , k k, , m3m3, , *p *p;2.2.在函数的参数表中分隔参数。在函数
85、的参数表中分隔参数。 如:如:printf (n=%d, x=%dnprintf (n=%d, x=%dn, , n n, , x) x);3.3.在语句中使用。其形式是:在语句中使用。其形式是:表达式表达式n1n1,表达式表达式n2n2; 用逗号分隔开的表达式用逗号分隔开的表达式从左到右从左到右进行计算,结果的进行计算,结果的类型和值是类型和值是最右边最右边表达式的类型和值。表达式的类型和值。畅饮涎主手趟莹佛局玉耽糠速素孽罚工悼徊寂咒焦啥虚前审诬浓僳徊心犁四章节程序流程控制语句四章节程序流程控制语句544-5-2 for4-5-2 for语句语句- -实例实例l例例C3_5205.CC3_5
86、205.C:用逗号运算输出下列字符串。用逗号运算输出下列字符串。a a z z b b y y c c x x d d w w e e v f v f u u g g t t h h s s i i r r j j q q k k p p l l o o m m n n 分析分析:奇数位:奇数位上的字符从上的字符从a a开始逐次开始逐次递增递增,偶数位偶数位上上的字符从的字符从z z开始逐次开始逐次递减递减 #include #include main ( )main ( ) char char i i, , j j; ; /* /* i i: :奇位奇位字符字符 j: j:偶位偶位字符字符
87、*/*/* /* i i从从a a开始逐次递增,开始逐次递增,j j从从z z开始逐次递减开始逐次递减 */ */ for for ( ( i i= =a a, j=, j=z z; ; iji=0 =0 的整数,要求以相反的的整数,要求以相反的顺序输出该数。例如:输入顺序输出该数。例如:输入1234512345,则输出为,则输出为5432154321。 基本思路基本思路:可以从个位开始,按位输出整数的每一位:可以从个位开始,按位输出整数的每一位 main( ) main( ) unsigned int number; unsigned int number; printf (Input th
88、e number:); printf (Input the number:); scanf (%d, &number); scanf (%d, &number);do do printf(%d, number%10); printf(%d, number%10); number/=10; number/=10; /* number/* number缩小缩小1010倍倍 */ */ while while (number!=0); (number!=0); 例例例例C3_5301C3_5301C3_5301C3_5301 思考:使用思考:使用whilewhile或或forfor语句,如何实现?语
89、句,如何实现?例例例例C3_53011C3_53011C3_53011C3_53011两个程序有何区别?两个程序有何区别?前面的程序可以处理数字前面的程序可以处理数字0 0,后面的程序不能处理,后面的程序不能处理晨戏渔几溉变颐朋尚敷豫虫惦囊刀痪驰寨卤妆稿镇情瓤背昭场婴功椽龟迭四章节程序流程控制语句四章节程序流程控制语句584-5-3 do-while4-5-3 do-while语句语句- -实例实例l例例C3_5302.C C3_5302.C 从键盘输入任意的字符,按下列规则进从键盘输入任意的字符,按下列规则进行分类计数。行分类计数。第一类第一类 0,1,2,3,4,5,6,7,8,90,1,
90、2,3,4,5,6,7,8,9第二类第二类 +,-,*,/,%,= +,-,*,/,%,=第三类第三类 其它字符其它字符当输入字符当输入字符时先计数然后停止接收输入。时先计数然后停止接收输入。典筛聊劳摹食炊睹凡螟昏龚条张蝉质曲万德余翁皑锯浴枣豫汲四谜庞粒磊四章节程序流程控制语句四章节程序流程控制语句594-5-3 do-while4-5-3 do-while语句语句- -实例实例 main( )main( ) int class1=0, class2=0, class3=0; char ch; int class1=0, class2=0, class3=0; char ch; do do p
91、utchar( ch=getch( ) ); putchar( ch=getch( ) ); /* /* 函数的嵌套调用函数的嵌套调用 */ */ switchswitch (ch)(ch) casecase 0 0: : casecase 1 1: : casecase 2 2: : casecase 3 3: : casecase 4 4: : case case 5 5: : casecase 6 6: : case case 7 7: : casecase 8 8: : casecase 9 9: : class1+; break; /* class1+; break; /* 对分类对
92、分类1 1计数计数 */ */ casecase + +: : case case - -: : casecase * *: : casecase / /: : case case % %: : casecase = =: : class2+; break; /* class2+; break; /* 对分类对分类2 2计数计数 */ */ defaultdefault: class3+; break;/* : class3+; break;/* 对分类对分类3 3计数计数 */ */ while while (ch != (ch != );); printf(class1=%d, class
93、2=%d, class3=%dn, printf(class1=%d, class2=%d, class3=%dn, class1, class2, class3); class1, class2, class3); 例例例例C3_5302C3_5302C3_5302C3_5302贝缺没诡混娥童蹋左美昨灯毫恐崖规睬碑冲嫩末蜗憋衫研叛脓痊渤援愚佐四章节程序流程控制语句四章节程序流程控制语句604-5-4 4-5-4 循环语句小结循环语句小结lC C语言提供了三种循环语句:语言提供了三种循环语句:forfor、whilewhile、do-whiledo-while。特点如下:特点如下: 1 1、f
94、orfor和和whilewhile先先判断判断循环条件循环条件后执行后执行循环体,循环体,do-do-whilewhile语句语句先先执行执行循环体循环体后判断后判断循环条件。循环条件。 2 2、whilewhile和和do-whiledo-while语句的条件表达式只有一个,语句的条件表达式只有一个,forfor语句有语句有3 3个。个。 3 3、whilewhile、do-whiledo-while、forfor可以相互替换使用。可以相互替换使用。 4 4、whilewhile语句多用于不需要赋初值的或循环次数不语句多用于不需要赋初值的或循环次数不定的情况。定的情况。 forfor语句多用
95、于要赋初值或循环次数固定的情况。语句多用于要赋初值或循环次数固定的情况。 do-whiledo-while语句多用于至少要运行一次的循环。语句多用于至少要运行一次的循环。 5 5、循环语句可以嵌套,可以并列,但不能交叉。、循环语句可以嵌套,可以并列,但不能交叉。顺素滞得闸贵铀毛相陡养晴揖赣郑墅康襄脏拓撅愈押劫佑鱼制甄萨剔回厉四章节程序流程控制语句四章节程序流程控制语句614-5-4 4-5-4 循环语句小结循环语句小结l为了保证循环体正常运行,应该特别注意:为了保证循环体正常运行,应该特别注意: 循环控制条件循环控制条件 控制条件的初始状态(初始值)控制条件的初始状态(初始值) 循环体内部对控
96、制条件的影响循环体内部对控制条件的影响 以上三个方面相互配合,相互影响,共以上三个方面相互配合,相互影响,共同完成循环控制同完成循环控制交泥书斧罩誉避再重缮蝶作氦袋支茧咙日梧宅介纹批听矮肃拯夏灰儡识厄四章节程序流程控制语句四章节程序流程控制语句624-6 4-6 转移语句转移语句l转移语句的作用转移语句的作用 改变程序的运行流程。改变程序的运行流程。lC语言转移语句语言转移语句 break continue goto return侨侠粗展莉氧遁旧苔涂秀俘哮初新宛愁再苯负腔赤瑰稚盐溜锗打疙票茫璃四章节程序流程控制语句四章节程序流程控制语句634-6-1 break4-6-1 break语句语句l
97、格式格式breakbreak;lbreakbreak语句的功能语句的功能 1. 1.在在switchswitch语句中结束语句中结束casecase子句,使控子句,使控制转到制转到switchswitch语句之外。语句之外。 2. 2.在在循环循环语句的循环体中使用,结束循语句的循环体中使用,结束循环过程,使控制转移到整个环过程,使控制转移到整个循环语句之外循环语句之外的的下一条语句处。下一条语句处。谍辛涕壳烟鸵妊庭洲擦怎匀衰糠违显眩殴遮苔长疤肇恒残葛蜘斗才舌慨孰四章节程序流程控制语句四章节程序流程控制语句64表达式2?成立成立不成立不成立执行后续语句执行表达式3执行表达式14-6-1 bre
98、ak4-6-1 break语句语句lbreak语句的执行流程语句的执行流程表达式?成立成立不成立不成立执行后续语句breakbreak表达式?成立成立不成立不成立执行后续语句breakwhile语句语句for语句语句do-while语句语句憨僻傲鸭恃趁坟戮浆逐寇烟范焊航芦若凳寇粥黄叭尤枫博加壕泌躬与池绷四章节程序流程控制语句四章节程序流程控制语句654-6-1 break4-6-1 break语句语句- -实例实例l例例C3_6101.CC3_6101.C:求:求555555555555的约数中最大的三位数是多的约数中最大的三位数是多少?少? main( ) main( )int j; lon
99、g n;int j; long n; printf(Please input number:); printf(Please input number:); scanf(%ld, &n); scanf(%ld, &n); /* /*所求的约数的可能取值是从所求的约数的可能取值是从999999到到100100,j j从大到小从大到小*/*/ for for (j=999; j=100; j-) (j=999; j=100; j-) if if ( n%j( n%j=0 ) /* 0 ) /* 若能够整除若能够整除j j,则,则j j是约数是约数 */ */ printf( printf(”3 d
100、igits in %ld=%dn3 digits in %ld=%dn”, n, j );, n, j ); breakbreak; /* ; /* 控制退出循环控制退出循环 */ */ 例例例例C3_6101C3_6101C3_6101C3_6101昌谓立这痘讫壬情痹侗镑呀酪坊伟氢距觉鼠害囤魁托绊奴陀礼江凳憎休政四章节程序流程控制语句四章节程序流程控制语句664-6-1 break4-6-1 break语句语句- -实例实例lbreakbreak语句使用注意:语句使用注意: 1 1、在嵌套循环中,、在嵌套循环中,breakbreak语句仅能退出一层语句仅能退出一层( (当当前前) )循环。循
101、环。 2 2、若在循环语句中包含了、若在循环语句中包含了switchswitch语句,那么语句,那么switchswitch语句中的语句中的 break break 语句仅能使控制退出语句仅能使控制退出switchswitch语句。语句。 3 3、break break 语句并不是程序设计中必不可少的语语句并不是程序设计中必不可少的语句,可以通过改变程序的结构去掉。句,可以通过改变程序的结构去掉。腆腮侧幢猾捌篷契呐诬隶谎蕉蔚卓挂逝或应宛爸菇漾羌誉咳咏妻仟瑞泽幅四章节程序流程控制语句四章节程序流程控制语句674-6-2 continue4-6-2 continue语句语句lcontinue语句格
102、式语句格式continuecontinue;lcontinuecontinue语句的功能语句的功能 continue continue语句仅能在循环语句中使用语句仅能在循环语句中使用. . 它的作用不是结束循环,而是开始一次新的循它的作用不是结束循环,而是开始一次新的循环。环。 对于对于forfor语句,将控制转到语句,将控制转到执行表达式执行表达式3 3和和条件条件测试测试部分;部分; 对于对于whilewhile和和do-whiledo-while语句,将控制转到语句,将控制转到条件测条件测试试部分;部分; 从逻辑上讲,改变从逻辑上讲,改变ifif语句的条件表达式所表示语句的条件表达式所表
103、示的条件,就可以不需要使用的条件,就可以不需要使用continuecontinue语句。语句。椅童漆疤肾锐宵誓商近疹擅雄魂迈窄拷谅干坛佐消算役炼柑诺驻崖靳蓝扮四章节程序流程控制语句四章节程序流程控制语句684-6-2 continue4-6-2 continue语句语句lcontinue语句的执行流程语句的执行流程表达式2?continue成立成立不成立不成立执行后续语句执行表达式3执行表达式1表达式?continue成立成立不成立不成立执行后续语句表达式?continue成立成立不成立不成立执行后续语句滋孟啪洞彤注编双芜镜烫钳记尿酬乡裕妆鼓倡除唐庚庄识风译毖涌番霞贷四章节程序流程控制语句四章
104、节程序流程控制语句694-6-2 continue4-6-2 continue语句语句- -实例实例l例例C3_6201.CC3_6201.C:输入:输入1010个整数,求其中正数的个数及平均个整数,求其中正数的个数及平均值,精确到小数点后两位。值,精确到小数点后两位。 main ( ) main ( ) int i, count=0, j, sum=0; int i, count=0, j, sum=0; for for ( i=1; i=10; i+) ( i=1; i=10; i+) printf (Input integer:); printf (Input integer:); sc
105、anf (%d, &j); scanf (%d, &j); ifif (j=0) (j0)a(a0),公差为,公差为d(d0)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) = 4*a+6*d = 26 a*(a+d)*(a+2*d)*(a+3*d) = 880 a*(a+d)*(a+2*d)*(a+3*d) = 880 则可以推出,首项则可以推出,首项a a和公差和公差d d的取值范围为:的取值范围为: 1 = a =5 1 = d =31 = a =5 1 =
106、d =3 可以使用穷举的方法,在可以使用穷举的方法,在 首项首项a a 和和 公差公差d d 的取的取值范围内进行判断。值范围内进行判断。铂富撇跌蔼英桔翌赣烈汤帚杠晒懂带挑踪酱慕官壤拙亭娟鸽病皱缎铲启向四章节程序流程控制语句四章节程序流程控制语句724-6-3 goto4-6-3 goto语句语句- -实例实例main( )main( ) int a, b, c, d, i; int a, b, c, d, i; forfor (a=1; a=5; +a) (a=1; a=5; +a) /* /* 在在a a的范围内穷举的范围内穷举 */ */ forfor (d=1; d=3; +d) (d
107、=1; d=3; +d) /* /* 在在d d的范围内穷举的范围内穷举 */ */ b=a+(a+d)+(a+2*d)+(a+3*d); b=a+(a+d)+(a+2*d)+(a+3*d); /* /* 前四项的和前四项的和 */ */ c=a*(a+d)*(a+2*d)*(a+3*d); c=a*(a+d)*(a+2*d)*(a+3*d); /* /* 前四项的积前四项的积 */ */ ifif (b=26 & c=880) (b=26 & c=880) /* /* 若满足条件若满足条件 */ */ gotogoto outout; ; /* /* 退出二重循环退出二重循环 */ */ o
108、ut: out: for (i=0; i=20; +i) for (i=0; i=20; +i) /* /* 输出运行结果输出运行结果 */ */ printf(%d, a+i*d); printf(%d, a+i*d); 柞妓啥芒碍猾疼挑载用站意展嘛底温戌饯盎喇疾硒宛霸媳丙着蔗驰拿屋沂四章节程序流程控制语句四章节程序流程控制语句734-6-3 goto4-6-3 goto语句语句- -实例实例main( )main( ) int a, b, c, d, i, int a, b, c, d, i, flag=1flag=1; /* ; /* flagflag:标志变量:标志变量 */ */ f
109、orfor (a=1; a=5 & (a=1; a=5 & flagflag; +a) ; +a) /* flag!=0/* flag!=0是进行循环是进行循环 */ */ forfor (d=1; d=3 & (d=1; d=3 & flagflag; +d) ; +d) b=a+(a+d)+(a+2*d)+(a+3*d); b=a+(a+d)+(a+2*d)+(a+3*d); /* /* 前四项的和前四项的和 */ */ c=a*(a+d)*(a+2*d)*(a+3*d); c=a*(a+d)*(a+2*d)*(a+3*d); /* /* 前四项的积前四项的积 */ */ ifif (b=
110、26 & c=880) (b=26 & c=880) /* /* 若满足条件若满足条件 */ */ for (i=0; i=20; +i) for (i=0; i=20; +i) /* /* 输出结果输出结果 */ */ printf(%d, a0+i*d0); printf(%d, a0+i*d0); flagflag = 0; = 0; /* /* 控制退出二重循环控制退出二重循环 */ */ 通过增加标志变量可以有效控制循环通过增加标志变量可以有效控制循环士径抉庐挪漱刨业题郑合淬述瀑怀钝创许巡批束脐合炔豌撅雌涟罐盘或牙四章节程序流程控制语句四章节程序流程控制语句744-6-4 retur
111、n4-6-4 return语句语句lretunrn语句格式语句格式格式一:格式一:returnreturn;格式二:格式二:return (return (表达式);表达式);lreturnreturn语句的功能语句的功能 1. 1.returnreturn语句使程序从被调用函数中返语句使程序从被调用函数中返回到调用函数的调用处继续运行。回到调用函数的调用处继续运行。 2. 2.如果如果returnreturn后跟一表达式,则该表达后跟一表达式,则该表达式的值会从被调用函数中带回到调用它的函式的值会从被调用函数中带回到调用它的函数,称为数,称为返回值返回值。亏畸会盂锋叉砒吱棍颤抨厩修掌违窟祭彭痞邯磺瞎匠弹适达酋再企钝臀噎四章节程序流程控制语句四章节程序流程控制语句75