C语言程序设计-用函数实现模块化程序设计.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《C语言程序设计-用函数实现模块化程序设计.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计-用函数实现模块化程序设计.ppt(74页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2 2/73/733 3/73/734 4/73/73一、一、模块化程序结模块化程序结构构模块模块1主模块主模块模块模块11模块模块2模块模块21模块模块22一个较大的应用程序应分为若干个程序模块,每一一个较大的应用程序应分为若干个程序模块,每一个模块用来实现一个特定的功能。个模块用来实现一个特定的功能。所有的高级语言所有的高级语言都有子程序概念,用子程序实现模块的功能。都有子程序概念,用子程序实现模块的功能。5 5/73/73在在 C 语言中是利用函数来实现子程序的作用。语言中是利用函数来实现子程序的作用。 6 6/73/737 7/73/73函数函数F1 ( )main ( )F11 (
2、)F2 ( )F21 ( )F22 ( )黑盒子黑盒子8 8/73/73数学函数数学函数 ( (math.hmath.h) )字符和字符串函数字符和字符串函数 ( ctype.hctype.h, ,string.hstring.h)I/OI/O函数函数 ( stdio.hstdio.h)动态存储分配函数动态存储分配函数( (stdlib.hstdlib.h或或malloc.hmalloc.h) )形式形式无参函数无参函数有参函数有参函数空函数空函数库函数库函数用户定义函数用户定义函数详见详见P384附录附录F9 9/73/73l一个源程序文件,由一一个源程序文件,由一个或多个函数以及其他个或多
3、个函数以及其他有关内容组成,是一个有关内容组成,是一个编译单位,编译单位,函数不是一函数不是一个编译单位。个编译单位。lC程序的执行总是从程序的执行总是从main函数开始,调用其函数开始,调用其它函数后回到它函数后回到main函数,函数,在在main函数中结束整个函数中结束整个程序的运行;程序的运行;l所有的子函数都是平行所有的子函数都是平行的,任何子函数都不属的,任何子函数都不属于其他函数;于其他函数;void main()printstar();printmessage();例例7- 1#include void printstar() printf(“*n”);void printmes
4、sage()printf(“ Hello,world.n”); printstar();这两个函数能单独执行吗?这两个函数能单独执行吗?不能不能1010/73/73例例7- 2#include int max(int x,int y) int z; z = x y ? x : y; return( z );void main() int a,b,c ; scanf(“%d,%d”,&a,&b); c=max(a,b); printf(“The max is %d”, c);void printstar() printf(“*”);void function(int a, float y) 类型
5、说明类型说明 函数名函数名( ( 形式参数说明形式参数说明 ) ) 函数体函数体 形式参数说明方法:形式参数说明方法:类型说明类型说明 变量名变量名1,类型说明,类型说明 变量名变量名2 1.1.无参函数的定义形式无参函数的定义形式类型说明类型说明 函数名函数名( () ) 函数体函数体 2.2.空函数的定义形式空函数的定义形式类型说明类型说明 函数名函数名( ( 形式参数说明形式参数说明 ) ) 1111/73/731212/73/73c=max (a,b);例例7- 2#include int max(int x,int y) int z; z = x y ? x : y; return(
6、 z );void main() int a,b,c ; scanf(“%d,%d”,&a,&b); c=max(a,b); printf(“The max is %d”, );主调函数主调函数int max(int x,int y) return( z );被调用函数被调用函数a, bz各函数的信息往来主要是由各函数的信息往来主要是由参数传递参数传递和和返回语句返回语句实现的实现的1313/73/73例例7- 2#include int max(int x,int y) int z; z = x y ? x : y; return( z );void main() int a,b,c ; s
7、canf(“%d,%d”,&a,&b); c=max(a,b); printf(“The max is %d”, c);函数参数用于函数间数据的传递函数参数用于函数间数据的传递形式参数:形式参数:定义定义函数时使用的参数函数时使用的参数实际参数:实际参数:调用调用函数时使用的参数函数时使用的参数函数函数max有两个形式参数有两个形式参数x和和y形参形参x和和y只在只在max函数中使用函数中使用a和和b是主函数中定义的变量是主函数中定义的变量main函数调用函数调用max函数函数a和和b是是max函数的实参函数的实参23,56The max is 561414/73/73说明:说明:1.1.定义
8、函数时,必须说明形参类定义函数时,必须说明形参类型,形参只能是型,形参只能是变量变量和和数组数组;2.2.函数被调用前,形参不占内存函数被调用前,形参不占内存,函数调用结束后,内存也被释,函数调用结束后,内存也被释放;放;3.3.实参可以是实参可以是常量常量、变量变量和和表达表达式式;4.4.实参和形参的类型必须一致,实参和形参的类型必须一致,字符型和整型可以相互匹配;字符型和整型可以相互匹配;5.C5.C语言中实参对形参的数据传语言中实参对形参的数据传递是递是“值传递值传递”,即单向传递,即单向传递,仅由参数的对应位置决定,与,仅由参数的对应位置决定,与名字无关。名字无关。例例8- 2#in
9、clude int max(int x,int y) int z; z = x y ? x : y; return( z );void main() int a,b,c ; scanf(“%d,%d”,&a,&b); c=max(a,b); printf(“The max is %d”, c);23,56The max is 56例例8- 2#include int max(int x,int y) x = x y ? x : y; return( x );void main() int a,b,c ; scanf(“%d,%d”,&a,&b); c=max(a,b); printf(“The
10、 max is %d”, c);例例7- 2#include int max(int b,int a) int c; c = b a ? b: a; return( c );void main() int a,b,c ; scanf(“%d,%d”,&a,&b); c=max(a,b); printf(“The max is %d”, c);1515/73/73#include int sum(int a,int b) int c; a=a+b; b=a+b; c=a+b; printf(“sum:%d+%d = %dn”, a,b,c); return a; void main() int
11、a=1,b=3,c ; c=sum(a,b); printf(“main:%d+%d = %dn”, a,b,c);1616/73/73例例8- 2#include int max(int x,int y) int z; z = x y ? x : y; return( z );void main() int a,b,c ; scanf(“%d,%d”,&a,&b); c=max(a,b); printf(“The max is %d”, c);例例8- 2#include int max(int x,int y) if(xy) return (x) ; return ( z );void m
12、ain() int a,b,c ; scanf(“%d,%d”,&a,&b); c=max(a,b); printf(“The max is %d”, c);例例7- 2#include int max(int x,int y) return(x y ? x : y );void main() int a,b,c ; scanf(“%d,%d”,&a,&b); c=max(a,b); printf(“The max is %d”, c);1717/73/73例例7- 2#include int max(int x,int y) int z; z = x y ? x : y; return( z
13、 );void main() int a,b,c ; scanf(“%d,%d”,&a,&b); c=max(a,b); printf(“The max is %d”, c);1818/73/73例例7- 1#include void printstar() printf(“*”);void printmessage()printf(“ Hello,world.n”); printstar();void main()printstar();printmessage();1919/73/73一一. 函数调用的一般形式函数调用的一般形式 函数名函数名(实参表列实参表列)说明:说明:1.1.如果调用
14、无参函数,实如果调用无参函数,实参表列部分没有,但括号参表列部分没有,但括号不能省略不能省略; ;2.2.实参的个数和形参个数实参的个数和形参个数一般相等;一般相等;3.3.实参和形参的类型一一实参和形参的类型一一对应,必要时使用类型转对应,必要时使用类型转换;换;4.4.实参变量定义在调用函实参变量定义在调用函数之前完成。数之前完成。例例7- 2#include int max(int x,int y) int z; z = x y ? x : y; return( z );void main() int a,b,c ; scanf(“%d,%d”,&a,&b); c=max(a,b); p
15、rintf(“The max is %d”, c);2020/73/73二二. 函数调用的方式函数调用的方式1.1.函数语句函数语句形式为形式为:函数名函数名( (实参表列实参表列););例如:例如: printmessage(); printf(“%d”,a);说明:说明:这种方式不要求这种方式不要求函数带返回值,函数仅函数带返回值,函数仅完成一定的操作。完成一定的操作。2.2.函数表达式函数表达式函数的值参与运算函数的值参与运算例如:例如:m=max(a,b);m=3*max(a,b);printf(“The max is %d”, max(a,b);说明:说明:这种方式不能这种方式不能用
16、于用于voidvoid类型。类型。2121/73/73三三. 函数调用的执行过程函数调用的执行过程1.1.按从右到左的顺序按从右到左的顺序,计算实参各表达式,计算实参各表达式的值;的值;2.2.按照位置,将实参按照位置,将实参的值一一传给形参;的值一一传给形参;3.3.执行被调用函数;执行被调用函数;4.4.当遇到当遇到return(return(表达表达式式) )语句时,计算表达语句时,计算表达式的值,并返回主调式的值,并返回主调函数。函数。2222/73/73四四. 函数的声明函数的声明2323/73/73函数声明与函数定义的格式区别:函数声明与函数定义的格式区别:函数声明语句的函数声明语
17、句的( )后必须有分号,而函数定义后必须有分号,而函数定义( )后后没有分号。没有分号。函数声明只有一条语句,没有函数体,而函数定义函数声明只有一条语句,没有函数体,而函数定义有多条语句,有函数体。有多条语句,有函数体。2424/73/73guPbQas02. 12525/73/73例例7- 5#include #define g 9.8void main() float qsf(float,float, float,float); float qresult,p, b, ua, rou; printf(p, b, ua, rou =n); scanf(%f,%f, %f,%f,%f,&p,&
18、b, &ua, &rou); qresult =qsf(p, b, ua, rou); printf(“qresult=%dn,qresult);float qsf(float p,float b, float ua,float rou ) float qs; qs=p*b/(1.02*ua*rou*g); return qs;guPbQas02. 1/百公里燃油消耗量函数声明百公里燃油消耗量函数声明/实参变量定义实参变量定义 /实参变量赋值实参变量赋值/百公里燃油消耗量函数调用百公里燃油消耗量函数调用/ /* *百公里燃油消耗量函数定义百公里燃油消耗量函数定义* */ /函数返回值函数返回值
19、 2626/73/73n)!-(mn!m!例例8- 6#include int factor(int k ) int i, kfactor=1; for(i=k;i1;i-) kfactor*=i; return kfactor;void main() int m,n,result; printf(m,n= n); scanf(%d,%d,&m,&n); result =factor(m)*factor(n)/factor(m-n) ; printf(result=%dn,result);/求阶乘函数定义求阶乘函数定义/阶乘函数返回值阶乘函数返回值/三次调用阶乘函数三次调用阶乘函数2727/7
20、3/73调用调用调用调用返回返回返回返回2828/73/73函数定义不可嵌套函数定义不可嵌套void 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 函数调用可以嵌套函数调用可以嵌套2929/73/731递归的基本概念递归的基本概念递归调用递归调用:一个函数直接或间接地调用了它本身:一个函数直接或间接地调用了它本身,就称为函数的递归调用。,就称为函数的递归调用。递
21、归函数递归函数:在函数体内调用该函数本身。:在函数体内调用该函数本身。int sub(int x) int y,z; if( ) z=sub(y); else return ;例如:例如:3030/73/73思路思路:以求:以求4的阶乘为例的阶乘为例:4!=4*3!,3!=3*2!,2!=2*1!,1!=1,0!=1。递归结束条件递归结束条件:当:当n=1或或n=0时,时,n!=1。递归公式:递归公式:3131/73/73#include void main ( ) int n, p;printf (n=?);scanf (%d, &n);p = fact (n);printf (%d!=%d
22、n, n, p);int fact ( int n ) int r; if ( n = 1 ) r = 1; else r=n*fact(n-1); /* 递归调用递归调用 */ return (r);3232/73/73void main( ) p=fact(4); fact( 4 ) r=4*fact(3); return 24 fact( 3 ) r=3*fact(2); return 6 fact(2 ) r=2*fact(1); return 2fact(1 ) r=1; return 1递递 推推回回 推推3333/73/73x =1 (n=0)x xn - 1 (n0)n3434
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 函数 实现 模块化 程序设计
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内