1、从程序流程的角度来看,程序可以分为三种基本结构,即顺序结构,选择结构,循环结构。这三种基本结构可以组成所有的各种复杂程序。 3.4 顺序程序控制结构 3.5 选择程序控制结构 3.6 循环程序控制结构,3.5 选择程序控制结构,3.5.1 if 语句3.5.2 switch 语句 3.5.3 案例研究:(自学),1.单分支2.双分支3.多分支,2019/9/29,3.5.1 if语句 if语句的三种基本形式:单分支、双分支和多分支。1、单分支结构语句形式: if(表达式) 语句S;【例】if( x0 ) y=1;, ,思考:如果if语句后面不是一条语句,而是多条语句的时候该如何表示?,【例】比
2、较a和b的大小,如果ab,交换a和b的值,否则什么都不做。,#includemain( ) int a,b,c;scanf(“%d,%d“, printf(“%d,%d“,a,b),2、双分支结构 语句形式为: if(表达式) 语句1;else 语句2 ; 【例】if( x0 ) y=1; else y=-1;,双分支结构流程图,2019/9/29,【例】输入一个整数,判断其奇偶性,若为奇数就显示输出是奇数;若是偶数,显示输出是偶数。按照语法含义图写出程序的流程,并编写程序代码:,是奇数吗?,输出“是奇数”,否,是,输出“是偶数”,2019/9/29,程序如下:#include main( )
3、 int x;scanf(“x=%d”, , ,【例】任给两个数,按从大到小的顺序输出。 例如:输入:3,4 输出:4,3。,程序如下:#include main( ) int x,y,z;scanf(“%d%d”, ,3、多分支结构(阶梯式的if-else语句)一般形式为:if(表达式1) 语句1;else if(表达式2) 语句2;else if(表达式n) 语句n;else 语句n+1;,注意:else总是与上面最近的,未配对的if匹配,执行过程:系统从上到下的逐个判断条件表达式,一旦发现某条件表达式为真时,则执行与它有关的语句,并跳过其它剩余的表达式。若所有的条件均不满足,执行最后一个
4、else语句或后续语句。,多 分 支 选 择 结 构 流 程 图,【例】有一函数:-1 (x0)实现输入一个x值,输出y值。分析:1.输入 x 2.判断:x只有三种情况,即x 0。如果 x 0,则y = -1 输出y;否则:如果 x = 0,则 y = 0 输出 y;否则,则y = 1 输出 y;,#include “stdio.h” main() int x,y;scanf(“x=%d”, ,【例】评价学生成绩。,4.if语句的嵌套在if语句中又包含一个或多个if语句称为if语句的嵌套。,IF语句嵌套的流程图,if(表达式)if(表达式11)语句1;else语句2; elseif(表达式22
5、)语句3;else语句4;,语句形式,编程求三个数中的最大值,#include “stdio.h”main()int a,b,c,max; scanf(“%d,%d,%d”, ,if语句的嵌套形式,else与哪个if匹配?,else总是与上面最近的,未配对的if匹配, if(p2) A, if(p2) A,可以看出,通过加“”,可以改变else的层位。,#include “stdio.h” main() int x,y;scanf(“x=%d”, ,if(x0)y=-1;else if (x=0) y=0;else y=1;,【例】判定某年是否为闰年。(闰年:年份能被4整除,但不能被100整除
6、;或能被400整除。),Leap为标志性变量。,if选择语句小结,1.If 或 else子句中只允许有一条语句,因此,需要多条语句时必须用复合语句,即把需要执行的多条语句用“”括起来。,2.If 子句中内嵌if语句时,因为 else子句总是与它距离最近的且没对配对的if相结合,与书写的缩进格式无关,容易发生配对错误。解决该问题的方法有两种: 一是将if子句中的的内嵌if语句用“”括起来。二是尽量采用在else子句中内嵌if语句的形式编程。,break是中断语句。作用是跳出switch语句体。,1、switch语句的一般形式 switch(表达式) case 常量表达式1:语句1;break;c
7、ase 常量表达式2:语句2;break;case 常量表达式n:语句n;break;default:语句n+1; ,常量表达式必须与表达式类型一致(整形与字符型通用),3.5.2 switch语句(开关语句),用于解决多分支问题。比嵌套if语句结构清晰,易写易读。,表达式可以是整形、字符型,不能为实型!,default语句最多只有一个!,switch(表达式) case c1:语句1;break;case c2 :语句2;break;case cn:语句n;break;default:语句n+1;,执行过程: 1.计算表达式的值2.若与ci值一致,则执行语句i;直到遇到break语句或swi
8、tch语句的 “”。3.若与任何常量表达式均不一致时:有default语句,则执行default后面的语句;没有default语句则执行switch语句体后的语句。,注意: 1. 常量表达式i仅起语句标号作用,不作求值判断。 2.常量表达式的值必须是唯一的,没有先后次序。 3.多个case语句可共用一组执行语句。(不用break),【例】评价学生成绩。 #include “stdio.h” main() int score;scanf(“%d”, ,关键:如何表示表达式和常量。常量的取值与表达式有关。,2019/9/29,错误,【例】下述程序段中,正确的是()。A)int x=0,y=10;s
9、witch(x) case y: x+; break;case y+2: x+=10; break;case y-1: x=-7; break;,2019/9/29,B)int x=0,y;switch(x) case x0: y=1; break;case x= =0: y=0; break;case x0: y=-1; break; ,错误,2019/9/29,C)#define y 20int x=10,y;switch(x) case 12: z=3; break;case y+1: x+=10; break; case y-8: x-=3; break;,错误,2019/9/29,D)int x=0,y;switch(x) case 3:case -1: y=2;break;case 2: break;,正确,教材p88-13,