C语言程序设计 教学课件 ppt 作者 何钦铭 C6

上传人:E**** 文档编号:89344288 上传时间:2019-05-23 格式:PPT 页数:48 大小:171KB
返回 下载 相关 举报
C语言程序设计 教学课件 ppt 作者  何钦铭 C6_第1页
第1页 / 共48页
C语言程序设计 教学课件 ppt 作者  何钦铭 C6_第2页
第2页 / 共48页
C语言程序设计 教学课件 ppt 作者  何钦铭 C6_第3页
第3页 / 共48页
C语言程序设计 教学课件 ppt 作者  何钦铭 C6_第4页
第4页 / 共48页
C语言程序设计 教学课件 ppt 作者  何钦铭 C6_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《C语言程序设计 教学课件 ppt 作者 何钦铭 C6》由会员分享,可在线阅读,更多相关《C语言程序设计 教学课件 ppt 作者 何钦铭 C6(48页珍藏版)》请在金锄头文库上搜索。

1、第 六 章 函 数,函数的基本使用 函数的嵌套调用 函数的递归调用 变量存储特征 宏,函数的概念,k! n!+m!,f=1; for(i=1; i=n; i+) f=f*i;,scanf(“%d%d%d“, ,# include void main() int k, m, n; float fk, fm, fn; scanf(“%d%d%d“, ,# include void main() int k, m, n; float fk, fm, fn; float fact(int n); scanf(“%d%d%d“, ,float fact(int n) int i; float f=1;

2、for(i=1; i=n; i+) f=f*i; return f; ,# include void main() int k, m, n; float fk, fm, fn; float fact(int n); scanf(“%d%d%d“, ,main,库函数,自定义函数,库函数,main 主调函数,fact 被调用函数,调用,定义,函数的概念,库函数 scanf() printf() sqrt() 功能独立,反复使用的代码段 计算阶乘 fact() 模块化编程 学生成绩档案管理软件 成绩输入 成绩修改 成绩统计 成绩打印,# include void main() int in; pr

3、intf(“1. INPUT 2.EDIT 3. PROCESS 4.PRINT 5.EXITn“); while(1) printf(“please input 1-5:“); scanf(“%d“, ,void input( ) /* .成绩输入 */ . void edit( ) /* 成绩修改 */ 4个函数的定义 void process( ) /* 成绩统计 */ . void print( ) /* 成绩打印 */ . ,函数的定义和调用,void main() int m, n; float fk, fm, fn; float fact(int n); fm = fact(6)

4、; ,调用,定义,float fact(int n) int i; float f=1; for(i=1; i=n; i+) f=f*i; return f; ,函数的定义和调用,返回值类型 函数名(形式参数表) ,void main() int m, n; float fk, fm, fn; float fact(int n); fm = fact(6); float fact(int n) int i; float f=1; for(i=1; i=n; i+) f=f*i; return f; ,调用,定义,函数名(实际参数表),参数传递,返回值类型 函数名(形式参数表) ,void ma

5、in() int m, n; float fk, fm, fn; float fact(int n); fm = fact(6); float fact(int n) int i; float f=1; for(i=1; i=n; i+) f=f*i; return f; ,1、函数的参数 形式参数 类型1 参数1,类型2 参数2,类型n 参数n 定义函数时需要知道的信息 参数个数:0n 实际参数 调用时由主调函数给出,实参 - 形参,函数的参数,函数名(实际参数表),main() output( ); void output( ) printf(”*n”); printf(”* very g

6、ood *n”); printf(”*n”); ,main( ) int x,y,z; scanf(“%d%d”, ,问题: 实参可以是表达式吗? 如果实参和形参的类型不一样?,返回值类型 函数名(形式参数表) ,void main() int m, n; float fk, fm, fn; float fact(int n); fm = fact(6); float fact(int n) int i; float f=1; for(i=1; i=n; i+) f=f*i; return f; ,2、返回值类型 函数返回一个值,合法类型 return (exp);,函数的返回值,main()

7、 output(); void output( ) printf(”*n”); printf(”* very good *n”); printf(”*n”); ,2、返回值类型 函数返回一个值,合法类型 return (f); 函数不返回值,void return; 或省略 返回值类型缺省是 int,main( ) int x,y,z; scanf(“%d%d”, ,int,问题: 如果返回值的类型与return (exp) 中的exp不一致?,实参,实参与形参 参数传递,void main() int x, y, z; scanf(“%d%d”, printf(“%d”,z) ,int ma

8、x(int a , int b ) int c; c=ab ? a : b; return c; ,常量 变量 表达式,形参:变量,实参与形参 参数传递,int max(int a , int b ) int c; c=ab ? a : b; return c; ,void main() int x, y, z; scanf(“%d%d”, printf(“%d”,z) ,5,1、实参与形参:个数相同、类型一致、按顺序传递 2、实参 - 形参,值传递 单向 形参值的变化不会影响实参的值 实参和形参可以同名,实参与形参 参数传递,void main() int x, y, z; scanf(“%

9、d%d”, printf(“%d”,z) ,int max(int a , int b ) int c; c=ab ? a : b; return c; ,void main( ) int x, y; scanf(“%d%d“, ,阅读程序,void swap(int x, int y) int t; t = x; x = y; y = t; ,输入 3 5,函数的说明,void swap(int a, int b) int t; t = a; a = b; b = t; void main( ) int x, y; scanf(“%d%d“, ,void main( ) int x, y;

10、scanf(“%d%d“, ,void swap(int a, int b);,函数在被调用前必须先定义或说明!,函数调用小结,函数调用时,实参计算值,复制给相应位置的形参; 函数执行完后,通过return (exp),可返回结果。,调用其他函数, 必须先说明!,分析函数调用过程,# include void main() int k, m, n; float fk, fm, fn; float fact(int n); scanf(“%d%d%d“, ,例T6-1 1!+2!+n!,算法: k =1 to n s=s+f f=k! k+,s=0; for(k=1;k=n;k+) f=fact

11、(k); s=s+f; ,float fact(int n) int i; float f=1; for(i=1; i=n; i+) f=f*i; return(f); ,例T6-2 x+x2+xn,算法: k =1 to n s=s+f f= xk k+,s=0; for(k=1;k=n;k+) f=mypow(x,k); s=s+f; ,float mypow(float x, int n) int i; float f=1; for(i=1; i=n; i+) f = f*x; return(f); ,例T6-3 编写函数 比较2个变量是否相等,equal(x, y) 当x=y, 返回1

12、 否则, 返回0,int equal(int x, int y) if(x=y) return 1; else return 0; ,void main( ) int x, y; scanf(“%d%d“, ,int equal(int x, int y) return(x=y); ,例T6-4 输出100200间所有素数,算法: m =100 to 200 if m是素数 print m,int prime(int m) int i, n=sqrt(m); for(i=2; in) return 1; else return 0; ,for(m=100; m=200; m+) if(prim

13、e(m) printf(“%d“,m) ,prime(m) if m是素数,返回1 否则,返回0,函数的顺序调用和嵌套调用,顺序调用 void main( ) f1( ); f2( ); f1() f2() ,函数的顺序调用和嵌套调用,嵌套调用 void main( ) f1( ); f1() f2( ); f2() ,例 求三角形面积 area=s(s-a)(s-b)(s-c),s=(a+b+c)/2,# include # include void main() float a, b, c; float area(float a, float b, float c); float s(fl

14、oat a, float b, float c); scanf(“%f%f%f“, ,递归式,递归出口,函数的递归调用(递归函数),求n! 递归定义 n! = n * (n-1)! (n 1) n! = 1 (n = 0,1),void main() float fact(int n); printf(“%fn“, fact(5); float fact(int n) float res; if(n=0 | n=1) res=1; else res = n*fact(n-1); return res; ,fact(n)=n*fact(n-1);,递归函数求 n! 的实现过程,fact(3) 3*fact(2) 2*fact(1),1,2,6,float fact(int n) float res; if(n=0 | n=1) res=1; else res = n*fact(n-1); return res; ,函数的递归调用(递归函数),用递归实现的问题,满足两个条件: 问题可以逐步简化成自身较简单的形式(递归式) n! = n * (n-1)! n n-1 i = n + i i=1 i=1 递归最终能结束(递归出口) 两个条件缺一不可 解决递归问题的两个着眼点,变量作用范围(作用域),在函数内定义的变量(包括形参)。 局部变量

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号