使用函数封装代码_第1页
使用函数封装代码_第2页
使用函数封装代码_第3页
使用函数封装代码_第4页
使用函数封装代码_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

C语言程序设计主讲:牛慧娟电话:8231236邮件: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通过在程序中使用函数,可进行结构化编程。结构化编程的优点结构化程序更易编写;结构化程序更易调试;结构化编程可以节省时间。

规划结构化程序eg.编写联系地址的程序(姓名和地址列表)(1)输入新的姓名和地址

(2)修改已有的条目

(3)按姓对条目进行排序

(4)打印邮寄地址标签从磁盘中读取已有的地址列表;提示用户输入一个或多个条目;将新数据添加到列表中;将更新后的列表存盘。从磁盘中读取已有的地址列表;修改一个或多个条目;将更新后的列表存盘。main()EnterEditSortPrintReadModifySave图5.2以层次方式组织的结构化程序5.3.3从顶向下的方法C程序员可选用从顶向下的方法,如图5.2.多数情况下,程序的大多数实际工作是由位于树枝末梢的函数完成的,位于“主干”附近的函数主要用于引导程序执行这些函数。main()EnterEditSortPrintReadModifySave图5.2以层次方式组织的结构化程序函数头每个函数的第一行都是函数头,函数头由三部分组成,每部分完成特定的功能。(参考教材,,)可以是任何数据类型,用void表示函数不返回任何值。遵循变量名规则要传递给函数的每个参数都要在参数列表中包含对应条目,指定数据类型和名称。定义时,函数头最后不加分号参数列表:可以给函数传递任何数据类型。

eg.longcube(longx)voidfunc1(intx,floaty,charz)intfunc2(void)

注意:形参VS实参:(1)形参位于函数头()中,

是实参的占位符。(2)实参是调用程序传递给函数

的实际值。(3)C语言中,每次调用函数传递

的实参个数和类型必须与对

应形参相同,但值可以不同。(参考教材)程序清单5.2list0502.c函数体

位置:位于函数头后,{}括起的部分

功能:函数被调用按照流程执行其中语句,完成实际的工作后返回到被调用之处并带回1或0个值。

结束:执行到return语句或最外面的花括号后结束。1、局部变量

在函数体中声明的变量,成为“局部变量”,是特定函数私有的。

func1(inty){inta,b=10;floatrate;doublecost=12.55;……}(参考教材)a,b,rate,cost,y都是专属func1的局部变量。程序清单5.3var.c注意:变量的“作用域”说明:(1)变量必须“先定义,后使用”;(2)不同位置定义变量的“作用域”不同;

全局变量,局部变量(3)函数中的局部变量独立于程序,使函数更加独立。2、函数的语句函数几乎可以包含任何语句,在函数中唯一不能做的事就是定义另一个函数。建议函数中语句尽量少。3、返回值

要从函数返回一个值,可以使用关键字return,并在后面加上一个表达式。

func1(intvar){intx;returnx;}

一个函数中有多条return语句时,

只能有一条被执行。程序清单5.4return.c函数原型

形式:函数原型和函数头相同,只是后面加“;”。

位置:放在程序中第一个函数之前。

功能:将有关函数的信息告知编译器。编译器知道有关函数的返回值类型、名称和参数后,每次调用函数时检查这些信息,确保传递的参数正确,并确保正确使用返回值。

注意:严格地讲,函数原型可以与函数头不完全相同,只要确保参数类型、数目和顺序相同即可,而参数名不必一定相同。

举例说明(参考教材)19SubTitle给函数传递参数时,参数的数目与类型必须同函数头和函数原型中的形参匹配,并且有一定顺序。每个参数可以是任何合法的表达式:常量、变量、数学或逻辑表达式,甚至是另一个具有返回值的参数。eg.假设函数half()、square()、third()都有返回值,则可有:x=half(third(square(half(y))));栈是RAM中的特殊区域动作:压栈、出栈规则:“后进先出”5.6调用函数调用方别式:免函数名浮(实参此列表)位置:(1)单独成句(2)用在表达穗式中说明:(1)任何函脸数调用颗可单独残成句,列但有返回值的碧函数返竹回值将还被丢弃倚;(2)用在表筐达式中蜻的函数枕调用应仆为有返回值的函阁数(非voi扩d)。eg.速w俊ait输(12族);prin借tf(“羞Half颈of手%di留s%d颠.”,中x,h谣alf_柏of(x平));y=爽hal岔f_o毅f(x逝)+恨ha湿lf_手of(凭z)厦;if(排half锁_of(透x)>1笼0){揭……绕}if(蹄do_a督_pro植cess税()!=骗OKAY环){衡……岔}5.6疗.1递归调用一般情焰况是一禽个函数致调用另某一个函挨数,特坊殊的,柜函数直微接或间厕接调用盛自身,梢称为“递归调鞠用”。注意:队递归将涂使用大邀量资源死(相当保于复制誉了多份残函数)划,慎用脊!2023止/4/2隆4程序清单5.5recurse.c22fact俘oria肺l(4)回归递推2fac险tor扁ial农(1)4fac姑tor掏ial恰(3)3fac摘tor负ial骑(2)retu岂rn1n!=撒n*(乏n-1梦)!递归过敲程的两艇个阶段(如:求4!):递推:4!=桌4×3围!→3!=宴3×2护!→2!=傍2×1拣!→1!=1魄×0!→0!=玻1未知茫已知回归:4!=竞4×3篇!=2身4←3!=3它×2!=瞧6←2!=计2×1救!=2←1!=1雪×0!=坐1←0!=1未知袜已知23*可以用育递归解饭决的问情题应满包足以下向条件:1、要解配决的问番题可以眯被减阶2、要解决逢的问题有边界24例:侨递归的时执行情概况分析void油pri啊nt(i侵nt断w){int雕i;if(松w!=变0){pri纠nt(办w-1衫);for般(i=漂1;i著<=w和;++逮i)prin抬tf("丸%d吵",w)善;pri淘ntf厨("\夹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)voi缸dp虏rin射t(i阅nt枪w)矩{int盗i;if(厦w!=百0){prin缝t(w-致1);for(馋i=1;异i<=w陶;++i拜)prin畅tf("捧%d遇",w)剩;prin木tf("富\n")鞠;}}w==炼0时直接返回汉诺塔夕问题:26202

温馨提示

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

评论

0/150

提交评论