高级语言程序设计(一).ppt
《高级语言程序设计(一).ppt》由会员分享,可在线阅读,更多相关《高级语言程序设计(一).ppt(114页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、第7章 函数,-模块化设计,主要内容,一、概述二、函数定义的一般形式三、函数参数和函数的值四、函数的调用五、函数的嵌套调用六、函数的递归调用七、数组作为函数参数八、变量的存储类别九、内部函数和外部函数十、运行一个多文件的程序,一、概述1、函数的概念:一个子程序段,能完成特定的功能。存在位置:,1.c,2.h,函数1,函数3,函数2,函数4,函数5,(1) 各函数包含在一个文件中#include void main( ) void printstar( ); void print_message( ); printstar( ); print_message( ); printstar( );
2、void printstar( ) printf (“* n” ); void print_message( ) printf (“_ _ _ _ _How_do_you_do!n”) ;,运行结果: * How do you do! * *,一、概述,(2)文件包含的方法 在主函数中使用文件包含预编译命令,将不在本文件而在其它文件中的函数进行预编译处理把各文件中的函数包含到本文件中来,然后一起进行编译、连接、运行。 #include “T7-1-2.c”#include “T7-1-3.c”main( ) p1( ); p2( ) ; p1( ) ; 运行结果同上,T7-1-2.c p1(
3、) printf (“* n”); ,T7-1-3.c p2( ) printf (“ How do you do! n”); ,一、概述,例:在屏幕上输出“How do you do ?”,stdio.h,printf函数,函数3,函数2,#include void main() printf(“How do you do ?”);,3.c,一、概述,2、函数调用方式:,一、概述,几点说明:(1)一个源文件由一个或者多个函数组成。(2)一个C程序由一个或者多个源文件组成。(3)C程序的执行从main 函数开始。(4)所有的子函数都是平行的。(5)从用户的角度看,函数分库函数和自定义函数。(6
4、)函数形式:无参函数:主调函数无数据传送给被调函数,可带或不带返回值。有参函数:主调函数与被调函数间有参数传递,主调函数可将实参传送给被调函数的形参, 被调函数的数据可返回主调函数。,一、概述,二、函数定义的一般形式1、无参函数的定义形式类型标识符:用于指定函数带回的值的类型,不写时为int型。不带回值时可以不写。,类型标识符 函数名() 说明部分 语句,例 无参函数 printstar( ) printf(“*n”); 或 printstar(void ) printf(“*n”); ,合法标识符,函数体,2、有参函数定义的一般形式,函数返回值类型隐含为int型,函数体,例 有参函数(现代风
5、格) int max(int x,int y) int z; z=xy?x:y; return(z); ,例 有参函数(现代风格) int max(int x, y) int z; z=xy?x:y; return(z); ,二、函数定义的一般形式,3、空函数为扩充功能预留,在主调函数中先占一个位置。,类型标识符 函数名() ,例 空函数 dummy( ) ,函数体为空,二、函数定义的一般形式,三、函数参数和函数的值1、形式参数和实际参数形式参数:定义函数时函数名后面括号中的变量名实际参数:调用函数时函数名后面括号中的表达式,例 比较两个数并输出大者#include void main() i
6、nt max(int x,int y); int a,b,c; scanf(%d,%d,运行:7,8 Max is 8,几点说明:实参可以是常量、变量或表达式。必须有确定的值。当函数调用时,将实参的值传递给形参,若是数组名,则传送的是数组首地址。 形参必须指定类型,只能是简单变量或数组,不能是常量或表达式形参与实参类型一致,个数相同顺序相同。若形参与实参类型不一致,自动按形参类型转换函数调用转换形参在函数被调用前不占内存;函数调用时为形参分配内存;调用结束,内存释放实参对形参的数据传送是值传送,也是单向传送,当被调函数的形参发生变化时,并不改变主调函数实参的值。形、实参占据的是不同的存储单元,
7、三、函数参数和函数的值,例:形、实参占据的是不同的存储单元#include void main( ) void add(int x,int y); int a=2,b=3; printf (“a=%d, b=%dn”,a, b); printf(“ ,运行结果: a=2,b=3&a=ffd6,&b=ffd8 x=10,y=15 &x=ffd2,&y=ffd4a=2, b=3&a=ffd6,&b=ffd8,2、函数的返回值返回语句形式: return(表达式);或 return 表达式; 功能:使程序控制从被调用函数返回到调用函数中,同时把返值带给调用函数,三、函数参数和函数的值,说明:函数的返
8、回值,必须用 return 语句带回。return 语句只能把一个返值传递给调用函数。函数中可有多个return语句,执行哪一个由程序执行情况来定。 if(ab) return(a); else return(b); return 后的值可以是一个表达式,如:return(x y ? x : y);返回值的类型为定义的函数类型,不指定的按整型处理。如: int max(int x, int y) float min(float a,float b) double abc(float d1,float d2),三、函数参数和函数的值,-若 return 语句中表达式类型与函数类型不一致,则转换为
9、函数类型。-若无return语句,遇时,自动返回调用函数。可能返回一个不确定或无用的值 。-无返回值的函数,定义为 void 类型。,printstar() printf(*);void main() int a; a=printstar(); printf(%d,a);,例:无return语句,函数带回不确定值,void printstar() printf(*);void main() int a; a=printstar(); printf(%d,a);,三、函数参数和函数的值,四、 函数的调用主调函数:主动去调用其它函数 被调函数:被其它函数所调用1、函数调用的一般形式函数名(实参表列
10、)说明:实参表列:有确定值的数据或表达式实参与形参个数相等,类型一致,按顺序一一对应,当有多个实参时,实参间用“ ,”分隔实参表求值顺序,因系统而定(Turbo C 自右向左)调用无参函数时,实参表列为空,但( )不能省,#include void main() int f(int a,int b); int i=2,p; p=f(i,+i); printf(%d,p);int f(int a, int b) int c; if(ab) c=1; else if(a=b) c=0; else c=-1; return(c);,例 参数求值顺序,按自右向左求值函数调用等于f(3,3)运行结果:0
11、,按自左向右求值函数调用等于f(2,3)运行结果:- 1,为使程序有通用性:,需自右向左求值时,改为:j=+i; p=f ( j , j ) ;,需自左向右求值时,改为:j = i ; k = + i ; p = f ( j , k ) ;,Printf(“%d,%d”,i,i+); /*同样存在此情况*/,2、函数调用的方式按函数在程序中出现的位置,有三种调用方式:函数语句:以独立的语句去调用函数。不要求有返回值,仅完成一定的操作。 例 printstar(); printf(“Hello,World!n”);函数表达式: 函数返回一个确定值,以参加表达式的运算。不可用于void例 m=ma
12、x(a,b)*2;函数参数:函数调用作为另一个函数的参数。 例 printf(“%d”,max(a,b); /*输出大数*/ m=max(a,max(b,c); /*三数比大小*/,四、 函数的调用,3、函数声明一般形式: 函数类型 函数名(形参类型 形参名,. );或 函数类型 函数名();作用:告诉编译系统函数类型、参数个数及类型,以便检验函数定义与函数声明不同,声明只与函数定义的第一行相同。声明可以不写形参名,只写形参类型。函数说明位置:程序的数据说明部分(函数内或外),四、 函数的调用,对被调用函数要求:必须是已存在的函数库函数: #include 用户自定义函数:如果被调函数定义在主
13、调函数之后,那么在主调函数中对被调函数作声明。,四、 函数的调用,#include void main() float add(float x,float y ); /*对被调用函数的声明*/ float a,b,c; scanf(%f,%f,float add(float,float);,例 对被调用的函数作声明,输入:3.6 ,6.5输出:sum is 10.100000,说明:旧版本C中函数声明不采用函数原型,只声明函数名和函数类型。如: float add( )函数调用之前,如果未对函数作声明,则编译系统把第一次遇到的函数形式作为函数声明,并默认为int型。即:函数类型是int型可以不
14、作函数声明,最好作声明。被调用函数的定义(程序)在主调函数之前,可以不加函数声明。在所有函数定义前,已在函数外部做了函数声明,则在各主调函数中可以不加函数声明。,四、 函数的调用,回顾:,源程序,Main函数 函数2 函数3,要点一:如何写函数?,确定函数完成功能; 确定函数与外界数据交换方式。,例:请写一个求 n! 的函数。,确定函数完成功能:计算 n!,int s=1,i; for(i=2;i=n;i+) s=s*i;, 确定函数与外界数据交换方式。 I、n由形式参数传入; II、计算的结果n!通过返回一个值出去,nfactorial( int n),int s=1,i;for(i=2;i
15、=n;i+) s=s*i;,int,return(s);,要点二:如何调用函数? 函数名(实参);或 变量名=函数名(实参);,例:在main中调用 n!函数,n由键盘输入。,void main()int a,b; printf(“input n: ”); scanf(“%d”,int nfactorial( int n) int s=1,i; for(i=2;i=n;i+) s=s*i; return(s);,int nfactorial( int n);,4、函数调用的执行过程,四、 函数的调用,五、 函数的嵌套调用,例 输入两个整数,求平方和,输入: 3 4输出: The result
16、is: 25,int fun2(int m) return (m*m); ,int fun1(int x,int y) int fun2(int m); return ( fun2(x)+fun2(y) );,#include int fun1(int x,int y);void main(void) int a,b; scanf(“%d%d”,#include int dif(int x,int y,int z); int max(int x,int y,int z); int min(int x,int y,int z);void main() int a,b,c,d; scanf(%d%
17、d%d,例 求三个数中最大数和最小数的差值,int min(int x,int y,int z) int r; r=xy?x:y; return(ry?x:y; return(rz?r:z);,int dif(int x,int y,int z) return max(x,y,z)-min(x,y,z); ,例 用弦截法求方程 的根,1. 取x1,x2两点,求得f(x1), f(x2) 。 异号:x1,x2之间必有一根。 同号:改变x1, x2,直到f(x1), f(x2)异号为止。,2. 连f(x1),f(x2)两点(弦)交x轴于x。 X点的坐标求法: 求X点的x坐标 从x值得f(x),3.
18、 若f(x)与f(x1)同号, 则根必在(x,x2)区间,此时将x1=x; 若f(x)与f(x2)同号, 则根必在(x1,x)区间,此时将x2=x;,4. 重复步骤2和3 ,直到| f(x) | 为止, 设 0) y1=y;x1=x; else x2=x; while(fabs(y) =0.0001); return(x); ,void main( ) float x1, x2, f1, f2, x; do printf(“input x1, x2: n”); scanf(“%f%f”,运行情况:Input x1,x2:2,6A root of equation is 5.0000,六、 函数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高级 高档 语言程序设计
限制150内