C语言程序设计 教学课件 ppt 作者 刘莹 第7章

上传人:E**** 文档编号:89188104 上传时间:2019-05-20 格式:PPT 页数:66 大小:1.09MB
返回 下载 相关 举报
C语言程序设计 教学课件 ppt 作者 刘莹 第7章_第1页
第1页 / 共66页
C语言程序设计 教学课件 ppt 作者 刘莹 第7章_第2页
第2页 / 共66页
C语言程序设计 教学课件 ppt 作者 刘莹 第7章_第3页
第3页 / 共66页
C语言程序设计 教学课件 ppt 作者 刘莹 第7章_第4页
第4页 / 共66页
C语言程序设计 教学课件 ppt 作者 刘莹 第7章_第5页
第5页 / 共66页
点击查看更多>>
资源描述

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

1、第7章 函 数,7.1 函数应用样例 7.2 函数的定义与返回值 7.3 函数的调用 7.4 调用函数与被调用函数之的数据传递 7.5 函数的嵌套调用与递归调用,本章主要内容,7.1 函数应用样例,【例7.1】从键盘输入x的值,计算并输出ex的值。,解法1:调用C语言的库函数exp,计算ex的值。,7.1 函数应用样例,#include #include main( ) double x, y; printf(“Input data:”); scanf(“%lf”, ,调用库函数,计算ex,因为调用了exp( ),必须加该头文件,Input data :2 e的2.000000次方是7.389

2、056,exp(x)要求参数x是double型,7.1 函数应用样例,解法2:调用自编函数myexp,计算ex的值。,#define E 2.71828 #include double myexp(double x) double y=1; int i; for(i=1;i=x;i+) y=y*E; return y; ,main( ) double x,y; printf(“Input data: “); scanf(“%lf“, ,自编计算ex的函数,7.2 函数定义和返回值,【例7.2】函数定义的程序样例。定义求1+23n的函数。 int mysum(int n) int i,sum=0

3、; for(i=1;i=n;i+) sum=sum+i; return sum; ,函数名,函数首部,函数体,7.2.1函数的定义,7.2 函数定义和返回值,函数的一般定义形式如下 :,类型名 函数名( 类型名 形式参数1,类型名 形式参数2,) 定义语句 执行语句 ,7.2 函数定义和返回值,在C程序中,一个函数的定义可以放在任意位置, 既可放在主函数main之前,也可放在main之后。但函数的定义必须放在所有函数的外部,即不能在函数内部定义函数。,如果调用函数后需要返回函数值,则在函数首部的最开头给出返回值的数据类型,并且在函数体中使用return语句将函数值返回。若只是需要函数进行某些操

4、作而不返回值,则可将函数的类型定义为void。,7.2 函数定义和返回值,【例7.3】无参函数应用样例。调用函数输出5行“*”,每行10个。,main( ) int i; for(i=1;i=5;i+) myprint( ); ,void myprint( ) int i; for(i=1;i=10;i+) printf(“*“); printf(“n“); ,在主函数中用for循环5次调用myprint函数,每次输出一行10个“*”,无参函数,不需要返回值的函数类型,被调函数,主 调 函 数,7.2 函数定义和返回值,【例7.4】return语句应用样例。调用函数计算并输出x的绝对值。,ma

5、in( ) int x; printf(“Input data:“); scanf(“%d“, ,int absolute(int x) if(x=0) return x; else return (-x); ,函数值通过return语句返回,7.2.2 函数返回值,7.2 函数定义和返回值,返回语句有两种形式:,return 表达式; 或 return (表达式);,return ;,7.2 函数定义和返回值,一个函数可以有多个(0n个)return语句。当执行到第一个return语句时,被调函数的控制流程返回到主调函数。 尽管可以有多条return语句,但函数只能返回一个函数值。 若函数体

6、内没有return语句,则程序一直执行到函数体的末尾“”处,然后返回主调函数。,7.3 函数的调用,【例7.5】调用函数求n的平方根和n!,main( ) int n; double x; long y; printf(“Input data:“); scanf(“%d“, ,long myfac( int n ) int i; long fac=1; for(i=1;i=n;i+) fac=fac*i; return fac; ,#include ,9,9的平方根是3.000000 9的阶乘是362880,程序总是从主函数开始执行,实参,实参,形参,7.3 函数的调用,(1)调用时函数名要一

7、致; (2)实参与形参个数相同、类型一致; (3)实参与形参可以同名,但占不同存储单元。,7.3 函数的调用,7.3.1函数调用时的语法要求,函数调用的一般格式为:,函数名( 实际参数1, 实际参数2, );,函数必须遵循“先定义,后调用”的原则 ,这是函数调用应遵循的一般原则,但如果函数类型为int时可以除外。,7.3 函数的调用,【例7.6】调用函数输出两个整型数据中的大者。 main( ) int x,y; printf(“Input data:“); scanf(“%d,%d“, ,由于max函数的函数类型是int型,所以可以将函数的定义放在调用的后面。,说明函数返回值类型的int也可

8、以省略,max(int a, int b) return ab?a:b; ,7.3 函数的调用,若函数调用时违反了“先定义,后调用”的原则,则需在调用之前对函数进行原型说明。函数原型说明的格式如下:,函数类型 函数名(参数类型1,参数类型2,); 函数类型 函数名(参数类型1 参数名1,参数类型2,参数名2,);,以下函数原型声明都是正确的,而且效果也是一样的。 int max(int a,int b); int max(int,int);,7.3 函数的调用,【例7.7】函数调用与说明的应用样例。对【例7.5】的程序进行改写。,#include main( ) int n; double x

9、; long y; printf(“Input data:“); scanf(“%d“, ,long myfac(int n) int i; long fac=1; for(i=1;i=n;i+) fac=fac*i; return fac; ,long myfac(int);,函数原型的说明,7.3 函数的调用,7.3.2函数原型说明,函数原型的说明可以出现在任意函数的说明语句中,main( ) int n; doublex; long myfac(int) ,y; printf(“Input data:“); scanf(“%d“, ,long myfac(int n) int i; lo

10、ng fac=1; for(i=1;i=n;i+) fac=fac*i; return fac; ,7.3 函数的调用,当在所有函数的外部、被调用之前说明函数原型时:在函数原型说明的后面所有位置上都可以对该函数进行调用。,float sub(int a,int b) double c; c=add(a,b); ,main( ) double x; int y,z; x=add(y,z); ,double add(int y,int z) double k; k=(double)(y+z); return k; ,double add(int, int);,7.3 函数的调用,在主调函数内部对函

11、数原型进行说明:此时,只能在该主调函数中对被说明的函数进行调用。,【例7.9】通过以下程序理解函数原型说明的位置与被调用的关系。,7.3 函数的调用,float sub(int a,int b) double c; c=add(a,b); ,main( ) double x; double add(int, int); int y,z; x=add(y,z); double add(int y,int z) double k; k=(double)(y+z); return k; ,double add(int, int);,由于对add函数原型的说明在主函数内部,所以只能在主函数内对其进行调

12、用,而不能在sub函数中对它进行调用。,7.4调用函数和被调用函数之间的数据传递,7.4.1 值传递原则,7.4调用函数和被调用函数之间的数据传递,【例7.10】阅读以下程序,分析其运行结果。 #include void change1(int a , int b) int c; c=a; a=b; b=c; main( ) int x=1,y=2; printf(“调用前:x=%d,y=%dn“,x,y); change1(x,y); printf(“调用后:x=%d,y=%dn“,x,y); ,7.4调用函数和被调用函数之间的数据传递,调用前:x = 1 , y = 2,printf (“

13、调用前:x = %d , y = %dn“ , x , y ) ;,调用之前,7.4调用函数和被调用函数之间的数据传递,x,1,y,2,实参,形参,调用前:x = 1 , y = 2,开辟,调用开始,7.4调用函数和被调用函数之间的数据传递,x,1,y,2,实参,形参,调用前:x = 1 , y = 2,1,2,c = a ; a = b ; b = c ;,调用期间,7.4调用函数和被调用函数之间的数据传递,x,1,y,2,实参,形参,调用前:x = 1 , y = 2,释放,调用后:x = 1 , y = 2,printf (“调用后:x = %d , y = %dn“ , x , y )

14、 ;,调用结束,7.4调用函数和被调用函数之间的数据传递,【例7.11】阅读以下程序,分析其运行结果。 #include void change2(int *a , int *b) int c; c=*a; *a=*b; *b=c; main( ) int x=1,y=2; printf(“调用前:x=%d,y=%dn“,x,y); change2( ,7.4调用函数和被调用函数之间的数据传递,调用前:x = 1 , y = 2,printf (“调用前:x = %d , y = %dn“ , x , y ) ;,调用之前,7.4调用函数和被调用函数之间的数据传递,x,1,y,2,实参,形参,

15、调用前:x = 1 , y = 2,调用开始,7.4调用函数和被调用函数之间的数据传递,x,1,y,2,实参,形参,c = *a ; *a= *b; *b= c ;,1,2,调用前:x = 1 , y = 2,调用期间,7.4调用函数和被调用函数之间的数据传递,释放,x,2,y,1,实参,形参,调用前:x = 1 , y = 2,调用结束,printf (“调用后:x = %d , y = %dn“ , x , y ) ;,调用后:x = 2 , y = 1,7.4调用函数和被调用函数之间的数据传递,7.4.2 常量、变量和表达式做实参,【例7.11】阅读下面程序,分析常量、变量和表达式做为实

16、参时,形参的形式。,7.4调用函数和被调用函数之间的数据传递,int max(int a , int b) if (ab) return a; else return b; ,main( ) int x,y,z; x=18; y=8; z=max(10,20); printf(“常量形参的调用结果是%dn“,z); z=max( x,y ); printf(“变量形参的调用结果是%dn”,z); z=max( x+8,y+10 ); printf(“表达式形参的调用结果是%dn”,z); ,常量形参的调用结果是:20 变量形参的调用结果是:18 表达式形参的调用结果是:26,7.4调用函数和被调用函数之间的数据传递,结论1:常量、变量和表达式做为实参

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

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

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