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

下载本文档

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

文档简介

第4章选择结构程序设计

4.1if语句4.2switch语句C语言程序设计教程2023/7/211整体概述THEFIRSTPARTOFTHEOVERALLOVERVIEW,PLEASESUMMARIZETHECONTENT第一部分C语言用三种语句控制程序的执行流程顺序结构、选择结构和循环结构。这一章主要讲选择结构。

例如计算分段函数时,须先判断x是大于还是小于0的。这时就需要选择语句来判断。2023/7/2134.1if语句例如计算分段函数计算x<0,如果结果为1:计算:y=3-x;否则,计算:y=2*x;需要根据x的值进行流程选择(分支)。2023/7/214表达式语句真假4.1.1.单分支选择语句if(表达式)语句首先先判断表达式的值语句表达式若为非0则执行下面的语句若为0则跳过该语句。2023/7/215一般形式:i

f(表达式)语句;main(){floatx,y;scanf(“%f”,&x);y=2*x;if(x<0)y=3-x;printf(“y=%6.2f”,y);}2023/7/2164.1.2.双分支选择语句

if(表达式)语句1

else语句2首先先判断表达式的值若为非0则执行语句1。若为0则执行语句2。表达式语句1真假语句2表达式语句1语句22023/7/217if(表达式)语句1else语句2main(){floatx,y;scanf(“%f”,&x);if(x<0)y=3-x;elsey=2*x;printf(“y=%6.2f”,y);}2023/7/218例:输入两个数,比较其大小,将较大的数输出。流程分析:(1)输入两个数据a,b;(2)如果a>b则输出a;否则,输出b。#include<stdio.h>main(){floata,b;scanf(“%f,%f”,&a,&b);if(a>b)printf(“%f”,a);elseprintf(“%f”,b);}

2023/7/2194.1.3.多分支选择语句

表达式1先判断表达式1的值真语句1非0就执行下面的语句假表达式2为0就执行下一个判断表达式3语句4语句3语句2真真假假一直这样做下去直到得出最后结果2023/7/2110多分支选择语句一般形式if(表达式)语句1

elseif(表达式)语句2

else…2023/7/2111多分支问题:写一个程序完成下列功能:1输入一个分数score2score<60输出E360<=score<70输出D475<=score<80输出C580<=score<90输出B590<=score输出A2023/7/2112main(){int

score;

sanf(“%d”,&score);

if(score<60)printf(“%c”,’E’);elseif(score<70)printf(“%c”,’D’);elseif(score<80)printf(“%c”,’C’);elseif(score<90)printf(“%c”,’B’);elseprintf(“%c”,’A’);}2023/7/21133种if语句的说明:①“表达式”一般为逻辑或关系表达式,也可以为任和数值类型的表达式,非0为真,0为假。如:if(3)printf(“ok”);if(‘a’)printf(“%d”,‘a’);

都是合法的表达式,表达式类型为任意数据类型。②2、3中形式if语句中,每个else前有一分号,语句结束处有一分号,不能省略。如:if(x)0)printf(“%f”,x);elseprintf(“%”,-x);

③在if和else后执行语句可以是一条简单语句、空语句或复合语句,也可以嵌套其它流程控制语句。如:if(a+b<c&&b+c>a&&c+a>b){s=0.5*(a+b+c);

area=sqrt(s*(s-a)*(s-b)*(s-c));

printf(“area=%6.2f”,area);}elseprintf(“itisnotatrilateral.”);2023/7/2114复杂条件选择例问题:输入两个字符ch1和ch2,如果ch1==‘Z’且ch2==‘B’,

则输出“Youareright!“2023/7/2115main(){charch1,ch2;ch1=getchar();ch2=getchar();if(ch1==‘Z’&&ch2==‘B’)

printf(“Youareright!“);}

2023/7/21164.1.4if语句的嵌套1.在语句中嵌套if语句在上述3种if语句结构中,当if(表达式)或else后面的语句本身又是一个if语句结构时,就形成了if语句的嵌套结构。例如多分支选择结构。2023/7/2117if语句的二层嵌套结构如下:if(表达式1)if(表达式1_2)

语句1_1else

语句1_2elseif(表达式2_1)

语句2_1else

语句2_22023/7/2118例:分段函数可以用两层嵌套来完成:

if(x<=0)if(x<=-10)/*当x<=-10*/y=2*x;else/*当-10<x<=0*/y=2+x;

else/*当x>0时走这条分支*/if(x<=10)/*当0<x<=10*/y=x-2;else/*当10<x*/y=x/10;2023/7/2119两层嵌套流程图x<=-10x<=0x<=10y=2*xy=x+2y=x-2y=x/10非000非00非02023/7/2120注意结构if(x<=0){if(x<=-10)/*当x<=-10*/y=2*x;else/*当-10<x<=0*/y=2+x;}else/*当x>0时走这条分支*/{if(x<=10)/*当0<x<=10*/y=x-2;else/*当10<x*/y=x/10;}添加花括号后可以很清楚地表示出else与外层if的配对情况。2023/7/2121

分析程序的执行结果(s3-1.c)#include<stdio.h>main(){inta,b,c,d,x;a=c=0;b=1;d=20;if(a)d=d-10;elseif(!b)if(!c)x=15;elsex=25;printf(“d=%d\n”,d);}2023/7/2122

以下程序在输入5,2之后的执行结果是_____________(s3-2.c)#include<stdio.h>main(){ints,t,a,b;scanf(“%d,%d”,&a,&b);s=1;t=1;if(a>0)s=s+1;if(a>b)t=s+t;elseif(a==b)t=5;elset=2*s;printf(“s=%d,t=%d\n”,s,t);}2023/7/2123例:编程实现:根据两个数sex和tall分类,如果sex为’F’,当tall大于等于150时,输出”A“,否则输出“B“;若sex不为’F’,当tall大于等于170时,输出A,否则输出B。分析:根据sex分支在sex为’F’的分支中判断tall>=150否在sex不为’F’的分支中判断tall>=170否2023/7/2124voidmain(){inttall;charsex;printf(“inputsexandtall:”);scanf(“%c%d”,&sex,&tall);if(sex==’F’){if(tall>=150)printf(“A”);elseprintf(“B”);}else{if(tall>=170)printf(“A”);elseprintf(“B”);}}2023/7/2125练习:1、有下列条件语句:

if(a<b)if(c<d)x=1;elseif(a<c)if(b,d)x=2;elsex=3;elseif(a<d)if(b<c)x=4;elsex=5;elsex=6;elsex=7;

写出配对关系2023/7/2126if(a<b){if(c<d)x=1;elseif(a<c){if(b<d)x=2;elsex=3;}elseif(a<d){if(b<c)x=4;elsex=5;}elsex=6;}elsex=7;解答:2023/7/21272、写出下面程序的执行结果。main(){intx,y=1,z;if(y!=0)x=5;printf(“x=%d\t”,x);if(!y)x=3;elsex=5;printf(“x=%d\\n”,x);x=1;if(z<0)if(y>0)x=3;elsex=5;printf(“x=%d\t\n”,x);if(z=y<0)x=3);elseif(y==0)x=5;elsex=7;printf(“x=%d\t”,x);printf(“z=%d\t\n”,z);if(x=y=z)x=3;printf(“x=%d\t”,x);printf(“z=%d\t\n”,z);}2023/7/2128综合练习1、说明下列程序的功能。#include<stdio.h>main(){intc;printf(“inputacharacter:”);c=getchar()if(c>=’a’&&c<=’z’)c+=’A’-‘a’;putchar(c);putchar(‘\n’);}2023/7/21292、编程:从键盘输入任意三个整数,按照从大到小次序输出。

2023/7/2130#include<stdio.h>main(){inta,b,c,temp;scanf(“%d%d%d”,&a,&b,&c);if(a<b){temp=a;a=b;b=temp;}if(a<c){temp=a;a=c;b=temp;}if(b<c){temp=b;b=c;c=temp;}printf(“%d,%d,%d\n”,a,b,c);}

解答:2023/7/21314.2Switch语句switch(表达式)

{

case常量1:语句1;

case常量2:语句2;

case常量3:语句3;

default:语句4;

}另一种多分支语句,根据表达式不同的值选择不同的语句。2023/7/2132注意:语句中的表达式可以是数字型或字符型,表达式的值,称为开关值。语句结构中各个case后常量表达式的值必须互不相同;否则执行时将出现矛盾,即同一个开关值,对应多种执行方案。当表达式的值与某一个常量相等时,就执行后面的语句;若无break语句,执行该语句后,流程控制转移到下一个分支:继续执行这一个分支的语句,一至到最后下个语句执行完。当表达式的值与所有常量表达式的值不相等时,执行default:后面的语句。2023/7/2133switch(i)

{case1:printf(″A\n″);

case2:printf(″B\n″);

case 3:printf(″C\n″);

case4:printf(″D\n″);

default:printf(″E\n″);

}

看下面的例子:假设i=3时,则会从i=3时做起的语句。运行结果为:

C

D

E如果给每条语句加上break;break;

break;

break;break;

这样就只执行一条语句语句后加或不加“break;”可以使多分支变得非常灵活。如果多种情况需要共用一个执行语句,可用case的常量表达式多种情况列出,最后一种情况后,才放执行的语句。

2023/7/2134

case后面的语句可以是一条语句,也可以是复合语句,还可以是花括弧括起来的几条语句,还可以是空语句。有多条语句时会顺序执行完所有语句。2023/7/2135

以下程序的执行结果是_______________(s3-3.c)#include<stdio.h>main(){intx=1,y=0;switch(x){case1:switch(y){case0:printf(“first\n”);break;case1:printf(“second\n”);break;}case2:printf(“third\n”);}}2023/7/2136例4.6编程:根据输入的学生的成绩判断等级。当成绩score≥90时为A等;成绩70≤score<90为B等;成绩60≤score<70为C等;成绩score<60为D等(score为整数)。分析:设score为整型数,在score≥90的范围内,score可能取100,99,.....,90,利用两个整数相除,结果自动取整的特性,score和score/10有如下对应关系:

scorescore/10

≥9010,970~897,860~69660以下default因此,

温馨提示

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

评论

0/150

提交评论