版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三章 C程序的流程设计,一、算法,算法的性质与组成要素 算法是进行操作的方法和步骤。 算法的性质: 解题算法是一有穷动作序列。 序列中只有一个初始动作。 序列中每一个动作仅有一个后继动作。 序列终止,表示问题得到解答,或问题没有解答。 算法的要素: 操作:各种运算、I/O读写均称为操作。计算机算法是由操作组成的。 控制结构: 顺序结构 选择结构 循环结构,算法的描述 自然语言 流程图 伪代码 计算机语言 以求两个数的最大数为例说明几种算法。,自然语言: s1: 输入两个数a,b s2:找出最大数赋给m s3:输出最大数m,N-S流程图:,伪代码: input a ,b if ab then
2、m=a else m=b end if print m,C代码: main() int a,b,m; scanf(“%d %d”, ,上机问题: 逻辑运算的注意事项。E2-15,二、用C语句描述算法,表达式语句 C语言是一种表达式语言,所有操作都通过表达式来实现。 由表达式组成的语句叫表达式语句,它由表达式后加一分号组成。 表达式语句的三种基本类型: 赋值语句:x=sin(y); 函数语句:printf(“a=%d b=%d”,a,b); 空语句: ; 复合表达式语句(逗号表达式):几个表达式语句用“ ,”分隔组合而成,如i=1 , j=2; 。逗号表达式的值为最后一个表达式的值,如 a=(a
3、=6,a*3,a+3) 结果a=9。,复合语句(分程序) C语言允许将一组语句括在一对花括号内,称为复合语句。如: c=getchar( ); putchar(c); 在分程序中可定义变量,但只在分程序中有效,且上级分程序中的变量对下级分程序有效,反之无效。如: main( ) int a=2; int b=3; printf(“a=%d b=%d ”,a,b); /*正确,可使用上级分程序中定义的变量a*/ printf(“a=%d b=%d ”,a,b); /*出错,下级分程序定义的变量对上级无效*/ ,三、选择结构程序设计,if else 结构 例L3-3求一个数的绝对值。 main()
4、 int x,y; scanf(“%d”, ,例L3-4 求三个数中的最大值。,main() int a=12,b=2,c=24,max; clrscr(); max=a; if(bmax)max=b; if(cmax)max=c; printf(max=%d,max); getch(); ,if else 的嵌套 符号函数sign (例L3-4-2),int sign(float x) int f; if (x0) f =1; else if (x=0) f =0; else f =-1; return( f ); ,else if结构:是if else嵌套的一种变形。 (例L3-4-3),
5、int sign(float x) int f ; if (x0) f =1 ; else if (x= =0) f =0 ; else f = -1; return( f ) ; ,switch结构,switch( 表达式) case 常量表达式1:语句1;break ; case 常量表达式2:语句2;break ; case 常量表达式n:语句n; break ; default:语句n+1; ,例L3-6 求分数的等级 switch(cj/10) case 0: case 1: case 2: case 3: case 4: case 5: dj=c;break; case 6: ca
6、se 7: dj=b;break; default:dj=a; ,例L3-7 测试输入的是数字、空白还是其它字符。 test_char(int c) switch(c) case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9:printf(It is a digit.n);break; case : case n: case t:printf(It is a white.n);break; default:printf(It is a char.n); ,例L3-8 联想猜词游戏。 #incl
7、ude main() int c; c=getchar();getchar(); switch(c) case a: case A: printf(Ada,Algol?n); c=getchar();getchar(); switch(c) case c: case D: printf(Adan);break; case l: case L: printf(Algoln);break; default:printf(Input error!n); break; case b: case B: printf(Basic,BCDL?n); c=getchar();getchar(); switch
8、(c) case a: case A: printf(Basicn);break; case c: case C: printf(BCDLn);break; default:printf(Input error!n); break; case c: case C: printf(C,Cobol?n); c=getchar();getchar(); switch(c) case c: case C: printf(Cn);break; case o: case O: printf(Coboln);break; default:printf(Input error!n); break; defau
9、lt:printf(Input error!n); ,四、循环程序设计,程序设计中,人们经常将一些复杂、不易求解的的过程转换为易于理解的多次重复操作: 可降低问题的复杂性 可充分发挥计算机的快速的特点 常用的循环算法:穷举与迭代 穷举:对问题的可能状态一一测试,直到找到解或将所有可能状态都测试一遍。 计数器法 标志法 迭代:是一个不断用新值取代变量的旧值,或由旧值递推出变量的新值的过程。,穷举法实例,求所有水仙花数的问题。 水仙花数是指:一个三位数,其各位数字立方和等于该数本身。 例如 153=13+33+53,故153是水仙花数。 用穷举法解此题的思路: 从最小的三位数开始,到最大的三位为止
10、,一个个拿出来进行判断,看是否是水仙花数。 如何判断一个数i是否是水仙花数的关键:如何将一个三位数的各位取出。 方法一、用数学方法计算出各位的值: 个位a:a=i %10 百位c:c=i /10 十位b:b=(i/10)%10 方法二、各位依次从最小值到最大值一个个试: 个位a:1 到9 百位c:0到9 十位b:0到9,迭代法实例,求一元高次方程的近似解问题。 一元五次以上的方程找不到通用的根的解析表达式,只能求近似解。 穷举法解此题的思路:先找一个粗略解,再通过一定的方法由粗略解得到一个更精确的解,直到找到的解的精度达到要求为止。 方法一、二分迭代法: 先取两个粗略解x1,x2,如果f(x1
11、),f(x2)符号相反,则方程在(x1,x2)中至少有一个根。如果在该区间是单调函数,则有一个实根。 进行二分:取x3=(x1+x2)/2作为一个新的粗略解,则它至少比x1,x2中的一个更接近真实的解。 将x3和与x3反号的x1或x2作为新的一对粗略解,继续二分,直到这一对粗略解的差小于给定的误差为止。,x1,x*,x2,f(x1),f(x3),f(x2),f(x4),x4,x3,迭代法实例,求一元高次方程的近似解问题。 方法二、牛顿迭代法(切线法): 设xk是方程f(x)=0的一个近似解,过Pk作f(x)的切线,有: f (x)=f(xk)/(xk-xk+1) 解得:xk+1=xk-f(xk
12、)/f (xk) 该解比xk更接近于实际解。 再过xk+1作f(x)的切线,重复一述过程。,x*,xk,f(x),pk,xk+1,xk+2,1、While 循环结构,While 循环控制结构,while (条件表达式) 循环体 ,注意:如果循环体只有一个语句,则可不要花括号。 While 循环的执行过程: 计算条件表达式的结果。 结果为非0则执行循环体,再返回到1。 结果为0则不执行循环体,执行while循环后面的语句。,While 循环举例 例L3-14 简单的打印数据程序1 例L3-15 简单的打印数据程序2 例L3-16 输入字符原样输出1 例L3-16-2 输入字符原样输出2 例L3-
13、17 等待用户输入指定字符 例L3-add 累加(1+2+3+、1+3+5+ 、2+4+6+、 3+6+9+) 例L3-mul 累乘(n!) 例L3-flow 求水仙花数 例L3-18 搬砖问题 例L3-19 爱因斯坦阶梯问题 例L3-min(2) 求最小公倍(穷举法、加倍法) 例L3-20 求最大公约数(欧几里德法) 例L3-21 求平方根(牛顿迭代法) 例max_min 求若干个数的最大、最小值。,do while结构,格式: Do 循环体 while(条件);,注意: 分号不能丢!,for 结构,格式: for ( 初始化表达式;条件表达式;修正表达式) 循环体 ,1,2,3,4,三种循
14、环举例,例1、求水仙花数 L3-flow:while L3-flow2: do while L3-flow3: for 例2、求1+2+3+n L3-sum: while L3-sum2: do while L3-sum3: for,Continue 与break在循环中的应用,continue :直接返回到循环的开始。 break : 中止循环。 例:求1,1000能被7整除的数之和,当和大于1000时就中止。 L3-div,goto循环,格式: label: 循环体 goto label; 例:求1+2+3+100 L3-goto L3-goto2 注:一般情况下尽量不用goto循环导致程序结构的破坏。,综合举例,例1:打印九九表 L3-22 行列积式 L3-22-2 直
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年陈柱成课题组诚聘实验室技术员备考题库及答案详解(夺冠系列)
- 贵州省西能煤炭勘查开发有限公司2025年招聘备考题库完整参考答案详解
- 2025年乌鲁木齐市第五十八中学教师招聘备考题库及答案详解(易错题)
- 产后心理护理的心理康复
- 2026年物流管理法律法规题库及答案
- 数学试题卷答案【黑吉辽蒙卷】辽宁省名校联盟2025年高三10月份联合考试(10.9-10.10)
- 2025-2026学年评价美术教学设计
- 2025-2026学年中职vb单元教学设计策略论文引言
- 针织厂文明生产制度
- 2025-2026学年美术核心素养教学设计
- 以热爱为翼为青春飞驰+课件+-2026届高三高考百日冲刺励志主题班会
- 2026-2030中国汽车加气站行业市场发展分析及发展趋势与投资机会研究报告
- 2026年AI原生网络架构项目投资计划书
- 萍乡市事业单位2026年统一公开招聘工作人员备考题库含答案详解(突破训练)
- 【历史】2025-2026学年统编版八年级历史下册知识点填空
- 2025年医疗影像诊断操作流程指南
- GB/T 46816-2025铝合金法兰锻件通用技术规范
- 2026年建筑设备自动化设计中的人工智能应用
- 海洋科考船探索之旅
- 肾性贫血课件
- 2026年山东英才学院单招职业技能考试题库附答案
评论
0/150
提交评论