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

下载本文档

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

文档简介

第四章选择结构程序设计学习目的:掌握关系运算符和逻辑运算符的运算规则及优先级关系

掌握条件语句的语句格式和执行顺序学会进行选择结构程序设计重点难点:条件语句的嵌套选择结构程序的分析方法和设计方法

4.1关系运算符和关系表达式关系运算符

<<=>>=(优先级相同)高

==!=(优先级相同)低

算术运算符(高)关系运算符赋值运算符(低)例:

c>a+bc>b==aa==b<ca=b>c关系表达式概念:由关系运算符将两个表达式连接起来的式子如:d+a>b+c(a>b)>(c>d)

关系表达式的值真以1代表

假以0代表例:当a=3,b=2,c=1求f=a>b>c的值当a=5,b=4,c=2求a>b!=c的值4.2逻辑运算符和逻辑表达式逻辑运算符

&&(逻辑与)||(逻辑或)!(逻辑非)逻辑运算符的运算规则优先级:!&&||(高)

>(低)

!(高)算术运算符关系运算符

&&和||赋值运算符(低)例(a>b)&&(x>y)(a==b)&&(x<y)!a||(a>b)逻辑表达式逻辑运算结果逻辑值:真(1)假(0)运算量的判断:假(0)真(非0)例:a=6,b=4,c=2,

求表达式!(a-b)+c-1&&b+c/2的值

4.3if语句if语句的三种形式形式一格式:

if(expression)statement

执行过程:exprstatement非0=0例:if(x>y)

printf(“%d”,x);形式二

格式:if(expression)statement1elsestatement2执行过程::exprstatement1statement2非0=0例:if(x>y)max=x;elsemax=y;形式三:格式:执行过程:if(expr1)statement1elseif(expr2)statement2elseif(expr3)statement3…...elseif(exprm)statementm

elsestatementnexpr1statemnt1非0=0expr2expr3statemntnstatemnt3statemnt2非0非0=0=0例:if(salary>1000)index=0.4;elseif(salary>800)index=0.3;elseif(salary>600)index=0.2;elseif(salary>400)index=0.1;elseindex=0;说明:if后面的表达式类型任意语句可以是复合语句

if(x)if(x!=0)if(!x)if(x==0)如:if(a==b&&x==y)printf(“a=b,x=y”);if(3)printf(“OK”);if(‘a’)printf(“%d”,’a’);例考虑下面程序的输出结果:#include<stdio.h>main(){intx,y;

scanf(“%d,%d”,&x,&y);if(x>y)x=y;y=x;elsex++;y++;

printf(“%d,%d\n”,x,y);}CompileError!例:求一个数的绝对值#include<stdio.h>main(){intx,y;

printf("Enteraninteger:");

scanf("%d",&x);y=x;

if(y<0)y=-y;

printf("\ninteger:%d--->absolutevalue:%d\n",x,y);}运行:Enteraninteger:-12integer:-12--->absolutevalue:12

比较两个数,求其中的大者

main(){inta,b;

printf("Enterintegera:");

scanf("%d",&a);

printf("Enterintegerb:");

scanf("%d",&b);

if(a>b)

printf(“themaxnumberis:%d”,a);else

printf(“themaxnumberis:%d”,b);}求y=x(x+2)2<x<=102x-1<x<=2x-1x<=-1main(){intx,y;scanf(“%d”,&x);If(x>2&&x<=10)y=x*(x+2);elseif(x>-1&&x<=2)y=2*x;elseif(x<=-1)y=x-1;elsey=-1;If(y!=-1)printf(“%d”,y);elseprintf(“error”);}4.4If语句的嵌套if(expr1)if(expr2)statement1elsestatement2内嵌ifif(expr1)if(expr2)statement1elsestatement3

内嵌ifif(expr1)statement1elseif(expr3)statement3elsestatement4内嵌ifif(expr1)if(expr2)statement1elsestatement2elseif(expr3)statement3elsestatement4内嵌if内嵌if注:if~else配对原则:缺省{}时,else总是和它上面离它最近的未配对的if配对if(……)if(……)if(……)else…...else…...else…...结果:-1main(){inta=2,b=3,c;c=a;if(a>b)c=1;elseif(a==b)c=0;elsec=-1;

printf(“%d”,c);}对函数y=-1(x<0)0(x=0)1(x>0)编程序,输入x的值,输出y的值程序1:程序2:main(){intx,y;

scanf(“%d”,&x);if(x<0)y=-1;elseif(x==0)y=0;elsey=1;printf(“x=%d,y=%d\n”,x,y);}main(){intx,y;

scanf(“%d”,&x);if(x>=0)if(x>0)y=1;elsey=0;elsey=-1;printf(“x=%d,y=%d\n”,x,y);}程序3:程序4:main(){intx,y;

scanf(“%d”,&x);y=-1;if(x!=0)if(x>0)y=1;elsey=0;

printf(“x=%d,y=%d\n”,x,y);}main(){intx,y;

scanf(“%d”,&x);y=0;if(x>=0)if(x>0)y=1;elsey=-1;

printf(“x=%d,y=%d\n”,x,y);}读程序写结果main(){inta=1,b=3,c=5,d=4;if(a<b)if(c<d)x=1;elseif(a<c)if(b<d)x=2;elsex=3;elsex=6;elsex=7;printf(“x=%d”,x);}结果:x=24.5switch语句(开关分支语句)一般形式:

switch(表达式){caseE1:语句组1;break;caseE2:语句组2;break;…….caseEn:语句组n;break;[default:语句组n+1;]}switch表达式语句组1语句组2语句组n语句组…...E1E2Endefaultcase说明:E1,E2,…En是常量表达式,且值必须互不相同语句标号作用,必须用break跳出case后可包含多个可执行语句,且不必加{}switch可嵌套多个case可共用一组执行语句如:……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!例

main(){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;}}4.6条件运算符一般格式表达式1?表达式2:表达式3

说明:执行顺序优先级结合方向表达式的类型例:设intx=1,y=0;x-->(y+x)?10:12.5>y++?‘A’:‘Z’例:intx=0,y=1;x++*x--!=‘y’?8-4:y

4.7程序举例:例1写一个程序,判断某一年是否闰年Year被4整除Year被100整除Year被400整除YLeap=1NLeap=0YNLeap=1YNleap=0YN输出闰年输出非闰年leapmain(){intyear,leap;

scanf(“%d”,&year);if(year%4==0){if(year%100==0){if(year%400==0)leap=1;elseleap=0;}elseleap=1;}elseleap=0;if(leap)

printf(“%dis”,year);else

printf(“%disnot“,year);printf(“aleapyear.\n”);}程序:例2:求ax2+bx+c=0方程式的根main(){floata,b,c,disc,x1,x2,real,imag;else

scanf(“%f,%f,%f”,&a,&b,&c);{real=-b/(2*a);

printf(“theequation”);imag=sqrt(-disc)/(2*a);

if(fabs(a)<=1e-6)printf(“hascomplexroot:\n);

printf(“isnotaquadratic\n”);printf(%8.4f+%8.4fi\n,real,imag);

elseprintf(%8.4f-%8.4fi\n”,real,imag);disc=b*b-4*a*c;}}

if(fabs(disc)<=1e-6)

printf(“hastwoequalroots:%8.4f\n”,-b/(2*a));elseif(disc>1e-6){x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);

pr

温馨提示

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

评论

0/150

提交评论