五章选择结构程序设计

上传人:痛*** 文档编号:165849422 上传时间:2022-10-30 格式:PPT 页数:43 大小:558KB
返回 下载 相关 举报
五章选择结构程序设计_第1页
第1页 / 共43页
五章选择结构程序设计_第2页
第2页 / 共43页
五章选择结构程序设计_第3页
第3页 / 共43页
点击查看更多>>
资源描述
东北师范大学计算机学院 2008年秋季学期1第五章第五章 选择结构程序设计选择结构程序设计主要内容主要内容:(1)关系运算关系运算(2)逻辑运算逻辑运算(3)if语句的结构语句的结构(4)switch语句的结构语句的结构(5)应用两种选择结构解决实际问题应用两种选择结构解决实际问题东北师范大学计算机学院 2008年秋季学期2Professional WordsSelection structure 选择结构选择结构 Arithmetic operator 算术运算符算术运算符Relational operator 关系运算符关系运算符Logical operator 逻辑运算符逻辑运算符nested 嵌套嵌套priority 优先级优先级东北师范大学计算机学院 2008年秋季学期3 选择结构的作用:根据指定的条件是否选择结构的作用:根据指定的条件是否满足,决定从给定的满足,决定从给定的两组两组或或多组多组操作中操作中选择其一。实现方法主要有两种:选择其一。实现方法主要有两种:vif elsevswitch东北师范大学计算机学院 2008年秋季学期4一、关系运算符和关系表达式一、关系运算符和关系表达式(Relational opertor&expression)1、关系运算符关系运算符 比较大小的运算称为关系运算,是逻辑运算的比较大小的运算称为关系运算,是逻辑运算的一种。一种。C语言提供了六种关系运算,分为两个语言提供了六种关系运算,分为两个优先级。优先级。,=,优先级高优先级高=,!=,优先级低优先级低关系运算的优先级低于算术运算,高于赋值运算关系运算的优先级低于算术运算,高于赋值运算ab+3a=b=3 等效于等效于a=(b=3)a=b3 等效于等效于a=(b3)东北师范大学计算机学院 2008年秋季学期52、关系表达式、关系表达式 由关系运算符将两个表达式连接起来的由关系运算符将两个表达式连接起来的式子称为关系表达式,关系表达式的值式子称为关系表达式,关系表达式的值为为“真真”或或“假假”,C语言没有逻辑型数语言没有逻辑型数据,所以用非据,所以用非0表示真,用表示真,用0表示假。但表示假。但关系表达式的返回值只有关系表达式的返回值只有0或或1 关系表达式满足左结合性关系表达式满足左结合性,a=5,b=4,c=3,abc=?0东北师范大学计算机学院 2008年秋季学期6二、逻辑运算符和逻辑表达式二、逻辑运算符和逻辑表达式(Logical operator&expression)1、逻辑运算符逻辑运算符&,|,!(单目运算符(单目运算符Unary)优先级:优先级:!&|已学过的四类运算符之间的关系已学过的四类运算符之间的关系!算术运算符算术运算符关系运算符关系运算符&|赋值运算符赋值运算符 东北师范大学计算机学院 2008年秋季学期7三种逻辑运算符的真值表三种逻辑运算符的真值表 aba&ba|b!a真真真真真真真真假假真真假假假假真真假假假假真真假假真真真真假假假假假假假假真真东北师范大学计算机学院 2008年秋季学期8三种逻辑运算符的真值表三种逻辑运算符的真值表 aba&ba|b!a真真1真真1真真1真真1假假0真真1假假0假假0真真1假假0假假0真真1假假0真真1真真1假假0假假0假假0假假0真真1东北师范大学计算机学院 2008年秋季学期9三种逻辑运算符的真值表三种逻辑运算符的真值表 aba&ba|b!a11110100100101100001东北师范大学计算机学院 2008年秋季学期102、逻辑表达式、逻辑表达式 逻辑表达式的结果用逻辑表达式的结果用0或或1表示,但在判表示,但在判断一个量的真假时,用断一个量的真假时,用0表示假,用非表示假,用非0表示真。表示真。C语言在求解逻辑表达式时,并语言在求解逻辑表达式时,并不是所有的逻辑运算符都被执行,只有不是所有的逻辑运算符都被执行,只有在必须执行的情况下才执行该运算符在必须执行的情况下才执行该运算符&当当为假时,不再求为假时,不再求的值的值东北师范大学计算机学院 2008年秋季学期11(m=ab)&(n=cd)a=1,b=2,c=3,d=4,m,n的原值为的原值为1 执行后执行后m的值为的值为0,n的值仍然为的值仍然为1,因为该表达,因为该表达式没有被求解式没有被求解 例,判断一个年份是不是闰年,当例,判断一个年份是不是闰年,当year能被能被4整整除,但不能被除,但不能被100整除,或能被整除,或能被400整除,则为整除,则为闰年闰年year%4=0&year%100!=0|year%400=0(year%4=0&year%100!=0)|year%400=0东北师范大学计算机学院 2008年秋季学期12三、三、if语句语句1、if语句的三种形式语句的三种形式u if(表达式表达式)语句语句u if(表达式表达式)语句语句1 else 语句语句2u if(表达式表达式1)语句语句1 else if(表达式表达式2)语句语句2 else if(表达式表达式m)语句语句m else 语句语句n东北师范大学计算机学院 2008年秋季学期13例,输入例,输入3个数个数a,b,c,按由小到大的顺序输出按由小到大的顺序输出 main()int a,b,c,temp;scanf(“%d%d%d”,&a,&b,&c);if(ab)temp=a;a=b;b=temp;if(ac)temp=a;a=c;c=temp;if(bc)temp=b;b=c;c=temp;printf(“%d,%d,%d”,a,b,c);东北师范大学计算机学院 2008年秋季学期142、if语句嵌套语句嵌套(nested)if else 语句,语句中可以嵌套语句,语句中可以嵌套if语句,语句,else与离与离它最近的它最近的if 配对配对例,求例,求sign函数函数 main()float x;int y;scanf(“%d”,&x);if(x0)y=1;else if(x=0)y=0;else y=-1;printf(“%f,%d”,x,y);x=0 x=0)if(x0)y=1;else y=0;else y=-1;printf(“%f,%d”,x,y);x=0 xb?a:cb?(a=100):(b=100)ab?printf(“%d”,a):printf(“%d”,b);表达式表达式2和表达式和表达式3的类型可以不同,向的类型可以不同,向高级别的转换高级别的转换 xy?1:1.5 当当xy时,结果为时,结果为1.0东北师范大学计算机学院 2008年秋季学期19 例,输入一个字符,判别它是否为大写例,输入一个字符,判别它是否为大写字母,如果是大写字母,则转换为小写字母,如果是大写字母,则转换为小写字母输出,否则原样输出。字母输出,否则原样输出。main()char ch;scanf(%c”,&ch);ch=(ch=A&ch=Z)?(ch+32):ch;printf(“%c”,ch);东北师范大学计算机学院 2008年秋季学期20说明说明条件运算符一定程度上可替代条件运算符一定程度上可替代ifelse语句语句当条件复杂时当条件复杂时,最好不用这种结构最好不用这种结构,不便于不便于理解程序理解程序东北师范大学计算机学院 2008年秋季学期21练练 习习1.表示表示x在在1,8之内为真时的表达式之内为真时的表达式_2.int a=2,b=2,c=3,表达式表达式a|a-b&!c的值的值_3.以下程序段的输出结果为以下程序段的输出结果为:_int a=5,x=6;if(x=a)printf(“1:%dn”,x);else printf(“2:%dn”,x);东北师范大学计算机学院 2008年秋季学期224.下列程序段的功能是判断三角形是等边下列程序段的功能是判断三角形是等边,等腰还是一等腰还是一般三角形般三角形,或者不能构成三角形,将程序填充完整或者不能构成三角形,将程序填充完整.main()int a,b,c;scanf(“%d%d%d”,&a,&b,&c);if _ /能构成三角形能构成三角形 if _ printf(“等边等边n”);else if _ printf(“等腰等腰n”);else printf(“能构成三角形能构成三角形n”);else printf(“不能构成三角形不能构成三角形n”);东北师范大学计算机学院 2008年秋季学期23四、四、switch语句语句当分支数较多时,用当分支数较多时,用switch语句语句1 switch语句的一般形式语句的一般形式switch(表达式)(表达式)case 常量表达式常量表达式1:语句:语句1;case 常量表达式常量表达式2:语句:语句2;case 常量表达式常量表达式n:语句:语句n;default:语句语句n+1;东北师范大学计算机学院 2008年秋季学期242、有关、有关switch语句的说明语句的说明 (1)switch后的表达式可以是任何类型后的表达式可以是任何类型 (2)当表达式的值与某一)当表达式的值与某一case后的常量表达后的常量表达式的值相同时,则执行其后的语句,如果与所式的值相同时,则执行其后的语句,如果与所有的有的case后的值都不同,则执行后的值都不同,则执行 default后的语后的语句句 (3)各个)各个case的值互不相同;多个的值互不相同;多个case可以可以对应一个语句对应一个语句 (4)执行某个)执行某个case后,接着执行下一个后,接着执行下一个case而不再进行判断,所以要加而不再进行判断,所以要加break跳出跳出switch东北师范大学计算机学院 2008年秋季学期25五、五、程序举例程序举例例例1,按照考试成绩等级打印出百分制分数段,按照考试成绩等级打印出百分制分数段,可以用可以用switch语句来实现语句来实现switch(grade)case A:printf(“85100n”);case B:printf(“7084n”);case C:printf(“6069n”);case D:printf(“60n”);break;case D:printf(“60n”);break;default:printf(“errorn”);东北师范大学计算机学院 2008年秋季学期27例例3 3,写一程序,判断某一年是否闰年,写一程序,判断某一年是否闰年 main()int year,leap;if(year%4=0&year%100!=0|year%400=0)leap=1;else leap=0;if(leap=1)printf(“%d year is leap”,year);else printf(“%d year is not leap”,year);东北师范大学计算机学院 2008年秋季学期28 例例4,求,求ax2+bx+c=0方程的解方程的解 main()float a,b,c,d,p,q,x1,x2;scanf(%f%f%f,&a,&b,&c);if(fabs(a)=1e-6)printf(is not a quadraticn);elsed=b*b-4*a*c;p=-b/(2*a);if(fabs(d)1e-6)x1=p+sqrt(d)/(2*a);x2=p-sqrt(d)/(2*a);printf(has two distinct real roots:%8.2f,%8.2fn,x1,x2);elseq=sqrt(-d)/(2*a);printf(has complex roots:n);printf(%8.2f+%8.2fin,p,q);printf(%8.2f-%8.2fin,p,q);东北师范大学计算机学院 2008年秋季学期30例例5,运输公司对用户计算运费,路程,运输公司对用户计算运费,路程S越远,每越远,每公里运费越低,标准如下:公里运费越低,标准如下:s250Km 没有折扣没有折扣250=s500 2%折扣折扣500=s1000 5%折扣折扣1000=s2000 8%折扣折扣2000=s3000 10%折扣折扣3000=3000)c=12;else c=s/250;switch(c)case 0:d=0;break;case 1:d=0.02;break;case 2:case 3:d=0.05;break;东北师范大学计算机学院 2008年秋季学期32case 4:case 5:case 6:case 7:d=0.08;break;case 8:case 9:case 10:case 11:d=0.1;break;case 12:d=0.15;break;f=p*w*s*(1-d);printf(“s=%d,d=%f,f=%f”,s,d,f);东北师范大学计算机学院 2008年秋季学期33练习练习1.下列程序段执行后,下列程序段执行后,a的值是多少?的值是多少?int x=5,y=5,z=10,a;switch(x=y)case 1:if(yz)a=1;else a=2;case 2:switch(z)case 10:a+=10;break;case 11:a+=20;case 0:a*=10;东北师范大学计算机学院 2008年秋季学期342.编写一程序,根据输入的年份和月编写一程序,根据输入的年份和月份,计算该月有多少天?份,计算该月有多少天?3.输入一个日期,计算该日期是今年输入一个日期,计算该日期是今年(2009)的第几天?)的第几天?4.输入某一年的输入某一年的1月月1日是星期几日是星期几,然后再输然后再输入一个日期入一个日期,计算这一天是星期几计算这一天是星期几?(学完第六章以后学完第六章以后,会有更好的解决方案会有更好的解决方案)东北师范大学计算机学院 2008年秋季学期355.接受一个字符,例如用接受一个字符,例如用“+”表示加法,表示加法,用用“”表示减法。接受表示减法。接受num1 和和num2 两个数。如果输入的字符为两个数。如果输入的字符为“+”,则将,则将这两个数相加并显示相应的结果。如果这两个数相加并显示相应的结果。如果输入的字符为输入的字符为“”,则将这两个数相减,则将这两个数相减并显示相应的值。要求完成并显示相应的值。要求完成+,-,*,/四种运四种运算。算。6.编写一个程序,从用户输入的三个数中编写一个程序,从用户输入的三个数中找到最大值,并将该最大值输出。找到最大值,并将该最大值输出。东北师范大学计算机学院 2008年秋季学期362代码代码:#include#includevoid main()int year,month,days;scanf(%d%d,&year,&month);switch(month)case 1:case 3:case 5:case 7:case 8:case 10:case 12:days=31;break;东北师范大学计算机学院 2008年秋季学期37case 2:if(year%4=0&year%100!=0|year%400=0)days=29;else days=28;break;case 4:case 6:case 9:case 11:days=30;break;default:printf(input is error!n);exit(0);printf(days:%dn,days);东北师范大学计算机学院 2008年秋季学期383代码代码:void main()int year,month,day,days;scanf(%d%d%d,&year,&month,&day);switch(month)case 1:days=day;break;case 2:days=31+day;break;case 3:days=31+28+day;break;case 4:days=31+28+31+day;break;case 5:days=31+28+31+30+day;break;case 6:days=31+28+31+30+31+day;break;case 7:days=31+28+31+30+31+30+day;break;东北师范大学计算机学院 2008年秋季学期39case 8:days=31+28+31+30+31+30+31+day;break;case 9:days=31+28+31+30+31+30+31+31+day;break;case 10:days=31+28+31+30+31+30+31+31+30+day;break;case 11:days=31+28+31+30+31+30+31+31+30+31+day;break;case 12:days=31+28+31+30+31+30+31+31+30+31+30+day;break;default:printf(input is error!n);exit(0);if(year%4=0&year%100!=0|year%400=0)&month2)days+;printf(days=%dn,days);东北师范大学计算机学院 2008年秋季学期404代码代码:#include#includevoid main()int year,month,day,week,week1,days;scanf(%d%d%d%d,&year,&month,&day,&week);switch(month)case 1:days=day;break;case 2:days=31+day;break;case 3:days=31+28+day;break;case 4:days=31+28+31+day;break;case 5:days=31+28+31+30+day;break;case 6:days=31+28+31+30+31+day;break;case 7:days=31+28+31+30+31+30+day;break;东北师范大学计算机学院 2008年秋季学期41case 8:days=31+28+31+30+31+30+31+day;break;case 9:days=31+28+31+30+31+30+31+31+day;break;case 10:days=31+28+31+30+31+30+31+31+30+day;break;case 11:days=31+28+31+30+31+30+31+31+30+31+day;break;case 12:days=31+28+31+30+31+30+31+31+30+31+30+day;break;default:printf(input is error!n);exit(0);if(year%4=0&year%100!=0|year%400=0)&month2)days+;week1=(days+week-1)%7;printf(week1=%dn,week1);东北师范大学计算机学院 2008年秋季学期425代码代码:#includemain()int a,b;char op;printf(input operator:n);scanf(%c,&op);printf(input two operands:n);scanf(%d%d,&a,&b);东北师范大学计算机学院 2008年秋季学期43switch(op)case+:printf(%d%c%d=%dn,a,op,b,a+b);break;case-:printf(%d%c%d=%dn,a,op,b,a-b);break;case*:printf(%d%c%d=%dn,a,op,b,a*b);break;case/:printf(%d%c%d=%dn,a,op,b,a/b);break;default:printf(operator error!n);
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 成人自考


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!