- 1、本文档共45页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
洪 雄: 讲师,图形图像、科学计算可视化、并行计算;QQ:284477533;E-mail:musiclike@cqit.edu.cn 第六章 第六章 函数 6.1函数概述 6.2函数定义和调用 1.无参函数的一般形式 类型说明符 函数名() { 类型说明 语句 } 2有参函数的一般形式 类型说明符 函数名(形式参数表) 形式参数类型说明 { 类型说明 语句 } 6.2.3 函数原型 用数组名作为函数参数时还应注意以下几点: 形参数组和实参数组的类型必须一致,否则将引起错误。 形参数组和实参数组的长度可以不相同,因为在调用时,只传送首地址而不检查形参数组的长度。当形参数组的长度与实参数组不一致时,虽不至于出现语法错误(编译能通过),但程序执行结果将与实际不符,这是应予以注意的。 在函数形参表中,允许不给出形参数组的长度,或用一个变量来表示数组元素的个数。 多维数组也可以作为函数的参数。在函数定义时对形参数组可以指定每一维的长度,也可省去第一维的长度。 6.6函数与结构 由于结构可以整体赋值,所以可以将结构作为值参数传递给函数,也可以定义返回结构值的函数。这样,要函数处理存储在结构中的数据,我们至少有三种不同方法: 1. 个别地将结构成员的值传递给函数处理。 2. 将整个结构作为参数值传递给函数,一般将这种参数称作结构参数。 3. 将结构的地址传给函数,也就是说传递指向结构的指针值。这称为结构指针参数。 6.6.1 结构指针及结构变量的传址调用 在ANSI C标准中允许用结构变量作函数参数进行整体传送。但是这种传送要将全部成员逐个传送,特别是成员为数组时将会使传送的时间和空间开销很大,严重地降低了程序的效率。 因此最好的办法就是使用指针,即用指针变量作函数参数进行传送。这时由实参传向形参的只是地址,从而减少了时间和空间的开销。 例6.17:计算一组学生的平均成绩和不及格人数。(6_17.cpp) #includestdio.h struct stu{ int num; char *name;char sex; float score;}boy[5]={ {101,Li ping,M,45}, {102,Zhang ping,M,62.5}, {103,He fang,F,92.5}, {104,Cheng ling,F,87}, {105,Wang ming,M,58},}; void main(){ struct stu *ps; void ave(struct stu *ps); ps=boy; ave(ps);} void ave(struct stu *ps){ int c=0,i;float ave,s=0; for(i=0;i5;i++,ps++) { s+=ps-score; if(ps-score60) c+=1; } printf(s=%f\n,s); ave=s/5; printf(average=%f\nNo pass student count=%d\n,ave,c);} 6.6.2 结构型函数 结构型函数指处理结构型参数的函数。 例6.18:求平面两点之间的殴氏距离。(6_18.cpp) 例6.24:输入五个国家的名称按字母顺序排列输出(6_24.cpp) 本题编程思路如下: 五个国家名应由一个二维字符数组来处理。然而C语言规定可以把一个二维数组当成多个一维数组处理。因此本题又可以按五个一维数组处理,而每一个一维数组就是一个国家名字符串。用字符串比较函数比较各一维数组的大小,并排序,输出结果即可 图6-2 递归调用示意图 大多数递归函数都能用非递归函数代替。 例如:求两个整数a , b 的最大公约数 递归: long gcd1(int a , int b) { if (a%b = = 0) return b; return gcd1(b , a%b); } 非递归: long gcd2(int a, int b) { int temp; whi
文档评论(0)