C语言选择结构.ppt_第1页
C语言选择结构.ppt_第2页
C语言选择结构.ppt_第3页
C语言选择结构.ppt_第4页
C语言选择结构.ppt_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

1、第3章 选择结构,计算机系,西南交通大学,内容提要,西南交通大学,3.1结构化程序设计概述,结构化程序设计是为使程序具有合理的结构,以保证程序正确性而规定的一套程序设计的方法,是人们多年来研究与实践的结晶。 1. 结构化程序设计目的 通过设计结构良好的程序,以程序的静态良好结构保证程序动态执行的正确,使程序易理解、易调试、易维护,以提高软件开发的效率,减少出错率。 2. 结构化程序设计的三个基本步骤 (1)分析问题 (2)画出程序的基本轮廓 (3)编写源码程序,西南交通大学,3.1 结构化程序设计,3.三种基本结构,本章介绍选择结构。 选择结构也叫分支结构,它的作用是根据给定的条件是真还是假,

2、决定后面的操作或做进一步的判断。,西南交通大学,引例,任意输入一个整数,判断这个数是不是位于30到100之间的一个奇数,如果是则在屏幕上输出“通过验证”;如果不是则在屏幕上输出“该数不合法”。 借助关系表达式和逻辑表达式来实现: (x=30,西南交通大学,3.3 逻辑运算符与逻辑表达式,C语言提供了 三种逻辑运算符,分别为: ! 逻辑非 求下列表达式的值及各变量的值: (1)a a=1;b=2; if(ab) max=a; if(a=b) max=b; printf(%d,max); return 0; 该法思路较明确,接近我们平时的思维模式。,演示例3.1.1,西南交通大学,单分支if语句

3、举例,法二: #include int main(void) int a,b,max; a=1;b=2; max=a; if(ab,则跳过max=b,直接执行print,输出max为a的值。,演示例3.1.2,西南交通大学,单分支if语句 举例,【例3.2】输入一个三位数,求其各位上数字能组成最大的三位数。如:输入263,则输出为:632。 解题思路: (1)输入一个三位数,存入变量x; (2)然后将这个三位数的各位数字分离出来: 个位赋给x0,十位赋给x10,百位赋给x100; (3)用if语句比较三个数的大小,三条if语句执行完后:最大的放在x100中,次大的放在x10中,最小的放在x0中

4、; (4)计算后将结果赋给max,最后输出max的值。,演示例3. 2,西南交通大学,单分支if语句 举例,#include int main(void) int x0,x10,x100,x,t,max; printf(请输入一个三位数:); scanf(%d, ,西南交通大学,3.5.2 双分支if语句,1. 语法格式 if(条件) 语句1 else 语句2 2. 说明 (1)执行过程: 当条件为“真”时,执行语句1; 为“假”时,执行语句2。 (2)语句1和语句2都可为复合语句。,西南交通大学,双分支if语句 举例,【例3.3】比较a、b两个数的大小,将较大数赋给max。,演示例3. 3,

5、int a,b,max;a=1;b=2; if(ab) max=a; else max=b; printf(%d,max);,该题可用“条件运算”、“单分支if”、“双分支if”三种方法来做,下面列出这几种语句的部分程序,请读者比较其语法结构上的区别:,西南交通大学,双分支if语句 举例,推荐写法,这样层次结构更清晰,西南交通大学,双分支if语句 举例,【例3.4】判断用变量year表示的某年是否为闰年。,#include int main(void) int year; printf(请输入年份:); scanf(%d, ,if后的条件可以不用写=1,直接写成: if(year%4=0 /*

6、保存输入的百分制成绩*/ char grade; /*保存五级计分制成绩 */ printf(输入一个成绩:); scanf(%d, ,判断输入的数据是否有效,若无效则跳出程序,演示例3. 6,西南交通大学,多分支if语句 举例,if(score=90) grade=A; /*L1*/ else if(score=80) grade=B; else if(score=70) grade=C; else if(score=60) grade=D; else grade=E; /*L2*/ printf(%d分,等级为%cn, score,grade); return 0; ,若把L1L2换成下面

7、几种形式,是否正确? if(score=90) grade=A; else if(score=80) grade=B; else if(score=70) grade=C; else if(score=60) grade=D; else grade=E;,if(score60) grade=E; else if(score70) grade=D; else if(score80) grade=C; else if(score90) grade=B; else grade=A;,if(score=90) grade=A; if(score=80) grade=B; if(score=70) gr

8、ade=C; if(score=60) grade=D; if(score=0) grade=E;,if(score=0) grade=E; if(score=60) grade=D; if(score=70) grade=C; if(score=80) grade=B; if(score=90) grade=A;,但此法含义不明确,容易出错,不推荐这种做法!,西南交通大学,3.5.4 if语句嵌套,在if语句中又包含一个或多个if语句称为if语句的嵌套。 1. 语法格式 if(条件) 内嵌if语句 else 内嵌if语句,可为if语句3中基本形式的任意一种,可为if语句3中基本形式的任意一种

9、,可为if语句3中基本形式的任意一种,可为if语句3中基本形式的任意一种,西南交通大学,3.5.4 if语句嵌套,2. 说明 (1)内嵌形式 “内嵌的if语句”可以为前面讲的三种基本形式(单分支、双分支、多分支)中的任意一种。 (2)配对关系 if语句的嵌套形式中,可能会出现多个if和多个else重叠的情况,这时要特别注意if和else的配对问题。 语言规定: else 总是与它前面最近的还没有配对的if配对。,西南交通大学,if语句嵌套形式比较,如果没有任何缩进,我们应准确判断出if和else的配对关系,在下表中同时给出了正确的嵌套形式和错误的嵌套形式,结果是不同。,西南交通大学,if语句嵌

10、套 举例,【例3.7】比较a、b、c三个数的大小,将最大值赋给max。 法一:用“if语句的嵌套”形式实现。请根据下面N-S流程图写出程序。 该题用这种方法做并不是最好的,但希望读者从这个例子看出嵌套的结构特点。,法二: 本题也可以用“if语句单分支”形式来做,参考例3.2,演示例3. 7,西南交通大学,3.6 switch语句,1. 语法格式 switch(表达式) case 常量表达式1: 语句序列1; break; case 常量表达式2: 语句序列2; break; case 常量表达式n: 语句序列n; break; default:语句序列 ,2. 要点(1)执行顺序:当表达式的值

11、与某一个case后面的常量表达式的值相等时,就执行此case后面的语句;如果遇到break语句,就结束整个switch语句;若所有的case中的常量表达式的值都没有与表达式的值匹配的,就执行default后面的语句。,西南交通大学,3.6 switch语句,(2)switch后括号内的表达式,为任意复合C语言语法规则的表达式,但其值只能是整型或字符型。 (3)每个case只能列举一个整型常量或一个字符常量。 (4)每个case后的常量表达式的值必须互不相同,否则就会出现互相矛盾的现象。 (5)语句执行时碰到break才会停止,否则从执行处接着往后执行,不会再判断条件。 (6)“default”

12、和各个“case”出现的次序不影响执行结果;如果不需要,default可省略不写。,西南交通大学,switch语句 举例,【例3.8】输入年份,判断该年的生肖。 程序分析: 该程序思路是,假设已经知道2008年为鼠年,那么以该年为基准,以12为周期进行推算。,演示例3. 8,西南交通大学,switch语句 举例,#include int main(void) int year; scanf(%d,西南交通大学,switch语句 举例,switch(year) case 0:printf(鼠);break; case 1:printf(牛);break; case 2:printf(虎);bre

13、ak; case 3:printf(兔);break; case 4:printf(龙);break; case 5:printf(蛇);break; case 6:printf(马);break; case 7:printf(羊);break; case 8:printf(猴);break; case 9:printf(鸡);break; case 10:printf(狗);break; case 11:printf(猪);break; return 0;,西南交通大学,switch语句 举例,程序说明: 如果去掉case 8和case 9后的break; 语句,那么当变量year的值为8时

14、,程序将会输出 猴鸡狗 因为case后如没有break语句,程序就不停止,一直执行到break才会停止,否则一直执行到整个switch语句结束。,西南交通大学,switch语句 举例,【例3.9】判断输入字符是元音字符、空白字符还是其它。 #include int main(void) char c; printf(输入一个字符:); scanf(%c,演示例3. 9,西南交通大学,switch语句 举例,switch(c) default: printf(这是其它字符n); case a: case A: case e: case E: case i: case I: case o: case O: case u: case U: printf(这是元音字母n);break; case : case n: case t: printf(这是空白符n);break; return 0;,西南交通大学,switch语句 举例,程序说明: (1)注意case后的常量的写法。每个case后只能写一个常量,每种情况都要单独用一个case写出来。 (2)ca

温馨提示

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

最新文档

评论

0/150

提交评论