c语言中函数的调用研究毕业论文设计.doc_第1页
c语言中函数的调用研究毕业论文设计.doc_第2页
c语言中函数的调用研究毕业论文设计.doc_第3页
c语言中函数的调用研究毕业论文设计.doc_第4页
c语言中函数的调用研究毕业论文设计.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

题 目:c语言中函数的调用研究 姓 名:禄晓 学 号:201204060041 学 院:数学与统计学院 专 业:信息与计算科学 年级班级:2012级1班 指导教师:康玉洁 2016年4月 5日毕业论文(设计)作者声明 本人郑重声明:所呈交的毕业论文是本人在导师的指导下独立进行研究所取得的研究成果.除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品.本人完全了解有关保障、使用毕业论文的规定,同意学校保留并向有关毕业论文管理机构送交论文的复印件和电子版.同意省级优秀毕业论文评选机构将本毕业论文通过影印、缩印、扫描等方式进行保存、摘编或汇编;同意本论文被编入有关数据库进行检索和查阅.本毕业论文内容不涉及国家机密. 论文题目:c语言中函数的调用研究作者单位:周口师范学院数学与统计学院作者签名:禄晓 2016年 4月 5日 目 录摘 要1abstract1引言11. 预备知识2 1.1 c语言中的函数22 c语言中函数分类2 2.1 定义分类2 2.1.1库函数2 2.1.2自定义函数3 2.2参数分类3 2.1.1无参函数3 2.1.2有参函数4 2.1.3参数43. c语言中函数调用及应用5 3.1基本形式5 3.2嵌套调用6 3.3递归调用84. 结束语9参考文献10致谢10周口师范学院本科毕业论文(设计)c语言中函数的调用研究摘 要:c语言作为当代最优秀的程序设计语言之一,在全世界广泛使用,而函数又是语言的基本模块,在c语言中对函数的调用是实现c程序功能的关键.本文详细介绍c语言中函数调用过程以及实现函数调用的不同形式,并通过一些调用的应用实例来更深入地阐述,实现对于c语言函数调用的具体应用能力的说明.关键词: c语言 函数调用 参数 study on function calls in c languageabstract:c language as one of the best programming language, is widely used throughout the world,and function is the basic module,calling function becomes the key to achieve the c programming.this paper introduces in detail the function call in the c language and the different forms to realize,and simoultaneously we apply some examples of application to get more in-depth exposition and application. key words: c language function call parameter 引言随着科学技术的进步,我们逐步迈入了互联网时代.在互联网时代中,科技智能更是无时无刻不出现在我们的视野中,便捷着我们的生活,加快着我们的节奏.同时我们对科技的的掌握和利用有了更高的要求,一门简易高效的编程语言对我们更是尤为重要.c语言,一门高级程序语言,自1978年发表之初,经过数十年的实践检验,一直风靡世界至今.通过编辑c语句,实现通过计算机解决需要花费大量时间精力来解决的问题,一直是我们努力的大方向. 在本文中,文献1-6介绍c语言中函数的重要性以及对函数,函数的调用的基本结构,作为一门计算机语言,c语言有着标准的结构,也正是因此,使得我们的学习和调试变得十分便捷.文献7-12 介绍c语言中函数调用在实际生活中各个领域的应用实例.c语言的函数调用过程很简单,但是在对函数进行调用前,需要对函数进行定义和声明,根据调用过程中有无数据传递,将函数通常分为有参函数和无参函数,这里也对参数进行了说明;常用的调用类型有嵌套调用和递归调用,这里对不同类型的调用方式进行了大致说明后,又引入了对应的简单实例,并对例子程序中出现的问题或者需要注意的地方做出解释,相信读者会对函数调用的过程,以及调用的应用方式有所了解,能够在以后的学习中更灵活的应用c语言中函数的调用.1. 预备知识1.1 c语言中的函数c语言由美国贝尔实验室于1978年发表,后于1983年制定了c语言标准,我们把他称为ansi c,最初的c语言主要在unix系统中使用,随着时代的发展,c语言的许多优点以及强大的功能逐渐走进大众的视野,应用于更多类型的系统之中,成为现在世界的最优秀最流行的程序语言.语言作为一种应用广泛结构化语言,具有清晰的结构层次,非常方便用户的调试与维护.同时,c语言有是一种模块化语言,即将一个程序分为若干个模块,又将这些模块划分成简单的问题,通过对简单问题的解决,实现对完整问题的分而治之,这种结构使得c语言十分的精简高效.这里c语言中每个模块都是有函数组成,因为函数是组成的程序的基本模块.作为c语言的的基本模块,每一个c程序,都是由一个或个多个函数组成.一个c程序通常包含一个main函数和若干个子函数,他们之间通过相互调用的方式,来实现c程序的功能.所以在编写程序、阅读程序、调试与维护程序时,c语言的函数模块化结构使得整个c程序看起来格外的清晰有序.2 c语言中函数分类2.1 定义分类根据函数定义的方式不同,将c语言中函数分为库函数和自定义函数.2.1.1库函数 库函数不用用户自己定义,是由系统提供的函数,用户可以直接使用,用之前需要在头文件中的#include指令写入要使用函数模块,比如要用到fab函数时,需要头文件中注明#include,表示调用的是数学函数.2.1.2自定义函数 库函数中没有的,用户要实现特定功能的自己定义的函数,称为自定义函数.c语言中规定,函数要先进行定义,之后才能使用,如果库函数中没有,比如要用一个max函数求两个数中的最大值,那就先得对max函数进行定义,要规定l 函数的名字:使用方便,最好一看名字就知道是什么意思,要实现什么功能l 类型:有无返回值,返回值类型l 参数的名称及类型:有参函数中传递数据l 功能:最基本最重要的部分完成这些定义后,执行这个函数的时候,编译系统就能直接识别并按照定义执行了. 2.2参数分类 从主调函数和被调 函数之间有无数据传递的角度看,可分为无参函数和有参函数两种.2.1.1无参函数无参函数指那些在主调函数与被调函数之间不存在数据的传送,并且函数定义和函数说明中也没有参数的函数.无参函数的一般形式是:类型名 函数名() 或者 类型名 函数名(void) 声明部分 声明部分语句部分 语句部分 下面举个无参函数的例子例1 :输出good morning!void print() printf(“good morning!n”);2.1.2有参函数与无参函数相对应,有参函数是指在主调函数与被掉函数之间有数据传送,并且函数的定义和说明中有参数的函数,但是,在函数调用与函数定义说明时的参数却不是同一种,分别是实参和形参,即在函数调用的时候的参数,我们称之为实参,函数定义说明时的参数,我们称之为形参.有参函数的一般形式类型名 函数名(形参列表)声明部分语句部分下面举个有参函数的例子例2:输出两个数中的最大值: int max(int x,int y) int z; if(xy) z=x; else z=y; return (z); 2.1.3参数在主调函数也被掉函数之间传递的数据,我们称之为参数,函数的参数有两种,一种是形参,只用于函数的定义说明中,可作用于整个函数;一种是实参,只用于主调函数中,在被调函数中不可用;主调函数通过参数向被调函数传递数据,通过主调函数的实参与被调函数的形参之间的数据传送,实现函数的调用过程,这里对参数做出以下说明:l 实参和形参的数量与类型必须是一致的;l 函数调用时,实参要向形参中传送数据,所以不论实参是函数,是变量还是常量或者表达式,都不能是空值,否则不能完成向形参的传送;3. c语言中函数调用及应用3.1基本形式函数调用形式为:函数名(实参列表)下面举个例子说明函数调用:例3:输入两个数,求这两个数中最小值:#includeint main() int min(int x,int y); int a,b,c; printf(“请输入两个数字:”); scanf(“%d,%d,&a,&b”); c=min(a,b); printf(“最小的数字是%dn,”c); return 0;int min(int x,int y) int z; if(xy) z=x; else z=y; return (z); 以上程序中,主函数中c=min(a,b)就是主函数对min函数的调用,两个实参是a和b,将小数赋给了c.这里我们可以调用min函数,是之前我们定义了min函数,在min函数的定义中,我们指定了两个形参,分别是x和y,类型是int.这个函数调用过程中的数据传递是:主函数中实参a和b的值传递给min函数的形参x和y,通过min函数的定义,将最小值赋给z,而z的值将返回到主函数中,赋给变量c. 从这里我们可以看出,参数的传递是单向的:即只能是实参向形参传递数据;形参只是临时占用存储单元实参向其传递数据后,占用存储单元,执行完被调函数,将值返回给主函数之后,就将占用的存储单元释放了;因为形参的值要返回到主函数中去,所以形参和实参的类型必须保持一致.3.2嵌套调用我们说过函数的模块化结构,每一个小模块都是相互独立的,没有上下级的从属关系,但是c程序中只有一个主函数,在执行主函数的过程中(主函数不能被调用),可以出现对某个子函数x的调用,在被调用的子函数x的执行过程中,会再调用另一个子函数y完成对最后一个不调用其它函数的子函数的执行后,再一层一层的返回执行直到返回至主函数,从而实现所有函数的功能.这样就完成了函数的嵌套调用;这里举个例子说明嵌套调用:例4:输入3个数字,求最小值;#includeint main() int min3(int a,int b,int c); int a,b,c,min; printf(“请输入3个数字:”); scanf(“%d%d%d”,&a,&b,&c); return 0; int min3(int a,int b,int c) int min2(int a,int b); int m; m=min2(a,b); m=min2(m,c); return (m);int min2(int a,int b) if(a=b) return a; else return b; 从这个程序我们可以看出,函数声明只对本身调用的函数进行,没有调用的函数,是不必进行声明的.比如主函数中,只对min3函数进行了声明,因为主函数调用min3函数两次,而并没有直接调用min2函数,所以没有声明min2函数;同样的,在min3中对min2函数进行了声明. 这里对主函数的执行过程中,调用了min3函数,就去执行min3函数,min3函数的执行过程中,又调用了min2函数,就去执行min2函数,在min2函数中,得到了2个数的最小值,将值返回给min3函数,min3函数中通过对min2函数的反复执行,得出并将最小值赋给了m,m的值不断变化后,在返回到主函数中时,就是3个数中的最小值了.3.3递归调用递归调用是指直接或间接的对自身函数的调用,递归函数也就是被调用的函数.我们用递归函数求解那些需要多次执行,而每次的执行都与前一步所用方法相差无几的问题.对这种问题,我们首先要列出递归算法以及问题的终结条件,对一个递归问题来说,找到递归算法不是很难的事,通过归纳总结就可得出;而终结条件,更是防止程序陷入无限循环的必备条件.这里举个例子说明递归调用函数:例5:求前n个数的和这里先分析递归算法:这个问题如果用递推法求解的话,就是从1开始,加2,再加3.一直加到n,这样的思路很容易想到,也容易操作.按照递推法是从:s1=1这个结果出发,找出规律后定义下一个结果:s2=2+1,再从s2的结果出发,定义下一个结果.所以,.但是在这里,我们用递归调用来求解这个问题,根据上面的分析,可以把这个问题用递归公式表示如下:根据递推公式,我们编程如下:#includeint main() int s(int n); int n; int y; printf(“输入一个自然数:”); scanf(“%d”,&n); y=s(n); printf(“%d!=%dn”,n,y); return 0;int s(int n) int f; if(n0) printf(“n0,输入错误!”); else if(n=0|n=1) f=1; else f=s(n-1)+n; return(f);依照这个程序,输入自然数n=2之后,f=s(1)+2,再调用s(1),这时返回值是1,这时,这个1会取代f=s(1)+2中的s(1),从而得到f=s(1)+2=1+2=3,依次类推.这里的终止条件是n=0或者n=1.4. 结束语 本文至此结束,本文对照函数调用的基本形式以及相关应用方向,分别列出了一些简单的例子,使读者更加深刻的了解函数的调用过程,同时也可以对照着做下练习,在实践中学习,应该会更有乐趣.希望读过本文后,会有所收获.c语言的函数调用正在越来越多的应用到各个领域,比如基于函数调用的路径搜索,静态分析,优先级排序,路径集成测试以及客户服务器方式等,都是以函数调用的内在实现机制为基础发展起来的,加快了科研发展的进步,更加便利了我们的生活,所以学习和研究函数的调用是很有意义的. 参考文献1徐维详.c 语言程序设计.高等教育出版社,1998 2刘家海主编.高级语言程序设计(c 语言版).浙江大学 出版社, 2002 3谭浩强.c 语言程序设计.清华大学出版社, 20004丁雪梅, 伦立军.基于ddgraph 图的路径覆盖研究 j .微机发展, 2004, 14(3):29-31 .5侯芸, 顾刚, 高海昌, 郭斌.一种路径覆盖自动生成的改进方法 j .计算机工程, 2007, 33(04):67-69 .6高芳.分段边界内部路径覆盖软件测试方法的研究与实现 d .哈尔滨:哈尔滨工业大学, 2002.7高海昌, 贺晓红, 冯博琴, 朱利.软件结构测试自动化关键技术研究 j .微电子学与计 算机, 2005,22(2):25-28.8 孙昌爱, 金茂忠.基于程序插装的动态测试技术实现 j .小型微型计算机系统, 2001, 22(12):1475-1479.9 单锦辉, 王戟, 齐治昌.面向路径的测试数据自动生成方法述评 j .电子学报, 2004 , 32(1):109-113.10 mary jean harrold , alessandro orso .retesting software during development and maintenance a .frontiers of software maintenance (fosm 2008) c .beijing, china, 2008.99 -108 .11 t ball , p mataga , m sagiv.edge profiling versus path profiling:the show down a .proc of the 25th acm sigplansigact symposium on principles of programming language c .new york :acm press,1998.134 -148.12 m j harrold, j j jones, t li ,

温馨提示

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

评论

0/150

提交评论