C语言程序设计课程课件PPT之第三章模块化程序设计.ppt
《C语言程序设计课程课件PPT之第三章模块化程序设计.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计课程课件PPT之第三章模块化程序设计.ppt(72页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、济南大学Rosev 如果程序中有多个数,如果程序中有多个数,多处需要判断是否是素多处需要判断是否是素数,怎么办?反复书写数,怎么办?反复书写那段重复的代码?那段重复的代码?将判断素数将判断素数的功能用一个独立的模的功能用一个独立的模块来实现,即自定义函块来实现,即自定义函数;在数;在main函数中反复函数中反复调用此功能模块就可以调用此功能模块就可以了。了。for(i=2;i=x/2) printf(yesn); else printf(non);济南大学Rosemain() int a,b; printf(input a number:); scanf(%d%d,&a,&b); 实现了代码的
2、实现了代码的复用;复用;编程效率高;编程效率高;代码少;代码少;功能分解,易功能分解,易于实现;于实现;便于合作开发便于合作开发大型项目等。大型项目等。济南大学Rose1 1掌握函数定义的一般形式。掌握函数定义的一般形式。2 2掌握函数调用的两种方式。掌握函数调用的两种方式。3 3理解函数形参与实参的对应关系、参数理解函数形参与实参的对应关系、参数传递方法及函数返回值的概念。传递方法及函数返回值的概念。4 4掌握指针的含义。掌握指针的含义。5 5掌握指针作为函数参数的数据传递特点。掌握指针作为函数参数的数据传递特点。济南大学Rose济南大学Rose 函数的定义函数的定义:应写在其它函数的外面,
3、:应写在其它函数的外面,前后都可以,但不能写在内部。前后都可以,但不能写在内部。 函数的定义函数的定义 第一行写函数名和括号第一行写函数名和括号 第二行开始是函数体,用大括号扩起来,第二行开始是函数体,用大括号扩起来,如:如: 函数名称用户自定函数名称用户自定济南大学Rose 函数定义的函数定义的:函数被调用在前面,而函:函数被调用在前面,而函数定义书写在后面的,需要在使用该函数前数定义书写在后面的,需要在使用该函数前进行声明。进行声明。 函数声明的形式:将函数定义的第一行信息函数声明的形式:将函数定义的第一行信息重新写一遍,重新写一遍,末尾加分号末尾加分号。声明可以放在调用声明可以放在调用之
4、前的任意位置处。之前的任意位置处。济南大学Rosemain() float add(float x,float y); float a,b,c; scanf(%f,%f,&a,&b); c=add(a,b); printf(sum is %f,c);float add(float x, float y) float z; z=x+y; return(z);float add(float a,float b);float add(float ,float );函数声明的几种变通形式:函数声明的几种变通形式:济南大学Rose济南大学Rose主调函数主调函数自定义函数自定义函数济南大学Rose 有参
5、函数有参函数 无参函数无参函数 有返回值函数有返回值函数 无返回值函数无返回值函数无论有参、无参,无论有参、无参,函数名后的括号函数名后的括号不能省略。不能省略。济南大学Rose通常也无返回值,仅需书写:通常也无返回值,仅需书写: 如果有返回值,则写明返回值类型,如果有返回值,则写明返回值类型, ch=getchar();济南大学Rose需写明参数的个数和类型:需写明参数的个数和类型: 如:如: 【强调】:【强调】:,类型相同不能只写一个,例如下错误:类型相同不能只写一个,例如下错误: float fun(int m, n);float fun(int m, n);例如:求两个数的最大值的函数
6、参数设计例如:求两个数的最大值的函数参数设计: max( )济南大学Rose 分析设计函数首部信息: 实验4-1-4: float fun(int n) 实验4-1-5: float fun(int m,int n) 实验4-1-7: void fun()济南大学Rose有返回值函数,在函数体内用有返回值函数,在函数体内用语句返回处语句返回处理的结果值。理的结果值。如:如:语句的两个功能:返回值、结束函数调用。语句的两个功能:返回值、结束函数调用。济南大学Rose如果函数不返回值,则名称前写如果函数不返回值,则名称前写void,如:如:如果定义函数时名称前没写明类型,默认如果定义函数时名称前没
7、写明类型,默认为为int类型类型,如:如:如果函数体内:如果函数体内return语句返回值的类语句返回值的类型与定义的函数名前类型不同,则以函数名前型与定义的函数名前类型不同,则以函数名前面的类型为准,系统会自动进行类型转换,可面的类型为准,系统会自动进行类型转换,可能会产生误差或错误。能会产生误差或错误。济南大学Rose例:编写一个函数,其功能是求例:编写一个函数,其功能是求m的的n次方,即次方,即mn。分析:函数参数分析:函数参数 函数返回值函数返回值函数首部信息如下:函数首部信息如下: 济南大学Rosedouble fun(int m,int n) int i; double t=1;
8、for(i=1;i=n;i+) t=t*m; main() int a,b; double c; printf(input two numbers:); scanf(%d%d,&a,&b); printf(%.0lfn,c);return (表达式);表达式);return 表达式;表达式;形参在括号中定义形参在括号中定义后,直接在函数中后,直接在函数中使用,不能再次定使用,不能再次定义。义。济南大学Rose济南大学Rose形参:形参:定义时括号内的参数叫做形式参数,简定义时括号内的参数叫做形式参数,简称形参。称形参。实参:实参:调用是给予的实际数值叫做实际参数,调用是给予的实际数值叫做实际参
9、数,简称实参。简称实参。形参形参和和实参:实参:个数相同、类型一致、一一对应。个数相同、类型一致、一一对应。例如求例如求m的的n次方的函数:次方的函数: float fun(int m,int n)调用时如果求调用时如果求4的的5次方,只能书写次方,只能书写fun(4,5);不不能写为能写为fun(5,4);济南大学Rosedouble fun(int m,int n) int i; double t=1; for(i=1;i=n;i+) t=t*m; main() int a,b; double c; printf(input two numbers:); scanf(%d%d,&a,&b)
10、; printf(%.0lfn,c);实参可以是常量、实参可以是常量、变量、表达式等。变量、表达式等。如:如:fun(2,8) fun(3,1+5)济南大学Rosedouble fun(int m,int n) int i; double t=1; for(i=1;i=n;i+) t=t*m; main() int a,b; printf(input two numbers:); scanf(%d%d,&a,&b); printf(%.0lfn, );济南大学Rosedouble jiecheng(int n) int i; double t=1; for(i=1;i=n;i+) t=t*i;
11、 main() int a,i; double b=0; scanf(%d,&a); for(i=1;i=a;i+) printf(%.0lfn,b);济南大学Roseprintf(%.0lfn, );济南大学Rose编写一个函数,其功能画编写一个函数,其功能画m行行n列的矩形。列的矩形。分析:函数参数分析:函数参数 函数返回值函数返回值函数首部信息如下:函数首部信息如下:void济南大学Rosevoid draw(int m,int n) int i,j; for(i=1;i=m;i+) for(j=1;ib?a:b; return(z);main() printf(“a=%d,b=%d,a
12、,b); printf(max=%d,max();济南大学Rose例例 全局变量举例全局变量举例int max(int x, int y) int z; z=xy?x:y; return(z);main() printf(“a=%d,b=%d,a,b); printf(max=%d,max(a,b);int a=13,b=-8;编译出错因为全局变量的作因为全局变量的作用域为用域为定义位置后定义位置后的任何函数的任何函数济南大学Rose 全局变量意味着多个函数可使用它,全局变量意味着多个函数可使用它,就是说各函数之间通过全局变量产生了就是说各函数之间通过全局变量产生了相互的值的影响,因此降低了函
13、数的独相互的值的影响,因此降低了函数的独立性,使各函数间依赖型增强。立性,使各函数间依赖型增强。应尽量少使用全局变量应尽量少使用全局变量济南大学Roseint a=13,b=8;int sum() int z; z=a+b; a+; b-; return(z);main() printf(“a=%d,b=%d,a,b); printf(“sum=%d,sum(); printf(“a=%d,b=%d,a,b);输出结果为:输出结果为:a=13,b=8;sum=21;a=14,b=7;济南大学Roseint a=3,b=5;max(int a, int b) int c; c=ab?a:b; r
14、eturn(c);main() int a=8; printf(max=%d,max(a,b);例 全局变量与局部变量同名举例济南大学Roseint i;main() void prt(); for(i=0;i5;i+) prt();void prt() for(i=0;i5;i+) printf(“%c”,*); printf(“n”);例 全局变量副作用运行结果:运行结果:*Rose局部局部变量的存储类别:变量的存储类别:动态存储变量和静态存储变量动态存储变量和静态存储变量。 auto动态存储变量是在程序运行时根据需要动态分动态存储变量是在程序运行时根据需要动态分配存储空间。配存储空间。函
15、数被调用函数被调用时,分配给内存单元,调用时,分配给内存单元,调用结束后就释放内存单元。结束后就释放内存单元。 static静态存储变量局是指程序运行期间分配固定的静态存储变量局是指程序运行期间分配固定的存储空间。每次函数调用结束后不释放空间,只有在存储空间。每次函数调用结束后不释放空间,只有在主程序运行结束才释放内存单元。主程序运行结束才释放内存单元。 static静态变量在函数多次调用时,只赋一次初值,静态变量在函数多次调用时,只赋一次初值,每次调用后保留当时的结果值。每次调用后保留当时的结果值。Rose局部变量的定义类型局部变量的定义类型 auto自动类型自动类型 如:如:atuo in
16、t i,a,b; static静态类型静态类型 如:如:static int x,y; register 寄存器类型寄存器类型 如:如:register int i;补充:如无特殊声明,默认为补充:如无特殊声明,默认为auto类型类型全局变量的定义类型全局变量的定义类型 static 静态类型(默认是静态类型(默认是static类型)类型) extern 外部类型外部类型 如:如:extern int s;补充:如无特殊声明,默认为补充:如无特殊声明,默认为static类型类型济南大学Roseint n=1;void func() static int a=2; int b=5; a+=2;
17、b+=5; n+=12; printf(a=%d,b=%d,n=%dn,a,b,n);main() int a=0,b=-10; printf(a=%d,b=%d,n=%dn,a,b,n); func(); printf(a=%d,b=%d,n=%dn,a,b,n); func();a=0,b=-10,n=1a=4,b=10,n=13a=0,b=-10,n=13a=6,b=10,n=25济南大学Rose3.9模块化程序设计指 针济南大学Rose普通函数参数值传递的特点普通函数参数值传递的特点函数函数return语句返回值的特点语句返回值的特点济南大学Rosevoid swap(int x,in
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 课程 课件 PPT 第三 模块化 程序设计
限制150内