单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,*,*,第,4.4,节 选择控制程序设计,你知道计算机中各种密码验证如何实现吗?,你是根据什么选择?设置一个条件,条件如何表示?,本卷须知:,C 语言中混合运算要特别小心运算符号的优先级和结合律。,C语言所有表达式都有一个值,要区别表达式和表达式的值。,4.4.1,关系运算和逻辑运算,目标:,一、关系运算符号有哪些?它们的结合律是什么?,二、关系表达式如何构成?,三、关系表达式的值有什么?,四、关系运算的优先级怎么规定?,五、逻辑运算符号有哪些?,六、逻辑表达式如何构成?,七、逻辑表达式的值有什么?,八、,逻辑真值表,九、逻辑运算的优先级怎么规定?,4.1.1 关系和逻辑运算,一、关系符号及关系表达式,比较两个量x,y之间的关系式子叫关系表达式,x y x y x=y x!=y,比较的结果,关系表达式的值:,31 真,13 假,例题:,int x=2,y=6;,x=(y 3)X=y3;,x=(x y),1,0,x=1,x=0,例4-7 用关系表达式表示以下条件或解释关系表达式的意义。,(1)变量x的值是零;x=0,(2)变量x的值不等于零;x!=0,(3)字符变量ch在字母A的后面;chA,(4)字符变量ch在字母Z的前面;cha+b,等价于ca+b;关系运算符的优先级低于算术运算符。,(6)ab=c,等价于(ab)=c ;“优先级高于“=。,(7)a=bc,等价于a=(bc);关系运算符的优先级高于赋值运算符。,说明:,(1)字母比较大小是按照它们对应ASCII码值的大小比进行比较,实质表示字母在ASCII表的前后顺序。,(2)建议不要写容易引起混淆的关系式子,尽量用把先关量括起来。,关系运算符的优先级,运算符优先级:,算术运算符,高,=,=!=,=,低,结合率很重要,例子:,d=b+2=3,d=(b+2)=3),b-1=a!=c,(b 1)=a)!=c,练习:,1.假设:X=8 那么:x=10 (?),2.假设:X=10 那么:x=0,(2)英文小写字母,即:(ch=a)其中ch是字符变量。,(3)英文字母,即:(ch=a)其中ch是字符变量。,(4)20岁以下的女生,即:g=0&a=20;其中用g=0表示女生,a表示年龄的变量。,(5)20岁以下的男生,即:g=1&a=20;其中用g=1表示男生,a表示年龄的变量。,(6)换行,即:ch=n,其中ch是字符变量。,(7)空格,即:ch=;或者ch=32,其中ch是字符变量。,生活中的例子:,3 x 3,并且,x 5,c,语言表达式:3,x&x=,=,!=,&,|,=,运算符的优先级,设,x=1,y=2,c=0,x=y=c&!x+2 3,(,x=y=c,),&,(,!x+2 3,),(,x=y,),=c,),&,(,!x+2,),3,),(,x=y,),=c,),&,(,!x,),+2,),3,),练习,1.!x,与,x!=,的区别?,2.,思考题:如何表示既不等于,又不等于,3,。,(x!=2)|(x!=3)?,(x!=2&x!=3)?(!(x=2|x=3),3.Int n ;(n%2=0),为真是什么意思?,4.,所有小写字母如何表示?,5.,所有大写字母如何表示?,6.char ch;ch,是空格字符如何表示,ch,是回车符,.,ch=040,真,ch=n,真,7.,一个字符串的结束:,ch=0,真,8.,如何表示,0 xb?a:b,那么max的值为20。,if,语句,一、if 语句的功能逻辑执行顺序,二、if 语句语句的三种书写格式及对应流程图重点,三、什么是if 子句,四、if 语句嵌套难点,实际例子:红绿灯选择?横穿马路条件?多岔路?,4.4.2-1 if,选择控制设计,if(,条件,),A;,意义和用途:如果条件真那么执行A段代码,否那么跳过A段代码,执行A段后,的代码。,图,4-10 if,选择结构,真,A,条件,例4-9 把编写程序,把用户输入的小写字母转换成大写字母并输出显示出来,如输入其他字符那么不发生变化。,#include,#inlcude,main(),char chx,chd;/*分别存储要处理小写和大写字母*/,clrscr();,printf(n请输入一个小写字母:);/*提示用户输入*/,chx=getchar();/*通过getchar()获取用户输入的字母*/,if(chx=a)&(chx0,y=,x,2,x0),y=x+2;,else,y=x*x;,补充练习:,问题:1编写一个程序让计算机随即产生一个整型数,用户再从键盘上输入一个整数,,如果与随机数相同那么打印*Right!*。,2如果相等打印*Right!*,否那么打印*Wrong!*,分析:产生一个随机数的函数是:rand;/#include,键盘上输入数scanf,#include,#include,main(),int x;/biaoshi suijishu,int y;/yonghu shuru de shu,x=rand(1);,printf(“qingshuruyigezhengxing shun);,scanf(“%d,if(x=y),printf(“*Right!*n);,else,printf(“*Wrong!*n);,return 0;,例4-11 从键盘上输入一个非0整数,如果是偶数那么打印“你输入的数是偶数!,否那么打印“你输入的数是奇数!。,主要代码如下:,int n;,printf(“n请输入一个非0整型数);,scanf(“%d,if(n%2=0)/*判断n是否为整数*/,printf(“n你输入的整数是偶数:%d,n);,else,printf(“n你输入的整数是奇数:%d,n);,练习:从键盘上输入一个整数,如果是偶数那么显示这个数是偶数,否那么显示这个数是奇数。,算法分析:,1、用到一个整数变量不同输入不同量;,2、从键盘上交互输入;别忘记提示用户,3、判断该数;,4、各显示不同的话;,源程序:,#include,main()int n;printf(“Please enter a integern);,scanf(“%d,If(n%2=0)printf(“this is a even.n),else printf(“this is a oddn);/else 后是否需要条件式子?,语言描述:,1、int n;,2、printf(“Please input a integer);,scanf(“%d,3、if-else;,4、printf(“xxxxn);,2,、,if else if-else,语句,3.else if,结构,if(,条件一,),statement_1,else if(,条件二,),statement_2,else if(,条件,),statement_n-1,else,statement_n,条件一,语句一,1,条件二,语句二,条件三,语句三,语句,n,Y,N,Y,N,N,Y,满足那个条件执行对应语句,只执行第一个满足条件的子语句,并且执行一次。,当所有条件都不满足是执行 最后的语句,statement-n.,例4-12 用if-else if-else 结构实现本节开始提出的成绩输出。,#include,main(),float cj;/*cj用来存储一个成绩*/,printf(“请输入成绩);,scanf(“%f,if(x=90)printf(“A n);,else if(x=80)printf(“B n);,else if(x=70)printf(“C n);,else if(x=60)printf(“D n);,else printf(“F n);,如果if后的语句多余两条那么用 括起来。,例题:从键盘上如数一个整数,如果是大于零那么屏幕上显示你输入的数是正数;如果是零那么显示“你输入的数是零;否那么显示你输入的数是负数。,算法分析:,1、用到一个整数变量不同输入不同量;,2、从键盘上交互输入;别忘记提示用户,3、三次判断该数;,4、各显示不同的话;,语言描述:,1、int n;,2、printf(“Please input a integer);,scanf(“%d,3、if-else if -else;,4、printf(“xxxxn);,源程序:,#include,main()if(n0)printf(“xxxxn);else if(n=0)printf(“xxn),else printf(“this is a minus numbern),4 嵌套的if语句(省略,2、,嵌套的,if else,结构,if(exp_1),if(exp_2)statement_1,else statement_2,else,if(exp_3,),statement_3,else statement_4,if(exp),statement1,else,statement2,if,语句,if,语句,嵌套的,if,语句,else,与,if,就近结合,完全包含不交叉。,if(),if(),else,.,.,else,输入变量,x,计算符号函数:,1,当,x0,y=0,当,x=0,-1,当,x=0),if(x0)y=1;,else y=0;,else y=-1;,x=0,x 0,y=1,y=0,非0,0,非0,y=-1,0,If(x0)y=1;,else y=0;,if(x0)y=1;,else if(x=0)y=0;,else y=-1;,if(x=0),if(x0)y=1;,else y=0;,else y=-1;,x=0,x 0,y=1,y=0,非0,0,非0,y=-1,0,0,x 0,x=0,y=1,y=0,非0,0,非0,y=-1,2种嵌套if语句的比较,5 switch,语句,功能:多种情况选择一个切入点开始运行。,switch表达式,case 常量表达式1:语句段1,case 常量表达式2:语句段2,.,case 常量表达式n:语句段n,default:语句段n+1,给多种情况设置一个开始点,从入口点执行到SWITCH完;表达式的值必须是整数或等同整数,常量表达式值必须是某个整数,正好是表达式的某个值;否那么无法实现目的。,、表达式:叫控制表达式,用来控制执行那一种情况。,、每一个常量表达式刚好是表达式的某个值。,、以上情况都不是时,default后的语句被执行。,、缺乏时不排它性。,表达式,e,图,4-15,复合句,1,复合句,2,复合句,n,复合句,n+1,若,e=c1,时,若,e=c2,时,若,e=cn,时,不等于任何,防止重复执行的改进,switch表达式,case 常量表达式1:语句段1;break;,case 常量表达式2:语句段2;break;,case 常量表达式n:语句段n;break;,default:语句段n+1,Switch case-break,结构运行流程:,表达式的值=常量表达式 2 的值,表达式,语句段1,语句段2,语句段,n,语句段,n+1,表达式,的值=,常量表达式 1,的值,表达式的值=常量表达式,n,的值,其他,作业:输入一个整数n,如果90=n100输入;,如果80=n90输入B;如果70=n80输入C;,如果60=n70输入D;如果n60输入F。,分析:用SWITCH x,如何把一段数转换成一个常数:n/10,case 的常量分别是什么?,switch(n/10),case 10:,case 9:printf(“An);break;,case 8:printf(“Bn);break;,例,void main(),char c;,printf(Please input a character:n);,c=getchar();,switch(c),case :,case n:,printf(This is a blank or enter);,break;