版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C言语程序设计主讲:牛慧娟:8231236邮件:supernhj@QQ群号:245095908函数是什么5.1函数的任务原理5.2函数和构造化编程5.3编写函数5.4五运用函数封装代码调用函数5.6将参数传送给函数5.5函数的位置5.7内联函数5.8上课用的物品—--完成某功能所需的语句等。函数把物品封装在特定手提袋中---函数函数各手提带名字不同以区分---函数名独一标识函数。各手提带中物品不同---函数体中不同语句使函数完成特定功能。什么时候用哪一个手提袋由主人决议---主函数调用特定功能的函数。主人可以有哪些手提袋可用?列目录阐明---一个程序都有哪些函数可以调用?被调用函数原型阐明语句。程序中被调用函数主人+手提袋+目录=义务---函数原型语句+主函数+其他自定义函数=程序。6SubTitle5.1.1函数的定义定义:是一个命名的、独立的代码段,执行特定义务,并能够给调用它的程序前往一个值。阐明:(1)函数是命名的。函数名是独一的,程序其他部分运用该称号,可执行函数中的语句,称为“函数调用〞。(2)函数是独立的。(3)函数执行特定的义务。(4)函数可以将一个值前往给调用它的程序(return语句)。5.1.2函数的用法程序清单5.1cube.c7SubTitle仅当函数被程序其他部分调用后,函数中的语句才会被执行;调用时程序可以给函数传送参数,函数用这些参数进展运算完成义务;函数中语句执行完后,将一个前往值前往给程序中调用函数的地方。main(){callfunc1……callfunc2……callfunc3}func1(){}func2(){}func3(){}函数原型格式
return_typefunction_name(arg_typename_1,…,arg_typename_n);函数定义格式
return_typefunction_name(arg_typename_1,…,arg_typename_n)
{
/*statements;*/
}eg.函数原型语句
doublesquared(doublenumber);
voidprint_report(intreport_number);
intget_menu_choice(void);
eg.函数定义
doublesquared(doublenumber)
{
return(number*number);
}
voidprint_report(intreport_number)
{
if(report_number==1)
puts(“PrintingReport1〞);
else
puts(“NotprintingReport1〞);
}10SubTitle经过在程序中运用函数,可进展构造化编程。5.3.1构造化编程的优点构造化程序更易编写;构造化程序更易调试;构造化编程可以节省时间。
5.3.2规划构造化程序eg.编写的程序〔姓名和地址列表〕(1)输入新的姓名和地址
(2)修正已有的条目
(3)按姓对条目进展排序
(4)打印邮寄地址标签从磁盘中读取已有的地址列表;提示用户输入一个或多个条目;将新数据添加到列表中;将更新后的列表存盘。从磁盘中读取已有的地址列表;修正一个或多个条目;将更新后的列表存盘。main()EnterEditSortPrintReadModifySave图5.2以层次方式组织的构造化程序5.3.3从顶向下的方法C程序员可选用从顶向下的方法,如图5.2.多数情况下,程序的大多数实践任务是由位于树枝末梢的函数完成的,位于“主干〞附近的函数主要用于引导程序执行这些函数。main()EnterEditSortPrintReadModifySave图5.2以层次方式组织的构造化程序函数头每个函数的第一行都是函数头,函数头由三部分组成,每部分完成特定的功能。〔参考教材5.4.1,5.4.2,5.4.3〕可以是任何数据类型,用void表示函数不前往任何值。遵照变量名规那么要传送给函数的每个参数都要在参数列表中包含对应条目,指定数据类型和称号。定义时,函数头最后不加分号参数列表:可以给函数传送任何数据类型。eg.longcube(longx)voidfunc1(intx,floaty,charz)intfunc2(void)留意:形参VS实参:(1)形参位于函数头〔〕中,是实参的占位符。(2)实参是调用程序传送给函数的实践值。(3)C言语中,每次调用函数传送的实参个数和类型必需与对应形参一样,但值可以不同。〔参考教材5.4.4〕程序清单5.2list0502.c函数体位置:位于函数头后,{}括起的部分功能:函数被调用按照流程执行其中语句,完成实践的工作后前往到被调用之处并带回1或0个值。终了:执行到return语句或最外面的花括号后终了。1、部分变量
在函数体中声明的变量,成为“部分变量〞,是特定函数私有的。eg.intfunc1(inty){inta,b=10;floatrate;doublecost=12.55;……}〔参考教材5.4.5〕a,b,rate,cost,y都是专属func1的部分变量。程序清单5.3var.c留意:变量的“作用域〞阐明:(1)变量必需“先定义,后运用〞;(2)不同位置定义变量的“作用域〞不同;
全局变量,部分变量(3)函数中的部分变量独立于程序,使函数更加独立。2、函数的语句函数几乎可以包含任何语句,在函数中独一不能做的事就是定义另一个函数。建议函数中语句尽量少。3、前往值要从函数前往一个值,可以运用关键字return,并在后面加上一个表达式。eg.intfunc1(intvar){intx;returnx;}一个函数中有多条return语句时,只能有一条被执行。程序清单5.4return.c函数原型方式:函数原型和函数头一样,只是后面加“;〞。位置:放在程序中第一个函数之前。功能:将有关函数的信息告知编译器。编译器知道有关函数的前往值类型、称号和参数后,每次调用函数时检查这些信息,确保传送的参数正确,并确保正确运用前往值。留意:严厉地讲,函数原型可以与函数头不完全一样,只需确保参数类型、数目和顺序一样即可,而参数名不用一定一样。举例阐明〔参考教材5.4.6〕19SubTitle给函数传送参数时,参数的数目与类型必需同函数头和函数原型中的形参匹配,并且有一定顺序。每个参数可以是任何合法的表达式:常量、变量、数学或逻辑表达式,甚至是另一个具有前往值的参数。eg.假设函数half()、square()、third()都有前往值,那么可有:x=half(third(square(half(y))));栈是RAM中的特殊区域动作:压栈、出栈规那么:“后进先出〞themegallery5.6调用函数调用方式:函数名〔实参列表〕位置:(1)单独成句(2)用在表达式中阐明:(1)任何函数调用可单独成句,但有返回值的函数前往值将被丢弃;(2)用在表达式中的函数调用应为有返回值的函数(非void)。eg.wait(12);printf(“Halfof%dis%d.〞,x,half_of(x));y=half_of(x)+half_of(z);if(half_of(x)>10){……}if(do_a_process()!=OKAY){……}5.6.1递归调用普通情况是一个函数调用另一个函数,特殊的,函数直接或间接调用本身,称为“递归调用〞。留意:递归将运用大量资源〔相当于复制了多份函数〕,慎用!2024/1/4程序清单5.5recurse.c22factorial(4)回归递推2factorial(1)4factorial(3)3factorial(2)return1n!=n*(n-1)!递归过程的两个阶段(如:求4!):递推:4!=4×3!→3!=3×2!→2!=2×1!→1!=1×0!→0!=1未知知回归:4!=4×3!=24←3!=3×2!=6←2!=2×1!=2←1!=1×0!=1←0!=1未知知23*可以用递归处理的问题应满足以下条件:1、要处理的问题可以被减阶2、要处理的问题有边境24例:递归的执行情况分析voidprint(intw){inti;if(w!=0){print(w-1);for(i=1;i<=w;++i)printf("%d",w);printf("\n");}}w=3时的运转结果:1,2,2,3,3,3,25递归调用执行情况如下:main函数(1)print(w)w=3;3print(2);〔1〕w=3topw2print(1);〔2〕w=2〔1〕w=3topw1print(0);〔3〕w=1〔2〕w=2〔1〕w=3topw0〔4〕w=0〔3〕w=1〔2〕w=2〔1〕w=3topw(3)输出:2,2(2)2(1)3top(4)输出:1(3)1(2)2(1)3top(2)输出:3,3,3(1)3top前往(3)1(2)2(1)3top(4)0终了(1)voidprint(intw){inti;if(w!=0){print(w-1);for(i=1;i<=w;++i)printf("%d",w);printf("\n");}}w==0时
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 炼油厂每日安全分享
- 糖尿病胰岛素种类
- 术后肺部感染如何预防与护理
- 厨房规划方案总结
- 4-2-2 元素周期表及元素周期律的应用 课件 高一上学期化学人教版(2019)必修第一册
- 黑客攻击解决方案
- 消化道大出血的应急流程演练
- 消防安全知识演练
- 氧化硫说课稿
- 化简比说课稿人教版
- 发动机冷却系统说课稿课件
- 2023届高考模拟作文丰裕时代中的吃苦导写及范文
- 老年人慢性心力衰竭诊治中国专家共识
- 资料员岗位培训
- 山西祥源新型煤化工有限公司“上大关小”置换建设101万吨-年炭化室高度6.05米捣固焦化项目环评报告
- 建筑面积计算规范2023-1
- 安全风险告知书(钢筋)
- 2022年医学专题-医改新形势下医院机遇与挑战
- 20人小公司管理制度模板
- 劳务施工组织方案 劳务施工组织设计(八篇)
- 理论催化剂体积计算
评论
0/150
提交评论