版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C程序设计(第三版)-教学课件,制作人: 黄 荧 制作人单位:河师大数学与信息科学学院,第四章 要点 小结,Ch4要点:顺序结构编程与两组输入输出函数,1 顺序结构能解决的实际问题 用来解决“直接能用确定公式计算”的实际问题. 2 顺序结构程序算法思路: -只用到输入数据、计算赋值、输出结果三个步骤 -只用到输入、赋值、输出三种语句,3 字符输入输出函数 字符输出函数: putchar(ch) 字符输入函数: ch=getchar() 4 格式输入输出函数 1) 格式输出函数: printf( 输出格式字符串, 输出项表列) 2)格式输入函数: scanf( 输入格式字符串 , 地址表列),第
2、五章 选择结构程序设计,本章主要内容: 1 关系表达式和逻辑表达式用于表达选择条件 2 选择结构控制语句(重点!) (if switch ) 3 条件运算表达式( ? : ) 4 选择结构程序的典型算法(重点!),选择结构的程序设计能解决的问题,3 选择结构问题要素: 1)在实际问题有几种不同的可能情况,相应的选择结构就有几个分支. 2)各种情况发生的条件就是选择结构中的选择控制条件.,3)在执行选择结构时,首先是判断选择控制条件,然后根据选择控制条件成立于否执行不同的分支.,1 什么是选择结构? 程序流程发生分支,根据条件成立与否,选择其中一个分支执行 2 选择结构的程序设计能解决什么样的实
3、际问题? 在一个实际问题中有多种情况可能发生.解决这类问题就需要用选择结构的程序设计.,5.1 关系表达式常用于描述比较简单的选择控制条件,关系运算符: 、 = 、= 、!= 优先级别: 高 低 算术运算符(高)关系运算符赋值运算符(低) 如, ca+b c (a+b) 2 关系表达式与关系表达式的值 关系表达式: 用关系运算符把两个表达式连接的式子。 关系表达式的值: 真 (1)假(0) 练习,设 a=2,b=5,c=a,求下列表达式的值 1) ca+b,2) a=bc,3) a=bc,1,0,1,5.2 逻辑表达式常用于描述比较复杂的选择控制条件,逻辑运算符:) 对于A 或能被400整除
4、year%4=0 , 两分支选择 if(表达式)语句1 else 语句2 如:if(ab) max=a; else max=b;, 多分支选择:(只有多层的判别和选择,才能实现多分支的选择!) if(表达式1) 语句1 else if(表达式2)语句2 else if(表达式3) 语句3 else if(表达式n) 语句n else 语句n+1,思考:什么情况下 可以执行到语句3?, 多分支的if语句:,if(number500)cost=0.15; else if(number300)cost=0.10; else if(number100)cost=0.075; else if(numbe
5、r50)cost=0.05; else cost=0;,例:分段计算折扣率:,if(表达式1) 语句1 else if(表达式2)语句2 else if(表达式3) 语句3 else if(表达式n) 语句n else 语句n+1,if语句的相关说明:,(1)描述选择控制条件的表达式可以是任意的数值表达式 如,1)if(3)printf(O.K.n); 2)if(a) printf(%c %dn,a,a); 3)if(x) printf(x非0n); else printf(x等于0n); (!) (2) if和else所带语句称为内嵌语句,都带分号! (3) 当if或else所带的是多条语句
6、时,必须用大花括号括起来.(!) 如, if(a+bc (4) 一个易错点:= 写成 = if( x=3 ) 和 if( x=3 ) 这两条语句的差别是什么?,if语句的应用实例:,#include void main() float x,y; scanf(%f, ,2 f(2.00)=3.00,#include void main() float x,f(x); scanf(%f, ,x,if语句的应用实例:,#include void main() float x,y; scanf(%f, ,0 f(0.00)=0.00,例 5.1 P93 输入两个实数,将它们由小到大排序,并输出。,#i
7、nclude void main() float a,b,t; scanf(%f%f, ,Enter a b: 3.6 -3.2 -3.20,3.60,算法分析: a b 如果ab,就应该交换它们的值! 怎么交换?(问题的关键) 考虑两杯饮料,思考:如果用 a=b;b=a; 代替t=a;a=b;b=t;有什么问题?,这里加上分号会怎样?,例5.2 输入三个数,将它们从小到大排序,并输出。,思路分析: a b c,#include void main() float a,b,c,t; scanf(%f%f%f, ,Enter a b c: 3 7 1 1.00,3.00,7.00,b c,算法尽
8、量要有规律! 思考:四个数该怎么排序?,2 if语句的嵌套:P94,回顾:if语句的一般形式为: if(表达式)语句1 else 语句2 ,当语句1或语句2,仍为一个if语句,则称其为if语句的嵌套。,如: if ( x1) x+; 内嵌if语句 else if( y1)x-; 内嵌if语句,回顾:,1 选择结构解决的实际问题 当实际问题中有多种情况可能发生,用选择结构来解决. 实际问题有几种可能情况,选择结构就有几个分支。 2 if语句的三种形式 (if语句是实现选择结构最常用的语句) 条件执行 if(表达式)语句 两分支选择 if(表达式)语句1 else 语句2 多分支选择 if(表达式
9、1) 语句1 else if(表达式2)语句2 else if(表达式3) 语句3 else if(表达式n) 语句n else 语句n+1,分析下列两种 if语句的嵌套:,(2) if (P1) if (P2) 语句1; else if (P3)语句2; else 语句3;,若有特殊需要,则需加上适当括号,如: if(P1) if(P2) 语句1; else if(P3)语句2; else 语句3;,else和if的匹配原则:(最近原则) else总是与它上面最近的、未曾配对的if匹配。(语句的缩进不影响匹配的结果),3 条件运算符(?:)(结合方向:由右向左) P96,一般形式: 表达式1
10、?表达式2:表达式3,如, max=ab?a:b;,if(ab) max=a; else max=b;,条件表达式的计算过程为: 1)首先求解表达式1的值 2)若表达式1的值为真,则表达式2的值作为条件表达式的值; 3)若表达式1的值为假,则表达式3的值作为条件表达式的值。,如: 1) y = x y = x=0 ? x : -x ; printf(%sn, score=a,例5.4 输入一个字符,判别它是否为大写字母,如果是,将它转化为小写字母,如果不是,不转化.然后输出最后得到的字符。,#include void main() char ch; printf(请输入一个字符: ); sca
11、nf(%c, ,#include void main() char ch; printf(请输入一个字符: ); scanf(%c, ,如, switch (c) case +: f=a+b; break; case -: f=a-b; break; case *: f=a*b; break; case : f=a/b; break; default: printf(数据错误.n); ,5.4 switch语句: (通常实现是多分支的选择结构!),一般形式: switch (开关表达式) case 常量表达式1: 语句1 break; case 常量表达式2: 语句2 break; case
12、常量表达式3: 语句3 break; case 常量表达式n: 语句n break; default: 语句n+1 ,学习要点: 1) switch语句的固定格式 2) switch语句的执行过程,整型、字符型或枚举型,如, switch (n) case 2: f=a+b; break; case 4: f=a-b; break; case 6: f=a*b; break; case 8: f=a/b; break; default: printf(数据n错误.n); ,它是利用开关表达式的值 来选择执行的分支,而不是条件!,例1: 将等级分(a b c d)转化为百分制的分数段。,#inc
13、lude void main() char grade; printf(请输入你的等级分(a,b,c,d): ); scanf(%c, ,题意分析: 1 等级分有4种可能情况:a b c d (所以有 4 或 4+1个分支。) 2 可以用开关语句实现多分支的选择 开关表达式为放等级分的变量: char grade;,#include void main() char grade; printf(请输入你的等级分(a,b,c,d): ); scanf(%c, ,例2:输入2008年某个月份,输出这个月的天数。,题意分析: 1)12个月12个可能情况 2)但可以分为三类: 天数为31天的月份:1
14、3 5 7 8 10 12 天数为30天的月份:4 6 9 11 2月份的天数(28天) 3) 月份数控制选择分支 放月份数的变量作为开关表达式,#include void main() int month,days; printf(请输入月份数 (1-12):); scanf(%d, ,运行情况: 请输入月份数(1-12): 9 9月有30天,switch语句的相关说明:,switch语句是利用开关表达式值来选择执行case分支后面的语句。 switch语句后的开关表达式只可以是整型、字符型、枚举型。 各常量表达式的值不能相同。 每个case分支可以有多条语句,但不必用 括起来。 如果cas
15、e分支之后没有break语句,程序将会顺序执行后面的case分支。 当多个case分支需要执行相同的操作时,可以使多个case分支共用一组语句。 当开关表达式的值与case分支后面的常量表达式的值都不匹配时,程序将会执行default分支后面的语句。,#include void main() int month,days; printf(请输入月份数 (1-12):); scanf(%d, ,switch (c) case +: f=a+b; break; case -: f=a-b; break; case *: f=a*b; break; case : f=a/b; break; defa
16、ult: printf(数据错误.n); ,回顾:,1 条件运算: 表达式1?表达式2:表达式3 2 开关语句: switch (开关表达式) case 常量表达式1: 语句1 break; case 常量表达式2: 语句2 break; case 常量表达式3: 语句3 break; case 常量表达式n: 语句n break; default: 语句n+1 特别注意: switch语句是利用开关表达式值来选择执行case分支后面的语句,开关表达式的一个值对应switch语句中的一个case分支。,5.5 选择结构程序举例,例5.5 编写程序判别某一年是否闰年。 闰年条件: 此年份能被4整
17、除,但不能被100整除;或者能被400整除. 分析: 1 只有2种可能情况。 2 用带else的if语句实现。,#include void main() int year,isleap; printf(请输入年份数: ); scanf(%d, ,请输入年份数: 2010 2010年不是闰年.,例5.6 求ax2+bx+c=0方程的解。P101,问题分析: 1 有4种可能情况: 当a=0,其不是二次方程。 当a0且=0,有两个相同的实根; 当a0且0,有两个不同的实根; 当a0且0, 有两共轭复根. 2 用多分支的if语句或开关语句实现。,具体算法: 1 输入方程系数:a,b,c 2 求出一些中
18、间值: disc=b*b-4*a*c p=-b/(2*a) q=sqrt(fabs(disc)/(2*a) 3 利用if语句,求情况号码n 4 用开关语句,根据情况号码值,转到相应的分支,计算并输出相应的结果.,例5.6 求ax2+bx+c=0方程的解。,#include #include void main( ) float a,b,c,disc,p,q; int n; printf(请输入方程系数a b c:n); scanf(%f%f%f, ,switch(n) case 1: printf(这个方程不是二次的.n);break; case 2: printf(这个方程有两个相同的实根:
19、%.2fn,p); break; case 3: printf(这个方程有两个不同的实根:n); printf(x1=%.2fn,p+q ); printf(x2=%.2fn,p-q ); break; case 4: printf(这个方程有两个复根:n); printf(x1=%.2f+%.2fin,p,q ); printf(x2=%.2f-%.2fin,p,q ); /特别注意:C中复数不能直接输出! ,例5.7 运输公司计算运费。(区段归类法!),问题分析: 1 6个区段6种可能: 2 可以多分支if或开关语句实现。 3 区段的规律:(归类) 区段端点是250的倍数 4 设计归类表达
20、式c: if(s3000)c=s/250; /(整除!) else c=12; 也可以表达为:c=(s3000)?s/250:12;,归类后,c=012,13种情况,巧妙的区段归类法!,例5.7 运输公司计算运费。,#include void main() int c,s;float p,w,d,f; printf(请输入单价 重量 里程:n); scanf(%f%f%d, ,算法: 1 输入 单价p 重量w 里程s 2 根据里程s计算分类区段值c 3 根据区段值c,用开关语句选择计算不同类的折扣率。 4 计算相应运费。 5 输出计算结果,作业: P111,Ex 5.3 5.4 要求用两种方法
21、:1)if语句 2)利用条件运算符 5.5 5.6 要求用两种方法:1)if语句 2)switch语句(区段归类法) 5.7 5.9 5.10,程序阅读:,/求x的绝对值: #include void main() float x,y; scanf(%f, ,程序阅读:,/求分段函数值: #include #include void main() float x,y; scanf(%f, ,/求分段函数值:用条件运算符 #include #include void main() float x,y; scanf(%f, ,程序阅读:,/求圆、矩形、或正方形的面积 #include #defin
22、e PI 3.14159 void main() int iType; float r,a,b,area; printf(Type?1,2,3? );scanf(%d, ,程序阅读,/* 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入
23、当月利润I,求应发放奖金总数?1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 */ #include void main() double I,p=0; printf(Input(利润:万元) I= ); scanf(%lf, ,/* 读入2个数(data1和data2)及一个表达式data1 op data2的值;其中op可为+;-;*;/用switch完成 要求1;运算数及运算符从键盘输入 2;计算结果显示在屏幕上 */ #include int main() int data1,data2,result; char op; printf(Input data1 op data2 =: ); scanf(%d %c %d, ,/* 读入2个数(data1和data2)及一个表达式data1 op data2的值;其中op可为+;-;*;/用switch完成 要求1;运算数及运算符从键盘输入 2;计算结果显示
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026江西南昌市红谷滩城市投资集团有限公司招聘5人考试参考题库及答案详解
- 2026年乐平籍在外任教人员回乡任教笔试模拟试题及答案详解
- 2026年浙教版新教材小学信息科技五年级上册第二单元算法的控制结构全课教学设计
- 2026年马鞍山市人力资源和社会保障局、市社会保险费征缴管理中心编外聘用人员招聘考试参考题库及答案详解
- 循证护理:护理实践中的循证支持
- 2026中国电建集团河北工程有限公司招聘考试参考题库及答案详解
- 2026四川成都市龙泉驿区中医医院招收培训学员15人考试模拟试题及答案详解
- 孕期孕期心血管系统护理
- 2026浙江温州市瑞安市住房和城乡建设局招聘编外人员1人笔试模拟试题及答案详解
- 崇义县鼎兴城镇开发投资有限公司2026年面向社会公开招聘5名员工考试参考题库及答案详解
- 电气工程及其自动化毕业设计 基于PLC的喷涂机器人控制系统的设计
- 粮食加工储运系统粉尘防爆管理安全规程
- 食品加工物料提升机安全预案
- 四年级五年级六年级数学知识点概括(全面)
- 上海市建设工程工程量清单计价应用规则
- 2024浙江建设职业技术学院事业单位招聘拟聘历年(高频重点提升专题训练)共500题附带答案详解
- 综合支架施工计算书及相关图纸
- DL-T5840-2021电气装置安装工程电力变压器、油浸电抗器、互感器施工及验收规范
- 第11课+主动学习+高效学习(教案)-【中职专用】中职思想政治《心理健康与职业生涯》(高教版2023·基础模块)
- 《民宿文化与运营》课件-第三章 民宿设计
- 大学写作(山东联盟)智慧树知到期末考试答案2024年
评论
0/150
提交评论