《信息学奥赛课课通(C++)》第3单元电子课件.ppt_第1页
《信息学奥赛课课通(C++)》第3单元电子课件.ppt_第2页
《信息学奥赛课课通(C++)》第3单元电子课件.ppt_第3页
《信息学奥赛课课通(C++)》第3单元电子课件.ppt_第4页
《信息学奥赛课课通(C++)》第3单元电子课件.ppt_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

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

文档简介

第 3 单元 分支结构程序设计,作者:林厚从,信息学奥赛课课通(C+),第1课 关系运算符,学习目标 1. 熟练掌握 C+ 中的关系运算符。 2. 熟知关系运算符和数学运算符的优先级。 3. 学会正确书写关系表达式。,1. 关系运算符,C+ 提供了六种关系运算符:(大于)、=(大于或等于)、=(小于或等于)、=(等于)、!= (不等于)。 关系表达式的结果为逻辑值真(非0值)或假(0)。,使用关系运算符需要注意的问题,(1)“等于”与“赋值”的区别; (2)实型数据(浮点数)的关系运算; (3)运算符的优先级,如下表:,2. 关系运算符的应用举例,例1、假设变量定义为“int x=6,y=4,z=5;”,请分别写出下列表达式的值。 (1) x + y y + z (2) x = y (4) (x (y = z),例2、阅读程序,写出程序的运行结果。,/p3-1-2 #include using namespace std; int main() int n1 = 4,n2 = 5,n3; n3 = (n1 n2); cout n3 “ , ” ; n3 = (n1 n2); cout n3 “ , ” ; n3 = (n1 = 4); cout n3 “ , ” ; n3 = (n1 = 5); cout n3 endl; return 0; ,例3、阅读程序,写出程序的运行结果。,/p3-1-3 #include using namespace std; int main() char x,y; x = m ; y = n ; int n; n = x 3) + (y - x = 1); cout n endl; return 0; ,实践巩固,第 2 课 逻辑运算符,学习目标 1. 熟练掌握 C+ 中的逻辑运算符。 2. 熟知逻辑运算符的优先级。 3. 学会正确书写逻辑表达式。,逻辑运算符,C+ 提供了 &(逻辑与)、| (逻辑或)和!(逻辑非)三种逻辑运算符。其中,& 和 | 是双目运算符,而!是单目运算符。,逻辑运算符,1、逻辑运算符的优先级问题,(1) 一个 0100 之间(不包括 0 和 100)的数 a。 (2) x 大于 y 且 x 大于 z。 (3) x 是英文字母。,例1、写出下列语义的 C+ 表达式。,整型数据在参与逻辑运算时,根据其值是 0 或非 0,分别当作逻辑值“假”或“真”进行处理。 例2、假设变量定义为“int a=0,b=0,c=1,d=1;”,请写出表达式 a & b | c & d的结果。,2、整型数据也可以参与逻辑运算,/p3-2-3 #include using namespace std; int main() int a,b,c,d; a = 2; b = 3; c = 0; d = (a + b | c); cout d endl; return 0; ,例3、阅读程序,写出程序的运行结果。,例 4、阅读程序,写出程序的运行结果。 /p3-2-4 #include using namespace std; int main() int a,b,c,d; a = 2;b = 3;c = 0; d = (a b) ,3、逻辑表达式是“短路计算”,在逻辑表达式的计算过程中,一旦能够确定整个表达式的值,就会立刻停止计算。,【问题分析】 判断“闰年”的口诀是:四年一闰,百年不闰,四百年又闰。2016 年是闰年,因为 2016 能被 4整除;2100 年不是闰年,因为它能被 100 整除;但 2000 年是闰年,因为它能被 400 整除。 所以,判断某一年份是否是闰年有两种情况:一种是能被 400 整除;另一种是能被 4 整除但不能被 100 整除。所以,可以表示成: (x % 400=0) | (x % 4=0)& (x % 100 !=0),例5、写出判断某一年份 x 是否是“闰年”的表达式。,实践巩固,第 3 课 if 语句,学习目标 1. 掌握 if 语句的两种格式。 2. 理解分支结构和复合语句。 3. 熟练应用 if 语句解决一些实际问题。,1. if 语句,if 语句有两种格式: 第一种格式为: if (表达式) 语句1; else 语句2;,第二种格式为: if (表达式) 语句 ;,例1、旅游费用。,【问题描述】 风华公司“南京一日游”的收费标准为:5 人以内(含 5 人)按散客标准,每人 300 元;超过 5 人,按团体标准,每人 280 元。请根据输入的人数,输出其旅游费用。 【输入格式】 一行一个正整数 n,表示人数,1n5000000。 【输出格式】 一行一个正整数,表示需要的总旅游费用。 【输入样例】 9 【输出样例】 2520,【问题分析】 这是一个“选择性”问题,根据人数 n 来选择不同的收费标准。条件就是 n5,如果成立,那么收费为 n300;否则,收费为 n280。 /p3-3-1a #include using namespace std; int main() int n; cin n; if(n = 5) cout n * 300 endl; else cout n * 280 endl; return 0; ,或换成另一种形式:,/p3-3-1b #include using namespace std; int main() int n,ans; cin n; ans = n * 300; if(n 5) ans = n * 280; cout ans endl; return 0; ,例2、三个数的大小比较。,【问题描述】 输入三个整数 x、y 和 z,判断是否满足 x y z。若满足,则输出“YES”;否则,输出“NO”。 【输入格式】 一行三个整数 x、y 和 z,int 范围以内。 【输出格式】 一行一个单词,表示答案。 【输入样例 1】 3 6 7 【输出样例 1】 YES 【输入样例 2】 3 7 6 【输出样例 2】 NO,【问题分析】 如果逻辑表达式“x using namespace std; int main() int x,y,z; cin x y z; if(x = y ,2. 复合语句,例3、数据交换。 【问题描述】 输入 a、b 两个整数,如果 a 大于 b,则交换 a 与 b 的值,再输出 a 和 b 的值。 【输入格式】 一行两个整数 a、b,int 范围以内。 【输出格式】 一行两个整数,a、b 最后的值,中间空一格。 【输入样例 1】 6 7 【输出样例 1】 6 7 【输入样例 2】 10 8 【输出样例 2】 8 10,【问题分析】 交换 a 与 b 的值需要用到 3 条语句。所以,当判断条件“ab”成立时,需要依次执行完这 3 条语句,这时就需要用花括号“”将这 3 条语句括起来,这些括起来的语句组合称为“复合语句”,流程图如右图。,/p3-3-3 #include using namespace std; int main() int a,b,c; cin a b; if(a b) c = a; a = b; b = c; cout a ” ” b endl; return 0; ,实践巩固,第 4 课 if 语句的嵌套,学习目标 1. 理解 if 语句嵌套的含义。 2. 熟练应用 if 语句及其嵌套解决一些实际问题。,if 语句的嵌套,在分支结构中经常会遇到这样的情况:如果条件1成立,就去做A事情,否则去做B事情,但是,在做A事情(或者B事情)时,还要根据条件2是否成立,决定是做A1(或者B1)这件子事情,还是去做A2(或者B2)这件子事情。在程序设计中,把这种情况称为分支结构的“嵌套”,一般用来解决三种及以上的分支情况。,【问题描述】 输入三个整数 x、y、z,判断其是否满足 xyz。若满足,输出“YES”;否则,输出“NO”。 【输入格式】 一行三个整数 x、y、z,int 范围以内。 【输出格式】 一行一个单词,表示答案。 【输入样例】 3 6 7 【输出样例】 YES,例1、三个数的大小比较。,【问题分析】 前面已经介绍过用逻辑表达式“x=y &y=z”来表示YES”的条件,本题也可以用 if语句的嵌套来解决,如图:,/p3-4-1 #include using namespace std; int main() int x,y,z; cin x y z; if(x = y) if(y = z) cout ” YES ” endl; else cout ” NO ” endl; else cout ” NO ” endl; return 0; ,(1)分支结构可以嵌套很多层; (2)if 与 else 的配对关系; (3)编程要形成良好的代码风格;,使用 if 语句的嵌套需注意的问题,/p3-4-2a #include using namespace std; int main() int x = 4, y = 3, z = 2; if(x = y) if(y = z) cout “YES“ endl; else cout “NO“ endl; return 0; ,例2、阅读程序,写出程序的运行结果。,【问题分析】 程序不会输出任何结果。因为其中的else子句从书写格式上看,与外层“if(x = y)”语句配对,但其实是与内层的“if(y = z)”配对。而外层的“if(x = y)”是不成立的,又没有else子句,所以直接执行后面的“returne 0;”语句。,例3、判断闰年。,【问题描述】 输入某一年份 x,判断该年份是否是闰年。是则输出“YES”,否则输出“NO”。 【输入格式】 一行一个正整数 x,int 范围以内。 【输出格式】 一行一个单词,表示判断结果。 【输入样例】 2000 【输出样例】 YES,【问题分析】 前面已经介绍过判断闰年的条件表达式。对于闰年的判断,也可以采用嵌套的方法来实现。,/p3-4-3 #include using namespace std; int main() int x; cin x; if(x % 400 = 0) cout “ YES ” endl; else if(x % 4 = 0) if(x % 100 != 0) cout “ YES ” endl; else cout “ NO ” endl; else cout “ NO ” endl; return 0; ,例4、优惠购物。,【问题描述】 教材77页。,【问题分析】 设 id 表示顾客的身份,price 表示顾客购买的商品价值,flag=0 表示无大礼包,flag=1 表示有大礼包,discount 表示顾客享受的折扣,则计算流程如下:,flag = 0; 如果 id 等于 “ V ” 如果 price 500, 则 discount = 0.85; 否则 , 如果 price 1000, 则 discount = 0.8; 否则 ,discount = 0.75,flag = 1; 否则 discount = 0.9; 如果 price500, 则 flag = 1;,【参考代码】 教材78页。,实践巩固,第 5 课 条件表达式,学习目标 学会书写和使用条件表达式解决一些实际问题。,条件表达式,C+语言表达能力强,表达式类型丰富。其中就有一个“条件表达式”,通过它也可以来实现有选择的取值。条件表达式的格式为: ? : 其运算规则为:首先计算表达式 1 的值,若表达式 1 的值为真(非 0),则只计算表达式 2,并将其结果作为整个表达式的值;否则,只计算表达式 3,并将其结果作为整个表达式的值。,例1、阅读程序,写出程序的运行结果。,/p3-5-1 #include using namespace std; int main() int x = 5,y = 10,z; z = x y ? x : y; cout 0 ? 1 : -1; cout z endl; cout (x % 2 = 0 ? “ x is even ” : ” x is odd ” ) endl; return 0; ,例2、旅游费用,【问题描述】 风华公司“南京一日游”的收费标准为:5人以内(含5人)按散客标准,每人300元。超过5人,按团体标准,每人 280 元。请根据输入的人数,输出其旅游费用。 【输入格式】 一行一个正整数 n,表示人数,1n5000000。 【输出格式】 一行一个正整数,表示需要的总旅游费用。 【输入样例】 9 【输出样例】 2520,/p3-5-2 #include using namespace std; int main() int n; cin n; cout (n = 5 ? n * 300:n * 280) endl; return 0; ,例3、判断闰年,【问题描述】 输入某一年份 x,判断该年份是否是闰年。是则输出“YES”,否则输出“NO”。 【输入格式】 一行一个正整数 x,int 范围以内。 【输出格式】 一行一个单词,表示判断结果。 【输入样例】 2000 【输出样例】 YES,/p3-5-3 #include using namespace std; int main() int x; cin x; cout (x % 400 = 0 ? “ YES ” :(x % 4 = 0 ? (x %100 != 0 ? “ YES ” : ” NO ” ) : ” NO ” ) endl; return 0; ,实践巩固,第 6 课 switch 语句,学习目标 1. 掌握 switch 语句的格式和含义。 2. 学会应用 switch 语句解决一些实际问题。,多分支语句switch,在一些实际问题中,分类情况特别多,用if语句嵌套实现起来,层数太多,容易出错。为此,C+提供了一种多分支语句switch。 switch 语句的一般格式为: switch (表达式) case 常量表达式1: 语句组1; break; case 常量表达式2: 语句组2; break; case 常量表达式n: 语句组n; break; default: 语句组n+1 ,多分支语句switch,执行过程为:先计算表达式的值,然后从前往后依次与case子句中所列出的各个常量表达式的值进行比较,若表达式的值与常量中的值相等,就开始进入相应的case后面的语句组执行,遇到后续的case也不再进行判断(默认匹配),直至遇到break语句或switch语句结束。default表示表达式与所有常量表达式的值都不匹配,那就执行其后面的语句组,通常将default放在最后。如果表达式与各分支常量表达式的值都不匹配时,不需要执行任何语句,则default可以省略。,例1、阅读下面程序,思考输入“-”,则输出什么。,/p3-6-1 #include using namespace std; int main() char symbol; cin symbol; switch(symbol) case + :cout “ + ” endl; break; case - :cout “ - ” endl; break; case * :cout “ * ” endl; break; case / :cout “ / ” endl; break; default:cout “ Input Invalid! ” ; return 0; ,【问题分析】 输出“-”。 如果把其中的4条“break;”语句去掉,输出什么?,使用 switch 语句要注意的问题,(1)switch 后面的表达式,取值只能是整型、字符型、布尔型或枚举型。case 后面的常量表达式,其值类型要与 switch 后面表达式的类型一致。 (2)任意两个 case 后的表达式值必须各不相同,否则将引起歧义。 (3)语句组可以是一条语句,也可以是一个复合语句。 (4)多个 case 语句可以共用一组程序。,例3、阅读程序,思考分别输入 “A”“B”“C”,则程序输出什么。,/p3-6-3 #include using namespace std; int main() char ch; cin ch; switch(ch) case A : case B : case C :cout “ Pass ” endl; break; ,例4、优惠购物,【问题描述】 某商场的客户分为白金卡会员、金卡会员、银卡会员和普通客户。为了回馈广大顾客,现推出以下优惠活动: (1) 如果客户是白金会员,现在将享受 7 折优惠; (2) 如果客户是金卡会员,现在将享受 8 折优惠; (3) 如果客户是银卡会员,现在将享受 9 折优惠; (4) 如果客户是普通客户,现在将享受 9.5 折优惠。 本题的任务是根据顾客的身份和购买商品的价格,给出应付金额。,【输入格式】 第一行一个字符。“P”表示白金会员,“G”表示金卡会员,“S”表示银卡会员,其他字符表示普通客户。 第二行一个整数,int 范围以内,表示该顾客购买的商品金额。 【输出格式】 一行一个实数,保留两位小数,表示顾客应付金额。 【样例输入】 G 580 【样例输出】 464.00,/p3-6-4 #include using namespace std; int main() char id; float price,discount; scanf( “ %cn ” , ,例5、某年某月的天数,【问题描述】 输入x和y,输出x年y月有多少天。 【输入格式】 一行两个正整数x和y,分别表示年份和月份。x在int范围以内,y为112。 【输出格式】 一行一个整数,表示该年该月有多少天。 【样例输入】 2000 3 【样例输出】 31,/p3-6-5 #include using namespace std; int main() int x,y,day; cin x y; switch(y) case 1: case 3: case 5: case 7: case 8: case 10: case 12: day = 31; break; case 4: case 6: case 9: case 11: day = 30; break; case 2: if(x % 400 = 0) | (x % 4 = 0) ,实践巩固,第 7 课 分支结构应用举例,学习目标 1. 总结反思,建立分支结构的知识体系。 2. 实践巩固,熟练应用分支结构解决一些实际问题。,例1、水果价格,【问题描述】 苹果(apples)、梨(pears)、橘子(oranges)、葡萄(grapes)4种水果,单价分别是3.00元/千克,2.50 元 / 千克,4.10 元 / 千克和 10.2 元 / 千克。 【输入格式】 一行一个整数,09 之间。 【输出格式】 提示信息和相应水果的单价,格式如样例输出所示。 【样例输入】 3 【样例输出】 1apples 2pears 3oranges 4grapes Price=4.1,/p3-7-1 #include using namespace std; int main() int x; cin x; cout “ 1apples ” endl; cout “ 2pears ” endl; cout “ 3oranges ” endl; cout “ 4grapes ” endl; cout “ Price= ” ; switch(x) case 1:cout “ 3.0 ” endl; break; case 2:cout “ 2.5 ” endl; break; case 3:cout “ 4.1 ” endl; break; case 4:cout “ 10.2 ” endl; break; default:cout “ 0 ” endl; return 0; ,例2、虫子吃苹果,【问题描述】 小苏买了一箱苹果共有 n 个,很不幸的是箱子里混进了一条虫子。虫子每 x 小时能吃掉一个苹果。假设虫子在吃完一个苹果之前不会吃另一个,那么经过 y 小时,这箱苹果中还有多少个苹果没有被虫子吃过? 【输入格式】 一行三个整数,表示 n、x、y,int 范围以内,之间用一个空格隔开。 【输出格式】 一行一个整数,即所求答案。 【输入样例】 3 2 1 【输出样例】 2,【问题分析】 如果 y%x 等于 0,则剩余的苹果为 n-y/x;否则答案为 n-y/x-1。特殊情况是,如果经过 y小时虫子吃掉的苹果比 n 多,则说明剩余苹果为 0。 /p3-7-2 #include using namespace std; int main() int n,x,y; cin n x y; int k = y / x; if(y % x) k+;/y % x 等价于 y % x != 0 if(k = n) cout n - k endl; else cout 0 endl; return 0; ,例3、字符判断,【问题描述】 键盘输入任意一个字符,判断是大写字母、小写字母还是数字。 【输入格式】 一行一个字符。 【输出格式】 如果是大写字母,输出“capital”;如果是小写字母,则输出“lowercase”;如果是数字,则输出“number”;其他字符输出“others”。 【样例输入】 A 【样例输出】 capital,【问题分析】 C+ 中的字符可以直接比较大小

温馨提示

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

评论

0/150

提交评论