《选择结构程序设计C语言程序设计第三.pptx》由会员分享,可在线阅读,更多相关《选择结构程序设计C语言程序设计第三.pptx(33页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、掌握关系表达式和逻辑表达式的组成及运算理解选择结构(分支结构)程序设计的概念掌握if语句、switch语句的基本结构及执行过程学会简单的选择结构程序设计 第1页/共33页4.1 关系运算符与关系表达式 4.1.1 关系运算符 关系运算符、=、=、bb)c等价于a!=(bc)第2页/共33页4.1 关系运算符与关系表达式关系表达式aba+1!=b3.1415=3.1416 34=100 a99 第3页/共33页4.2 逻辑运算符与逻辑表达式 4.2.1 逻辑运算符 逻辑运算符!(逻辑非)、&(逻辑与)、|(逻辑或)第4页/共33页4.2 逻辑运算符与逻辑表达式优先级 逻辑或运算符(|)逻辑与运算
2、符(&)关系运算符双目算术运算符(+、-、*、/、%等)逻辑非运算符(!)、单目算术运算符(+、-等)结合性 非运算符(!)的结合性为右结合;与运算符(&)和或运算符(|)的结合性为左结合。第5页/共33页【例4-1】分析下面程序段的运行结果#include void main()char c;int a,b;c=A;a=1;b=2;printf(cB=%dn,cB);printf(ab2=%dn,ab2);第6页/共33页逻辑运算符的“短路”现象 若&运算符左边的表达式为假(或0),则其右边的表达式将不再运算,整个表达式的值必然为假若|运算符左边的表达式为真(或非0值),则其右边的表达式将不
3、再运算,整个表达式的值必然为真 35|+b 第7页/共33页【例4-2】测试短路现象#include void main()int a,b;a=b=0;a|+b;printf(%d,%dn,a,b);a=b=1;a|+b;printf(%d,%dn,a,b);a=b=0;a&+b;printf(%d,%dn,a,b);a=b=1;a&+b;printf(%d,%dn,a,b);第8页/共33页*【例4-3】测试短路现象#include int show(int n,int a)printf(%d,%d),n,a);return a;void main()int a;a=show(1,1)|sh
4、ow(2,2)&show(3,3);printf(a=%dn,a);a=show(1,0)|show(2,0)&show(3,1);printf(a=%dn,a);a=show(1,0)|show(2,1)&show(3,2);printf(a=%dn,a);第9页/共33页4.3 if语句 4.3.1 单分支if语句 if(表达式)语句;【例4-4】从键盘输入一个整数,判断是否是偶数,若是,则输出“Yes”。#include void main()int a;printf(Please input a:);scanf(%d,&a);if(a%2=0)printf(Yesn);第10页/共33
5、页4.3 if语句4.3.2 双分支if语句形式为:if(表达式)语句1;else 语句2;第11页/共33页【例4-5】从键盘输入一个整数,判断是否是偶数,若是,则输出“Yes”,否则输出“No”#include void main()int a;printf(Please input a:);scanf(%d,&a);if(a%2=0)printf(Yesn);elseprintf(Non);第12页/共33页【例4-6】从键盘输入两个整数,输出其中最大者#include void main()int a,b;printf(Please input a,b:);scanf(%d,%d,&a
6、,&b);if(ab)printf(max=%dn,a);elseprintf(max=%dn,b);第13页/共33页4.3.3 多分支选择结构 多分支选择结构的if语句一般形式为:if(表达式1)语句1;else if(表达式2)语句2;else if(表达式n)语句n;else 语句n+1;第14页/共33页【例4-7】输入出租车类型和里程,计算打车的费用。计算方式为:3公里以内8元;3公里以上0车型每公里1.5元,1车型每公里2元。#include void main()int taxiType;float s;float money;printf(Input taxi type(0,
7、1):);scanf(%d,&taxiType);printf(Input s:);scanf(%f,&s);if(s y)max=x;else max=y;max=xy?x:y 优先级 右结合性:ab?a:cd?c:d 等价于 ab?a:(cd?c:d)第18页/共33页【例4-9】用条件运算符输出3个整数中的最大者#include void main()int a,b,c,max;printf(input a,b,c:);scanf(%d,%d,%d,&a,&b,&c);max=ab?a:b;max=cmax?c:max;printf(max=%dn,max);第19页/共33页4.4 s
8、witch语句 switch(表达式)case常量表达式1:语句1;case常量表达式2:语句2;case常量表达式n:语句n;default:语句n+1;第20页/共33页【例4-10】输入一个十进制数,根据输入的数输出所对应的英文星期单词,若所输入的数小于1或大于7,则输出“Error”。#include void main()int a;printf(Input a:);scanf(%d,&a);switch(a)case 1:printf(Mondayn);case 2:printf(Tuesdayn);case 3:printf(Wednesdayn);case 4:printf(T
9、hursdayn);case 5:printf(Fridayn);case 6:printf(Saturdayn);case 7:printf(Sundayn);default:printf(Errorn);第21页/共33页4.4 switch语句switch(表达式)case常量表达式1:语句1;break;case常量表达式2:语句2;break;case常量表达式n:语句n;break;default:语句n+1;第22页/共33页修改后的例4-10程序#include void main()int a;printf(Input a:);scanf(%d,&a);switch(a)ca
10、se 1:printf(Mondayn);break;case 2:printf(Tuesdayn);break;case 3:printf(Wednesdayn);break;case 4:printf(Thursdayn);break;case 5:printf(Fridayn);break;case 6:printf(Saturdayn);break;case 7:printf(Sundayn);break;default:printf(Errorn);break;第23页/共33页【注意】switch后跟的“表达式”允许为任何类型的表达式,其数据类型和case后面的常量表达式的数据类型
11、一致。每一个case后的各常量表达式的值不允许重复,否则会报错。每一个case后允许有多条语句,可以不用花括号“”括起来。case和default子句出现的先后顺序可以变动,不会影响程序的执行结果。default子句也可以省略不用。多个case可以共用一组执行语句。例如:case A:case B:case C:printf(Passn);break;第24页/共33页4.5 程序举例【例4-11】输入一个100以内的十进制正整数,判断该数是否包含数字字符“6”。若是输出“Yes!”,否则输出“No!”。#include void main()int a;printf(Input a:);sc
12、anf(%d,&a);if(a=6|(a%10=6|a/10=6)printf(Yes!n);elseprintf(No!n);第25页/共33页【例4-12】输入3个数,按从小到大的顺序输出。#include stdio.hvoid main()int a,b,c,t;printf(Input a,b,c:);scanf(%d,%d,%d,&a,&b,&c);if(ab)t=a;a=b;b=t;if(bc)t=b;b=c;c=t;if(ab)t=a;a=b;b=t;printf(%d=%d=%dn,a,b,c);第26页/共33页【例4-13】将一个百分制的成绩(设是整数)转化成5个等级90
13、分以上为A,8089分为B,7079分为C,6069分为D,60分以下为E。例如,输入75,则显示C。【分析】先判断输入的数据是否在合理的分数范围(0100)内,然后再判断是哪个分数段:90分以上输出A,8089分输出B,7079分输出C,6069分输出D,否则显示E。第27页/共33页【例4-13】将一个百分制的成绩(设是整数)转化成5个等级#include void main()int a;printf(Input a:);scanf(%d,&a);if(a100)printf(Input data errorn);elseif(a=90)printf(An);else if(a=80)p
14、rintf(Bn);else if(a=70)printf(Cn);else if(a=60)printf(Dn);else printf(En);第28页/共33页【分析】使用switch语句,当然最笨的办法是每一个分数一个case分支,将需要101个分支,显然这种程序不值得推荐。那么有没有简化的办法呢?其实,任何好的算法都是对问题分析和提炼的结果。题目中60分以上都是每10分一个层次,60分以下是一个层次。只要把每个层次的共性找到就容易找到简化程序的办法了。以6069为例。每个分数的十位数都是6,对于该层次的成绩,整除10的结果都是6。同样对于7079、8089、9099都是一样。而69分
15、以下的成绩整除10的结果都小于6。第29页/共33页【例4-13】将一个百分制的成绩(设是整数)转化成5个等级(用switch语句完成)#include void main()int a;printf(Input a:);scanf(%d,&a);if(a100)printf(Input data errorn);elseswitch(a/10)case 10:case 9:printf(An);break;case 8:printf(Bn);break;case 7:printf(Cn);break;case 6:printf(Dn);break;default:printf(En);第30
16、页/共33页根据某种条件的成立与否而采用不同的程序段进行处理的程序结构称为选择结构,也称为分支结构。选择结构体现了程序的逻辑判断能力。对于条件的判断,C语言采用逻辑值1和0分别表示真和假。产生这种逻辑值的表达式是关系表达式和逻辑表达式。二者可以统称条件表达式。C语言采用if语句和switch语句描述选择结构。if语句可分为单分支、双分支和多分支。一般采用if语句实现简单的分支结构程序。switch语句和break语句配合可以实现多分支结构程序。嵌套的if语句和siwtch语句都能设计完成多分支的程序,二者各有特色。对于条件具备规律性的问题,采用switch语句效率更好,可读性也更好。第31页/共33页下面程序的输出结果是:#include main()int x=1,a=0,b=0;switch(x)case 0:b+;case 1:a+;case 2:a+;b+;printf(a=%d,b=%dn,a,b);设计一个简单的计算器程序,用户输入运算数和四则运算符(+、-、*、/),输出计算的结果。编写程序,从键盘输入学生成绩,输出对应的等级(100分为A,9099分为B,8089分为C,7079分为D,6069分为E,小于60分为F)。第32页/共33页感谢您的观看!第33页/共33页