版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,函 数,C 语言程序设计,主讲:刘卫红,2005年3月,2,编写程序,输入一个正整数n,求,你感受到使用函数的好处了吗?,2005年3月,3,编写程序,输入一个正整数n,求,#include #include int main(void) int n; int sum=0; scanf(%d, ,这些可以直接拿来用的函数是标准库函数,特点:无需定义,直接调用,你还能想出哪些曾经学过的库函数?,2005年3月,4,编写程序,输入一个正整数n,求,int main(void) int n; double sum=0; double fact(int n); scanf(%d,函数定义,函数调用
2、,函数声明,用户定义的函数特点: 一次定义、多次调用 如计算s=1*(1*2)*(1*2*3)*(1*2*3*10),2005年3月,5,函数的类型,标准库函数 特点:无需定义,直接调用 用户定义的函数 特点:必须先定义后调用 函数优点: 一次定义,多次调用,函数的目的是为了代码的重用,同时便于分工合作,使程序结构清晰。,本节的重点:如何定义和调用函数,2005年3月,6,本节要点,函数、函数参数、函数值的基本概念 函数的定义和调用 局部变量和全局变量。 静态存储和动态存储变量的作用域。,2005年3月,7,函数的定义和调用,函数定义的一般形式,函数类型 函数名(类型名 形式参数1, ) 函数
3、实现过程 ,例如:求两个数的最大值。 int max(int x,int y) int z; z = x y ? x : y; return( z ); ,类型省略时默认为int类型,2005年3月,8,int max(x,y) int x,y; int z; z = x y ? x : y; return( z ); ,int max(x,y) int x,y; 或 int max(int x,y) ,或 int max(x,y) int x,y,z; z = x y ? x : y; return( z ); ,花括号中也可以为空,这种函数叫空函数 。 不能在函数体内定义其他函数,即函数不
4、能嵌套定义。,形参也可以这样定义,2005年3月,9,函数参数和函数的值,void swap(int x, int y) int z; z=x; x=y; y=z; printf(nx=%d,y=%d,x ,y); main( ) int a= 10,b=20; swap(a,b); printf(na=%d,b=%dn,a,b); ,程序输出结果: x=20,y=10 a=10,b=20,形式参数(形参),实际参数(实参),单向值传递,1.形式参数和实际参数分别对应不同的存储单元, 2.对于有参调用时,必须保证形参与实参的数目,对应的类型,顺序 完全一致,2005年3月,10,函数的返回值,
5、函数的返回值是通过return语句带回到主调函数的,说明: 若函数没有返回值,return语句可以省略。 return语句中的表达式类型一般应和函数的类型一致,如果不一致,系统自动将表达式类型转换为函数类型。 函数没有返回值,要在函数定义时,用空类型void予以说明. 函数值的缺省类型是整型int 函数可以没有return语句,也可以有多个return语句.,return 语句格式:,return (表达式); 或 return 表达式 ; 或 return;,2005年3月,11,函数的调用,1.函数调用的一般形式: 函数名( ); 或 函数名(实参列表);,2. 被调用函数的说明: (1)
6、被调用函数必须是已经存在的; (2)如果被调用函数返回值是整型数(int)或字符型(char),或者被调用函数的定义出现在主调函数之前,可以省略函数声明。 (3)对用户自定义的函数,而且该函数与调用它的主调函数在同一文件中,且在主调函数的后面,需要对函数进行声明。一种最简单的声明方法如下:直接照抄函数的首部,然后加分号,即构成一个声明语句。,2005年3月,12,/*在程序的最前面声明 */ float f1(float x,float y); float f2(float,float); float f3(float a,float b); float f4(float,float); ma
7、in() float a=98.87,b=67.43; clrscr(); printf(sum=%fn,f1(a,b); float f1(float x,float y) return(f2(x,y)*f3(x,y); float f2(float s,float r) return s+r; float f3(float u,float v) return (u-v)*f4(u,v); float f4(float u,float v) return u/v;,/*在main函数的中声明 */ main() float f1(float x,float y); float f2(floa
8、t,float); float f3(float a,float b); float f4(float,float); float a=98.87,b=67.43; clrscr(); printf(sum=%fn,f1(a,b); float f1(float x,float y) return(f2(x,y)*f3(x,y); float f2(float s,float r) return s+r; float f3(float u,float v) return (u-v)*f4(u,v); float f4(float u,float v) return u/v;,/*在调用函数的前
9、面声明 */ main() float f1(float x,float y); float a=98.87,b=67.43; clrscr(); printf(sum=%fn,f1(a,b); float f2(float,float); float f3(float a,float b); float f4(float,float); float f1(float x,float y) return(f2(x,y)*f3(x,y); float f2(float s,float r) return s+r; float f3(float u,float v) return (u-v)*f4
10、(u,v); float f4(float u,float v) return u/v;,系统对函数声明只检查参数个数和类型,不对参数名作检查,因此,函数声明时可以不写参数名,但建议大家写上,2005年3月,13,课堂练习,已有变量定义和函数调用语句: int x=57;isprime(x); 函数isprime()用来判断一个整数a是否为素数,若是素数,函数返回1,否则返回0.请编写isprime函数。 isprime(int a) ,2005年3月,14,函数的嵌套调用. 例如 main函数 f1函数 f2函数 f3函数 . . . . . . . . 调用函数f1 . . . . 调用函
11、数f2 . . . . 调用函数f3 . . . . . . . . . 结束.,2005年3月,15,【例】函数的嵌套调用,main( ) int n=3; printf (%dn,sub1(n); ,sub1(int n) int i,a=0; for (i=n; i0; i-) a+=sub2(i); return a ; ,sub2(int n) return n+1; ,程序输出结果: 9,2005年3月,16,递归调用:在调用函数的过程中直接或间接地调用该函数本身. 例如:,函数的递归调用,int f(int x) int f1(int x) int f2(t) int y,z;
12、int y,z; int a,c; . . . z=f(y); z=f2(y); c=f1(a); . . . return(3*z); return 2*z; return(3/c); 函数f直接调用自身 函数f1调用函数f2,函数f2又调用函数f1,2005年3月,17,例求n! main() int n; float y; float fac(); printf(input a integer number:); scanf(%d, ,2005年3月,18,例:有5个人,第5个人比第4个人大2岁,第4个人比第3个人大2岁,第3个人比第2个人大2岁,第2个人比第1个人大2岁,第1个人10岁
13、,问第5个人的年龄。,递归两要素:一是递归出口,二是,第n项和第n-1项的关系,2005年3月,19,int age(int n) int a; if(n= =1) a=10; else a=age(n-1)+2; return a; #include main() printf(%dn,age(5); ,n=5,2005年3月,20,实例,(1)输入一个年,判断该年是否是闰年。 (2)统计1000到2000年包含多少个闰年,并将这些闰年输出。 (3)判断2009年3月2日是星期几。,提示: (1)判断闰年的条件: 能被4整除,但不能被100整除 或者,能被400整除,即 year%4=0 i
14、f(n= =1|n= =2) s=2; else s=n+f(n-1); return(s); main() long x; x=f(4); printf(x=%dn,x); ,9,1.以下程序运行的结果是 main() int m=5,n=7,i=1; do if(i%m= =0 ,35,2005年3月,22,3.在以下程序的下划线处填写适当的语句 使程序执行的结果是把a,b,c按从小到大的 次序输出。 void main() int a,b,c,x,y; scanf(%d%d%d, ,xc,if(yc) y=c,4.在以下程序的下划线处填写适当的语句使程序执行的结果4,16,256。 te
15、st() int x=2; x=x*x;printf(%d,x); main() test();test();test();,static,X是三个数中最大的,y是三个数中最小的,2005年3月,23,5.在以下的下划线处填写适当的语句,使程序求出a,b,c的最小公倍数。 max(int x,int y,int z) if(xy ,return (y),max(a,b,c),j%a=0 clrscr(); for(i=1;i3;i+) f(i); f(int j) static int a=100; auto int k=1; +k; printf(%dn,a+k+j); a+=10; ,10
16、3,114,7.以下程序运行的结果是 main() char a=computer,t; int i,j=0; clrscr(); for(i=0;i8;i+) for(j=i+1;j8;j+) if(aiaj)t=ai;ai=aj;aj=t; printf(%sn,a); ,utrpomec,2005年3月,25,8.以下程序运行的结果是 void s(int n) static int i=1; int j=1; if(n0) +i;j+;printf(%d,%dn,i,j); s(n-1); main() int k=3;s(k);,2,2 3,2 4,2,9.编写递归程序,计算xn(n
17、=0的整数),long a(int x,int n) long f; if(n=0) f=1;else f=a(x,n-1)*x; return(f); main() int m,y; scanf(%d,%d, ,2005年3月,26,10. 编写一个递归函数计算 1+X+2X2+3X3+nXn,double func(int n,float x) if (n= =0) return 1; else return func(n-1,x)+n*pow(x,n); ,2005年3月,27,11.下列程序的输入结果是 #include int sum(int n) int i,s=0; for(i=1;in;i+) if(i%10= =9) s=s+i; return s; main() printf(“%d”,sum(69);,204,12.下列程序的输入结果是 #include int f(int c) static int a=10; int b=+a; return(a+b+c); main() printf(“%d”,f(f(5)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国科学院高能物理研究所AI应用工程师岗位招聘备考题库带答案详解
- 2025年新蔡辅警招聘真题及答案
- 黑龙江公安警官职业学院《计算机基础与C语言》2024-2025学年期末试卷(A卷)
- 黑龙江公安警官职业学院《日本文学选读》2025 学年第二学期期末试卷
- 2025年湘科研究院招聘专业技术人员5名备考题库有答案详解
- php域名管理系统课程设计
- 2025中国农业大学水利与土木工程学院科研助理招聘1人备考笔试试题及答案解析
- Android 贪吃蛇课程设计
- 2025年5G网络覆盖范围扩大与物联网应用场景行业报告
- 《CBT 3701-1995船用齿轮泵修理技术要求》专题研究报告深度解读
- 广东省深圳市罗湖区2024-2025学年高一上学期1月期末物理试题(含答案)
- 《危险化学品安全法》全文学习课件
- 2025年下半年贵州遵义市市直事业单位选调56人考试笔试备考题库及答案解析
- 2026年企业生产计划制定优化与订单交付率提升方案
- 借用土地合同范本
- 支撑梁钢筋自动计算表模板
- 2025天津大学管理岗位集中招聘15人笔试考试备考题库及答案解析
- 请结合材料理论联系实际分析如何正确评价人生价值?人生价值的实现需要哪些条件?参考答案
- 2026年党支部主题党日活动方案
- 幼儿园中班交通安全教育课件
- 2025 年国家层面数据资产政策汇编(全景解读版)
评论
0/150
提交评论