第4章选择结构程序设计_第1页
第4章选择结构程序设计_第2页
第4章选择结构程序设计_第3页
第4章选择结构程序设计_第4页
第4章选择结构程序设计_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

1、第四章 选择结构程序设计本章要点本章要点内容要点提示内容要点提示:什么是算法?算法是如何描述的?什么是算法?算法是如何描述的?程序的三种基本控制结构是什么?程序的三种基本控制结构是什么?执行流程怎样?执行流程怎样?如何用关系表达式和逻辑表达式表如何用关系表达式和逻辑表达式表示简单条件、复杂条件?示简单条件、复杂条件?if语句有几种形式?条件如何判断?语句有几种形式?条件如何判断?switch语句一般形式如何?执行过语句一般形式如何?执行过程怎样?程怎样?本章内容4.1 算法及其描述方法算法及其描述方法 4.2 关系运算与逻辑运算关系运算与逻辑运算4.3 if语句语句4.4 条件运算符与条件表达

2、式条件运算符与条件表达式4.5 switch语句语句4.6 选择结构程序举例选择结构程序举例 *4.7 if语句嵌套语句嵌套 4.1 算法及其描述方法算法及其描述方法 算法:算法: 把为解决一个问题而采取的方法和步骤称为把为解决一个问题而采取的方法和步骤称为“算法算法”。 有三种控制结构:有三种控制结构: 顺序结构、选择结构和循环结构。顺序结构、选择结构和循环结构。顺序结构顺序结构:计算机自动按照语句编写的顺序一句一句执:计算机自动按照语句编写的顺序一句一句执行语句。行语句。选择结构选择结构:也称分支结构。根据输入的数据或中间结果:也称分支结构。根据输入的数据或中间结果的情况,选择一组语句执行

3、。的情况,选择一组语句执行。循环结构循环结构:又称重复结构,即当给定条件满足时,反复:又称重复结构,即当给定条件满足时,反复执行某一部分语句。执行某一部分语句。4.1 算法及其描述方法算法及其描述方法算法的表示方法算法的表示方法1.自然语言与伪代码表示方法自然语言与伪代码表示方法 (1)自然语言表示法)自然语言表示法将解决问题的步骤用自然语言表示。将解决问题的步骤用自然语言表示。【例【例4.1】计算火车行李托运费。输入行李重量】计算火车行李托运费。输入行李重量,计算并输出托运费。计算并输出托运费。 收费标准:收费标准: (1)不超过不超过50公斤,每公斤公斤,每公斤0.35元;元; (2)超过

4、超过50公斤,其中公斤,其中50公斤同公斤同(1),超过部,超过部分每公斤分每公斤0.50元。元。4.1 算法及其描述方法算法及其描述方法算法:算法:步骤步骤1: 输入行李的重量输入行李的重量步骤步骤2:根据行李的重量计算费用:根据行李的重量计算费用若重量若重量 payweight*0.35= pay结束结束不成立不成立成立成立4.1 算法及其描述方法算法及其描述方法3 n-s流程图表示方法流程图表示方法(1)顺序结构)顺序结构(2)选择结构)选择结构(3)循环结构)循环结构 当型循环当型循环 直到型循环直到型循环 abpab成立成立不成立不成立 当当p成立成立a 直到直到p成立成立a4.1

5、算法及其描述方法算法及其描述方法用用n-s流程图表示例流程图表示例4.1的算法的算法 输入输入weightweight50成立成立不成立不成立pay=weight*0.35pay=50*0.35+(weight-50)*0.5输出输出 pay4.2 关系运算与逻辑运算关系运算与逻辑运算关系运算关系运算1.关系运算符关系运算符 (大于)(大于) = (大于或等于大于或等于) = (等于)(等于) != (不等于)(不等于)优先级:优先级: 高高 低低 , =, !=赋值运算符赋值运算符算术运算符算术运算符2.关系表达式关系表达式一般形式为:表达式关系运算符表达式一般形式为:表达式关系运算符表达式

6、合法的关系表达式:合法的关系表达式: ab a+bc-d (a=3)=b (ab)=(bc) 关系表达式的值:关系表达式的值: 逻辑值逻辑值 “真真” “1”表示表示 “假假” “0”表示表示4.2 关系运算与逻辑运算关系运算与逻辑运算例如:假设例如:假设num1=3,num2=4,num3=5,则:,则: (1)num1num2的值的值=0。 (2)(num1num2)!=num3的值的值=1。 思考:改变思考:改变num1或或num2的值,会影响整个表达式的值的值,会影响整个表达式的值吗?吗? 注意:关系表达式的值,还可以参与其它种类的运算注意:关系表达式的值,还可以参与其它种类的运算 (

7、为什么?)为什么?) (4)(num1=0)&(x10) (x5) !(x=0) (year%4=0&year%100!=0)|(year%400=0) 逻辑表达式的值逻辑表达式的值:例如:例如:num=12, 则:则: !num的值为的值为 0; num=1 num31的值为的值为 1。数值与逻辑量的对应:数值与逻辑量的对应: (1)逻辑值逻辑值 数值数值 真真 1 假假 0 (2)数值数值 逻辑值逻辑值 0 假假 非非0 真真4.2 关系运算与逻辑运算关系运算与逻辑运算注意注意:1. 5x5&x=5 y10写成写成 y=103. =与与=的完全不同的完全不同如如 a

8、=10; if( a=20) x=x+1; else y=y+14.关系表达式和逻辑表达式的运算结果得到一个逻辑值:关系表达式和逻辑表达式的运算结果得到一个逻辑值:真或者假。真或者假。 c语言中没有专门的逻辑值,也没有专门的逻辑变语言中没有专门的逻辑值,也没有专门的逻辑变量用零表示假,用非零值表示真量用零表示假,用非零值表示真-非零即为真非零即为真!4.2 关系运算与逻辑运算关系运算与逻辑运算例例4.1的程序清单的程序清单void main() float weight,pay; printf( weight= ); scanf( %f ,&weight); if (weight=90

9、) printf(“good! ”); printf(“your score is %d.n”,score); if语句的执行过程是:语句的执行过程是:4.3 if语句语句2. if-else语句语句语句的一般形式为:语句的一般形式为:if(表达式)(表达式) 语句语句1else 语句语句2假假真真表达式表达式语句语句1语句语句2假设假设x的值是的值是5,y的的值是值是7,这段程序执,这段程序执行后会输出行后会输出?例如:例如: if(xn2) max=n1; else max=n2; if ( n3max) max=n3; printf( max=%.2fn ,max); 改为:改为: ma

10、x=n1; if(n2max) max=n2; if(n3max) max=n3;真真假假假假真真开始开始输入输入n1,n2,n3n2maxmax=n1max=n2n3maxmax=n3输出输出 max结束结束这种方法即擂台法,对从这种方法即擂台法,对从3个以上的数中找最大数的个以上的数中找最大数的处理,非常有效。处理,非常有效。例题:输入一个数,判断它是否能被整除,若能被例题:输入一个数,判断它是否能被整除,若能被整除,打印整除,打印yes;不能被整除,打印;不能被整除,打印no#include void main( ) int n; printf(“input n:”); scanf(“%

11、d”,&n);if(n%3=0)printf(“n=%d yesn”,n);else printf(“n=%d non”,n); 程序有错吗?程序有错吗?4.3 if语句语句多分支多分支if语句语句当当if-else语句中的语句语句中的语句2是另一条是另一条if语句时,就构成了多分支语句时,就构成了多分支if语句。语句。语句的一般形式为:语句的一般形式为:if(表达式表达式1) 语句语句1else if(表达式表达式2) 语句语句2else if(表达式表达式3) 语句语句3 . . .else if(表达式表达式n) 语句语句nelse 语句语句n+1表达式表达式1 1表达式表达式2

12、表达式表达式3表达式表达式4表达式表达式5语句语句1语句语句2语句语句3语句语句4语句语句6语句语句5真真假假假假假假假假假假真真真真真真真真执行过程:执行过程:4.3 if语句语句【例【例4.34.3】求如下函数式】求如下函数式y y的值。的值。 4.3 if语句语句【例【例4.34.3】求如下函数式】求如下函数式y y的值。的值。 程序代码:程序代码:#include #include void main() double x,y; printf(“enter x:”); scanf(“%lf”,&x); if(x=2) y=x*(x-3)+2.5; else if(xb)?a:b

13、 等价于等价于 if (ab) max=a; else max=b; 条件表达式条件表达式一般形式为:一般形式为:表达式表达式1?表达式?表达式2:表达式:表达式3 求值过程:求值过程:表达式表达式1计算表达式计算表达式2,取其值作为条件取其值作为条件表达式的值表达式的值 计算表达式计算表达式3,取其值作为条件取其值作为条件表达式的值表达式的值 真假4.4 条件运算符与条件表达式条件运算符与条件表达式【例【例 4.4】 从键盘上输入一个字符,如果它是大写字从键盘上输入一个字符,如果它是大写字母,则把它转换成小写字母输出;否则,直接输出。母,则把它转换成小写字母输出;否则,直接输出。void m

14、ain() char ch; printf(input a character: ); scanf(%c,&ch); printf(ch=%cn,ch);在在c语言中,用语言中,用switch语句描述多路按值选择结构。语句描述多路按值选择结构。switch语句的一般形式为:语句的一般形式为:switch(表达式表达式) case 常量表达式常量表达式1:语句:语句1 case 常量表达式常量表达式2:语句:语句2 . . case 常量表达式常量表达式n:语句:语句n default: 语句语句n+1表达表达式式语句语句1语句语句3语句语句2语句语句n+1值值1值值2值值3值值n+1执

15、行过程:执行过程:4.5 switch语句语句4.5 switch语句语句 说明:说明:(1)switch后面括号内的表达式的类型只限于是后面括号内的表达式的类型只限于是整型或整型或字符型或枚举型字符型或枚举型。(2)各子句中包含的语句可以是任意条合法的)各子句中包含的语句可以是任意条合法的c语言语句,语言语句,也可以没有语句。也可以没有语句。(3)default子句可以省略,若不省略,至多出现一次。子句可以省略,若不省略,至多出现一次。(4)各个)各个case和和default的出现次序不影响执行结果。习的出现次序不影响执行结果。习惯上总是将惯上总是将default子句写在所有子句写在所有c

16、ase子句之后,有必子句之后,有必要也可以写在某个要也可以写在某个case子句之前。子句之前。(5)多个)多个case子句可以共用一组执行语句。子句可以共用一组执行语句。4.5 switch语句语句 例如:执行下面这段代码时,若例如:执行下面这段代码时,若gread的值是的值是b,结果?结果?switch(gread) case a:printf(“great!n”); case b:printf(“good!n”); case c:printf(“ok!n”); case d:printf(“no!n”); default:printf(“error!n”);程序执行将输出:程序执行将输出:

17、good!ok!no!error!如果想只执行某个子句中的语句,排斥其它的情况,最常用如果想只执行某个子句中的语句,排斥其它的情况,最常用的方法是使用的方法是使用break语句,每个子句都以语句,每个子句都以break语句结束。语句结束。在在switch语句中,执行语句中,执行break 语句将跳出语句将跳出switch语句,使控语句,使控制转向制转向switch语句的后继语句。语句的后继语句。 为什么为什么错了错了?4.5 switch语句语句【例【例4.54.5】输入两个操作数及一个运算符,输出运算结果。】输入两个操作数及一个运算符,输出运算结果。由于由于switchswitch语句的语句

18、的表达式不允许实型表达式不允许实型表达式,当需要以表达式,当需要以实型表达式做选择实型表达式做选择控制时,要把实型控制时,要把实型表达式值映射到一表达式值映射到一个较小范围上的整个较小范围上的整型值。型值。程序代码:程序代码:#includevoid main() float a,b,c; char ch; printf(“enter:”); scanf(“%f%c%f”,&a,&ch,&b); switch(ch) case +:c=a+b;break; case -:c=a-b;break; case *:c=a*b;break; case /:c=a/b; pri

19、ntf(“%5.2f%c%5.2f=%6.2fn”,a,ch,b,c); 4.6 选择结构程序举例选择结构程序举例【例【例4.6】猜随机数的程序:由键盘输入一个数,程序产生】猜随机数的程序:由键盘输入一个数,程序产生一个随机数,判断二者是否相同。一个随机数,判断二者是否相同。 1. 简单简单if语句语句只对两数是否相等做判断。只对两数是否相等做判断。#include#include void main() int r; int g; r=rand(); /*产生一个随机数产生一个随机数*/ printf(input a number:); scanf(%d,&g); /*从键盘输入的数

20、从键盘输入的数*/ if(g=r) /*输入的数与产生的随机数比较输入的数与产生的随机数比较*/ printf(right!n); /*如果二个数相等,输出这条信息如果二个数相等,输出这条信息*/ 4.6 选择结构程序举例选择结构程序举例2. if-else语句语句 #include#include void main() int r; int g; r=rand(); /*产生一个随机数产生一个随机数*/ printf(input a number:); scanf(%d,&g); /*从键盘输入的数从键盘输入的数*/ if(g=r) /*输入的数与产生的随机数比较输入的数与产生的随

21、机数比较*/ printf(right!n); /*如果二个数相等,输出这条信息如果二个数相等,输出这条信息*/ else printf(the number is:%d,you are wrong!n,r); /*如果如果二个数不相等,输出这条信息二个数不相等,输出这条信息*/ 4.6 选择结构程序举例选择结构程序举例3.3.多分支多分支ifif语句语句#include#include void main() int r; int g; r=rand(); / /* *产生一个随机数产生一个随机数* */ / printf(input a number:); scanf(%d,&g)

22、; / /* *从键盘输入的数从键盘输入的数* */ / if(g=r) / /* *输入的数与产生的随机数比较输入的数与产生的随机数比较* */ / printf(right!n); / /* *如果二个数相等,输出这条信息如果二个数相等,输出这条信息* */ / else if(gr) / /* *如果二个数不相等,按照不同情况输出信息如果二个数不相等,按照不同情况输出信息* */ / printf(the number you guessed is too big!n); else printf(the number you guessed is too small!n); 4.6 选择

23、结构程序举例选择结构程序举例4.if4.if语句嵌套语句嵌套 #include#include void main( ) int r,g; r=rand(); / /* *产生一个随机数产生一个随机数* */ / printf(input a number:); scanf(%d,&g); / /* *从键盘输入的数从键盘输入的数* */ / if (g=r) / /* *输入的数与产生的随机数比较输入的数与产生的随机数比较* */ / printf(right!n); / /* *如果二个数相等,输出这条信息如果二个数相等,输出这条信息* */ / else printf(wrong

24、!n); / /* *如果二个数不相等,输出这条信息如果二个数不相等,输出这条信息* */ / if(gr) / /* *按照不同情况输出信息按照不同情况输出信息* */ / printf(the number you guessed is too big!n); else printf(the number you guessed is too small!n); 4.6 选择结构程序举例选择结构程序举例【例【例4. 7】设计一个数制转换的程序,程序可以进行如下的】设计一个数制转换的程序,程序可以进行如下的数制转换:十进制转换为十六进制、十六进制转换为十进数制转换:十进制转换为十六进制、十六

25、进制转换为十进制、十进制转换为八进制、八进制转换为十进制。要求用制、十进制转换为八进制、八进制转换为十进制。要求用菜单实现选择。菜单实现选择。 分析:用菜单控制的程序结构一般是:输出菜单、输入选分析:用菜单控制的程序结构一般是:输出菜单、输入选项、判断选项、根据判断结果执行相应功能。可以按照这项、判断选项、根据判断结果执行相应功能。可以按照这样的结构完成程序的设计。在实现数制转换的部分,用最样的结构完成程序的设计。在实现数制转换的部分,用最简单的方式,利用库函数简单的方式,利用库函数printf()和和scanf()中的格式指令:中的格式指令:%x和和%o。 4.6 选择结构程序举例选择结构程

26、序举例程序代码:程序代码:#includevoid main( ) int choice; int value; printf(convert:n); printf( 1:decimal to hexadecimaln); printf( 2:hexdecimal to decimaln); printf( 3:decimal to octaln); printf( 4:octal to decimaln); printf(“enter your chioce:); scanf(%d,&choice); switch (choice) case 1: printf(enter deci

27、mal value:); scanf(%d,&value); printf(%d in hexdecimal is:%xn,value,value);break; case 2: printf(enter hexdecimal value:); scanf(%x,&value); printf(%x in decimal is :%dn,value,value);break; case 3: printf(enter decimal value:); scanf(%d,&value); printf(%d in hexdecimal is:%on,value,value

28、);break; case 4: printf(enter octal value:); scanf(%o,&value); printf(%o in hexdecimal is :%dn,value,value); 【例【例4-10】计算:】计算: sin(x) 0.5x1.5 y(x)= cos(x) 1.5x4.5 tan(x) 4.5x7.5分析:分析:为了能用为了能用switch语句描述语句描述y(x)的计算,要把实型变的计算,要把实型变量量x的值的值映射映射到整型,即对于到整型,即对于x的每个区间用的每个区间用1个或个或多个整数表示。从题目可以看出,各个区间的上多个整数表示

29、。从题目可以看出,各个区间的上下限小数部分均为下限小数部分均为0.5,所以,只要把,所以,只要把x加加0.5再取再取整后,各个区间就可以映射到整数了。整后,各个区间就可以映射到整数了。#include#includevoid main() float x,y; printf(“input x:”); scanf(“%f”,&x); switch(int)(x+0.5) case 1:y=sin(x);printf(“sin(%f)=%5.2fn”,x,y);break; case 2: case 3: case 4: y=cos(x); printf(“cos(%f)=%5.2fn”,x,y);break; case 5: case 6: case 7: y=tan(x); printf(“tan(%f)=%5.2fn”,x,y);break; default:printf(“error!n”); *4.7 if语句嵌套语句嵌套在在if语句中又包含一个或多个语句中又包含一个或多个if语句的形式称为语句的形式称为if语句的嵌套。语句的嵌套。常见的常见的if语句嵌套的的形式有以下几种:语句嵌套的的形式有以下几种:1. if(表达式表达式1) if(表达式表达式2) 语句语句1; else 语句语句2; else if(表达式表达式3) 语句语句

温馨提示

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

评论

0/150

提交评论