计算机第五章选择结构程序设计_第1页
计算机第五章选择结构程序设计_第2页
计算机第五章选择结构程序设计_第3页
计算机第五章选择结构程序设计_第4页
计算机第五章选择结构程序设计_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

第五章选择结构程序设计5.1关系运算符和关系表达式关系运算符用来比较两个数据的大小,运算的结果为成立或不成立。如果成立,那么结果为逻辑值“真〞,用整数“1〞表示;如果不成立,那么结果为逻辑值“假〞,用整数“0〞表示。运算符名称对象数运算规则结合性<<=>>===!=小于小于或等于大于大于或等于等于不等于双目满足则为真结果为1不满足为假结果为0自左向右优先级一、关系运算符及其优先级<<=>>===!=优先级相同(高)优先级相同(低)算术运算符优于关系运算符

优于

赋值运算符例:c>a+b ——c>(a+b)a>b!=c ——(a>b)!=ca==b<c ——a==(b<c)a=b>c ——a=(b>c)例 假设a=0;b=0.5;x=0.3;那么a<=x<=b的值为:例5>2>7>8在C中是允许的,值为:例inti=1,j=7,a;a=i+(j%4!=0);那么,a=例‘a’>0结果为:‘A’>100结果为:00210注意:防止对实数作相等或不等的判断;注意区分“=〞与“==〞的不同.二、关系表达式关系表达式是由关系运算符连接2个表达式构成的。它的一般形式为:

表达式关系运算符表达式 其中:表达式可以是算术表达式、关系表达式、逻辑表达式、赋值表达式。 例如:a=2,c=‘a’,f=3.0 a+2!=c-100 值为: (a>c)>=(f>4) 值为:115.2逻辑运算符和逻辑表达式一、逻辑运算符及其优先级逻辑运算符是用来对两个关系式或逻辑量进行逻辑运算的,运算结果仍是逻辑量,为逻辑值“真(1)〞或“假(0)〞。在C语言中,逻辑量是用数值非0和0来表示逻辑真和假的。逻辑运算符运算符名称对象数结合性&&||逻辑与逻辑或双目自左向右!逻辑非单目自右向左逻辑运算符运算规那么:aba&&ba||b!a假(0)假(0)真(1)真(1)假(0)真(1)假(0)真(1)假(0)假(0)假(0)真(1)假(0)真(1)真(1)真(1)真(1)真(1)假(0)假(0)逻辑运算符的优先级: ! 算术运算符 关系运算符 && ||二、逻辑表达式逻辑表达式是由逻辑运算符连接表达式构成的。它的一般形式为:表达式双目逻辑运算符表达式

单目逻辑运算符表达式其中表达式可以是算术表达式、关系表达式、赋值表达式、逗号表达式等。逻辑表达式以数值“1〞代表真,“0〞代表假;在判断一个数值时,其值为“0〞即为假,“非0〞即为真。例:a=2,c=‘a’,f=3.0,求逻辑表达式的值。 !(c-’a’) f/3&&a-c a<=c||f<=c !(1&&!a) (c>a)&&(f>4) !(1,2) !(c=‘A’) (1,2,3)&&(3,3,3)11111011三、逻辑运算的短路特性 逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。例a&&b&&c——只在a为真时,才判别b的值;

只在a、b都为真时,才判别c的值例a||b||c——只在a为假时,才判别b的值;

只在a、b都为假时,才判别c的值例a=1;b=2;c=3;d=4;m=1;n=1;(m=a>b)&&(n=c>d)结果:m=0,n=15.3if语句一、if语句的三种形式

形式一:

if(表达式)

语句;

if(表达式)语句;其中:表达式一般为关系表达式或逻辑表达式,也可以是其它的表达式。语句可以是单一语句或复合语句。exprstatement非0=0例:if(x>y)printf(“%d〞,x);

形式二:

if(表达式)

语句1;

else

语句2;语句1和语句2可以是单一语句或复合语句。exprstatement1statement2非0=0

例:if(x>y) max=x; elsemax=y;

形式三:

if(表达式1)语句1; elseif(表达式2)语句2; elseif(表达式3)语句3; …… elseif(表达式m)语句m; else语句n;expr1statemnt1非0=0expr2expr3statemntnstatemnt3statemnt2非0非0=0=0例:if(score>=90)grade=‘A’;elseif(score

>=80)grade

=‘B’;elseif(score

>=70)grade

=‘C’;elseif(score

>=60)grade

=‘D’;elsegrade

=‘F’;例: if(a==b&&x==y)printf(“a=b,x=y〞);if(3)printf(“OK〞);if(‘a’)printf(“%d〞,’a’);说明:①if后面的表达式类型任意

②语句可以是复合语句

③if(x)if(x!=0)if(!x)if(x==0)例: if(a>b)

{t=a;a=b;b=t;}[例]从键盘输入两个数,求出绝对值较大者并显示输出。 #include<stdio.h> #include<math.h> main() {inta,b,max;

printf(“Enter2numbers:〞);

scanf(“%d,%d〞,&a,&b);

if(abs(a)>abs(b))

max=a;

else

max=b;

printf(“Max(absolute)=%d\n〞,max);

}运行结果:

Enter2numbers:-78,23<CR>

Max(absolute)=-78[例]判断输入的字符是否是“Q〞或“q〞,假设是,显示Quit。 #include<stdio.h>

main()

{charc;

printf(“Enteracharacter:〞);

c=getchar();

if(c==‘Q’||c==‘q’)printf(“Quit!\n〞);

}运行结果:

Enteracharacter:Q<CR>

Quit! 1、将以下条件写成逻辑表达式

①m1-n1≤j≤m1+n1

②X<-5或X>5

③M和N之一为5,但不能同时为5

④-100<k<100,且K为偶数 2、输入两个数并判断两数是否相等,输出判断结果。 3、编制一个数制转换程序,要求能进行如下的数制转换:10进制转换为16进制

16进制转换为10进制

10进制转换为8进制

8进制转换为10进制课堂练习2、

#include<stdio.h> main() {inta,b; printf("Enterintegera:"); scanf("%d",&a); printf("Enterintegerb:"); scanf("%d",&b);

if(a==b) printf("a==b\n"); else printf("a!=b\n"); }运行结果:

Enterintegera:12Enterintegerb:12

a==b运行结果:

Enterintegera:12

Enterintegerb:9

a!=b3、#include<stdio.h> voidmain() { intch,a; printf(“\n1.DectoHex\n〞);

printf(“2.HextoDec\n〞);

printf(“3.DectoOct\n〞);

printf(“4.OcttoDec\n〞);

printf(“\nEnteryourchoice:〞);

scanf(“%d〞,&ch);

if(ch=1)

{printf(“\nEnteraninteger(Dec):〞);

scanf(“%d〞,&a);

printf(“Dec=%dHex=%x\n〞,a,a);

}

if(ch=2)

┆二、if语句的嵌套——if中又包含if。if(expr1)

if(expr2)statement1;

elsestatement2;else

if(expr3)statement3;

elsestatement4;内嵌if内嵌ifif(expr1)

if(expr2)statement1;

else

statement2;内嵌ifif(expr1)

if(expr2)statement1;elsestatement2;

内嵌ifif(expr1)statement1;else

if(expr3)statement3;

else

statement4;内嵌ifif~else配对原那么:else总是和它上面离它最近的未配对的if配对if(……)if(……)if(……)else…...else…...else…...当缺少某个分支else时,正确的配对方法:加{}例:if(a==b)if(b==c)printf(“a==b==c〞);elseprintf(“a!=b〞);修改:if(a==b){if(b==c)printf(“a==b==c〞);}elseprintf(“a!=b〞);[例]y= 编程序,输入一个x值,输出y值。 main()

{intx,y;

scanf(“%d〞,&x);

if(x<0)y=-1;

else if(x>0)y=1;

elsey=0;

printf(“x=%d,y=%d\n〞,x,y);

}-1(x<0)0(x=0)1(x>0)运行结果:

-5

x=-5,y=-1去掉else,分析运行结果运行结果:

-5

x=-5,y=0课堂练习 1、对学生的成绩进行分级:分数>=80是优良,分数低于60为不及格,其它为及格。{intscore;printf(“Enteranum:\n〞);scanf(“%d〞,&score);if(score>=80)printf(“Good!\n〞);elseif(score>=60)printf(“Passed!\n〞);elseprintf(“Failed!\n〞);}if(score<60)printf(“Failed!\n〞);elseif(score>=60)printf(“Passed!\n〞);elseprintf(“Good!\n〞);if(score<60)printf(“Failed!\n〞);elseif(score>=80)printf(“Good!\n〞);elseprintf(“Passed!\n〞);if(score>=60)if(score>=80) printf(“Good!\n〞);elseprintf(“Passed!\n〞);elseprintf(“Failed!\n〞);if(score>=80)if(score>=60) printf(“Passed!\n〞);elseprintf(“Good!\n〞);elseprintf(“Failed!\n〞);课堂练习 2、编程:输入一个数,判断该数是>0、<0,还是=0,输出判断结果。#include<stdrio.h>voidmain{intx;printf(“Inputyournumber:\n〞);scanf(“%d〞,&x);if(x>0)printf(“It’sapositive.\n〞);elseif(x<0)printf(“It’sanegative.\n〞);elseprintf(“It’sazore.\n〞);}三、条件运算符和条件表达式

if(a>b)max=a;if语句

elsemax=b;┊

max=(a>b)?a:b;条件表达式语句1.条件运算符及其优先级条件运算符是三目运算符,其三个运算对象都是表达式。运算符名称对象数运算规则结合性

?:

条件

三目对e1?e2:e3

e1为真,获得e2

e1为假,获得e3

自右向左条件运算符的优先级如下:其它运算符优于条件运算符

优于赋值运算符优于逗号运算符 例:设a,b,c均为2,那么

(a==b)?c=1:0 d=a+1==3?b=a+2:a+32.条件表达式条件表达式是由条件运算符连接表达式构成的。其一般形式为:表达式1?表达式2:表达式3例:设a=2,c=‘a’,f=3.0,求以下条件表达式的值。x=a>0?a:-ax=f==3.0?a<=c:a>=cx=!(a!=0)?!a:!!ax=(f>0)?((a>0)?2:1):((a>0)?1:0)x=(a>=0)?(a=1):(a=0)x=(c==‘A’)?(0,1):(1,0)2112105.4switch语句switch是C语言提供的一个多分支选择语句。switch语句比通过嵌套实现多分支选择的if语句更直观。

switch的一般格式如下:

switch(表达式){caseE1:语句组1;break;caseE2:语句组2;break;…….caseEn:语句组n;break;[default:语句组;break;]}

switch语句的控制流程是:首先计算表达式的值,然后依次与每一个case中的常量值进行比较,当发现与某个值匹配,就执行该case后面的语句,直到break为止。假设表达式的值与所有case中的常量值都不匹配,那么执行default后面的语句。switch表达式语句组1语句组2语句组n语句组…...E1E2Endefaultcase说明:①E1,E2,…En是常量表达式,且值必须互不相同②语句起标号作用,必须用break跳出③case后可包含多个可执行语句,且不必加{}④switch可嵌套⑤多个case可共用一组执行语句例:switch〔ch〕case‘A’:case‘B’:case‘C’:printf(“score>60\n〞);break;……..例:switch(score){case5:printf(“Verygood!〞);case4:printf(“Good!〞);case3:printf(“Pass!〞);case2:printf(“Fail!〞);default:printf(“dataerror!〞);}score为5时,输出:Verygood!Good!Pass!Fail!dataerror!例:voidmain(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){ case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;}printf(“\na=%d,b=%d〞,a,b);}运行结果:a=2,b=1#include<stdio.h>main(){intc;printf("Entermornorhorother:");c=getchar();switch(c){case'm':printf("\nGoodmorning!\n");break;case'n':printf("\nGoodnight!\n");break;case'h':printf("\nHello!\n");break;default:printf("\n????????\n");break;}}例:根据输入字母输出字符串[例]用switch语句实现菜单项选择择数据转换功能。#include<stdio.h>

main()

{intch,a;

printf(“\n1.DectoHex\n〞);

printf(“2.HextoDec\n〞);

printf(“3.DectoOct\n〞);

printf(“4.OcttoDec\n〞);

printf(“\nEnteryourchoice:〞);

scanf(“%d〞,&ch);

switch(ch)

{case1:printf(“\nEnteraninteger(Dec):〞);

scanf(“%d〞,&a);

printf(“Dec=%dHex=%x\n〞,a,a);

break;

case2:┆[例]输入一个字符,判断其是否是A(Abort)或R(Retry)或F(Fail),并输出相应信息。#include<stdio.h>main(){charc;printf(“Abort,Retry,Fail?〞);c=getchar();switch(c){case‘a’:case‘A’:printf(“Abort!\n〞);

break;case‘r’:

case‘R’:printf(“Retry!\n〞);

break;case‘f’:

case‘F’:printf(“Fail!\n〞);

break;default:

printf(“Erroneouscharacter!\n〞);

}

}运行结果: Abort,Retry,Fail?r<CR>

Retry!运行结果: Abort,Retry,Fail?e<CR>

Erroneouscharacter!5.5程序举例[例]写程序,判某一年是否是闰年。year%4?yea

温馨提示

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

评论

0/150

提交评论