c语言选择控制结构_第1页
c语言选择控制结构_第2页
c语言选择控制结构_第3页
c语言选择控制结构_第4页
c语言选择控制结构_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

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

文档简介

1、Chap 5 选择控制结构A.算法的描述方法B.用于单分支控制的if语句C.用于双分支控制的if-else语句D.用于多路选择的switch语句E.关系运算符F.条件运算符G.逻辑运算符生活中的问题求解:Problem: 烤蛋糕(Baking a Cake)How to solve:1. Start2. 将烤箱预热3. 准备一个盘子4. 在盘子上抹上一些黄油5. 将面粉、鸡蛋、糖和香精混合在一起搅拌均匀6. 将搅拌好的面粉团放在盘子上7. 将盘子放到烤箱内8. End 生活中的问题求解 (Problem Solving Process)Problem: 准备早餐( Prepare a Brea

2、kfast) 分治策略(Divide and Conquer Strategy )1. Start2. 准备早餐 2.1 准备一个金枪鱼三明治 2.2 准备一些薯条 2.3 冲一杯咖啡3. End 分治策略(Divide and Conquer Strategy )1. Start2.准备早餐 2.1 准备一个金枪鱼三明治 2.1.1 拿来两片面包 2.1.2 准备一些金枪鱼酱 2.2 准备一些薯片 2.3 冲一杯咖啡3. End 分治策略(Divide and Conquer Strategy )面向过程的程序 = 数据结构 + 算法计算机中的算法( Algorithm ) 为解决一个具体问

3、题而采取的、确定的、有限的操作步骤,仅指计算机能执行的算法算法的概念及其描述方法 有穷性在合理的时间内完成 确定性,无歧义 如果x0,则输出Yes;如果x0,则输出No 有效性 能有效执行 负数开平方 没有输入或有多个输入 有一个或多个输出 算法的特性u自然语言描述u传统流程图(Flowchart)u在1966年,Bohra 与 Jacopini 提出uN-S结构化流程图u1973年,美国学者I.Nassi 和 B.Shneiderman 提出u伪码(Pseudocode)表示算法的描述方法Flowchart represents algorithm graphically.流程图(Flowc

4、hart)Start/EndProcessInput/OutputTestConnectorFlow of activities计算机中的问题求解过程Example :买苹果,计算价钱Calculate and display the price of a number of apples if the quantity in kg and price per kg are given. 给变量赋值 赋值表达式语句赋值表达式语句 赋值表达式赋值表达式 ; price = quantity*pricePerkg;输入输出数据 标准库函数标准库函数调用语句调用语句 scanf(%d, &p

5、ricePerkg); printf(%d, price);顺序结构( Sequence Structure)ABC计算两整数的最大值 关系运算符与关系表达式Relational Relational OperationDescriptionExamples of ExpressionValueLess than6 91 (true)=Less than or equal to5 Greater than2 60 (false)=Greater than or equal to9 = 51 (true)=Equal to7 = 50 (false)!=Not equal to6 != 51 (

6、true)用于单分支控制的条件语句(Single Selection)step aif startstep mstep n end_if step bThe structure is similar to single selection (flowchart)if StatementSyntax:复合语句compound statement被当作一条语句看待if StatementSyntax:#include main() int a, b, max; printf(Input a,b:); scanf(%d%d, &a, &b); if (a b)max = a; if

7、(a = b)max = b; printf(max = %dn, max);Input a,b: 20 15max = 20_单分支(2):求绝对值输入1个整数,输出它的绝对值 (实现fabs函数)当number = 0时,保持不变源程序-求绝对值#include int main(void) int number; printf(Enter a number: ); scanf(%d, &number); if(number 0) number = -number; printf(The absolute value is %d.n, number); return 0;Enter

8、 a number: 10 The absolute value is 10.Enter a number: -300 The absolute value is 300.Step aif startStep mStep nend_ifelse startStep xStep yend_elseStep zThe structure is similar to double selection (flowchart)if - else StatementSyntax:orNoYesInput a and bOutput maxa b?max bmax aStartEndTurn Flowcha

9、rt to C Program#include main() int a, b, max; printf(Input a, b:); scanf(%d,%d, &a, &b); if (a b) max = a; else max = b; printf(max = %d, max); if (a b) max = a; if (a = b) max = b;#include main() int a, b, max; printf(Input a, b:); scanf(%d,%d, &a, &b); if (a b) max = a; else max =

10、b; printf(max = %d, max); max = a b ? a : b; 双分支(2):判断数字的奇偶性例3-7 输入1个整数,判断该数是奇数还是偶数number % 2 = 0读入一个整数if (该数能被2整除) 则该数为偶数else 该数为奇数源程序-判断数字的奇偶性#include int main(void) int number; printf(Enter a number: ); scanf(%d, &number); if(number % 2 = 0) printf(Tne number is even. n); else printf(Tne numb

11、er is odd. n); return 0;Enter a number: 329 Tne number is odd.Enter a number: 1028Tne number is even. 用于多分支控制的条件语句(1)(Multiple Selection)Step a (expression1)Step m (expression2) Step n Step z 用于多分支控制的条件语句(2)(Multiple Selection)Step a(expression1) Step m (expression2) Step n Step x Step zIf-else-if示例

12、:分段计算水费004( )01532.510.515xxyf xxxx源程序-分段计算水费# include int main(void) double x, y; printf(Enter x:); scanf(%lf, &x); if (x 0) y = 0; else if (x = 15) y = 4 * x / 3; else y = 2.5 * x - 10.5; printf(f(%.2f) = %.2fn, x, y); return 0; Enter x: -0.5f(-0.50) = 0.00 Enter x: 9.5f(9.50) = 12.67Enter x:

13、21.3f(21.30) = 42.75嵌套的 if else 语句if(表达式表达式1)if(表达式表达式2) 语句语句1else 语句语句2 elseif(表达式表达式3) 语句语句3 else 语句语句4 嵌套的if-else结构示例: 设计程序,从键盘任意输入三个整数,编程输出三者之中的最小数。 If(a=b) if(c=a) min = c; else min = a; else if(c=b) min = c; else min = b; temp = ab?a:b;min = temp c? temp :c;The structure is similar to multiple

14、 selection (flowchart)Important Rule !Example: switch (month) case 1:printf(Januaryn);break;case 2:printf(Februaryn);break;case 3:printf(Marchn);break;default:printf(Othersn);break; printf(End);January_JanuaryEnd _Example: switch (month) case 1:printf(Januaryn);break;case 2:printf(Februaryn);break;c

15、ase 3:printf(Marchn);break;default:printf(Othersn);break; printf(End);March_MarchEnd _Example: switch (month) case 1:printf(Januaryn);break;case 2:printf(Februaryn);break;case 3:printf(Marchn);break;default:printf(Othersn);break; printf(End);Example: switch (month) case 1:printf(Januaryn);break;case

16、 2:printf(Februaryn);case 3:printf(Marchn);break;default:printf(Othersn);break; printf(End);Example: switch (month) case 1:printf(Januaryn);break;case 2:printf(Februaryn);case 3:printf(Marchn);break;default:printf(Othersn);break; printf(End);February_March _End _Example: switch (month) case 1:printf

17、(Januaryn);break;case 2:printf(Februaryn);case 3:printf(Marchn);break;default:printf(Othersn);break; printf(End);最好不省略最好不省略!假设自动售货机出售4种商品,薯片(crisps)、爆米花(popcorn)、巧克力(chocolate)和可乐(cola),售价分别是每份3.0、2.5、4.0和3.5元。u在屏幕上显示以下菜单,用户可以查询一个商品的价格,菜单样式:1 Select crisps2 Select popcorn 3 Select chocolate4 Select

18、cola 0 Exit#include int main(void) int choice, i; double price; printf(1 Select crisps n); printf(2 Select popcorn n); printf(3 Select chocolate n); printf(4 Select cola n); printf(0 exit n); printf(Enter choice: ); scanf(%d, &choice); switch (choice) case 1: price=3.0; break; case 2: price=2.5;

19、 break; case 3: price=4.0; break; case 4: price=3.5; break; default: price=0.0; break; printf(price = %0.1fn, price); printf(Thanks n); 1 Select crisps2 Select popcorn 3 Select chocolate4 Select cola 0 ExitEnter choice: 1price = 3.0Thanks1 Select crisps2 Select popcorn 3 Select chocolate4 Select col

20、a 0 ExitEnter choice: 7price = 0.0Thanks编程设计一个简单的计算器程序,要求用户从键盘输入编程设计一个简单的计算器程序,要求用户从键盘输入如下形式的表达式:如下形式的表达式: 操作数操作数1 运算符运算符op 操作数操作数2 然后,计算并输出表达式的值然后,计算并输出表达式的值 指定的运算符为指定的运算符为 加(加(+) 减(减(-) 乘(乘(*) 除(除(/) 示例:计算器程序思考题 语句if(0=data2)的必要性避免除零错误 1998年11月,科学美国人杂志描述了美国导弹巡洋舰约克敦号上的一起事故,除零错导致军舰推进系统的关闭 为什么不用if (d

21、ata2 = 0)? 如果要求输入的算术表达式中的操作数和运算符之间可以加入任意多个空格符,那么程序如何修改?空格空格思考题 如果要求对浮点数进行运算,那么程序如何修改? 修改例5.5程序,使其能进行浮点数的算术运算,同时允许使用字符*、x与X作为乘号,并且允许输入的算术表达式中的操作数和运算符之间可以加入任意多个空格符。 main()float data1, data2; char op; printf(Please enter the expression:);scanf(%f %c%f, &data1, &op, &data2); switch (op) case

22、 +:printf(%f + %f = %fn, data1, data2, data1 + data2); break;case -:printf(%f - %f = %fn, data1, data2, data1 - data2);break;case *: case x:case X:printf(%f * %f = %fn, data1, data2, data1 * data2); break;case /:if (fabs(data2) 1)&(y1) (x1)|(y1) (x1) !(x1) 即 x=1逻辑运算符的含义 3x3)&(x= A) & (ch

23、 = 1) & (b+ = 5) a0b5尽量使用最少的操作数来确定表达式的值,这就尽量使用最少的操作数来确定表达式的值,这就意味着表达式中的某些操作数可能不会被计算意味着表达式中的某些操作数可能不会被计算题目: 若有变量说明“int a=0,b=1,c=2;” 执行语句“if(a0&+b0) c+; else c-;”后 变量a、b、c的值分别是 。题目:设有变量说明“int a=12,b=15,c;”,则对表达式c=(a|(b-=a)求值后,变量b和c的值分别为 。 A)3,1 B)15,12 C)15,1 D)3,12if(ch = a & ch = A &

24、; ch = 0 & ch = 9) digit +;else other +;实现多路选择实现多路选择判断输入字符的类型: 测试的主要方式 给定特定的输入,运行被测软件 检查软件的输出是否与预期结果一致 测试用例的选取方法 尽量覆盖所有分支,减少重复覆盖 测试的目的 通过运行测试用例找出软件中的Bug 成功的测试在于发现迄今为止尚未发现的Bug 测试人员的主要任务是站在使用者的角度,通过不断使用和攻击,尽可能多地找出Bug 测试的过程就像黑客的攻击过程,专门找软件漏洞 本章扩充内容采用测试用例,通过运行程序查找程序错误的方法 实质是一种抽样检查,彻底的测试是不可能的 彻底的测试不现实

25、,要考虑时间、费用等限制,不允许无休止的测试测试只能证明程序有错,不能证明程序无错 E.W.Dijkstra测试能提高软件质量,但提高软件质量不能依赖于测试本章扩充内容白盒测试(结构测试) 在完全了解程序的结构和处理过程的情况下,按照程序内部的逻辑测试程序,检验程序中的每条逻辑路径是否都能按预定要求正确工作 主要用于测试的早期黑盒测试(功能测试) 把系统看成一个黑盒子,不考虑程序内部的逻辑结构和处理过程,只根据需求规格说明书的要求,设计测试用例,检查程序的功能是否符合它的功能说明 主要用于测试的后期软件测试方法的分类通常结合使用选择有限数量的重要路径进行通常结合使用选择有限数量的重要路径进行白

26、盒测试,对重要的功能需求进行黑盒测试白盒测试,对重要的功能需求进行黑盒测试#include #include main()float a, b, c;printf(Input the three edge length:);scanf(%f, %f, %f, &a, &b , &c); if (a+bc & b+ca & a+cb)/*三角形的基本条件三角形的基本条件*/if (a=b | b=c | c=a)printf(等腰三角形等腰三角形);else if (a*a+b*b=c*c | a*a+c*c=b*b | b*b+c*c=a*a)print

27、f(直角三角形直角三角形);elseprintf(一般三角形一般三角形);elseprintf(不是三角形不是三角形n);示例:判断三角形的类型错在哪里错在哪里?一般三角形示例:判断三角形的类型main()float a, b, c;int flag = 1;if (a+bc & b+ca & a+cb)/*三角形的基本条件三角形的基本条件*/if (a=b | b=c | c=a)printf(等腰等腰);flag = 0;if (a*a+b*b=c*c | a*a+c*c=b*b | b*b+c*c=a*a)printf(直角直角);flag = 0;if (flag)pr

28、intf(一般一般);printf(三角形三角形n);elseprintf(不是三角形不是三角形n);main()if (a+bc & b+ca & a+cb) /*三角形的基本条件三角形的基本条件*/if (a=b & b=c & c=a)printf(等边等边);flag = 0;if (a=b | b=c | c=a)printf(等腰等腰);flag = 0;if (a*a+b*b=c*c | a*a+c*c=b*b | b*b+c*c=a*a)printf(直角直角);flag = 0;if (flag)printf(一般一般);printf(三角形三

29、角形n);elseprintf(不是三角形不是三角形n);错在哪里?错在哪里?main()if (a+bc & b+ca & a+cb) /*三角形的基本条件三角形的基本条件*/if (a=b & b=c & c=a)printf(等边等边);flag = 0;else if (a=b | b=c | c=a)printf(等腰等腰);flag = 0;if (a*a+b*b=c*c | a*a+c*c=b*b | b*b+c*c=a*a)printf(直角直角);flag = 0;if (flag)printf(一般一般);printf(三角形三角形n);elseprintf(不是三角形不是三角形n);main()if (a+bc & b+ca & a+cb) /*三角形的基本条件三角形的基本条件*/if (a=b | b=c | c=a)printf(等腰等腰);flag = 0;else

温馨提示

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

评论

0/150

提交评论