版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第3章 算法和基本程序设计 3.1 算法的概念算法的概念 3.2 结构化程序设计方法结构化程序设计方法 3.3 程序的基本结构程序的基本结构 3.4 顺序结构程序设计顺序结构程序设计 3.5 数据的输入输出数据的输入输出 3.6 c程序的上机步骤程序的上机步骤3.1 算法的概念 1.定义: 做任何事情都有一定的步骤。为解决一个问题而采取的方法和步骤,就称为算法。 2.计算机算法可分为两大类: 数值运算算法:求解数值; 非数值运算算法:事务管理领域。一个著名的公式一个著名的公式 数据结构数据结构+ +算法算法= =程序程序 数据:计算机所能识别、存储和处理的数据:计算机所能识别、存储和处理的对象
2、。数据的动态性。对象。数据的动态性。 数据结构:确定数据对象及其存储方式,数据结构:确定数据对象及其存储方式,并定义在这些数据对象上的运算集合。并定义在这些数据对象上的运算集合。 算法:为解决一个问题而采取的方法和算法:为解决一个问题而采取的方法和步骤。步骤。 算法的特性 1 1 有穷性有穷性 操作步骤是有限的,不是无限的操作步骤是有限的,不是无限的。 2 2 确定性确定性 每个步骤是确定的,无歧义性。每个步骤是确定的,无歧义性。 3 3 有零个或多个输入有零个或多个输入 4 4 有一个或多个输出有一个或多个输出 5 5 有效性有效性 每一步骤能有效执行,并得到确定结果每一步骤能有效执行,并得
3、到确定结果。 3.1.2 算法的评价标准 1. 正确性 对任何合法的输入,算法都会得出正确的结果。 2. 可读性 可读性指算法被理解的难易程度。 3. 健壮性(鲁棒性) 健壮性即对非法输入的抵抗能力。 4. 高效率与低存储量需求 通常,效率指的是算法执行时间;存储量指的是算法执行过程中所需的最大存储空间,两者都与问题的规模有关。二者往往是一对矛盾,常常可以用空间换时间,也可以用时间换空间。 怎样表示一个算法用自然语言表示算法用自然语言表示算法用流程图表示算法用流程图表示算法用用n-s流程图表示算法流程图表示算法用伪代码表示算法用伪代码表示算法用计算机语言表示算法用计算机语言表示算法 歧义性,描
4、述分支、循环算法不方便歧义性,描述分支、循环算法不方便起止框起止框输入输出框输入输出框处理框处理框判断框判断框流程线流程线连接点连接点 【例3.1】 求三个整数的和。 求三个整数和的算法流程图如图所示。开始x+y+z = sum输出sum 的值结束输入x,y,z图3.2 求三个整数和的算法【例3.2】 求最大公约数。m,n为正整数开始结束输入m,n求m/n的余数rr = 0 ?n =m, r =n输出n是否最大公因数的算法求最大公因数的最普遍的算法是欧几里得算法,它最初是公元前由欧几里得提出来的,有时也称它为辗转相除法表述如下:设给定m,n(mn),令r0=m,r1=n,有 则得rk=gcd(
5、rk-1,rk)=gcd(rk-2,rk-1)=gcd(r2,r3)=gcd(r1,r2)=gcd(r0,r1)=gcd(m,n)b|a 表示b整除a或者a整除以b 则 a是b的倍数,b是a的约数rk-2 = qk-1 qk rk + rk =(qk-1 qk +1) rk s1: 求求12=2 s2: 求求23=6 s3: 求求64=24 天啊!共需天啊!共需999个步骤,太可个步骤,太可怕了。怕了。案例案例 求求12341000 s1: 1 p (p:被乘数被乘数) s2: 2 i (i:乘数乘数) s3: pi p s4: i+1 i s5: 若若i1000,返回返回s3;否则,结束。否
6、则,结束。 只需只需5个步骤,简单。个步骤,简单。3.2 结构化程序设计的方法 结构化程序设计思想采用了模块分解与功能抽象和自顶向下、分而治之的方法,从而有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子程序,便于开发和维护,减少程序的出错概率和提高软件的开发效率。 采用结构化程序设计方法应遵循以下原则。 1. 自顶向下 即在程序设计时,先考虑总体,做出全局设计,然后再考虑细节进行局部设计,逐步实现精细化。这种方法称为“自顶向下,逐步细化”的方法。 2. 模块化 就是将一个大任务分成若干个较小的部分,每一部分承担一定的功能,称为“功能模块”。每个模块可以分别编程和调试,然后组成一
7、个完整的程序。模块的划分应遵循一些基本原则,如模块内部联系要紧密,关联程度要高;模块间的接口要尽可能简单,以减少模块间的数据传递。 3. 限制使用goto语句 结构化的程序设计方法结构化的程序设计方法 基本思路基本思路: 把一个复杂问题的求解过把一个复杂问题的求解过程分阶段进行程分阶段进行, ,每个阶段处理的问题每个阶段处理的问题都控制在人们容易理解和处理的范都控制在人们容易理解和处理的范围内围内. . 采用的方法采用的方法: 1 1 自顶而下自顶而下 2 2 逐步细化逐步细化 3 3 模块化设计模块化设计 4 4 结构化编码结构化编码三种基本结构三种基本结构 1 1 顺序结构顺序结构 2 2
8、 选择结构选择结构 3 3 循环结构循环结构3.3 程序的基本结构程序的基本结构三种基本结构的特点三种基本结构的特点 1 1 只有一个入口只有一个入口 2 2 只有一个出口只有一个出口pa 3 3 结构内的每一部分都有机会被执行到结构内的每一部分都有机会被执行到ab 4 4 结构内没有死循环结构内没有死循环顺序结构的流程图符号顺序结构的流程图符号ababab传统流程图传统流程图n-s流程图流程图选择结构的流程图符号选择结构的流程图符号ap成立不成立bap成立不成立传统流程图传统流程图选择结构的流程图符号(续)选择结构的流程图符号(续)成立不成立apbn-s流程图流程图循环结构的流程图符号循环结
9、构的流程图符号ap1成立不成立ab不成立ap2成立ab传统流程图传统流程图while型型until型型循环结构的流程图符号(续)循环结构的流程图符号(续)直到直到p1成立成立a当当p1成立成立awhile型型until型型n-s流程图流程图一个有用的结论一个有用的结论 已经证明:已经证明: 三种基本结构的三种基本结构的顺序组顺序组成成可以表示任何复杂的算法可以表示任何复杂的算法结构。结构。 由基本结构构成的算法,属于由基本结构构成的算法,属于“结构化结构化”算法。算法。有关结构化算法的总结有关结构化算法的总结 一个结构化的算法是由一些基本结构顺一个结构化的算法是由一些基本结构顺序组成的;基本结
10、构之间不存在向前或序组成的;基本结构之间不存在向前或向后的跳转,流程的转移只存在于一个向后的跳转,流程的转移只存在于一个基本结构的范围之内(如循环中的流程基本结构的范围之内(如循环中的流程跳转);跳转); 一个非结构化算法可以用一个等价的结一个非结构化算法可以用一个等价的结构化算法代替,其功能不变。构化算法代替,其功能不变。 如果一个算法不能分解为若干个节本结如果一个算法不能分解为若干个节本结构,则它必然不是一个结构化算法。构,则它必然不是一个结构化算法。3.4 顺序结构程序设计 1. 表达式语句 表达式语句是在各种表达式后加一个分号(;)形成一个表达式语句。 2. 空语句 空语句直接由分号(
11、;)组成,常用于控制语句中必须出现语句之处。它不做任何操作,只在逻辑上起到有一个语句的作用。例如: ; 空语句也是一个语句,不产生任何动作。空语句常用于构成标号语句,标识程序中相关位置;循环语句中空循环体;模块化程序中未实现的模块及暂不链入的模块。 3. 函数调用语句 由函数调用加上分号组成。 4.复合语句是由一对花括号 括起的若干个语句,语法上可以看成是一个语句。复合语句中最后一个语句的分号不能省略。例如下面是一个复合语句: z = x; x = y; y =z; 凡是单一语句可以存在的位置,均可以使用复合语句。复合语句用在语法上是单一语句,而相应操作需多条语句描述的情况。 5. 控制语句
12、控制语句有条件判断语句(if、switch),循环语句(for、while、do-while),转移语句(goto、continue、break、return)。控制语句根据控制条件决定程序的执行流程,控制语句不是顺序执行的。 顺序结构是c语言的基本结构,除非指示转移,否则计算机自动以语句编写的顺序一句一句地执行c语句。 5c语言无i/o语句,i/o操作由函数实现5 #include 字符输出函数3.5 数据的输入与输出 格式格式: putchar( c ): putchar( c )参数参数: c: c为字符常量、变量或表达式为字符常量、变量或表达式功能:把字符功能:把字符c c输出到显示器
13、上输出到显示器上返值:正常,为显示的代码值;出错,为返值:正常,为显示的代码值;出错,为eof(-1eof(-1)【例3.3】 字符数据的输出。#include main( ) char a, b; a=r; b=e; putchar(a); putchar(b); putchar(d); putchar(n);运行后,在屏幕上显示:red 数据输入数据输入字符输入函数 格式格式:getchar( ):getchar( )功能:从键盘读一字符功能:从键盘读一字符返值:正常,返回读取的代码值;出错返值:正常,返回读取的代码值;出错, ,返回返回eof(-1)eof(-1)注意:getchar()
14、函数的括号中没有参数,该函数的输入一直到“回车”才结束。回车前的所有输入字符都会逐个显示在屏幕上,但只只有第一个字符作为函数的返回值有第一个字符作为函数的返回值。 运行时,输入xxx ,在屏幕上显示:x【例3.4】 单个字符的输入和输出。#include main() char ch; /*从键盘上读入字符直到从键盘上读入字符直到“回车回车”结束结束*/ ch= getchar(); /*显示输入的第一个字符显示输入的第一个字符*/ putchar(ch); putchar(n); /*换行换行*/【例3.5】 将小写字母转换成大写。#include main( ) char ch; ch=g
15、etche( ); putchar(ch-32);若输入b,在屏幕上显示: bb 3. 字符串输入/输出函数 字符串输入函数gets() 用来从键盘读入一串字符。函数的调用形式: gets(字符串变量名字符串变量名);在输入字符串后,必须用回车作为输入结束用回车作为输入结束。该回车符并不属于这串字符,由一个“空操作字符( 0 )”在串的最后来代替它。此时空格不能结束字符串的输入,gets函数返回一个指针。字符串输出函数puts(),将字符串数据(可以是字符串字符串常量、字符指针或字符数组名常量、字符指针或字符数组名)显示在屏幕上并换行。函数的调用形式是: puts(字符串数据字符串数据);【例
16、3.6】 字符串的输入和输出。#include main( ) char str80; gets(str); puts(str);当输入为“how are you?”,则输出为:how are you?格式:格式:printf(“printf(“格式控制串格式控制串”,输出表,输出表) )功能:按指定格式向显示器输出数据功能:按指定格式向显示器输出数据返值:正常,返回输出字节数;出错,返回返值:正常,返回输出字节数;出错,返回eof(-1)eof(-1)3.5.3 格式输入与输出_格式输出函数 输出表:要输出的数据(可以没有,多个时以输出表:要输出的数据(可以没有,多个时以“,”分隔)分隔)
17、格式控制串:包含两种信息格式控制串:包含两种信息格式说明:格式说明: %修饰符修饰符格式字符格式字符 ,用于指定,用于指定输出格式输出格式普通字符或转义序列:原样输出普通字符或转义序列:原样输出 格式字符格式字符d,ix,xoucse,efg%格式字符:十六进制无符号整数不带符号十进制整数十进制整数指数形式浮点小数单一字符字符串八进制无符号整数小数形式浮点小数e和f中较短一种百分号本身int a=567;printf ( “%d”,a);int a=255;printf(“%x”,a);int a=65;printf(“%o”,a);int a=567;printf(“%u”,a);char
18、a=65;printf(“%c”,a);printf(“%s”,“abc”);float a=567.789;printf(“%e”,a);float a=567.789;printf(“%f”,a);float a=567.789;printf(“%g”,a);printf(“%”);567ff101567aabc5.677890e+02567.789000567.789% 说明 格式字符要用小写 格式字符与输出项个数应相同,按先后顺序一一对应 输出转换:格式字符与输出项类型不一致,自动按指定格式输出例 main() unsigned int u=65535; printf(”u=%dn,u
19、); 输出结果:u=-1例 int a=3,b=4; printf(“%d %dn”,a,b); printf(“a=%d , b=%dn”,a,b); 例 int a=3,b=4; printf(“%d %dn”,a,b); printf(“a=%d , b=%dn”,a,b);输出结果: 3 4 a=3, b=411 11 11 11 11 11 11 1165535 格式输入函数格式格式: scanf(“: scanf(“格式控制串格式控制串”,地址表),地址表)功能:按指定格式从键盘读入数据,存入地址表指定的功能:按指定格式从键盘读入数据,存入地址表指定的 存储单元中存储单元中, ,并
20、按回车键结束并按回车键结束返值:正常,返回输入数据个数返值:正常,返回输入数据个数 地址表:变量的地址,常用取地址运算符& 格式字符:d,i,o,x,u,c,s,f,e例 scanf(“%d”,&a); 输入:10 则 a=10例 scanf(“%x”,&a); 输入:11 则 a=17 附加格式说明符(修饰符)例 scanf(“%4d%2d%2d”,&yy,&mm,&dd); 输入 19991015 则1999yy, 10 mm, 15 dd例 scanf(“%3d%*4d%f”,&k,&f); 输入 12345678765.43 则123k, 8765.43f例 scanf(“%2d%*3
21、d%2d”,&a,&b); 输入 1234567 则12a, 67b例 scanf(“%3c%2c”,&c1,&c2); 输入 abcde 则ac1, d c2l修饰符功 能hm*用于d,o,x前,指定输入为short型整数用于d,o,x前,指定输入为long型整数用于e,f前,指定输入为double型实数指定输入数据宽度,遇空格或不可转换字符则结束抑制符,指定输入项读入后不赋给变量 输入分隔符的指定 一般以空格、tab或回车键作为分隔符 其它字符做分隔符:格式串中两个格式符间字符例 scanf(“%d%o%x”,&a,&b,&c); printf(“a=%d,b=%d,c=%dn”,a,b,
22、c); 输入 123 123 123 输出 a=123,b=83,c=291例 scanf(“%d:%d:%d”,&h,&m,&s); 输入 12:30:45 则12 h, 30 m, 45 s例 scanf(“%d,%d”,&a,&b) 输入 3,4 则3a, 4 b例 scanf(“a=%d,b=%d,c=%d”,&a,&b,&c); 输入 a=12,b=24,c=36 说明: 用“%c”格式符时,空格和转义字符作为有效字符输入如 scanf(“%c%c%c”,&c1,&c2,&c3); 若输入abc 则ac1, c2, b c3 输入数据时,遇以下情况认为该数据结束: 遇空格、tab、或
23、回车 遇宽度结束 遇非法输入如 scanf(“%d%c%f”,&a,&b,&c); 若输入1234a123o.26 则 1234 a, a b, 123 c 输入函数留下的“垃圾”:例 int x; char ch; scanf(“%d”,&x); ch=getchar(); printf(“x=%d,ch=%dn”,x,ch);执行:123输出:x=123,ch=10例 int x; char ch; scanf(“%d”,&x); scanf(“%c”,&ch); printf(“x=%d,ch=%dn”,x,ch);执行:123输出:x=123,ch=10解决方法:(1)用getchar()清除(2)用函数fflush(stdin)清除全部剩余内容 (3) 用格式串中空格或“%*c”来“吃掉”例 int x; char ch; scanf(“%d”,&x); getchar(); scanf(“ %c”,&ch);或 scanf(“%*c%c”,&ch); 注意: scanf( )函数没有输出功能(即不
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030智慧物流仓储行业市场潜力与仓储智能化技术发展分析
- 2025-2030智慧港口行业领域现状需求供给评估项目投资发展分析报告
- 2025-2030智慧消防设施检测维护技术创新与应急响应机制建设
- 2025-2030智慧消防系统研发项目与企业风险控制机制设计
- 2025-2030智慧水电业市场供需分析及投资评估规划分析研究报告
- 2025-2030智慧水利行业技术集成与市场优化规划分析报告
- 2025-2030智慧楼宇行业市场发展分析及发展趋势与投资管理策略研究报告
- 宿迁市人民医院疼痛行为观察评估考核
- 亳州市中医院化疗药物选择考核
- 上饶市人民医院微量元素检测考核
- 2025年中国电解锰市场调查研究报告
- 社工证的考试试题及答案
- 2024年新人教版七年级上册数学教学课件 5.1.1 第1课时 方程
- 申请书继续学习
- 主题班队会课件:爱学校爱老师爱同学
- 国际减灾日培训
- Unit 5 lesson 4 My favourite animal(说课稿)-2024-2025学年冀教版(2024)初中英语七年级上册001
- 2025年春新道德与法治九年级下册教学课件 第四课 第1课时 中国的机遇与挑战
- 金融机构舆情风险应急预案
- 十大常用管理工具
- 2024年度储能电站在建项目收购合作协议范本3篇
评论
0/150
提交评论