C语言-选择结构程序设计课件_第1页
C语言-选择结构程序设计课件_第2页
C语言-选择结构程序设计课件_第3页
C语言-选择结构程序设计课件_第4页
C语言-选择结构程序设计课件_第5页
已阅读5页,还剩215页未读 继续免费阅读

下载本文档

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

文档简介

第4章选择结构程序设计4.1选择结构和条件判断4.2用if语句实现选择结构4.3关系运算符和关系表达式4.4逻辑运算符和逻辑表达式4.5条件运算符和条件表达式4.6用switch语句实现多分支选择结构4.7选择结构程序综合举例1第4章选择结构程序设计4.1选择结构和条件判断1标题添加点击此处输入相关文本内容点击此处输入相关文本内容前言点击此处输入相关文本内容标题添加点击此处输入相关文本内容2标题添加点击此处输入相点击此处输入前言点击此处输入标题添加点主要内容:关系运算符和关系表达式逻辑运算符和逻辑表达式if语句switch语句学习目标:掌握关系运算、逻辑运算和C语言条件语句的使用重点if语句、switch语句的使用难点if语句的嵌套

第4章选择结构程序设计3主要内容:学习目标:掌握关系运算、逻辑运算和C语言条第4章4.1选择结构和条件判断在现实生活中,需要进行判断和选择的情况是很多的如果你在家,我去拜访你如果考试不及格,要补考如果遇到红灯,要停车等待周末我们去郊游70岁以上的老年人,入公园免票44.1选择结构和条件判断在现实生活中,需要进行判断和选择的4.1选择结构和条件判断在现实生活中,需要进行判断和选择的情况是很多的处理这些问题,关键在于进行条件判断由于程序处理问题的需要,在大多数程序中都会包含选择结构,在进行下一个操作之前先进行条件判断54.1选择结构和条件判断在现实生活中,需要进行判断和选择的4.1选择结构和条件判断C语言有两种选择语句:(1)if语句,实现两个分支的选择结构(2)switch语句,实现多分支的选择结构64.1选择结构和条件判断C语言有两种选择语句:64.1选择结构和条件判断

例4.1在例3.5的基础上对程序进行改进。题目要求是求

方程的根。

由键盘输入a,b,c。假设a,b,c的值任意,并不保证

。需要在程序中进行判别,如果

,就计算并输出方程的两个实根,否则就输出“方程无实根”的信息。

74.1选择结构和条件判断例4.1在例3.5的基础上对解题思路求x1、x2x1、x2endd>=0无实根yn开始d=b2-4aca,b,c开始求根:x1、x2x1、x2enda,b,cd=b2-4ac8解题思路求x1、x2x1、x2endd>=0无实根yn开始#include<stdio.h>#include<math.h>intmain(){doublea,b,c,disc,x1,x2,p,q;scanf("%lf%lf%lf",&a,&b,&c);disc=b*b-4*a*c;计算b2-4ac,disc的值变为-159#include<stdio.h>计算b2-4ac,dis

if(disc<0)

printf(“hasnotrealroots\n”);

else

{p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;printf(“realroots:\nx1=%7.2f\nx2=%7.2f\n”,x1,x2);}return0;}-15<0为真10if(disc<0)-15<0为真10#include<stdio.h>#include<math.h>intmain(){doublea,b,c,disc,x1,x2,p,q;scanf("%lf%lf%lf",&a,&b,&c);disc=b*b-4*a*c;计算b2-4ac,disc的值变为811#include<stdio.h>计算b2-4ac,dis

if(disc<0)printf(“hasnotrealroots\n”);

else

{p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;printf(“realroots:\nx1=%7.2f\nx2=%7.2f\n”,x1,x2);}return0;}8<0为假p的值变为-1q的值变为0.71x1的值变为-0.29x2的值变为-1.7112if(disc<0)8<0为假p的值变为-1q的值

if(disc<0)printf(“hasnotrealroots\n”);

else

{p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;printf(“realroots:\nx1=%7.2f\nx2=%7.2f\n”,x1,x2);}return0;}选择结构,用if语句实现的13if(disc<0)选择结构,用if语句实现的13

if(disc<0)printf(“hasnotrealroots\n”);

else

{p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;printf(“realroots:\nx1=%7.2f\nx2=%7.2f\n”,x1,x2);}return0;}复合语句14if(disc<0)复合语句144.2用if语句实现选择结构4.2.1用if语句处理选择结构举例4.2.2if语句的一般形式154.2用if语句实现选择结构4.2.1用if语句处理选择4.2.1用if语句处理选择结构举例

例4.2输入两个实数,按代数值由小到大的顺序输出这两个数。164.2.1用if语句处理选择结构举例例4.2输入两个解题思路:只需要做一次比较,然后进行一次交换即可用if语句实现条件判断关键是怎样实现两个变量值的互换★●AB互换前●★AB互换后4.2.1用if语句处理选择结构举例17解题思路:★●AB互换前●★AB互换后4.2.1用if语句★●ABC★4.2.1用if语句处理选择结构举例18★●ABC★4.2.1用if语句处理选择结构举例18★●ABC★●4.2.1用if语句处理选择结构举例19★●ABC★●4.2.1用if语句处理选择结构举例19ABC★●★4.2.1用if语句处理选择结构举例●20ABC★●★4.2.1用if语句处理选择结构举例●20#include<stdio.h>intmain(){floata,b,t;scanf("%f,%f",&a,&b);if(a>b){t=a;a=b;b=t;}printf("%5.2f,%5.2f\n",a,b);return0;}将a和b的值互换如果a>b21#include<stdio.h>将a和b的值互换如果a>#include<stdio.h>intmain(){floata,b,t;scanf("%f,%f",&a,&b);if(a>b){t=a;a=b;b=t;}printf("%5.2f,%5.2f\n",a,b);return0;}选择结构,用if语句实现的开始enda,bb>aa,bab非0022#include<stdio.h>选择结构,开始enda

例4.3输入3个数a,b,c,要求按由小到大的顺序输出。23例4.3输入3个数a,b,c,要求按由小到大的顺序输出解题思路:可以先用伪代码写出算法:ifa>b,a和b对换

(a是a、b中的小者)ifa>c,a和c对换

(a是三者中最小者)ifb>c,b和c对换

(b是三者中次小者)顺序输出a,b,c24解题思路:可以先用伪代码写出算法:24#include<stdio.h>intmain(){floata,b,c,t;scanf("%f,%f,%f",&a,&b,&c);

if(a>b){t=a;a=b;b=t;}

if(a>c){t=a;a=c;c=t;}

if(b>c){t=b;b=c;c=t;}printf("%5.2f,%5.2f,%5.2f\n",a,b,c);return0;}如果a>b,将a和b对换a是a、b中的小者25#include<stdio.h>如果a>b,将a和b对#include<stdio.h>intmain(){floata,b,c,t;scanf("%f,%f,%f",&a,&b,&c);

if(a>b){t=a;a=b;b=t;}

if(a>c){t=a;a=c;c=t;}

if(b>c){t=b;b=c;c=t;}printf("%5.2f,%5.2f,%5.2f\n",a,b,c);return0;}如果a>c,将a和c对换a是三者中的小者26#include<stdio.h>如果a>c,将a和c对#include<stdio.h>intmain(){floata,b,c,t;scanf("%f,%f,%f",&a,&b,&c);

if(a>b){t=a;a=b;b=t;}

if(a>c){t=a;a=c;c=t;}

if(b>c){t=b;b=c;c=t;}printf("%5.2f,%5.2f,%5.2f\n",a,b,c);return0;}如果b>c,将b和c对换b是三者中的次小者27#include<stdio.h>如果b>c,将b和c对4.2.2if语句的一般形式if(表达式)语句1[else语句2]关系表达式逻辑表达式数值表达式方括号内的部分为可选的284.2.2if语句的一般形式if(表达式)4.2.2if语句的一般形式if(表达式)语句1[else语句2]简单的语句复合语句另一个if语句等294.2.2if语句的一般形式if(表达式)最常用的3种if语句形式:1.if(表达式)语句1(没有else子句)2.if(表达式)语句1else语句2(有else子句)3.if(表达式1)

语句1elseif(表达式2)语句2elseif(表达式3)语句3

┆elseif(表达式m)语句melse语句m+1(在else部分又嵌套了多层的if语句)30最常用的3种if语句形式:30语句功能下条语句语句1语句2e非00格式1:if(e)语句计算

e

的值并判断。

e值非0,则执行语句;否则,执行下条语句。格式2:if(e)语句1

else语句2计算

e

的值并判断。

e

值非0,则执行语句1;否则,执行语句2。e语句非00下条语句31语句功能下条语句语句1语句2e非00格式1:if(e)语格式3:if(e)语句1elseif(e)语句2elseif(e)语句3…...elseif(e)语句melse语句n123m计算e1

的值并判断,其值非0执行语句1;否则,判断e2

的值,其值非0执行语句2;否则,判断e3

的值,其值非0执行语句3;否则,.…..判断em

的值,其值非0执行语句m;否则,执行语句n00e1e3eme2语句1语句3语句2语句m语句n

下条语句非0非0非0非000….32123m计算e1的值并判断,其值非0执行语句1;否则,判说明:1、if后面的表达式类型任意。如:

if(a==b&&x==y)printf(“a=b,x=y”);if(3)printf(“OK”);if(‘a’)printf(“%d”,’a’);2、else语句不能单独使用,与if配对。3、语句可以是复合语句4、if(x)if(x!=0)if(!x)if(x==0)33说明:33例:从键盘输入两个整型数,输出最大数。main(){inta,b;scanf(“%d,%d”,&a,&b);if(a>=b)printf(“max=%d\n”,a);if(b>a)printf(“max=%d\n”,b);}开始enda,ba>ba<bab非0非00034例:从键盘输入两个整型数,输出最大数。main()开始endmain(){inta,b;scanf(“%d,%d”,&a,&b);if(b>a)a=b;printf(“max=%d\n”,a);}开始enda,bb>aaa=b非00例:

从键盘输入两个整型数,输出最大数。35main()开始enda,bb>aaa=b非00例:从例:某运输公司吨公里基本运费为p,根据距离s的远近计费标准如下:

s<250km

没有折扣

250

s<500

2%折扣

500s<1000

5%折扣

1000s<2000

8%折扣

2000s<3000

10%折扣 3000s

15%折扣根据货物重量w和运距s,求运费f。36例:某运输公司吨公里基本运费为p,根据距离smain(){floatp,s,w,d,f;scanf(“%f%f%f”,&p,&s,&w);if(s>=3000)d=0.15;elseif(s>=2000)d=0.10;elseif(s>=1000)d=0.08;elseif(s>=500)d=0.05;elseif(s>=250)d=0.02;elsed=0.0;f=p*w*s*(1-d);printf(“f=%15.2f”,f);}37main()374.2.3选择结构的嵌套在if语句中又包含一个或多个if语句称为if语句的嵌套一般形式:if()if()语句1else语句2elseif()语句3else语句4内嵌ifelse总是与它上面最近的未配对的if配对384.2.3选择结构的嵌套在if语句中又包含一个或多个if语4.2.3选择结构的嵌套在if语句中又包含一个或多个if语句称为if语句的嵌套if(){

if()语句1}

else语句2内嵌if{}限定了内嵌if范围394.2.3选择结构的嵌套在if语句中又包含一个或多个if语4.2.3选择结构的嵌套

例4.5有一函数:

编一程序,输入一个x值,要求输出相应的y值。404.2.3选择结构的嵌套例4.5有一函数:404.2.3选择结构的嵌套解题思路:用if语句检查x的值,根据x的值决定赋予y的值由于y的可能值不是两个而是三个,因此不可能只用一个简单的(无内嵌if)的if语句来实现414.2.3选择结构的嵌套解题思路:414.2.3选择结构的嵌套解题思路:方法1(1)先后用3个独立的if语句处理:输入x若x<0,则y=-1若x=0,则y=0若x>0,则y=1输出x和yscanf("%d",&x);if(x<0)y=-1;if(x==0)y=0;if(x>0)y=1;printf("x=%d,y=%d\n",x,y);424.2.3选择结构的嵌套解题思路:方法1scanf("%d4.2.3选择结构的嵌套解题思路:方法2(2)用一个嵌套的if语句处理:输入x若x<0,则y=-1否则

若x=0,则y=0

否则y=1输出x和yscanf("%d",&x);if(x<0)y=-1;elseif(x==0)y=0;elsey=1;printf("x=%d,y=%d\n",x,y);434.2.3选择结构的嵌套解题思路:方法2scanf("%d4.2.3选择结构的嵌套解题思路:方法2(2)用一个嵌套的if语句处理:输入x若x<0,则y=-1否则

若x=0,则y=0

否则y=1输出x和yscanf("%d",&x);if(x<0)y=-1;elseif(x==0)y=0;elsey=1;printf("x=%d,y=%d\n",x,y);scanf("%d",&x);if(x>=0)if(x>0)y=1;elsey=0;elsey=-1;printf("x=%d,y=%d\n",x,y);提倡内嵌if放在else中444.2.3选择结构的嵌套解题思路:方法2scanf("%d例: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”);实现if~else正确配对方法:加{}else总是与它上面最近的未配对的if配对45例:if(a==b)修改:if(a==b)实现if分析:a=0不是二次方程。

b2-4ac=0有两个相等实根。b2-4ac>0有两不等实根。b2-4ac<0有两共轭复根。

#include“math.h”main(){floata,b,c,d,x,x1,x2,xr,xi;scanf(“%f%f%f”,&a,&b,&c);编程:例:求一元二次方程

ax2+bx+c=0

的解46分析:a=0不是二次方程。#end求x1、x2x求xr、xix1、x2xr、xiNO!d==0d>=0求xyynnd=b-4ac2yna==0开始a,b,c47end求x1、x2x求xr、xix1、x2xr、xiNO!dif(fabs(a)<1e-6)printf(“No!”);else{d=b*b-4*a*c;if(fabs(d)<1e-6){x=-b/(2*a);printf(“Twoequalroots:%f”,x);}elseif(d>0){x1=(-b+sqrt(d))/(2*a);x2=(-b-sqrt(d))/(2*a);printf(“Tworealroots:%f,%f”,x1,x2);}else{xr=-b/(2*a);xi=sqrt(-d)/(2*a);printf(“Complexroots:%f+%fi”,xr,xi);printf(“Complexroots:%f-%fi”,xr,xi);}}}48if(fabs(a)<1e-6)printf(“No!”)4.3关系运算符和关系表达式4.3.1关系运算符及其优先次序4.3.2关系表达式494.3关系运算符和关系表达式4.3.1关系运算符及其优先次序4.3.1关系运算符及其优先次序关系运算符:用来对两个数值进行比较的比较运算符C语言提供6种关系运算符:①<(小于)②<=(小于或等于)③>(大于)④>=(大于或等于)

⑤==(等于)⑥!=(不等于)优先级相同(高)优先级相同(低)504.3.1关系运算符及其优先次序关系运算符:优先级相同(高4.3.1关系运算符及其优先次序关系、算术、赋值运算符的优先级算术运算符(高)赋值运算符(低)关系运算符514.3.1关系运算符及其优先次序关系、算术、赋值运算符的优先4.3.1关系运算符及其优先次序c>a+b等效于c>(a+b)a>b==c等效于(a>b)==ca==b<c等效于a==(b<c)a=b>c等效于a=(b>c)524.3.1关系运算符及其优先次序c>a+b等4.3.2关系表达式关系表达式用关系运算符将两个数值或数值表达式连接起来的式子<表达式><关系运算符><表达式>关系表达式的值是一个逻辑值a+b>c+d(a=3)<(b=5)‘a’!=‘A’

(a>b)==(c<d)1——真0——假注意:f=a<b<c

表达式的值。如:

0<x<5

当x=10时,表达式成立534.3.2关系表达式关系表达式a+b>c+d(4.4逻辑运算符和逻辑表达式4.4.1逻辑运算符及其优先次序4.4.2逻辑表达式4.4.3逻辑型变量544.4逻辑运算符和逻辑表达式4.4.1逻辑运算符及其优先4.4.1逻辑运算符及其优先次序3种逻辑运算符:&&(逻辑与)||(逻辑或)!(逻辑非)&&和||是双目(元)运算符!是一目(元)运算符逻辑表达式用逻辑运算符将关系表达式或其他逻辑量连接起来的式子554.4.1逻辑运算符及其优先次序3种逻辑运算符:554.4.1逻辑运算符及其优先次序判断年龄在13至17岁之内?age>=13&&age<=17判断年龄小于12或大于65?age<12||age>65564.4.1逻辑运算符及其优先次序判断年龄在13至17岁之内4.4.1逻辑运算符及其优先次序ab!a!ba&&ba||b真真假假真真真假假真假真假真真假假真假假真真假假逻辑运算的真值表574.4.1逻辑运算符及其优先次序ab!a!ba&&4.4.1逻辑运算符及其优先次序逻辑运算符的优先次序!→&&→||(!为三者中最高)与其他运算符的优先次序!(高)算术运算符关系运算符&&和||赋值运算符(低)584.4.1逻辑运算符及其优先次序逻辑运算符的优先次序1、逻辑表达式的值1——真0——假例:设

a=4,b=5

,则

!a

0

(假)

a&&b-1

1

(真)

5>3&&2||2<4-!0结果?①②③④⑤⑥4.4.2逻辑表达式591、逻辑表达式的值1——真例:设a=4,b=52、逻辑运算的对象并非仅限于逻辑量C判断处理的原则非0——真

0——假例:if(-5)x=10;elsex=0;3、运算中一旦能确定其值,终止计算如计算:

a&&b&&ca||b||c4.4.2逻辑表达式602、逻辑运算的对象并非仅限于逻辑量C判断处理的原则非0——例:main(){inta,b,c,d,m,n,k;a=1,b=2,c=3,d=4;m=n=1;k=(m=a>b)&&(n=c>d);printf(“k=%d,m=%d,n=%d\n”,k,m,n);}运行结果:k=0,m=0,n=1注:(n=c>d)不被执行,

n仍然为161例:main()运行结果:注:(n=c>d)不被执行,n4.4.2逻辑表达式修改后的逻辑运算真值表ab!a!ba&&ba||b非0非00011非000101假非01001假01100624.4.2逻辑表达式修改后的逻辑运算真值表ab!a!b4.4.2逻辑表达式判别某一年是否闰年,用逻辑表达式表示闰年的条件是符合下面二者之一:①能被4整除,但不能被100整除,如2008②能被400整除,如2000(year%4==0&&year100!=0)||year%400==0如果表达式值为1,则闰年;否则为非闰年634.4.2逻辑表达式判别某一年是否闰年,用逻辑表达式表示64.4.3逻辑型变量这是C99所增加的一种数据类型可以将关系运算和逻辑运算的结果存到一个逻辑型变量中,以便于分析和运算644.4.3逻辑型变量这是C99所增加的一种数据类型644.5条件运算符和条件表达式有一种if语句,当被判别的表达式的值为“真”或“假”时,都执行一个赋值语句且向同一个变量赋值如:if(a>b)max=a;elsemax=b;max=(a>b)?a

:b;条件运算符654.5条件运算符和条件表达式有一种if语句,当被判别的表达4.5条件运算符和条件表达式有一种if语句,当被判别的表达式的值为“真”或“假”时,都执行一个赋值语句且向同一个变量赋值如:if(a>b)max=a;elsemax=b;max=(a>b)?a

:b;条件表达式664.5条件运算符和条件表达式有一种if语句,当被判别的表达1、条件表达式的一般形式<表达式1>?<表达式2>:<表达式3>2、运算规则先计算表达式1,若为非0,则以表达式2的值作为条件表达式的值;否则,以表达式3的值为条件表达式的值。3、优先级算术关系逻辑运算(!除外)

条件运算赋值运算高低右结合4.5条件运算符和条件表达式671、条件表达式的一般形式<表达式1>?<表达式2>:<表(1)输出x和y当中的最大值

z=x>y?x:y;printf(“max=%d”,z);或printf(“max=%d”,x>y?x:y);或x>y?printf(“%d”,x):printf(“%d”,y);举例:(2)a>b?a:b+1等价于a>b?a:(b+1)而不是(a>b?a:b)+1(3)a>b?a:c>d?c:d等价于a>b?a:(c>d?c:d)(4)x>y?1:5.6表达式的值的类型取高的(5)ch=(ch>=‘A’&&ch<=‘Z’)?(ch+32):ch;4.5条件运算符和条件表达式68(1)输出x和y当中的最大值举例:(2)a>b?a:b+1等4.5条件运算符和条件表达式

例4.4输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。694.5条件运算符和条件表达式例4.4输入一个字符,判4.5条件运算符和条件表达式解题思路:用条件表达式来处理,当字母是大写时,转换成小写字母,否则不转换704.5条件运算符和条件表达式解题思路:用条件表达式来处理,4.5条件运算符和条件表达式#include<stdio.h>intmain(){charch;scanf("%c",&ch);ch=(ch>='A'&&ch<='Z‘)?(ch+32):ch;printf("%c\n",ch);return0;}714.5条件运算符和条件表达式#include<stdio4.7用switch语句实现多分支选择结构switch语句用来实现多分支选择结构学生成绩分类85分以上为’A’等70~84分为’B’等60~69分为’C’等……人口统计分类

按年龄分为老、中、青、少、儿童724.7用switch语句实现多分支选择结构switch语句4.6用switch语句实现多分支选择结构

例4.6要求按照考试成绩的等级输出百分制分数段,A等为85分以上,B等为70~84分,C等为60~69分,D等为60分以下。成绩的等级由键盘输入。734.6用switch语句实现多分支选择结构例4.64.6用switch语句实现多分支选择结构解题思路:判断出这是一个多分支选择问题根据百分制分数将学生成绩分为4个等级如果用if语句,至少要用3层嵌套的if,进行3次检查判断用switch语句进行一次检查即可得到结果744.6用switch语句实现多分支选择结构解题思路:74#include<stdio.h>intmain(){chargrade;scanf("%c",&grade);printf("Yourscore:");switch(grade){case'A':printf("85~100\n");break;case'B':printf("70~84\n");break;case'C':printf("60~69\n");break;case'D':printf("<60\n");break; default:printf("enterdataerror!\n");}return0;}值为A75#include<stdio.h>值为A75#include<stdio.h>intmain(){chargrade;scanf("%c",&grade);printf("Yourscore:");switch(grade){case'A':printf("85~100\n");break;case'B':printf("70~84\n");break;case'C':printf("60~69\n");break;case'D':printf("<60\n");break; default:printf("enterdataerror!\n");}return0;}不能少76#include<stdio.h>不能少76#include<stdio.h>intmain(){chargrade;scanf("%c",&grade);printf("Yourscore:");switch(grade){case'A':printf("85~100\n");break;case'B':printf("70~84\n");break;case'C':printf("60~69\n");break;case'D':printf("<60\n");break; default:printf("enterdataerror!\n");}return0;}值为C77#include<stdio.h>值为C77#include<stdio.h>intmain(){chargrade;scanf("%c",&grade);printf("Yourscore:");switch(grade){case'A':printf("85~100\n");break;case'B':printf("70~84\n");break;case'C':printf("60~69\n");break;case'D':printf("<60\n");break; default:printf("enterdataerror!\n");}return0;}值为F78#include<stdio.h>值为F78#include<stdio.h>intmain(){chargrade;scanf("%c",&grade);printf("Yourscore:");switch(grade){case'A':printf("85~100\n");break;case'B':printf("70~84\n");break;case'C':printf("60~69\n");break;case'D':printf("<60\n");break; default:printf("enterdataerror!\n");}return0;}此行位置有问题,应如何修改?79#include<stdio.h>此行位置有问题,应如何修switch语句的作用是根据表达式的值,使流程跳转到不同的语句switch语句的一般形式:switch(表达式){case常量1:语句1case常量2:语句2

┇case常量n:语句ndefault:语句n+1}整数类型(包括字符型)80switch语句的作用是根据表达式的值,使流程跳转到不同的语switch语句的作用是根据表达式的值,使流程跳转到不同的语句switch语句的一般形式:switch(表达式){case常量1:语句1case常量2:语句2

┇case常量n:语句ndefault:语句n+1}不能相同81switch语句的作用是根据表达式的值,使流程跳转到不同的语switch语句的作用是根据表达式的值,使流程跳转到不同的语句switch语句的执行过程:当switch后的表达式的值与某一个case后的常量表达式的值相等时,执行其后的语句;若无匹配,则执行default后的语句break语句使流程跳出switch结构,终止switch语句的执行。82switch语句的作用是根据表达式的值,使流程跳转到不同的语说明1、各case中的常量表达式值应互不相等2、各case中的常量表达式起着语句标号的作用,用来标识语句的位置3、当多个常量表达式确定的操作可以用同一组语句实现,此时多个case可以共用一组语句4、若每一case及default的最后的语句为break,则各case及default在switch中出现的先后顺序对执行结果无影响83说明1、各case中的常量表达式值应互不相等2、各case中scanf("%c",&grade);printf("Yourscore:");switch(grade){case'A':printf("85~100\n");break;case'B':printf("70~84\n");break;case'C':printf("60~69\n");break;case'D':printf("<60\n");break; default:printf("enterdataerror!\n");}8484scanf("%c",&grade);printf("Yourscore:");switch(grade){case'A':printf("85~100\n");break;case'B':printf("70~84\n");break;case'C':printf("60~69\n");break;case'D':printf("<60\n");break; default:printf("enterdataerror!\n");}8585scanf("%c",&grade);printf("Yourscore:");switch(grade){case'A‘:case'B‘:case'C':printf("60~69\n");break;case'D':printf("<60\n");break; default:printf("enterdataerror!\n");}8686

例4.7编写程序,用switch语句处理菜单命令。解题思路:在许多应用程序中,用菜单对流程进行控制,例如从键盘输入一个’A’或’a’字符,就会执行A操作,输入一个’B’或’b’字符,就会执行B操作,等等。87例4.7编写程序,用switch语句处理菜单命令。8#include<stdio.h>intmain(){voidaction1(int,int),action2(int,int);charch;inta=15,b=23;ch=getchar();switch(ch){case'a':case‘A’:action1(a,b);break;

case'b':case‘B’:action2(a,b);break;

default:putchar(‘\a’);}return0;}输入a或A调用action1函数,执行A操作voidaction1(intx,inty){printf("x+y=%d\n",x+y);}88#include<stdio.h>输入a或A调用actio#include<stdio.h>intmain(){voidaction1(int,int),action2(int,int);charch;inta=15,b=23;ch=getchar();switch(ch){case'a':case‘A’:action1(a,b);break;

case'b':case‘B’:action2(a,b);break;

default:putchar(‘\a’);}return0;}输入b或B调用action2函数,执行B操作voidaction2(intx,inty){printf("x*y=%d\n",x*y);}89#include<stdio.h>输入b或B调用actio#include<stdio.h>intmain(){voidaction1(int,int),action2(int,int);charch;inta=15,b=23;ch=getchar();switch(ch){case'a':case‘A’:action1(a,b);break;

case'b':case‘B’:action2(a,b);break;

default:putchar(‘\a’);}return0;}输入其他字符发出警告90#include<stdio.h>输入其他字符发出警告90这是一个非常简单的示意程序实际应用中,所指定的操作可能比较复杂:A:输入全班学生各门课的成绩B:计算并输出每个学生各门课的平均成绩C:计算并输出各门课的全班平均成绩D:对全班学生的平均成绩由高到低排序并输出可以按以上思路编写程序,把各action函数设计成不同的功能以实现各要求91这是一个非常简单的示意程序914.7选择结构程序综合举例例4.8写一程序,判断某一年是否闰年。解题思路:在前面已介绍过判别闰年的方法本例用不同的方法编写程序924.7选择结构程序综合举例例4.8写一程序,判断某一年是否4.7选择结构程序综合举例用变量leap代表是否闰年的信息。若闰年,令leap=1;非闰年,leap=0。最后判断leap是否为1(真),若是,则输出“闰年”信息参见教材图4.13934.7选择结构程序综合举例用变量leap代表是否闰年的信息。#include<stdio.h>intmain() {intyear,leap;printf("enteryear:");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);elseprintf("%disnot",year);printf("aleapyear.\n");return0;}标志变量与if(leap!=0)含义相同94#include<stdio.h>标志变量与if(lea#include<stdio.h>intmain() {intyear,leap;printf("enteryear:");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);elseprintf("%disnot",year);printf("aleapyear.\n");return0;}采取锯齿形式95#include<stdio.h>采取锯齿形式95#include<stdio.h>intmain() {intyear,leap;printf("enteryear:");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);elseprintf("%disnot",year);printf("aleapyear.\n");return0;}if(year%4!=0)leap=0;elseif(year%100!=0)leap=1;elseif(year%400!=0)leap=0;else

leap=1;96#include<stdio.h>if(year%4!=0#include<stdio.h>intmain() {intyear,leap;printf("enteryear:");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);elseprintf("%disnot",year);printf("aleapyear.\n");return0;}if((year%4==0&&year%100!=0)||(year%400==0))leap=1;elseleap=0;97#include<stdio.h>if((year%4==

例4.9求

方程的解。解题思路:处理以下各情况①

a=0,不是二次方程②

,有两个相等实根

,有两个不等实根。

,有两个共轭复根。

应当以p+qi和p-qi的形式输出复根

其中,p=-b/2a,q=()/2a参见教材图4.1498例4.9求#include<stdio.h>#include<math.h>intmain(){doublea,b,c,disc,x1,x2,realpart,imagpart;scanf("%lf,%lf,%lf",&a,&b,&c);printf("Theequation");if(fabs(a)<=1e-6)printf("isnotaquadratic\n");实型不能用if(a==0)99#include<stdio.h>实型不能用if(a==else{disc=b*b-4*a*c;if(fabs(disc)<=1e-6)printf("hastwoequalroots:%8.4f\n",-b/(2*a));else先算disc,以减少重复计算不能用if(disc==0)100else先算disc,以减少重复计算不能用if(diif(disc>1e-6) {x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);printf("hasdistinctrealroots:%8.4fand%8.4f\n",x1,x2); }else101if(disc>1e-6)101{realpart=-b/(2*a);imagpart=sqrt(-disc)/(2*a);printf("hascomplexroots:\n");printf("%8.4f+%8.4fi\n“,realpart,imagpart);printf("%8.4f-%8.4fi\n",realpart,imagpart); }}return0;}102{realpart=-b/(2*a);{realpart=-b/(2*a);imagpart=sqrt(-disc)/(2*a);printf("hascomplexroots:\n");printf("%8.4f+%8.4fi\n“,realpart,imagpart);printf("%8.4f-%8.4fi\n",realpart,imagpart); }}return0;}103{realpart=-b/(2*a);{realpart=-b/(2*a);imagpart=sqrt(-disc)/(2*a);printf("hascomplexroots:\n");printf("%8.4f+%8.4fi\n“,realpart,imagpart);printf("%8.4f-%8.4fi\n",realpart,imagpart); }}return0;}104{realpart=-b/(2*a);

例4.10运输公司对用户计算运输费用。路程(skm)越远,每吨·千米运费越低。标准如下:s<250没有折扣250≤s<5002%折扣500≤s<10005%折扣1000≤s<20008%折扣2000≤s<300010%折扣3000≤s15%折扣105例4.10运输公司对用户计算运输费用。路程(skm解题思路:设每吨每千米货物的基本运费为p,货物重为w,距离为s,折扣为d总运费f的计算公式为f=p×w×s×(1-d)106解题思路:106折扣的变化规律(参见教材图4.15):折扣的“变化点”都是250的倍数在横轴上加一种坐标c,c的值为s/250c代表250的倍数当c<1时,表示s<250,无折扣1≤c<2时,表示250≤s<500,折扣d=2%2≤c<4时,d=5%;4≤c<8时,d=8%;8≤c<12时,d=10%;c≥12时,d=15%107折扣的变化规律(参见教材图4.15):107提问与解答环节Questionsandanswers108提问与解答环节108添加标题添加标题添加标题添加标题此处结束语点击此处添加段落文本.您的内容打在这里,或通过复制您的文本后在此框中选择粘贴并选择只保留文字109添加标题添加添加添加标题此处结束语点击此处添加段落文本.感谢聆听Theusercandemonstrateonaprojectororcomputer,orprintthepresentationandmakeitintoafilm讲师:XXXX日期:20XX.X月110感谢聆听讲师:XXXX日期:20XX.X月110第4章选择结构程序设计4.1选择结构和条件判断4.2用if语句实现选择结构4.3关系运算符和关系表达式4.4逻辑运算符和逻辑表达式4.5条件运算符和条件表达式4.6用switch语句实现多分支选择结构4.7选择结构程序综合举例111第4章选择结构程序设计4.1选择结构和条件判断1标题添加点击此处输入相关文本内容点击此处输入相关文本内容前言点击此处输入相关文本内容标题添加点击此处输入相关文本内容112标题添加点击此处输入相点击此处输入前言点击此处输入标题添加点主要内容:关系运算符和关系表达式逻辑运算符和逻辑表达式if语句switch语句学习目标:掌握关系运算、逻辑运算和C语言条件语句的使用重点if语句、switch语句的使用难点if语句的嵌套

第4章选择结构程序设计113主要内容:学习目标:掌握关系运算、逻辑运算和C语言条第4章4.1选择结构和条件判断在现实生活中,需要进行判断和选择的情况是很多的如果你在家,我去拜访你如果考试不及格,要补考如果遇到红灯,要停车等待周末我们去郊游70岁以上的老年人,入公园免票1144.1选择结构和条件判断在现实生活中,需要进行判断和选择的4.1选择结构和条件判断在现实生活中,需要进行判断和选择的情况是很多的处理这些问题,关键在于进行条件判断由于程序处理问题的需要,在大多数程序中都会包含选择结构,在进行下一个操作之前先进行条件判断1154.1选择结构和条件判断在现实生活中,需要进行判断和选择的4.1选择结构和条件判断C语言有两种选择语句:(1)if语句,实现两个分支的选择结构(2)switch语句,实现多分支的选择结构1164.1选择结构和条件判断C语言有两种选择语句:64.1选择结构和条件判断

例4.1在例3.5的基础上对程序进行改进。题目要求是求

方程的根。

由键盘输入a,b,c。假设a,b,c的值任意,并不保证

。需要在程序中进行判别,如果

,就计算并输出方程的两个实根,否则就输出“方程无实根”的信息。

1174.1选择结构和条件判断例4.1在例3.5的基础上对解题思路求x1、x2x1、x2endd>=0无实根yn开始d=b2-4aca,b,c开始求根:x1、x2x1、x2enda,b,cd=b2-4ac118解题思路求x1、x2x1、x2endd>=0无实根yn开始#include<stdio.h>#include<math.h>intmain(){doublea,b,c,disc,x1,x2,p,q;scanf("%lf%lf%lf",&a,&b,&c);disc=b*b-4*a*c;计算b2-4ac,disc的值变为-15119#include<stdio.h>计算b2-4ac,dis

if(disc<0)

printf(“hasnotrealroots\n”);

else

{p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;

温馨提示

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

评论

0/150

提交评论