




已阅读5页,还剩42页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Mission 6,編寫選擇結構類程序,日常生活中,往往会根据当前的具体情况,通过决策选择某种方案。程序设计也是一样的,有时候需要根据条件编写不同的处理程序,实现用户的需求。本任务就是要能根据条件编写选择结构程序。,任務內容,任務目標,進入任務,熟悉常用数学函数的调用; 熟悉关系运算符及关系表达式; 掌握if和switch语句。,知識目標,返回,会编写选择结构程序; 熟练运用单步和添加观察变量方法调试程序。,專業能力目標,返回,能自主地进行拓展阅读内容的学习; 能与同学共同讨论解决问题。,方法和社會能力目標,建議完成時間:8(課內)+8(課外) 任務完成形勢:學習小結、程序及程序調試記錄,返回,任務六 编写选择结构类程序,求两个整数中的大数案例,任務準備(1),一个规范的C语言程序示例,任務準備(1),/*求两个数中的大数*/ /*程序名:compare.c*/ /*编程者:dinghhui*/ /*日期:2009-11-29*/ #include #include /* 比较两个整数的大小,将大的数返回*/ int max_1(int,int); int main(void) /*定义变量*/ int iNum_1,iNum_2,imax_1;,一个规范的C语言程序示例,任務準備(1),/*清屏*/ system(“cls”); /*输入要比较的两个整数*/ printf(“Please input two integers:n”); scanf(“%d%d”, ,一个规范的C语言程序示例,任務準備(1),int max_1(int iNum_1,int iNum_2) int iMax_1_1; if(iNum_1iNum_2) iMax_1_1= iNum_1; else iMax_1_1= iNum_2; return(iMax_1_1); ,ifelse语句,任務準備(2),1、ifelse语句的基本格式 if(表达式) 语句组A; else 语句组B; 注:所有格式中凡是用“ ”括起来的部分是可选部分,即可根据编程需要进行选择。,任務準備(2),2、ifelse语句的执行过程 计算if后的表达式; 如果表达式的值为非0(真),则执行语句组A;如果表达式的值为0(假),则执行语句组B。当else部分省略时,表达式的值为0(假)时,什么也不做; 不管执行哪一组语句,程序接着执行ifelse语句的下一条语句。,ifelse语句,任務準備(2),3、ifelse语句执行过程图解,ifelse语句,任务准备(5),任務準備(3),关系表达式,关系运算符 是用于进行两个对象大小的比较,决定其关系的。C语言中定义的关系运算符有:“、=、=、3的值为非0,也就是“真”;55的值为0,即假;而5=5的值为非0,即为真。,任务准备(6),任務準備(4),复合语句,用“”括起来的多条语句称为复合语句。复合语句逻辑上可理解为一条语句,或者是一个不可分割的整体。,任务准备(7),任務準備(5),案例程序分析,max_1()函数中ifelse语句的执行过程 if(iNum_1iNum_2) iMax_1_1=iNum_1; else iMax_1_1=iNum_2; 先计算关系表达式“iNum_1iNum_2”的值,如果iNum_1大于iNum_2,则表达式的值为非0,即真;反之为0,即假; 如果表达式的值为非0,则将iNum_1的值赋给变量iMax_1_1,即执行“iMax_1_1=iNum_1;”语句,否则执行“iMax_1_1=iNum_2;”语句; 不管执行“iMax_1_1=iNum_1;”还是执行“iMax_1_1=iNum_2;”分支,最后都接着执行ifelse其后的语句“return(iMax_1_1);”,返回iMax_1_1变量的值即两个整数中的大数。,任务准备(8),任務準備(5),案例程序分析,讨论下述输入的执行过程: (1)67和34 (2)63和74,任务准备(9),任務準備(6),应用举例(一),【例1-6-1】用省略else部分的if语句改写前述案例。,int max_1(int iNum_1,int iNum_2) int iMax_1_1; iMax_1_1=iNum_2; if(iNum_1iNum_2) iMax_1_1= iNum_1; return(iMax_1_1); ,任务准备(10),任務準備(6),应用举例(一),【例1-6-2】请编程输入学生成绩,并且根据成绩判断其是否通过考试。要求:如果成绩大于等于60,则输出“passed”,否则输出“failed”。,设计分析 用程序设计的三步曲分析如下: 输入数据:本例仅要求输入一个学生的成绩,根据实际情况,成绩一般是实数,所以需要定义一个实型变量,存放输入的分数。 输出数据:根据题目要求,只要输出“passed”或“failed”字符串,可以直接进行输出,因此不需要定义相关的变量。 处理过程:先输入一个成绩,然后判断是否大于等于60,如果是,则输出“passed”,则否输出“failed”。,任务准备(11),任務準備(6),应用举例(一),算法描述(流程图),一个规范的C语言程序示例,任務準備(1),程序 /*判断一个学生的考试成绩是否合格*/ /*程序名称:decide.c*/ /*作者:dinghui*/ /*编程日期:2009-11-29*/ #include #include int main(void) /*定义变量*/ float fScore; system(“cls”);,/*输入分数*/ scanf(“%f”, ,任务准备(13),任務準備(7),应用举例(二),请编程将100分制成绩转换为五级等级制成绩。 转换规则 :100分制的成绩转换A、B、C、D、E五级等级制的成绩,90分以上为A,8089分为B,7079分为C,6069分为D,60分以下为E。,任务准备(13),任務準備(7),应用举例(二),ifelse语句的嵌套格式之一,if(条件A) 语句组A; else if(条件B) 语句组B; else if(条件C) 语句组C; else 语句组n+1; ,注:if与else成对的原则:最近原则。,任务准备(14),任務準備(7),应用举例(二),嵌套ifelse语句的执行过程 计算条件A的值,如果其值为非0,则执行语句组A,执行完语句组A后,程序转if的下一条语句; 如果条件A的值为0,则计算条件B,如果为非0,执行语句组B,执行完语句组B后,程序转if的下一条语句; 依次类推,直到所有条件的值都为0,则执行语句组n+1。,任务准备(15),任務準備(7),应用举例(二),嵌套ifelse语句的执行过程图解,任务准备(16),任務準備(7),应用举例(二),案例部分流程图,任务准备(17),任務準備(7),应用举例(二),输入75时的执行示例,任务准备(18),任務準備(8),switch语句,switch语句格式 switch(表达式) case 常量1:语句组1 ; break; case 常量2:语句组2; break; case 常量3:语句组3 ; break; case 常量n:语句组n; break; default :语句组n+1; ,常量:指在程序的执行过程中其值不变量的量。如整型常量56,-123,实型常量5.67,-0.98,3.2e+6,字符常量w,2,M。,break语句,没有参数,其作用是结束switch语句的执行,使程序转到switch语句的下一条语句执行。,任务准备(19),任務準備(8),switch语句,switch语句执行过程 计算switch后表达式的值。注意,switch语句要求表达式的值为整型或字符型。C语言中的字符是指以单引号“”括起来的单个字符,如a,A,1等。 根据表达式的值,从上到下依次判断表达式的值是否与case后的某个常量匹配(相同),程序将从最先相匹配的case后的语句组入口开始执行程序,直到遇到break语句为止,如果没有break语句,则从入口处一直执行程序至switch语句外层的“”止。 如果没有一个常量与表达式的值相匹配时,如有default语句,则从default后入口开始执行,直到遇到break语句或switch语句外层的“”止;如果没有default语句,则结束switch语句。,一个规范的C语言程序示例,任務準備(1),用switch改写程序 /*100分制转换为五级等级制分数*/ /*程序名称:100-five1.c*/ /*作者:dinghui*/ /*编程日期:2009-11-29*/ #include #include int main(void) float fScore; system(“cls”); scanf(“%f”,一个规范的C语言程序示例,任務準備(1),switch(int)(fScore)/10 ) case 10: case 9: printf(“A”); break; case 8: printf(“B”); break; case 7:printf(“C”); break; case 6:printf(“D”); break; default : printf(“E”); ,用switch语句改写的关键是switch后表达式的确定,及case后常量的确定,本例将fScore的值取整,然后利用两个整数相除结果仍为整数这一规则,使表达式的值为整数,范围在010之间。常量10和9说明fScore的值在90分以上,所以当fScore的值在90分以上时,将会从case 10:或case 9 处找到入口,从而输出字符“A”,然后运行break;语句,结束switch语句的执行。,任务准备(20),任務準備(7),应用举例(三),【例1-6-3】分别用嵌套ifelse语句和switch语句编程为某运输公司计算运费。路程(s)赿远,每公里的运费赿低。标准如下: s=2000,20%折扣 假设每公里每吨货物的基本运费为p,货物重量为w,距离为s,折扣率为d,则总运费f的计算公式为: f=p*w*s*(1-d),任务准备(21),任務準備(7),应用举例(三),设计分析 如果用嵌套ifelse语句来实现,可以按题目的要求使用条件递进,第一个条件是s500,第二个条件是s1000,第三个条件是s1500,依次递进。选择相应的折扣后,用f=p*w*s*(1-d)公式计算运算。 输入数据:基本运费、里程、重量、折扣四个值,定义为实型。 输出数据:需要支付的运费,定义为实型。 处理过程: 输入基本运费、里程和重量; 根据里程,决定采用不同的折扣; 利用公式计算最后的运费; 输出结果。,任务准备(22),任務準備(7),应用举例(三),算法,一个规范的C语言程序示例,任務準備(1),程序(if语句) /*运费计算程序*/ /*程序名称:fee-if.c*/ /*作者:dinghui*/ /*编程日期:2009-11-29*/ #include #include int main(void) float fBase,fWeight,fDistance,fFee,fDiscount;/*定义变量*/ system(“cls”); scanf(“%f”, /* 输入运输距离;*/,一个规范的C语言程序示例,任務準備(1),if(fDistance500) fDiscount=0; else if(fDistance1000) fDiscount=0.05; else if(fDistance1500) fDiscount=0.1; else if(fDistance2000) fDiscount=0.15; else fDiscount=0.2; fFee=fBase*fWeight*fDistance*(1-fDiscount); printf(“weight=%f,distance=%f,fee=%fn”, fWeight, fDistance, fFee); return(0); ,一个规范的C语言程序示例,任務準備(1),程序(switch语句) /*运费计算程序*/ /*程序名称:fee-if.c*/ /*作者:dinghui*/ /*编程日期:2009-11-29*/ #include #include int main(void) float fBase,fWeight,fDistance,fFee,fDiscount;/*定义变量*/ system(“cls”); scanf(“%f”, /* 输入运输距离;*/,一个规范的C语言程序示例,任務準備(1),switch(int)(fDistance)/500) case 0: fDiscount=0; break; case 1: fDiscount=0.05; break; case 2: fDiscount=0.1; break; case 3: fDiscount=0.15; break; default : fDiscount=0.2; fFee= fBase * fWeight * fDistance *(1- fDiscount); printf(“weight=%f,distance=%f,fee=%fn”, fWeight, fDistance, fFee); ,返回,任务实施,任务实施,要求用单步和添加观察变量方法进行下述调试。 调试compare.c程序,并将调试过程记录于任务一的程序调试记录表中。 调试compare1.c程序,并将调试过程记录于任务一的程序调试记录有中,并与compare.c的调试结果进行比较。 调试例decide.c程序,并将调试过程记录于任务一的程序调试记录表中。 调试例100-five.c和100-five1.c程序,并进行比较。 调试例fee-if.c和fee-switch.c程序,并进行比较。,返回,思考题,思考题,Compare_1.c程序,如果将“iMax_1_1=iNum_2;”语句改成“iMax_1_1=iNum_1;”,则程序的其它部分应做如何修改? 如何选择不同的调试数据,从而实现程序调试时的语句全覆盖? 为何要对区间端点的数据进行调试? switch和嵌套的ifelse语句所实现的程序是不是任何情况下都可以相互改写?比较两种实现多分支结构的优缺点。 switch语句中的break语句什么时候需要使用?如果100-five1.c程序中没有用break语句,则将会产生什么结果? 程序如何保证输入数据的合法性?,返回,拓展知识(一),拓展知识,(1)输入数据的合法性验证 输入数据的合法性是指对于不同的程序,要求输入的有效数据是不同的,如果输入的数据不是程序能够处理的数据,即是无效的数据,这时候就会造成程序执行的异常,甚至是输出错误的结果。因此,对于重要的系统,为保证输入的数据是有效的,一般都有一段程序用来验证输入的数据是否有效,如果无效,则要求重新输入,直到输入有效的数据为止,当然有时候考虑到安全性,可能给以输入次数的限制,超过一定的次数,则停止输入数据。对于我们的【例1-6-2】,就要求输入的数据在0到100之间,如果所输入的数据不在这个范围,说明输入的数据不合法,则就造成错误的输出结果。读者可以考虑添加一段程序来验证输入的数据是否合法,如果合法则继续,不合法,则要求重新输入。,拓展知识(二),拓展知识,(2)逻辑运算符 C语言中允许的逻辑运算有三种,分别是逻辑“与”、“或”、“非”运算。C语言中三种逻辑运算对应的逻辑运算符是“&”、“|”、“!”。 逻辑运算规则如下: 真&真=真 真&假=假 假&假=假 假&真=假 真|真=真,真|假=真 假|真=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 孕期离婚协议模板定制与婚姻财产分割指导合同
- 离婚房产归女方协议书:女方权益保障范本
- 离婚协议书范本:无子女双方协议书
- 石家庄市二手房买卖交易合同终止后权益保障协议
- 离婚协议6865I版:财产分割及债务处理细则
- 城市综合体物业管理与能源采购合同
- 食品企业生产信息保密及食品安全责任合同
- 班组级安全培训内容模板课件
- 小班教学水果课件
- 2025年病理生理学乳腺组织病理变化模拟考试卷答案及解析
- 2025债权收购委托代理合同
- 2025年中国建筑集团招聘面试宝典与模拟题答案
- 2025年高考英语新课标Ⅱ卷点评及2026备考方向 课件
- 2025年学宪法、讲宪法知识竞赛题库及答案
- T/CTRA 01-2020废轮胎/橡胶再生油
- 2025广西专业技术人员公需科目培训考试答案
- 高中英语新课标3000词汇表(新高考)
- 中英文版送货单
- 中英文验货报告模板
- T∕CCFA 01030-2017 纤维级化学法循环再利用聚酯切片(PET)
- 放射科质量与安全管理考核标准
评论
0/150
提交评论