C语言选择结构程序设计课件_第1页
C语言选择结构程序设计课件_第2页
C语言选择结构程序设计课件_第3页
C语言选择结构程序设计课件_第4页
C语言选择结构程序设计课件_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

第4章选择结构程序设计C语言选择结构程序设计三种基本结构顺序结构、选择结构、循环结构已经证明,任何程序均可只用这三种结构实现BÖhm,Corrado,andJacopiniGuiseppe.

"Flowdiagrams,Turingmachinesandlanguageswithonlytwoformationrules."

CommunicationofACM,9(5):366-371,May1966.只用这三种结构的程序,叫结构化程序程序“必须”符合结构化规则C语言选择结构程序设计结构化程序设计的核心思想

采用顺序、选择和循环三种基本结构作为程序设计的基本单元只有一个入口;只有一个出口;无死语句,即不存在永远都执行不到的语句;无死循环,即不存在永远都执行不完的循环。采用“自顶向下、逐步求精”和模块化的方法进行结构化程序设计C语言选择结构程序设计流程图顺序结构选择结构truefalsetruefalse循环结构C语言选择结构程序设计语句块(Block){}括住的若干条语句构成一个语句块语句块内可以定义变量变量必须在语句块的开头定义变量仅在定义它的语句块内(包括下层语句块)有效同一个语句块内的变量不可同名,不同语句块可以同名(homonym.c)各司其职、下层优先尽量不要在下层语句块内定义变量,也尽量不要定义同名变量语句块可以用在任何可以使用语句的地方,但没有道理要乱加语句块C语言选择结构程序设计if-else选择结构的一种最常用形式if(表达式)

语句块1;

else

语句块2;

语句块3表达式值非0时,执行语句块1,然后语句块3;

表达式值为0时,执行语句块2,然后语句块3else部分可以没有。当表达式值为0时,直接执行语句3if-else嵌套使用时,注意else和谁配套的问题if.c表达式!=0?YN语句块1语句块2语句块3C语言选择结构程序设计if-else语句NS图if语句的基本形式:双选择结构:if(条件)真子句else假子句单选择结构:if(条件)真子句条件真假真子句

假子句条件真假真子句

C语言选择结构程序设计if语句的嵌套根据单/双选择结构,有五种嵌套形式:1)if(条件1)2)if(条件1)

if(条件2){

子句1if(条件2)

else

子句1

子句2

}

else

else

子句3子句23)if(条件1)4)if(条件1)5)if(条件1)

子句1子句1 if(条件2)

elseif(条件2)

else

if(条件2)子句1

子句2子句2else

else

子句2

子句3else

if(条件3)

子句3

else

子句4提问:为什么1)可以不用括号,而2)必须要有括号?就是多分支选择结构C语言选择结构程序设计if-else编程举例pp70例4-1例4-2例4-3if.cC语言选择结构程序设计if-else编程举例从错误中学习分号的位置else的写法语句块未加{}多个条件的表达if.cC语言选择结构程序设计else-ifif的一种扩展if(表达式1)

语句块1;

elseif(表达式2)

语句块2;

elseif(表达式3)

语句块3;

…………

else

语句块4;

语句块5;else部分可以没有表达式1!=0?YN语句块1语句块2语句块5表达式2!=0?表达式3!=0?语句块3N语句块4NYYC语言选择结构程序设计else-if编程举例分段函数的计算C语言选择结构程序设计switch开关语句switch(表达式){

case

整型常数1:

语句1;

case

整型常数2:

语句2;

…………

default:

语句3;

}default可以没有理解“开关”的意思C语言选择结构程序设计表达式语句1语句2..………..语句n语句n+1out常量表达式1常量表

达式2常量表达式ndefaultswitch(表达式)

{casecons1:语句1

casecons2:语句2

……

casecons3:语句n

default:语句n+1

}C语言选择结构程序设计输入年(year)、月(month)、日(day),计算从1月1日算起的总天数当闰年,2月份是29天,否则2月份是28天。闰年的判断见p73例4-3。s=day;switch(month-1){ case12:s=s+31; case11:s=s+30; case10:s=s+31; case9:s=s+30; case8:s=s+31; case7:s=s+31; case6:s=s+30; case5:s=s+31; case4:s=s+30; case3:s=s+31; case2:if(flag) s=s+29; else s=s+28; case1:s=s+31;} 开关语句编程举例其实现在还没有实现多分支的作用C语言选择结构程序设计switch多路选择switch(表达式){

case

整型常数1:

语句1;

case

整型常数2:

语句2;

…………

default:

语句3;

}default可以没有现场编程完成计算器……不要忘记breakC语言选择结构程序设计switch和else-if的比较else-if比switch的条件控制更强大一些else-if可以依照各种逻辑运算的结果进行流程控制switch只能进行==判断,并且只能是整数判断(阅读pp例4-4)switch比else-if更清晰两者都要尽量避免用得过多、过长,尤其不要嵌套得太多它们大大增加程序的分支,使逻辑关系显得混乱,不易维护,易出错C语言选择结构程序设计作业4.64.7补充:体型判断你出生那天是星期几呢?C语言选择结构程序设计作业体型判断。按“体指数”对肥胖程度进行划分:体指数t=体重w/(身高h)2(w单位为公斤,h单位为米)当t<18时,为低体重;当t介于18和25之间时,为正常体重;当t介于25和27之间时,为超重体重;当t>=27时,为肥胖。编程从键盘输入你的身高h和体重w,根据给定公式计算体指数t,然后判断你的体重属于何种类型。用3种方法编程:算法1:用不带else子句的if语句编程算法2:用在if子句中嵌入if语句的形式编程算法3:用在else子句中嵌入if语句的形式编程C语言选择结构程序设计想知道你出生那天是星期几吗?year表示年份,days表示从1月1日算起的总天数。用“那一天的数”%7,等于几,就是星期几;没有余数,就是星期日/求的是整数结果作业C语言选择结构程序设计循环——while,forwhile(表达式)

语句块;for(表达式1;表达式2;表达式3)

语句块;C语言选择结构程序设计whilewhile(表达式)

语句块1;

语句块2;只要表达式的值为非0,就重复执行语句块1,直到表达式值为0时止,开始执行语句块2表达式!=0?YN语句块1语句块2C语言选择结构程序设计forfor(表达式1;表达式2;表达式3)

语句块;首先执行表达式1。如果表达式2的值为非0,就重复执行语句块和表达式3,直到表达式2的值为0时止相当于:

表达式1;

while(表达式2){

语句块;

表达式3;

}for的所有表达式均可省略表达式2!=0?YN语句块表达式3表达式1C语言选择结构程序设计注意在for和while语句之后一般没有分号有分号表示循环体就是分号之前的内容,即循环体不存在while(i<100);

i++;for(i=0;i<100;i++);

printf("%d",i);for通常有一个循环变量控制循环的次数,不要在循环体内改变这个变量C语言选择结构程序设计循环——do-whiledo

语句块1;

while(表达式);

语句块2;首先执行语句,然后判断表达式的值。如果表达式为0,继续向下执行,否则,再次执行语句,再次判断表达式的值语句块1会被执行至少一次表达式!=0?YN语句块1语句块2C语言选择结构程序设计选择三种循环的一般思路如果循环次数已知,用for如果循环次数未知,用while如果循环体至少要执行一次,用do-while只是思路,不是定律C语言选择结构程序设计死循环永远不会退出的循环为死循环for(;;){}while(1){}do{}while(1)除非确实需要死循环,否则不要使用这样的形式。它们使循环的中止条件变得不明朗一般情况下,要极力避免死循环绝大多数程序不需要死循环。如果出现,往往都是bug时间过长的循环会造成“假死”现象,也要考虑解决C语言选择结构程序设计break和continue对for、while、do-while循环进行内部手术break,退出循环continue,中断此次循环的执行,开始下一次break和continue少用为妙它们增加了循环执行的分支,break更增加了循环的出口它们可以用来处理程序异常,而尽量不要用来处理正常流程C语言选择结构程序设计标号举例Error:同变量、函数的命名规则一样,后面加上一个冒号,一般顶格书写goto举例gotoError;goto与标号(label)C语言选择结构程序设计Dijkstra与gotoEdsgerW.Dijkstra,生于1930年,卒于2002年8月6日软件体系结构,最短路径算法,PV原语,结构化程序设计,向量,堆栈……大师赐予我们许多深邃的简单C语言选择结构程序设计Dijkstra与gotoEdsgerW.Dijkstra.

"Letterstotheeditor:Gotostatementconsideredharmful."

CommunicationofACM,11(3):147–148,March1968“Gotoconsideredharmful”

,Dijkstra在1968年就告诉了我们“Ibecameconvincedthatthegotostatementshouldbeabolishedfromall"higherlevel"programminglanguages.”“Thegotostatement…istoomuchaninvitationtomakeamessofone'sprogram.”现代观点认为,混乱根源不在goto,而在标号任何程序都可以不用goto就实现其功能但在某些情况下,使用goto可以让程序更清晰C语言选择结构程序设计糟糕的gotoSTART_LOOP:if(fStatusOk){

if(fDataAvaiable){i=10;

gotoMID_LOOP;}else{

gotoEND_LOOP;}}else{

for(i=0;i<100;i++){MID_LOOP://lotsofcodehere……}

gotoSTART_LOOP;}END_LOOP:C语言选择结构程序设计糟糕的gotoSTART_LOOP:if(fStatusOk){

if(fDataAvaiable){i=10;

gotoMID_LOOP;}else{

gotoEND_LOOP;}}else{

for(i=0;i<100;i++){MID_LOOP://lotsofcodehere……}

gotoSTART_LOOP;}END_LOOP:C语言选择结构程序设计这个代码怎么样?HRESULTInit(){pszMyName=(CHAR*)malloc(256);

if(pszMyName==NULL){

returnhr;}pszHerName=(CHAR*)malloc(256);

if(pszHerName==NULL){free(pszMyName);

returnhr;}

pszHisName=(CHAR*)malloc(256);

if(pszHisName==NULL){free(pszMyName);free(pszHerName);

returnhr;}

…………free(pszMyName);free(pszHerNa

温馨提示

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

最新文档

评论

0/150

提交评论