版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、程序设计基础选择结构程序设计2015-2016学年第一学期第4章选择结构程序设计条件判断用if语句实现选择结构利用switch语句实现多分支选择结构程序综合举例提高部分选择结构的作用是:检查指定的条件是否满足,然后根据条件的满足情况,在事先给定的两种/多种操作中选择执行其中一种操作要实现选择结构,关键是判定所给的条件是否满足4.1 条件判断条件判断的含义关系运算符和关系表达式逻辑运算符和逻辑表达式4.1.1 条件判断的含义在现实生活中,需要进行判断和选择的情况是很多的 如果你在家,我去拜访你 如果不及格,要补考 如果遇到红灯,要停车等待 周末去郊游 70岁以上的老年人,入公园免票4.1.1 条
2、件判断的含义在现实生活中,需要进行判断和选择的情况是很多的条件判断的结果是一个逻辑值:“是”或“否”在计算机语言中用“真”和“假”来表示“是”或“否”4.1.1 条件判断的含义用选择结构检查所指定的条件是否满足,并根据判断的结果决定执行哪种操作。如:if (x 0)prelseprf(“%d”,x);f(“%d”,-x);当x为正时,输出x的值,否则输出-x4.1.2 关系运算符和关系表达式“条件”在程序中用一个表达式表示 x age=70关系运算符 a+ b*b-4*a*c av0bc04.1.2 关系运算符和关系表达式“条件”在程序中用一个表达式表示关系表达式a0a+bcage=70 x0
3、4.1.2 关系运算符和关系表达式1.关系运算符及其优先次序语言提供种关系运算符:优先级相同(高)优先级相同 (低) =(等于) !=(不等于) (小于) =(小于或等于) (大于) =(大于或等于)4.1.2 关系运算符和关系表达式关系、算术、赋值运算符的优先级(高)算术运算符关系运算符(低)赋值运算符4.1.2 关系运算符和关系表达式等效于等效于等效于等效于ca+bab=c a=bcc(a+b)(ab)=c a=(bc)4.1.2 关系运算符和关系表达式2.关系表达式用关系运算符将两个数值或数值表达式连接起来的式子关系表达式的值是一个逻辑值,即“真”或“假”在C的逻辑运算中,以“”代表“真
4、”,以“”代表“假”4.1.2 关系运算符和关系表达式2.关系表达式当a=3,b=2,c=1ab的值为“真”,表达式值为1(ab)=c的值为“真” ,表达式值为1 b+ca的值为“假”,表达式值为04.1.3 逻辑运算符和逻辑表达式有时判断的条件是一个复合的条件:公民,且在18岁以上5门课都及格70岁以上的老人或10岁以下儿童4.1.3 逻辑运算符和逻辑表达式1.逻辑运算符及其优先次序3种逻辑运算符:&(逻辑与)|(逻辑或) !(逻辑非)&和|是双目(二元)运算符!是单目(一元)运算符4.1.3 逻辑运算符和逻辑表达式逻辑运算的真值表ab! a! ba & ba | b真真假假真真真假假真假真
5、假真真假假真假假真真假假4.1.3 逻辑运算符和逻辑表达式逻辑运算符的优先次序! & | (!为三者中最高)与其他运算符的优先次序!(高)算术运算符关系运算符 & 和 |赋值运算符(低)4.1.3 逻辑运算符和逻辑表达式可写成可写成可写成(ab) & (xy)(a=b) | (x=y) (!a) | (ab)ab & xya=b |x=y!a | ab4.1.3 逻辑运算符和逻辑表达式2.逻辑表达式用逻辑运算符将关系表达式或其他逻辑量连接起来的式子4.1.3 逻辑运算符和逻辑表达式逻辑表达式的值应该是逻辑量“真”或“假”编译系统在表示逻辑运算结果时以数值1代表“真”,以0代表“假”但在判断一个
6、量是否为“真”时以0代表“假”,以非0代表“真”注意:将一个非零的数值认作为“真”4.1.3 逻辑运算符和逻辑表达式若a=4,则!a的值为0若a=4,b=5,则a & b的值为1a和b值分别为4和5,则a|b的值为1a和b值分别为4和5,则!a|b的值为1(5) 4 & 0 | 2的值为14.1.3 逻辑运算符和逻辑表达式修改后的逻辑运算真值表ab! a! ba & ba | b非0非00011非000101假非01001假011004.1.3 逻辑运算符和逻辑表达式判别某一年是否闰年,用逻辑表达式表示闰年的条件是符合下面二者之一:能被4整除,但不能被100整除,如2008能被400整除,如2
7、000(year % 4 = 0 & year 100 !=0)| year % 400 = 0如果表达式值为1,则闰年;否则为非闰年4.2 用if语句实现选择结构用if语句实现选择结构举例if语句的一般形式if语句的使用说明使用嵌套的if语句实现多层判断4.2.1 用if语句实现选择结构举例例4.1 输入两个学生a和b的成绩,输出其中高的成绩。解题思路:设定变量max,将高的成绩放在其中如果a大于或等于b,把a的值赋给max如果b大于a,把b的值赋给max输出max4.2.1 用if语句实现选择结构举例真ab假max=a真ba假max=b#include main() float a, b,
8、 max;prf(please enter a and b:); scanf(%f,%f, &a, &b);if (a = b)max = a;if (b a)max = b;prf(max=%6.2fn, max);return 0;4.2.1 用if语句实现选择结构举例if(a=b)max=a;elsemax=b;真ab假max=amax=b#include main() float a, b, max;prf(please enter a and b:); scanf(%f,%f, &a, &b);prf(max=%6.2fn, max);return 0;if (a = b)max =
9、 a;if (b a)max = b;4.2.1 用if语句实现选择结构举例例4.2 输入3个成绩a, b, c,要求按由高到低的顺序输出。4.2.1 用if语句实现选择结构举例解题思路:可以先用伪代码写出算法:if ab,a和b对换if ac,a和c对换if bc,b和c对换输出a,b,c的值(a是a、b中的大者)(a是三者中最大者)(b是三者中次大者)如何交换两个变量的值?交换有两个两个中分别装着可乐和芬达,请将中的饮料交换(不借助其他工具)可乐芬达交换有两个一个空中分别装着可乐和芬达,还有,请将两个中的饮料交换可乐芬达如何交换两个变量?设需要交换的变量为a, b,交换a, b的值,需要借
10、助临时变量,设为t原则:交换过程中不能丢失a和b的值t=aa=bb=tMisImsible不借助第三变量交换两个变量的值#includemain()a=10,b=5;1.2.是按位异或(XOR)运算性质:aa=0a0=aprf(a=%d, b=%dn, a, b);b=ab;a=ab; b=ab;prf(a=%d, b=%dn, a, b);return 0;/2336974/797986位运算(Bitwise Operator)C语言提供了六种位运算符& 按位与| 按位或 按位异或 右移! 按位求反位运算符只能用在整数上位运算(Bitwise Operator)#include main()
11、a=85,b=42;if(a&b)prf(a&b=%dn,a&b);if(a&b)prf(True:a&b=%dn,a&b);prf(a&b=%dn,a&b);return 0;实现a和b的互换实现a和c的互换实现b和c的互换#include main() float a, b, c, t;prf(please enter a, b, c:);scanf(%f,%f,%f, &a, &b, &c);if (a b) t = a;a = b;b = t;if (a c) t = a;a = c;c = t;if (b y) prf(“%d”, x);0(假)表达式非0(真)语句4.2.2 if语
12、句的一般形式2. if (表达式) 语句1else 语句2if(xy) prf(”%d”, x);f(”%d”, y);elsepr0(假)非0(真)表达式语句1语句24.2.3 if语句的使用说明语句语句11.2.ififelse 语句2if(a=b & x=y)prf(”a=b, x=y”);关系表达式逻辑表达式(表达式)(表达式)4.2.3 if语句的使用说明) 语句1.2.ifif) 语句1else 语句2if(0) prif(1) prf(Not OK.n);f(OK.n);数值表达式关系表达式逻辑表达式(表达式(表达式4.2.3 if语句的使用说明语句语句11.2.ififelse
13、 语句2if(x0)prf(”%f”,x);f(”%f”,-x);不能丢elsepr数值表达式关系表达式逻辑表达式(表达式)(表达式)4.2.3 if语句的使用说明语句语句11.2.ififelse 语句2配对if(x0)prf(”%f”,x);f(”%f”,-x);elsepr数值表达式关系表达式逻辑表达式(表达式)(表达式)4.2.3 if语句的使用说明1. if (表达式)2. if (表达式) 语句1else 语句2可以是:简单的语句复合语句另一个if语句等语句4.2.3 if语句的使用说明例4.3: 给出三角形的三个边长,求三角形的面积。解题思路:三角形的必要条件是两边之和大于第三边
14、,因此在计算三角形面积之前应当进行该条件的判断please enter a,b,c:2,3,4,c:2,3,6ral.#include area=2.90#include please enter a,bmain() It is norilatedouble a, b, c, s, area;prf(please enter a,b,c:);复合语句scanf(%lf,%lf,%lf, &a, &b, &c);if (a + b c & b + c a & c + a b)seprf(It is norilateral.n); return 0; els = 0.5 * (a + b + c)
15、;area = sqrt(s * (s - a) * (s - b) * (s - c); prf(area=%6.2fn, area);4.2.4 使用嵌套的if语句实现多层判断有的选择结构中又包含一个或多个选择结构,这称为选择结构的嵌套if语句中可以又包括另一个if语句,这就是if语句的嵌套可以用if语句的嵌套实现嵌套的选择结构4.2.4 使用嵌套的if语句实现多层判断一般形式:if( 表达式1 )else内嵌ifif(表达式3 ) 语句3else 语句4if(表达式2 ) 语句1else 语句24.2.4 使用嵌套的if语句实现多层判断例4.4 为促销,对凡买50件以上的货物多的顾客有5
16、%,买100件以上的:7.5%,买300件以上的10%,买500件以上的数量和单价,输出应的15%。输入付货款。4.2.4 使用嵌套的if语句实现多层判断解题思路: 关键是写出判断货物折扣的选择结构 应付货款=件数*单价*(1-折扣)4.2.4 使用嵌套的if语句实现多层判断件数500真假件数300真假件数100真折扣15%假件数50折扣10%真假折扣7.5%折扣5%无折扣应付货款的计算#include #include main() number;double discount, price, total;prf(enter number and price:n); scanf(%d,%lf
17、, &number, &price);应付货款的计算(续)if (number = 500)discount = 0.15;else if (number = 300)discount = 0.10; else if (number = 100)discount = 0.075; else if (number = 50)discount = 0.05;elsediscount = 0;total = number * price * (1 - discount);prf(Total=%10.2fn, total);return 0;enter number and price: 512,82
18、1.5Total= 357516.80应付货款的计算(续)if (number = 500)discount = 0.15;else if (number = 300)discount = 0.10; else if (number = 100)discount = 0.075; else if (number = 50)discount = 0.05;elsediscount = 0;total = number * price * (1 - discount);prf(Total=%10.2fn, total);return 0;enter number and price: 350,82
19、1.5 Total= 258772.50应付货款的计算(续)if (number = 500)discount = 0.15;else if (number = 300)discount = 0.10; else if (number = 100)discount = 0.075; else if (number = 50)discount = 0.05;elsediscount = 0;total = number * price * (1 - discount);prf(Total=%10.2fn, total);return 0;enter number and price: 150,8
20、21.5 Total= 113983.13应付货款的计算(续)if (number = 500)discount = 0.15;else if (number = 300)discount = 0.10; else if (number = 100)discount = 0.075; else if (number = 50)discount = 0.05;elsediscount = 0;total = number * price * (1 - discount);prf(Total=%10.2fn, total);return 0;enter number and price: 20,8
21、21.5 Total= 16430.00else总是与它上面最近的未配对的if配对应付货款的计算(续)if (number = 500)discount = 0.15;else if (number = 300)discount = 0.10; else if (number = 100)discount = 0.075; else if (number = 50)discount = 0.05;if (number=500) discount=0.15;else if (number=300) discount=0.10; else if (number=100) discount=0.07
22、5;else if (number=50)else discount=0;discount=0.05;elsediscount = 0;total = number * price * (1 - discount);prf(Total=%10.2fn, total);return 0;4.3 利用switch语句实现多分支选择结构switch语句用来实现多分支选择结构学生成绩分类85分以上为A等7084分为B等6069分为C等统计分类1.2.3.4.1.按分为老、中、青、少、儿童4.3 利用switch语句实现多分支选择结构switch语句的一般形式:switch (表达式): 语句1case
23、casecase: 语句2不能相同: 语句ndefault : 语句n+1常量表达式1常量表达式2常量表达式n4.3 利用switch语句实现多分支选择结构break; break; break; break;break;Why?switch (grade) case A: prf(85100n);case B: prf(7084n);case C: prf(6069n);case D: prf(60n); default: prf(errorn);goto语句与(label)goto语句的格式#include main(void) n=0;goto示例:;prloop:f(input a s
24、tring:n);goto语句不是必须的if(getchar()!=n)n+;goto loop;Goto sementconsidered harmfulprf(%d, n);return 0;4.3 利用switch语句实现多分支选择结构其他ADBC输出error输出60输出6069输出7084输出85100grade4.4 程序综合举例例4.6: 写程序,判断某一年是否为闰年。用变量leap代表是否闰年的信息若闰年,令leap=1;非闰年,leap=0最后判断leap是否为1(真),若是,则输出“闰年”信息4. 参见图4.13#include main() year, leap;标志变量
25、prf(Please enter year:); scanf(d, &year);if (year % 4 = 0)if (year % 100 = 0)if (year % 400 = 0) leap = 1; else leap = 0;else leap = 1;else leap = 0;f(%d is , year);与if (leap!=0)含义相同if (leap) prelse prf(%d is not , year);prf(a leap year.n); return 0;#include main() year, leap;prf(Please enter year:)
26、; scanf(%d, &year);if (leap) prf(%d is , year);else prf(%d is not , year);prf(a leap year.n); return 0;if(year%4!=0) leap=0;else if (year%100!=0) leap=1; else if(year%400!=0) leap=0; else leap=1;if (year % 4 = 0)if (year % 100 = 0)if (year % 400 = 0) leap = 1; else leap = 0;else leap = 1;else leap =
27、 0;#include main() year, leap;prf(Please enter year:); scanf(%d, &year);!=0)if (leap) prf(%d is , year);| (year%400=0)else prf(%d is nleoatp=, 1y;ear);f(a leap yeealsre.nl)e;arpe=tu0r;n 0;prif (year % 4 = 0)if (year % 100 = 0)if (year % 400 = 0) leap = 1; else leap = 0;else leap = 1;else leap = 0;if
28、(year%4=0 & year%100#include main() year, leap;prf(Please enter year:); scanf(%d, &year);!=0)if (leap) prf(%d is , year);| (year%400=0)else prf(%d is nleoatp=, 1y;ear);f(a leap yeealsre.nl)e;arpe=tu0r;n 0;prif (year % 4 = 0)if (year % 100 = 0)if (year % 400 = 0) leap = 1; else leap = 0;else leap = 1
29、;else leap = 0;if(year%4=0 & year%1004.4 程序综合举例(续)例4.6公司对用户计算运费。距离越远,运费越低。标准如下: s250 250s500500s10001000s20002000s30003000s没有折扣2折扣5折扣8折扣10折扣15折扣4.4 程序综合举例(续)设每吨每千米货物的基本运费为p,货物重为w,距离为s,折扣为d总运费f的计算公式为f=pws(1-d)4.4 程序综合举例(续)折扣的变化规律(参见图4.15):折扣的“变化点”都是250的倍数在横轴上加一种坐标c,c的值为s/250c代表250的倍数当c1时,表示s250,无折扣1c
30、2时,表示250s500,折扣d=22c4时,d=5;4c8时,d=8;8c12时,d=10;c12时,d=154.4 程序综合举例(续)#include void main()c,s;double p,w,d,f;prf(请输入单价、重量和距离:); scanf(%lf,%lf,%d,&p,&w,&s); if(s=3000) c=12;elsec=s/250;switch(c) case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:d=0; break;d=2; break;d=5; break;d=8; break;
31、case 9:case 10:case 11:case 12:d=10; break;d=15; break;请输入单价、重量和距离:15,145.6,346.9运费: 740550.72元f = p * w * s * (1 - d / 100.0); prf(“运费:%10.2f元n”,f);4.4 程序综合举例-计算器例:编写程序,实现一个支持两个整数本算术运算的计算器。要求:1. 应该输出必要的文字提示,告知用户计算器所支持的运算和输入的格式2. 支持+, -, *, /, %五种运算3. 支持 运算数运算符运算数 形式的输入4. 对于的运算符,提示用户输入错误#includemain()char ch;x,y;f(我是计算器小Qn);prpr务哦:);pr prf(可以为您提供+ - * /五种整数运算服f(快来体验吧!nn);f(请输入运算表达式, 如5+6:n);scanf(%d%c%d,&x, &ch, &y);%switch(ch)case +: pr case -: pr case *: pr case /: prcase %: prf(%d%c%d=%dn, x, ch, y, x+y);f(%d%c%d=%dn, x, ch, y, x-y);break;break; break; break;f(d%c%d=%dn,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论