政史地c语言 选择结构课件_第1页
政史地c语言 选择结构课件_第2页
政史地c语言 选择结构课件_第3页
政史地c语言 选择结构课件_第4页
政史地c语言 选择结构课件_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

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

文档简介

第4章选择结构程序设计

浙江传媒学院电子信息系C

程序设计1第4章选择结构程序设计浙江传媒学院电子信息系C程本章主要内容表达式关系表达式逻辑表达式条件表达式语句if语句多分支语句(switch)2本章主要内容表达式24.1关系运算符和关系表达式比较两个量(x,y)之间的关系x<yx<=yx==yx>yx>=yx!=y比较的结果:

3>1假

1>3

intx=2,y=6;x=(y>3)x=(x>y)10x=1x=034.1关系运算符和关系表达式比较两个量(x,y)之间关系表达式3<x<5x=1时x=4时(3<x)<5恒为14关系表达式3<x<544.2逻辑运算符和逻辑表达式3<x<5

035 xx>3并且

x<5

3<x&&x<5

逻辑表达式用逻辑运算符将关系表达式或逻辑量连接起来54.2逻辑运算符和逻辑表达式3<x<5逻辑表达式逻辑运算符

X&&YX||YX Y X Y

!X X与或非6逻辑运算符与或非6逻辑与

&&

逻辑或||逻辑非!(x>1)&&(y>1)(x>1)||(y>1)(x>1) !(x>1)即x<=1逻辑运算符7逻辑与&&逻辑或||逻辑表达式对于X&&Y,X和Y可以是:关系表达式或逻辑量x<=5&&x>=33&&5(x+y)&&7X,Y可以是任意表达式判断逻辑量的真假非0表示真0表示假逻辑运算的结果1表示真0表示假8逻辑表达式对于X&&Y,X和Y可以是:X,Y可以是任4.3if语句4.3.1if语句的三种形式语句一般格式1.if(表达式)

语句功能:计算表达式的值,如果是一个非0值(即逻辑真),就执行内嵌语句,否则(即逻辑假)跳过内嵌语句,顺序执行后续语句。内嵌语句,可为:赋值语句函数调用语句控制语句复合语句空语句可为算术、关系、逻辑、赋值等表达式94.3if语句4.3.1if语句的三种形式功能:内嵌语句if语句的算法:例如:⑴if(x>0)m++;⑵if(a>b){c=a;a=b;b=c;}

表达式非0

TF

语句N-S结构图语句流程图NY表达式非0?10if语句的算法:例如:表达式非0N-S结构图语2.

if(表达式)

语句1

else语句2语句一般格式if(表达式)

语句1

else语句2

功能:计算表达式的值,如果它的值是一个非0值(逻辑真),就执行内嵌语句1,之后跳过内嵌语句2,执行后续语句;否则跳过内嵌语句1,执行内嵌语句2,之后执行后续语句。

112.if(表达式)语句1else语句2语句语句的算法:例如:⑴if(x>0)m++;elsem--;⑵if(ch>='a'&&ch<='z')

{ch=ch-32;

printf("%c\n",ch);}elseprintf("%c\n",ch);

表达式非0

TF

语句1语句2N-S结构图语句1

语句2流程图NY表达式非0?12语句的算法:例如:表达式非0N-S结构图语句1多重分支语句语句一般格式if(表达式1)

语句1

elseif(表达式2)

语句2

……elseif(表达式m)

语句m

else语句

n功能:依次计算并判断表达式i,为非0时执行后面的语句,都为0时,执行语句n无论执行完那个语句分支,都转到后续语句13多重分支语句语句一般格式13多重分支语句的算法流程图表达式2?表达式1?语句n语句1

语句2

语句m…YNYNNY表达式m?14多重分支语句的算法流程图表达式2?表达式1?语句n语句1多重分支语句的算法N-S结构图表达式1?

TF

表达式2?语句1TF

语句2…

表达式m?TF

语句m语句n例如:if(a<0)x=-1;elseif(a==0)x=0;elsex=1;15多重分支语句的算法N-S结构图表达式1?4.3.2if语句的嵌套如果if的内嵌语句中又使用了一个if语句,则构成if语句的嵌套。

【例】比较两个整数的关系。#include<stdio.h>main(){intx,y;printf("EnterintegerXandY:");scanf("%d%d",&x,&y);

if(x!=y)

if(x>y)printf("X>Y\n");

elseprintf("X<Y\n");

elseprintf("X=Y\n");}应该正确判断:if的内嵌语句if和else的配对运行jc4_a提倡缩格书写有利于阅读程序164.3.2if语句的嵌套如果if的内嵌语句中又使用了一个

if语句嵌套的形式简单if语句的嵌套形式if(表达式)if语句双重(或多重)分支if语句的嵌套形式if(表达式)if语句else

if语句可以是各种形式的if语句可以是各种形式的if语句如果是简单if语句,必须用“{}”括起17if语句嵌套的形式简单if语句的嵌套形式可以是各种形式的例如:⑴if(c<=100)

if(c>=50)printf("50<=c<=100\n");⑵if(c<=100)if(c>=50)printf("50<=c<=100\n");elseprintf("c<50\n");else

if(c<=150)printf("100<c<=150\n");elseprintf("c>150\n");⑶if(c<=100)if(c>=50)printf("50<=c<=100\n");elseprintf("c<50\n")与哪个if配对?18例如:⑴if(c<=100)与哪个if配对?18再例如:if(a>b) if(a>c) if(a>d)m=1;elsem=2;elsem=3; 问题:哪一个else和哪一个if相匹配?规则:在嵌套的if~else语句中,else总是与上面的离它最近的尚未配对的if

配对。19再例如:if(a>b) 问题:哪一个else程序:main(){intx;scanf("%d",&x);

if(x%2!=0)

{printf("%disanodd\n",x);

if(x%5==0)printf("%disthetimesof5\n",x);

}

elseprintf("%disaneven\n",x);}运行jc4_4思考:如果没有,算法和输出如何?20程序:main()运行jc4_4思考:如果没有,算法和输出学习if语句的难点if~else语句的配对正确用表达式描述条件例如:当x大于5小于10时令x自增if(5<x<10)x++;正确判断内嵌语句例如:if(x<y)x=x+3;y=y-2;elsex=x-3;y=y+2;if(x>5&&x<10)x++;{}{}21学习if语句的难点if~else语句的配对正确判断内嵌语熟悉常用的if表达式形式例如有定义:inta,b=0;a等于什么值时,执行b=2;语句?if(a==0)b=2;if(a==1)b=2;if(a!=0)b=2;if(a=1)b=2;if(a=0)b=2;if(a)b=2;if(!a)b=2;等价于等价于22熟悉常用的if表达式形式例如有定义:inta,b=0;等4.4条件运算符exp1?exp2:exp3非00exp1y=(x>0)?x+2:x*x;intn;(n>0)?2.9:1n=10n=-102.91.0x+2x>0y=

x2x<=0if(x>0)y=x+2;elsey=x*x;234.4条件运算符exp1?exp2:exp3非04.5switch语句switch语句的一般形式

switch(表达式){case常量表达式1:语句序列1case常量表达式2:语句序列2

……case常量表达式n:语句序列ndefault:语句序列n+1

}功能:计算表达式的值,与常量表达式的值比较,等于第i个值时,顺序执行语句序列i、i+1、…、n+1若与所有常量表达式值都不相等,执行语句序列n+1。

244.5switch语句switch语句的一般形式24switch语句的算法描述N-S结构图计算表达式常量表达式1语句序列1常量表达式2语句序列2…………常量表达式n语句序列ndefault语句序列n+1例如:switch(a){case5:printf("&");case2:printf("#");default:printf("$");}当a等于5,输出:&#$当a等于2,输出:#$当a是其他值,输出:$25switch语句的算法描述N-S结构图计算常量表达式1语句序说明:“case常量表达式i:”等价于语句标号,计算出的表达式值等于哪个语句标号,就从哪个位置开始顺序向下执行语句序列。∴语句位置影响运行结果例如:switch(a){case2:printf("#");default:printf("$");case5:printf("&");}switch与break语句结合才能实现程序的分支break;break;break;26说明:“case常量表达式i:”等价于语句标号,计算出的表4.6程序举例【例4.1】输入年份,判别该年是否为闰年。思路:年份year为闰年的条件为①

能够被4整除,但不能被100整除的年份;②

能够被400整除的年份。只要满足任意一个就可以确定它是闰年。例如:1996年、2000年是闰年1998年、1900年不是闰年设定标志变量leap,只要符合其中一个条件的就是闰年,令leap=1;否则令leap=0

274.6程序举例【例4.1】输入年份,判别该年是否为闰年。算法:定义变量year、leap

输入年份year

能被4整除且不能被100整除?

TF

能被400整除?

leap=1

TFleap=1leap=0leap=1?TF

是闰年不是闰年year%400==0year%4==0&&year%100!=028算法:定义变量year、leapyear%400==0yea程序:main(){intyear,leap;scanf("%d",&year);if(year%4==0&&year%100!=0)leap=1;elseif(year%400==0)leap=1;elseleap=0;if(leap==1)printf("%disaleapyear\n",year);elseprintf("%disnotaleapyear\n",year);}运行jc4_b29程序:main()运行jc4_b29【例4.2】求一元二次方程ax2+bx+c=0的根。

思路:一元二次方程的根取决于系数a,b,c求根公式:

判别式d=b2-4ac

d=0时,方程有两个相等的实根:x1=x2=-b/(2*a)当d>0时,方程有两个不相等的实根:x1=(-b+sqrt(d))/(2*a)x2=(-b-sqrt(d))/(2*a)

当d<0时,方程有两个虚根:x1=jp+ipix2=jp-ipi实部

jp=-b/(2*a)

虚部

ip=sqrt(-d)/(2*a)4.6程序举例30【例4.2】求一元二次方程ax2+bx+c=0的根。思路:算法:定义变量a、b、c、d、x1、x2、jp、ip输入系数a、b、ca==0TF

计算d=b*b-4*a*c

不是二d==0

次方程TFd>0

计算重根TF

输出重根计算实根计算虚根输出实根输出虚根31算法:定义变量a、b、c、d、x1、x2、jp、ip3程序:#include"math.h"main(){floata,b,c,d,x1,x2,lp,ip;

scanf("%f%f%f",&a,&b,&c);

printf("theequation");

if(fabs(a)<1e-6)printf("isnotquadratic");

else

{d=b*b-4*a*c;

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

/*相等的实根*/

{printf("hastwoequalroots:\n");

printf("x1=x2=%8.4f\n",-b/(2*a));

}32程序:#include"math.h"32程序(续):

elseif(d>1e-6)

/*不相等的实根*/

{x1=(-b+sqrt(d))/(2*a);

x2=(-b-sqrt(d))/(2*a);

printf("hastworealroots:\n");

printf("x1=%8.4f,x2=%8.4f\n",x1,x2);

}

else

/*虚根*/

{

lp=-b/(2*a);ip=sqrt(-d)/(2*a);

printf("hastwocomplexroots:\n");

printf("x1=%8.4f+%8.4fi\n",lp,ip);

printf("x2=%8.4f-%8.4fi\n",lp,ip);

}

}

}运行jc4_633程序(续):elseif(d>1e-6)第4章选择结构程序设计

浙江传媒学院电子信息系C

程序设计34第4章选择结构程序设计浙江传媒学院电子信息系C程本章主要内容表达式关系表达式逻辑表达式条件表达式语句if语句多分支语句(switch)35本章主要内容表达式24.1关系运算符和关系表达式比较两个量(x,y)之间的关系x<yx<=yx==yx>yx>=yx!=y比较的结果:

3>1假

1>3

intx=2,y=6;x=(y>3)x=(x>y)10x=1x=0364.1关系运算符和关系表达式比较两个量(x,y)之间关系表达式3<x<5x=1时x=4时(3<x)<5恒为137关系表达式3<x<544.2逻辑运算符和逻辑表达式3<x<5

035 xx>3并且

x<5

3<x&&x<5

逻辑表达式用逻辑运算符将关系表达式或逻辑量连接起来384.2逻辑运算符和逻辑表达式3<x<5逻辑表达式逻辑运算符

X&&YX||YX Y X Y

!X X与或非39逻辑运算符与或非6逻辑与

&&

逻辑或||逻辑非!(x>1)&&(y>1)(x>1)||(y>1)(x>1) !(x>1)即x<=1逻辑运算符40逻辑与&&逻辑或||逻辑表达式对于X&&Y,X和Y可以是:关系表达式或逻辑量x<=5&&x>=33&&5(x+y)&&7X,Y可以是任意表达式判断逻辑量的真假非0表示真0表示假逻辑运算的结果1表示真0表示假41逻辑表达式对于X&&Y,X和Y可以是:X,Y可以是任4.3if语句4.3.1if语句的三种形式语句一般格式1.if(表达式)

语句功能:计算表达式的值,如果是一个非0值(即逻辑真),就执行内嵌语句,否则(即逻辑假)跳过内嵌语句,顺序执行后续语句。内嵌语句,可为:赋值语句函数调用语句控制语句复合语句空语句可为算术、关系、逻辑、赋值等表达式424.3if语句4.3.1if语句的三种形式功能:内嵌语句if语句的算法:例如:⑴if(x>0)m++;⑵if(a>b){c=a;a=b;b=c;}

表达式非0

TF

语句N-S结构图语句流程图NY表达式非0?43if语句的算法:例如:表达式非0N-S结构图语2.

if(表达式)

语句1

else语句2语句一般格式if(表达式)

语句1

else语句2

功能:计算表达式的值,如果它的值是一个非0值(逻辑真),就执行内嵌语句1,之后跳过内嵌语句2,执行后续语句;否则跳过内嵌语句1,执行内嵌语句2,之后执行后续语句。

442.if(表达式)语句1else语句2语句语句的算法:例如:⑴if(x>0)m++;elsem--;⑵if(ch>='a'&&ch<='z')

{ch=ch-32;

printf("%c\n",ch);}elseprintf("%c\n",ch);

表达式非0

TF

语句1语句2N-S结构图语句1

语句2流程图NY表达式非0?45语句的算法:例如:表达式非0N-S结构图语句1多重分支语句语句一般格式if(表达式1)

语句1

elseif(表达式2)

语句2

……elseif(表达式m)

语句m

else语句

n功能:依次计算并判断表达式i,为非0时执行后面的语句,都为0时,执行语句n无论执行完那个语句分支,都转到后续语句46多重分支语句语句一般格式13多重分支语句的算法流程图表达式2?表达式1?语句n语句1

语句2

语句m…YNYNNY表达式m?47多重分支语句的算法流程图表达式2?表达式1?语句n语句1多重分支语句的算法N-S结构图表达式1?

TF

表达式2?语句1TF

语句2…

表达式m?TF

语句m语句n例如:if(a<0)x=-1;elseif(a==0)x=0;elsex=1;48多重分支语句的算法N-S结构图表达式1?4.3.2if语句的嵌套如果if的内嵌语句中又使用了一个if语句,则构成if语句的嵌套。

【例】比较两个整数的关系。#include<stdio.h>main(){intx,y;printf("EnterintegerXandY:");scanf("%d%d",&x,&y);

if(x!=y)

if(x>y)printf("X>Y\n");

elseprintf("X<Y\n");

elseprintf("X=Y\n");}应该正确判断:if的内嵌语句if和else的配对运行jc4_a提倡缩格书写有利于阅读程序494.3.2if语句的嵌套如果if的内嵌语句中又使用了一个

if语句嵌套的形式简单if语句的嵌套形式if(表达式)if语句双重(或多重)分支if语句的嵌套形式if(表达式)if语句else

if语句可以是各种形式的if语句可以是各种形式的if语句如果是简单if语句,必须用“{}”括起50if语句嵌套的形式简单if语句的嵌套形式可以是各种形式的例如:⑴if(c<=100)

if(c>=50)printf("50<=c<=100\n");⑵if(c<=100)if(c>=50)printf("50<=c<=100\n");elseprintf("c<50\n");else

if(c<=150)printf("100<c<=150\n");elseprintf("c>150\n");⑶if(c<=100)if(c>=50)printf("50<=c<=100\n");elseprintf("c<50\n")与哪个if配对?51例如:⑴if(c<=100)与哪个if配对?18再例如:if(a>b) if(a>c) if(a>d)m=1;elsem=2;elsem=3; 问题:哪一个else和哪一个if相匹配?规则:在嵌套的if~else语句中,else总是与上面的离它最近的尚未配对的if

配对。52再例如:if(a>b) 问题:哪一个else程序:main(){intx;scanf("%d",&x);

if(x%2!=0)

{printf("%disanodd\n",x);

if(x%5==0)printf("%disthetimesof5\n",x);

}

elseprintf("%disaneven\n",x);}运行jc4_4思考:如果没有,算法和输出如何?53程序:main()运行jc4_4思考:如果没有,算法和输出学习if语句的难点if~else语句的配对正确用表达式描述条件例如:当x大于5小于10时令x自增if(5<x<10)x++;正确判断内嵌语句例如:if(x<y)x=x+3;y=y-2;elsex=x-3;y=y+2;if(x>5&&x<10)x++;{}{}54学习if语句的难点if~else语句的配对正确判断内嵌语熟悉常用的if表达式形式例如有定义:inta,b=0;a等于什么值时,执行b=2;语句?if(a==0)b=2;if(a==1)b=2;if(a!=0)b=2;if(a=1)b=2;if(a=0)b=2;if(a)b=2;if(!a)b=2;等价于等价于55熟悉常用的if表达式形式例如有定义:inta,b=0;等4.4条件运算符exp1?exp2:exp3非00exp1y=(x>0)?x+2:x*x;intn;(n>0)?2.9:1n=10n=-102.91.0x+2x>0y=

x2x<=0if(x>0)y=x+2;elsey=x*x;564.4条件运算符exp1?exp2:exp3非04.5switch语句switch语句的一般形式

switch(表达式){case常量表达式1:语句序列1case常量表达式2:语句序列2

……case常量表达式n:语句序列ndefault:语句序列n+1

}功能:计算表达式的值,与常量表达式的值比较,等于第i个值时,顺序执行语句序列i、i+1、…、n+1若与所有常量表达式值都不相等,执行语句序列n+1。

574.5switch语句switch语句的一般形式24switch语句的算法描述N-S结构图计算表达式常量表达式1语句序列1常量表达式2语句序列2…………常量表达式n语句序列ndefault语句序列n+1例如:switch(a){case5:printf("&");case2:printf("#");default:printf("$");}当a等于5,输出:&#$当a等于2,输出:#$当a是其他值,输出:$58switch语句的算法描述N-S结构图计算常量表达式1语句序说明:“case常量表达式i:”等价于语句标号,计算出的表达式值等于哪个语句标号,就从哪个位置开始顺序向下执行语句序列。∴语句位置影响运行结果例如:switch(a){case2:printf("#");default:printf("$");case5:printf("&");}switch与break语句结合才能实现程序的分支break;break;break;59说明:“case常量表达式i:”等价于语句标号,计算出的表4.6程序举例【例4.1】输入年份,判别该年是否为闰年。思路:年份year为闰年的条件为①

能够被4整除,但不能被100整除的年份;②

能够被400整除的年份。只要满足任意一个就可以确定它是闰年。例如:1996年、2000年是闰年1998年、1900年不是闰年设定标志变量leap,只要符合其中一个条件的就是闰年,令leap=1;否则令leap=0

604.6程序举例【例4.1】输入年份,判别该年是否为闰年。算法:定义变量year、leap

输入年份year

能被4整除且不能被100整除?

TF

能被400整除?

leap=1

TFleap=1leap=0leap=1?TF

是闰年不是闰年year%400==0year%4==0&&year%100!=061算法:定义变量year、leapyear%400==0yea程序:main(){intyear,leap;scanf("%d",&year);if(year%4==0&&year%100!=0)leap=1;elseif(year%400==0)leap=1;elseleap=0;if(leap==1)printf("%disaleapyear\n",year);elseprintf("%disnotaleapyear\n",year);}运行jc4_b62程序:main()运行jc4_b29【例4.2】求一元二次方程ax2+bx+c=0的根。

思路:一元二次方程的根取决于系数a,b,c求根公式:

判别式d=b2-4ac

d=0时,

温馨提示

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

评论

0/150

提交评论