




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Lesson 12 程序的组织结构,1,学习目标:,1,掌握结构化程序设计的思想 使用函数,2,分而治之的思想,3,分而治之的思想,复杂 问题 (任务),解决问题方法,解决子问题1,解决子问题2,解决子问题3,解决子问题5,解决子问题n,4,结构化程序设计方法的核心是自顶向下,逐步求精,具体的实现策略是将复杂的问题逐步分解成相对简单的子问题,这样将有利于降低解决问题的难度,提高程序开发的效率。将一个问题分解成若干个子问题的过程称为模块化。,在C语言中,这些独立的简单的模块就是函数。,5,函数:是C语言中模块化编程的最小单位,“一个程序应该是轻灵自由的,它的子过程就象串在一根线上的珍珠。” -Geoffrey James的编程之道,我们需要做两件事: 如何得到珍珠;(定义函数) 如何将珍珠串在这根线上(调用函数),6,1、如何得到“珍珠”,即如何完成需要实现的模块(函数),解决子问题i,7,1、标准函数: C语言提供了很多标准函数,它们被放置在一起,形成了一个标准函数库。 2、自定义函数:自己定义的函数。,两类函数,8,函数原型 函数原型是指不包含函数体的函数声明。 C语言规定,所有的函数必须先定义后调用。 对于标准函数而言,由于它们的定义已经在C语言提供的标准函数库中,人们在调用它们的时候,只需要在程序的前面利用include将相应的函数原型加入到程序中就可以了。,9,10,调用函数时,不但需要了解函数的功能,还要通过函数原型弄清楚函数需要的参数格式以及函数的返回类型,11,例1:根据给定的两个坐标点(x1,y1)和(x2,y2),计算两点之间的距离。,问题分析 计算两点之间距离的公式为 d=,在这个公式中含有平方和开平方的运算,可以直接利用C语言提供的标准函数实现这两个运算。,12,算法描述,13,#include #include int main( ) int x1, y1, x2, y2; double distance; printf(“nEnter 2 coordinates(x1,y1,x2,y2)n“); scanf(“%d%d%d%d“, ,14,例2:掷骰子游戏。 骰子是一个有六个面的正方体,每个面分别印有16之间的小圆点代表点数。假设这个游戏的规则是:两个人轮流掷骰子6次,并将每次投掷的点数累加起来。点数多者获胜;点数相同平局。 请编写程序,模拟这个游戏的过程,并给出玩100盘之后,谁是最终的获胜者。,15,问题分析 由于每个人掷骰子所得到的点数是随机的,所以需要借助随机数发生器,每次产生一个16之间的整数,以此模拟玩者掷骰子的点数。 为了计算在每盘中,甲、乙两人所掷的点数,需要定义两个int型变量d1,d2,用于作为记录每个人投掷点数的累加器。 为了记录每个人的获胜盘数,需要再定义两个int型变量c1,c2,用于记录每个人获胜的盘数。,16,算法描述,17,#include #include int main() int d1, d2, c1, c2, i, j; c1 = c2 = 0; /* 初始化 */ srand(time(0); /*用当前时间设置种子,并生成伪随机序列*/ for (i=1; id2) c1+; /* 累加获胜盘数 */ else if (d1c2) /* 输出最终获胜者信息 */ printf(“nThe first win.%d-%d“,c1,c2); else if (c1c2) printf(“nThe second win.%d-%d“,c2,c1); else printf(“They tie.%d-%d“,c1,c2); return 0; ,18,实现一个模块前需要: 1、该模块需要解决一个什么问题,完成一个什么任务 2、解决该问题需要知道些什么条件,如何实现一个模块(函数)?,19,类型 函数名(类型 参数1 , 类型 参数2 , ),返回值类型,标识符,参数表:需要知道的条件,返回值,函数出口, ,函数体; return 表达式;,主要部分:完成模块需要完成的功能(任务),20,例题:定义一个函数,求一对坐标点到原点的距离,1、该模块需要解决一个什么问题: 求到原点距离 2、需要知道些什么条件 坐标点的坐标,把他作为参数,在该模块中算出他(参数)到原点的距离,21,例: double distance(int x, int y) double d; d = sqrt(x*x+y*y); return d; ,22,C语言规定,一个函数可以有返回值,也可以没有返回值。如果有返回值,返回值的类型在函数名前声明,并在函数体中利用return 语句将返回值返回;如果没有返回值,在函数名前声明void。 默认的返回类型是int。 函数定义不能放在另一个函数里面,不能嵌套定义。 函数名不但应该符合C语言的自定义标识符命名规范,还应该“见名知意”。,23,参数表是函数之间交换信息的接口。既可以通过它将外界的数据传递给函数,也可以通过它将函数的操作结果带出函数(通过指针)。 如果形式参数属于一维数组类型,无须指出一维数组的元素个数,一般通过其他参数指出。 函数体是函数的核心部分,在这里列出需要执行的语句序列。,24,函数的返回值 在声明函数的时候,函数名前使用了保留字void,说明这个函数没有返回值;否则,这个函数执行完毕后,应该返回一个相应类型的数值。 return 表达式;,25,编写一个函数求一个数的阶乘,26,#include int main() int n; double mul; double factorial(int n); printf(“请输入计算阶乘的数值N(120) rintf(“输入有误,请重新输入:n“); else break; while(1); mul=factorial(n); printf(“数%d的阶乘=%.0lfn“,n,mul); return 0; double factorial(int n) int i; double t=1.0; for(i=1;i=n;i+) t*=i; return t; ,函数的调用 函数调用语句的基本格式为: (); 实在参数与形式参数的数据类型和个数一一对应。,27,例3:计算: s=1+(1*2)+(1*2*3)+(1*2*3*4*10),分析: sum=1 + 2! + 3! + 4! + + 10! 定义一个函数求阶乘,28,#include int fun(int n); int main() int i=0,sum=0; for(i=1;i=10;i+) sum+=fun(i); printf(“1!+2!+3!+=%d”,sum); return 0; int fun(int n) int i=0,s=1; for(i=1;i=n;i+) s*=i; return s; ,29,30,#include int main() int sum, summation(int n,int m); sum=summation(3,23)+summation(5,30) +summation(8,33); printf(“sum=%dn“,sum); return 0; int summation(int n,int m) int i,t=0; for(i=n;i=m;i+) t+=i; return t; ,例4:使用函数的方法,编写程序求数组的最大值,分析: 定义一个函数max,在该函数中传入一个数组,求该数组的最大值,31,#include int getMax(int d,int len); int main() int max,data10=1,2,4,5,3,10,9,6,8,7; max=getMax(data,10); printf(“最大值是:%dn”,max); return 0; int getMax(int d,int len) int i=0,m=d0; for(i=0;im) m=di; return m; ,注意:参数为数组的定义方法 len :数组的长度,注意:调用时直接传数组名,32,1、使用函数求: 1*2*3+4*5*6+7*8*9+100*101*102 2、使用函数求水仙花数 3、使用函数打印等腰三角形 4、使用函数求所有的1,1000范围内的完数 (完数:因子(不包括自身)和等于自身的数),33,34,#include int main() int i,sum=0, mul(int n,int m,int k); for(i=1;i=102;i+=3) sum+=mul(i,i+1,i+2); printf(“sum=%dn“,sum); return 0; int mul(int n,int m,int k) return n*m*k; ,35,#include int main (void) int i,narcissistic_number(int n); for(i=100;i1000;i+) if( narcissistic_number(i/100)+ narcissistic_number(i/10%10)+ narcissistic_number(i%10)=i) printf(“水仙花是为:%dn“,i); return 0; narcissistic_number(int n) return n*n*n; ,36,#include int main( ) int i,print_triangle(int n); do printf(“请输入等腰三角形的高h(080) printf(“输入有误,请从新输入h:n“0;continue; else if(h=0) return 0; print_triangle(h) ; while(1) return 0; int print_triangle(int n) int i,j; for(i=1;i=9;i+) for(j=1;j=10-i;j+) printf(“ “); for(j=1;j=i;j+) printf(“%c“,0+j); for(j=1;ji;j+) printf(“%c“,0+i-j); printf(“n“); ,37,#include int main( ) int i,k; i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年校园资产置换与教育资源共享合作协议
- 2025年绿色生态住宅区物业运营及综合节能服务协议
- 2025年智能农业大棚租赁合同及技术支持服务协议
- 2025年湖南省衡阳市重点中学化学高三上期末联考试题
- 2025年新能源发电项目承包合同:高效清洁能源供应服务
- 2025智能医疗器械临床试验数据采集与分析服务合同
- 2025年新型购物中心餐饮区长期租赁合作合同
- 2025足球赛事专用场地租赁合同附带赛事数据收集与分析服务
- 2025年智能环保设备升级改造项目采购合同书
- 2025年北京车牌租赁中介服务及管理协议范本
- 心理-认识过程课件
- 易驱ED3000系列变频器说明书
- 《ACT就这么简单》课件
- 农机行政处罚流程图
- GB∕T 6818-2019 工业用辛醇(2-乙基己醇)
- 环境、环境问题与环境科学
- 钻具内防喷工具课件
- 新版(七步法案例)PFMEA
- 会计师事务所7(报告流转签发制度12)
- TCECS 20007-2021 城镇污水处理厂污泥厌氧消化工艺设计与运行管理指南
- 社保现金补助协议书
评论
0/150
提交评论