




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机电工程工作总结
- 2025年一建《机电工程管理与实务》考试新技术应用应用题集
- 2025年CFA特许金融分析师考试冲刺模拟试题
- 2025年高压电工考试题库:高压电力系统运行优化设备租赁合同履行试题
- 2025年大学辅导员招聘考试题库:学生职业生涯规划指导理论与实践案例解析试题
- 2025年专升本艺术概论考试模拟卷:艺术市场与文化产业艺术产业创新驱动发展策略研究与应用实践试题
- 2025年人力资源管理师专业技能考核试卷:人力资源招聘与配置策略案例分析实战模拟试题
- 2025年韩语TOPIK中级考试真题卷:历年真题解析与备考误区纠正
- 能源管理系统升级操作指南
- (一模)2025年抚顺市普通高中高三模拟考试地理试卷(含答案)
- (二调)武汉市2025届高中毕业生二月调研考试 历史试卷
- 《百日竞渡、逆风翱翔》2025年中考百日誓师动员哪吒精神班会课件
- 缓和医疗-以死观生的生活智慧知到智慧树章节测试课后答案2024年秋嘉兴大学
- 2025中智集团总部及下属单位多岗位面向社会公开招聘7人高频重点模拟试卷提升(共500题附带答案详解)
- 年产20万吨超细重质碳酸钙、10万吨母粒项目可行性研究报告写作模板-申批备案
- 水的粘度计算表-水的动力粘度计算公式文档编辑
- 呼吸内科一科一品一特色护理
- 2025年广西防城港市民族宗教事务委员会招聘2人历年高频重点提升(共500题)附带答案详解
- 2024年非高危行业生产经营单位主要负责人及安全管理人员安全生产知识和管理能力试题库附答案
- 健康照护师培训
- 2024人工智能大模型技术财务应用蓝皮书
评论
0/150
提交评论