下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第六讲 函 数知识要点6.1 概述6.2 函数的定义6.3 函数的返回值6.4 函数的调用6.5 函数的递归调用6.1 概述C程序是由一个主函数和其它若干函数构成,每个函数实现一定的功能,其中主函数main()是必需的,其它函数被主函数调用或者其它函数之间相互调用。C语言的函数可以分为三类:主函数main()、库函数(如printf()、scanf()等)和用户自定义函数。6.1 概述C程序总是从主函数开始执行,其它函数只有在被主函数或其它正在执行的函数调用时才能被程序执行,执行后返回调用函数,最后返回到主函数,在主函数中结束整个程序的运行。所有的函数在定义时是相互独立的,它们之间是平行关系,
2、所以不能在一个函数内部定义另一个函数,即不能嵌套定义。函数间可以互相调用,但是不能调用主函数。void main() int year,month,date,days,n; printf(please input year,month,date:); scanf(%d,%d,%d,&year,&month,&date); days=len_of_days(year,month,date); printf(%d/%d/%d is the %d in %dn,year,month,date,days,year); 知识要点6.1 概述6.2 函数的定义6.3 函数的返回值6.4 函数的调用6.5
3、函数的递归调用6.2 函数的定义常见的函数定义的形式如下:类型标识符 函数名(形式参数类型说明表列) 函数体double sqrt( double x ); 例如求两个浮点数x、y中最大数的函数max()定义 float max(float x,float y) float z; if (xy) z=x; else z=y; return z; 6.2 函数的定义类型标识符为函数的类型,与return语句返回值的类型相同,可以理解为函数最终的结果的类型。它可以是任何一种有效的类型,当函数类型标识符缺省时默认是整型。上例中函数max()的结果为两个浮点数的最大数,即同样是浮点数类型,其返回值z也
4、是浮点类型,所以函数的类型标识符为float。如果函数无返回值时,类型标识符为void。函数名要符合C语言规定的标识符的命名规则,函数名字必须唯一,不能与函数体内变量或形式参数名相同。所以上例中如果变量z改为max将导致结论错误。6.2 函数的定义形式参数类型说明表中的形式参数用于接受主调函数传递过来的数值。例如max()是求两个数的最大数,需要从主调函数中传过来两个浮点数,所以形式参数有两个。如果max()改为求三个数的最大数,则从主调函数中需要传过来三个数,此时形式参数需要定义三个,并且形式参数的类型必须与传过来数据类型一致。形式参数的命名只要符合变量的命名规则即可,无需与主调函数中的变量
5、名一致。如果函数不需要从主调函数处接受数据,可以不带形式参数,此时形式参数类型说明表是空的,但是函数名后面的圆括号不能省。6.2 函数的定义例6.1 显示如下图形: * * * * * * *#include void star()printf(“*n”);void main() int i,j; for (i=1;i=4;i+) for(j=1;j=1;i-) for(j=1;jy) z=x; else x=y; return z; 常见的函数定义的形式如下:类型标识符 函数名(形式参数类型说明表列) 函数体知识要点6.1 概述6.2 函数的定义6.3 函数的返回值6.4 函数的调用6.5
6、函数的递归调用6.3 函数的返回值在调用函数时,有时需要将运算结果返回主调函数,此时需要使用return语句返回一个值,称作函数返回值。return语句形式: return (表达式);例如: return z; return 0;return (xy?x:y);float max(float x,float y)float z; if (xy) z=x; else z=y; return z; float max(float x,float y)return (xy?x:y); int is_leap_year(int year) if (year%4=0&year%100!=0|year%
7、400=0) return (1); else return(0);6.3 函数的返回值函数返回值的类型应该与函数类型一致,如果不一致时,函数类型决定返回值的类型。函数无返回值时,函数类型说明为void。例如:void star()printf(“*n”);知识要点6.1 概述6.2 函数的定义6.3 函数的返回值6.4 函数的调用6.5 函数的递归调用6.4 函数的调用函数只有在被调用时才能执行。当一个函数调用另一个函数时,程序就从主调函数转移到被调函数,并且从被调函数的函数体起始位置开始执行,直到函数体执行结束,返回到主调函数的调用位置继续往下执行。函数调用的一般形式函数名(实参表列);当
8、实参表列中含有多个参数,则各参数用逗号间隔例如max(a,b)。实参表列也可以没有,但括号不能省略,如例6.1中star()。float max(float x,float y)return (xy?x:y); 6.4 函数的调用实参和形参必须个数相等、类型一致、顺序对应,进行数据的“值传递”。例1.3中,主调函数出现max(a,b),用户自定义函数为float max(float x,float y),则执行到c=max(a,b)时,实参a的值传给形参x、实参b的值传给形参y,这样x、y等于a的值和b的值。 #include float max(float x, float y) float
9、 z; if (xy) z=x; else z=y; return z; void main( ) float a,b,c; printf(Please input two numbers (a,b):); scanf(%f,%f,&a,&b); c=max(a,b); printf(%f,%f,the max is %fn,a,b,c); 6.4 函数的调用实参和形参必须个数相等、类型一致、顺序对应,进行数据的“值传递”。特别要注意的是:实参和形参之间是“单向的值传递”,即a、b的值可以传给x、y,而x、y的值不能传给a、b,x、y的改变也不影响a、b。#include void chang
10、e(int x,int y) int t; printf (“x=%d,y=%dn”,x,y); t=x; x=y; y=t; printf (“x=%d,y=%dn”,x,y); void main() int a=3,b=4; printf (“a=%d,b=%dn”,a,b); change(a,b); printf (“a=%d,b=%dn”,a,b); 6.4 函数的调用实参可以是常量、变量、表达式或函数。#include void main() float min(float x,float y); /*函数定义在调用的函数之后,要先声明*/ float a=3.9,b=4.1;
11、printf (“%.1fn”,min(a,b); printf (“%.1f n”,min(5,a*b); printf (“%.1f n”,min(b-1,min(a,b); float min(float x,float y) return (xy) z=x; else z=y; return z; c=max(a,b);max(int x,int y) int z; if(xy) z=x; else z=y; return z;a,b为实际参数x,y为形式参数函数的调用函数的返回/*- 程序L1_3.C :输入 a、b两个数,输出其中最大数 -*/ #include /* 包含输入输出
12、头文件 */ float max(float x, float y) /* 定义求x、y的最大值的函数max*/ float z; /* 定义实数变量z*/ if (xy) z=x; /* 如果x大于y,则z等于x */ else z=y; /* 否则z 等于y */ return z; /* 返回z, 则max函数值为z的值 */ main( ) /* 定义主函数 */ float a,b,c; /* 定义实数变量a、b、c */ printf(Please input two numbers (a,b):); scanf(%f,%f,&a,&b); /* 从键盘输入a、b */ c=max
13、(a,b); /* c等于a、b的最大数 */ printf(%f,%f,the max is %fn,a,b,c); 输入年、月、日,输出该日期是该年的第几天main()len_of_days()len_of_month()ls_leap_year()scanf()printf()len_of_days()len_of_month()ls_leap_year()给出某年月日给出某年某月给出年份返回该日期的天数返回该月天数返回是否是 闰年的结论/*- 程序L5_11.C功能:输入年、月、日,输出该日期是该年的第几天 -*/ #include /*函数is_leap_year()判断年year是
14、否是闰年,如果是返回值为1,否则为0*/ int is_leap_year(int year) int leap; if (year%4=0&year%100!=0|year%400=0) leap=1; else leap=0; return leap;/*函数len_of_month()的返回值为某年year的某月month的天数*/ int len_of_month(int year,int month) int month_days; if (month=2) if (is_leap_year(year) month_days=29; else month_days=28; else
15、if (month=4|month=6|month=9|month=11) month_days=30; else month_days=31; return month_days; /*函数len_of_days()的返回值为该日期date是该年year的第几天*/ int len_of_days(int year,int month,int date) int total_days,n; for(n=1,total_days=0;n1)由公式可知n!可以由(n-1)!表示。令an=n!,则an= n*an-1,即第n项的值可以由它的第n-1项固定公式来表示,凡是可以化成这种定义方法an=f
16、(an-1)的,都可以采用递归调用。例如1+2+n可以表示为an=an-1+n。实际上只要第n项的值可以由它前面的一项或几项固定地表示,就可以适用递归算法。例如Fibonacci数列的通项为an=an-1+an-2,也可以使用递归算法。n!=6.5 函数的递归调用在编写递归算法的时要特别注意:递归调用必须可以满足一定条件时结束递归调用,否则无限地递归调用将导致程序无法结束。例如n!中当n=1时,令结果为1则可以结束递归调用,否则它将继续调用(0)!而无限继续下去。对于由多个通项表示的情况,如Fibonacci数列,则需要给出最后一个递归调用的所有项的值,即直接给出n=1时的结果以及n=2时结果
17、才可以结束递归调用。 调用过程返回过程 fac(3) 6 return(3*fac(2) return(3*2) return(2*fac(1) return(2*1) return(1)举一反三 :使用递归算法编写计算 1+2+3+n的函数。6.5 函数的递归调用#include long fac(int n) if (n= =1) return 1L; /*“1L”为长整型常量*/ else return n*fac(n-1);void main() int m; scanf (“%d”,&m); printf(%2d!=%dn,m,fac(m);Fibonacci数列某人买回一对小兔,一个月后小兔长成大兔。再过一个月,大兔生了一对小兔,以后,每对大兔每月都生一对小兔,小兔一个月后长成大兔。如此下去,问一年后此人共有多少对兔子按这个规律,可以把兔子数一直写下去:1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,。若记第n个月的兔子数为fn,就有f0f1f2,f1f2f3,f2f3f4一般的,有fn-2fn-1=fn。fac(int x) int result;if (x=1|x=2) result=1; else result=fac(x
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025海南昌江城市建设投资有限公司招聘11人(二)笔试备考重点试题及答案解析
- 2025国家统计局济宁调查队城镇公益性岗位补充招聘(山东)模拟笔试试题及答案解析
- 2026水发上善集团高校毕业生春季校园招聘1人笔试备考重点试题及答案解析
- 2025昆明市西山区妇幼健康服务中心劳务派遣人员招聘(2人)模拟笔试试题及答案解析
- 2025福建福州市道路运输事业发展中心招聘1人备考考试试题及答案解析
- 2025四川阆中市考调35人模拟笔试试题及答案解析
- 2025福建厦门市集美区上塘中学非在编和产假顶岗教师招聘3人备考考试题库及答案解析
- 2025广东机电职业技术学院第三批招聘事业编制工作人员16人笔试备考重点试题及答案解析
- 2025年南平武夷山职业学院12月人才招聘笔试备考重点题库及答案解析
- 2025玉溪市公安局红塔分局公开招聘警务辅助人员(28人)模拟笔试试题及答案解析
- T-CNHC 4-2025 昌宁县低质低效茶园改造技术规程
- 雨课堂学堂在线学堂云《芊礼-谦循-送给十八岁女大学生的成人之礼(中华女子学院 )》单元测试考核答案
- 2025年手术室护理实践指南试题(含答案)
- 智慧农贸市场建设项目报告与背景分析
- 护理部竞选副主任
- 【10篇】新版部编六年级上册语文课内外阅读理解专项练习题及答案
- 2026年中国经济展望:风鹏正举
- 老年健康服务中的多学科团队协作
- 上市公司部门组织架构及岗位职责大全
- 雨课堂学堂云在线《人工智能原理》单元测试考核答案
- 2023年足球俱乐部试训个人简历
评论
0/150
提交评论