第7章 函数.ppt
《第7章 函数.ppt》由会员分享,可在线阅读,更多相关《第7章 函数.ppt(91页珍藏版)》请在三一文库上搜索。
1、第7章 函数,主要内容,C的模块化设计,我们之前一直编写的C程序:,C程序结构:,C是函数式语言 必须有且只有一个名为main的主函数 C程序的执行总是从main函数开始,在main中结束 所有函数是平行的,函数不能嵌套定义,可以嵌套调用,C的模块化设计,简单的函数举例:,#include void main() printf(“* * * * * * * * * * * * * *n“); printf(“ How do you do!n“); printf(“* * * * * * * * * * * * * *n“); ,#include print_star() printf(“* *
2、 * * * * * * * * * * * *n“); print_message() printf(“ How do you do!n“); void main() print_star(); print_message(); print_star(); ,C的模块化设计,函数的分类:,从用户的角度 标准函数(库函数) 如:printf(), strlen() 用户自定义函数 如:print_star(),从函数形式 无参函数 如:print_star(), getchar() 有参函数 如:printf(“Hello“);,函数的定义(现代方式),函数定义的一般方式:,函数的返回值的类型
3、 若缺省为:int整型 函数没有返回值定义void,函数的名字 合法标识符,说明参数类型 形参说明表可以为空,例 有参函数(现代风格) 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); ,函数的定义(现代方式),函数定义的一般方式:,例 无参函数(现代风格) print_star () printf(“* * * * * * * * * * * * * *n“); 或 print_star (v
4、oid) printf(“* * * * * * * * * * * * * *n“); ,省略返回类型,默认返回int型值 函数中并没有用return返回任何值 所以函数返回一个不确定的int型数,main() printf(“%d“, print_star(); print_star() printf(“* * * * * * * * * * * * * *n“); ,* * * * * * * * * * * * * * 28,#include print_star() printf(“* * * * * * * * * * * * * *n“); return (10); void m
5、ain() printf(“%d“, print_star(); ,* * * * * * * * * * * * * * 10,函数的定义(现代方式),函数定义的一般方式:,例 无参函数(现代风格) void print_star () printf(“* * * * * * * * * * * * * *n“); ,返回类型为void 即不返回任何值,#include void print_star() printf(“* * * * * * * * * * * * * *n“); void main() printf(“%d“, print_star(); ,Error 7: Not a
6、n allowed type in function main,#include void print_star() printf(“* * * * * * * * * * * * * *n“); void main() print_star(); ,P,#include void print_star() printf(“* * * * * * * * * * * * * *n“); return(10); void main() print_star(); ,不产生编译错误 产生一个警告,Warnig 4: Void functions may not return a value in
7、,函数的定义(现代方式),函数定义的一般方式:,例 空函数(函数体为空) dummy() ,调用此函数时,什么都不做,函数参数,#include void main() int a, b, sum; a = 10; b = 24; sum = add(a, b); printf(“sum = %dn“, sum); int add(int x, int y) int z; z = x+y; return(z); ,执行函数add(10, 24),返回值:z=34,sum = 34,#include void main() int a, b, sum; a = 10; b = 24; sum =
8、 add(a, b); printf(“sum = %dn“, sum); int add(int x, int y) int z; z = x+y; return(z); ,#include void main() int a, b, sum; a = 10; b = 24; sum = add(a, b); printf(“sum = %dn“, sum); int add(int a, int b) int z; z = a+b; return(z); ,#include void main() int add (int a,int b); int a, b, sum; a = 10;
9、b = 24; sum = add(a+b, 15*2); printf(“sum = %dn“, sum); int add(int a+b, int 15*2) int z; z = a+b; return(z); ,P,形参和实参可以用相同的变量名,实参可以是表达式 形参必须是变量名,函数参数,#include void main() int add(int x, int y); int a, b, sum; a = 10; b = 24; sum = add(a, b); printf(“sum = %dn“, sum); int add(int x, int y) x = x+y;
10、return(x); ,实参将值传递给形参 形参不能将值回传给实参,a=10, b=24,x=a=10, y=b=24,x=34,将x的值返回给调用处,sum=x=34,10,24,10,24,34,34,函数参数及其传递方式,1、形参与实参 形式参数:函数定义时函数名后面括号中的变量名 实际参数:函数调用时函数名后面括号中的表达式,例 比较两个数并输出大者,#include void main() int max(int x,int y); int a,b,c; scanf(“%d,%d“, ,函数参数及其传递方式,1、形参与实参 形式参数:定义函数时函数名后面括号中的变量名 实际参数:调用
11、函数时函数名后面括号中的表达式,说明: 实参可以是常量、变量或表达式,必须有确定的值 形参必须指定类型 形参与实参类型一致,个数相同 若形参与实参类型不一致,自动按形参类型转换函数调用转换 形参在函数被调用前不占内存函数调用时为形参分配内存;调用结束,内存释放,max(3,a+b),2、参数传递方式 值传递方式 方式: 函数调用时,为形参分配单元,并将实参的值复制到形参中; 调用结束,形参单元被释放,实参单元仍保留并维持原值 特点: 形参与实参占用不同的内存单元 单向值传递(形参的改变并不影响实参),函数参数及其传递方式,7,11,调用前,调用时,执行swap,调用结束,例 交换两个数,#in
12、clude swap(int a,int b) int temp; temp=a; a=b; b=temp; void main() int x=7,y=11; printf(“x=%d,y=%dn“,x,y); printf(“swapped:n“); swap(x,y); printf(“x=%d,y=%dn“,x,y); ,函数返回值,函数依靠return语句实现值的返回:,return (表达式); return 表达式; 或 return;,功能:使程序控制从被调用函数 返回到调用函数中, 同时把返回值带给调用函数,说明:return语句的后面可以不要括号,max (int x, i
13、nt y) int z; z = xy ? x : y ; return(z); ,函数返回值,函数依靠return语句实现值的返回:,return (表达式); return 表达式; 或 return;,功能:使程序控制从被调用函数 返回到调用函数中, 同时把返回值带给调用函数,说明:return语句可以返回表达式的值,max (int x, int y) int z; z = xy ? x : y ; return(z); ,函数返回值,函数依靠return语句实现值的返回:,说明:定义函数时,即指定函数返回值的类型 当没有指定类型时,默认为int型,char letter (char
14、ch) float sum (float x, float y) int max (int x, int y) min (int x, int y),定义函数时声明的函数值类型 应当与return返回的数值类型一致,若声明的函数值类型与return 语句中表达式的类型不一致, 则以所声明的函数值类型为准 即:函数类型决定返回值类型,#include void main() int max (double x, double y); printf(“%d“, max(1.0, 2.0); max (double x, double y) return(xy? x : y); ,2,表达式的值为:
15、2.0(double型),返回2(int型),函数返回值,函数依靠return语句实现值的返回:,说明:一个函数中可以有多个return语句,#include void main() int f(int x); printf(“%d“, f(10); f (int x) return (x); printf(“*n“); return(0); ,10,函数遇到第一个return 语句,即刻结束函数的 调用,返回函数值, 并将控制返回到调用处,Warning 9: Unreachable code in function f,编译时产生一个警告,函数返回值,函数依靠return语句实现值的返回:
16、,说明:若函数中无return语句,遇到时自动返回调用函数,#include void main() int f(int x); printf(“%d“, f(10); f (int x) printf(“*n“); ,* 8,函数默认声明: 函数值为int型,由于没有return语句 因此当遇到时, 自动返回一个不确定的值,函数返回值,函数依靠return语句实现值的返回:,说明:若要明确表示函数不返回值,则用void声明函数值类型,#include void print_star() printf(“* * * * * * * * * * * * * *n“); void main() p
17、rint_star(); ,#include void print_star() printf(“* * * * * * * * * * * * * *n“); void main() printf(“%d“, print_star(); ,Error 7: Not an allowed type in function main,产生编译错误!,函数的调用,函数调用的一般形式:,函数名 (实参表);,说明: 实参与形参个数相等,类型一致,按顺序一一对应 实参表求值顺序,因系统而定(Turbo C 自右向左),#include int f(int a, int b) int c; printf
18、(“%d, %dn“,a,b); if(ab) c=-1; else if(a=b) c=0; else c=1; return(c); void main() int i=2, p; p=f(i, +i); printf(“%d“, p); ,f(3, 3),a=3, b=3,c=0,p=0,#include int f(int a, int b) int c; printf(“%d, %dn“,a,b); if(ab) c=-1; else if(a=b) c=0; else c=1; return(c); void main() int i=2, p; p=f(+i, i); print
19、f(“%d“, p); ,3, 3,0,f(3, 2),a=3, b=2,3, 2,1,c=1,p=1,函数的调用方式,把函数调用作为语句: 把函数调用作为表达式 把函数调用作为调用另一个函数的参数(实参),例 printf(“Hello,World!n“); 只关心函数完成的功能,例 sl = strlen(s); 关心函数的返回值,例 printf(“%d“, strlen(s);,被调函数的声明,在一个函数中,调用另一个函数,需要哪些条件? 被调函数必须是已经存在的函数(库函数或用户自定义) 若被调函数是库函数 一般需要使用#include 将头文件包含进来 若被调函数是用户自定义的,且
20、与主调函数在一个文件中 一般需要在主调函数中对被调函数作声明 目的是对函数的调用做正确性检查,#include void main() int max ( int x, int y); int a=10, b=24; printf(“%d“, max(a, b); max (int x, int y) return(xy? x : y); ,被调函数的声明,在一个函数中,调用另一个函数,需要哪些条件? 被调函数必须是已经存在的函数(库函数或用户自定义) 若被调函数是库函数 一般需要使用#include 将头文件包含进来 若被调函数是用户自定义的,且与主调函数在一个文件中 一般需要在主调函数中对
21、被调函数作声明 目的是对函数的调用做正确性检查,#include void main() int max ( int, int); int a=10, b=24; printf(“%d“, max(a, b); max (int x, int y) return(xy? x : y); ,被调函数的声明,在一个函数中,调用另一个函数,需要哪些条件? 被调函数必须是已经存在的函数(库函数或用户自定义) 若被调函数是库函数 一般需要使用#include 将头文件包含进来 若被调函数是用户自定义的,且与主调函数在一个文件中 一般需要在主调函数中对被调函数作声明 目的是对函数的调用做正确性检查,#in
22、clude void main() max ( int x, int y); int a=10, b=24; printf(“%d“, max(a, b); max (int x, int y) return(xy? x : y); ,Error 3: Expression syntax in function main Error 4: Expression syntax in function main Error 5: Undefined symbol a in function main Error 5: Undefined symbol b in function main,被调函数
23、的声明,自定义函数在使用前一定要进行声明。除了以下情况: 函数类型为int型(Tc环境下可以省略声明,Vc环境下不可省) 被调用函数定义在主调函数前 在主调函数之前,已在函数的外部已经做了被调函数声明, 则在主调函数中不必再做声明,被调函数的声明,函数类型为int型: 在函数调用之前,若没有对函数进行声明, 则编译系统会把第一次遇到的该函数形式(函数定义或函数调用)作为函数声明,并默认该函数为int型,#include void main() int max ( int x, int y); int a=10, b=24; printf(“%d“, max(a, b); max (int x,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第7章 函数
链接地址:https://www.31doc.com/p-4333582.html