C语言程序设计第5章.pptx
《C语言程序设计第5章.pptx》由会员分享,可在线阅读,更多相关《C语言程序设计第5章.pptx(55页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、一、函数与模块化程序设计1 模块化程序设计方法:程序员在设计一个比较复杂的应用程序时,一般采用的方法是将整个程序分解成若干个功能较为单一的、相对独立的程序模块分别实现,然后再将所有的程序模块象搭积木一样装配起来,形成一个完整的程序,这种在程序设计中分而治之的策略称为模块化程序设计方法。优点:主要体现在程序编制方便,易于修改和调试,可由多人共同参与完成,缩短程序的设计时间,并能实现程序模块的标准化、规范化。第1页/共55页 在C语言中,函数是程序的基本组成单位,程序设计人员可以很方便地用函数作为程序模块来实现程序的模块化,一个函数就是一个模块,独立完成一项功能。第2页/共55页采用普通的程序设计
2、方法#include stdio.hmain()int a,b,max;printf(输入两个整数:);scanf(%d,%d,&a,&b);if(ab)max=a;else max=b;printf(max=%dn,max);例5-1 求两个整数的最大值。采用结构化程序设计方法#include stdio.hint fmax(int x,int y)int z;if(xy)z=x;else z=y;return z;main()int a,b,max;printf(输入两个整数:);scanf(%d%d,&a,&b);max=fmax(a,b);printf(max=%dn,max);第3页
3、/共55页2 程序模块设计一般原则 模块相对独立 一个模块往往要求完成一个单独的功能,并与其他模块尽量保持一定的独立性,当修改这个模块时,不会引起整个程序的混乱。同时,在模块内部,尽量将数据局部化,便于保证数据在不同模块之间的正常传递。模块之间关系尽量简单 模块之间关系要尽量简单,且不互相干扰,做到模块之间只有在相互调用时才发生数据传递。除此之外,相互之间不直接发生联系。第4页/共55页 模块规模大小要适中 程序模块不宜过大,也不要过于复杂,大小要适中。模块过大,容易造成程序功能紊乱,可读性差,不好理解。模块过小,容易造成程序结构复杂,数据传递容易出错。模块尽量保持通用性 模块应尽量规范,保持
4、一定的通用性,这样便于对模块进行修改和维护,快速实现对程序的扩充。第5页/共55页一、函数的分类与定义函数可以分为函数可以分为无参函数无参函数 和和有参函数有参函数。函数可以分为函数可以分为标准函数标准函数 和和自定义函数自定义函数。有一个或多个形参无形参由系统提供,可直接使用由用户自己定义使用第6页/共55页二、函数的定义1无参函数定义的一般形式:函数类型说明符 函数名()函数体 例如:printstar()printf(*n);第7页/共55页2有参函数定义的一般形式:函数类型说明符 函数名(形参表列)函数体 例如:int fmax(int x,int y)int z;if(xy)z=x;
5、else z=y;return z;第8页/共55页说明:C语言规定:函数不允许嵌套定义。函数之间是平行的、相对独立的。一个函数的定义可 以放在程序中的任何一个位置,但在一个函数的函数体内,不能再定义另外一个函数。函数的类型是指函数返回值的类型,可以是整型、实型、字符型、指针类型等等数据类型,如果函数没有返回值,则函数类型为void。函数名必须符合标识符的命名规则,函数名不能与变量名重名,也不能与关键字同名。函数体包含两部分:语句声明部分和执行语句部分。空函数既无参数,又无函数体,其一般形式为:函数类型说明符 函数名()第9页/共55页 函数的调用在定义一个函数后,要调用该函数才能执行该函数的
6、功能,否则,该函数在程序中只是一段静态的代码,不起任何作用。1.1.函数调用的一般形式函数调用的一般形式 函数名(实参表列)函数名(实参表列)注意:实参表列的形式为:实际参数1,实际参数2,实参可以是常量或变量,也可以是各种表达式。实际参数的个数和类型应该与函数定义时的形式参数的个数和类型一致,并一一对应。例如:c=max(a,b);调用无参函数时,不能有实参表列。三、函数的调用第10页/共55页2.函数调用的具体方式 函数语句把函数调用作为一个语句。其一般形式为:函数名(实际参数表);该方式常用于调用一个可以忽略返回值或没有返回值的函数。例如程序中的scanf()函数和printf()函数的
7、调用。第11页/共55页 函数表达式 函数调用出现在表达式中,这种表达式称为函数表达式。其一般形式为:变量名=函数表达式;这种方式用于调用带返回值的函数,函数的返回值将参加表达式的运算。例如程序中的max=maxnum(i,j,k);第12页/共55页 函数实参 函数作为另一个函数调用的实参出现,这种方式是把该函数的返回值作为实参进行传送,因此,要求该函数必须有返回值。例如:max=fmax(a,fmax(b,c);第13页/共55页四、函数的说明C语言规定:函数调用之前必须对该函数进行定义或说明。函数的定义可以写在程序中的任何位置,但如果被调函数定义在主调函数之后,则在主调函数中必须要对被调
8、函数进行说明,这样在函数调用的时候才能够找到函数原型。函数原型的一般形式是:函数类型说明符 函数名(参数类型1,参数类型2,)例如:int maxnum(int,int,int);函数类型说明符 函数名(参数类型1 参数名1,参数类型 2 参数名2,)例如:int maxnum(int x,int y,int z);第14页/共55页五、函数的参数 在函数调用的过程中,两个函数之间的数据传递是靠参数和返回值来传递的,主调函数利用参数将数据传给被调函数,被调函数的运行结果通过返回值传回给主调函数。#include stdio.hmain()int x,y,z;scanf(%d,%d,&x,&y)
9、;z=max(x,y);printf(%d,z);int max(int a,int b)int c;if(ab)c=a;else c=b;return c;第15页/共55页在调用函数时,函数名后面括号中的数据称为实际参数(简称实参)实参与形参的区别在定义函数时函数名后面的括号中的变量称为形式参数(简称形参)。在被调函数中出现在主调函数中出现。变量变量、常量、表达式 具体的数值 存储数值的空间 单向值传递第16页/共55页说明:形参在被调函数中出现,实参在主调函数中出现。形参是在函数被调用时临时分配存储单元的,一旦调用结束,形参所占的存储单元立即被释放。实参可以是常量、变量或表达式,但必须是
10、确定的值;形参必须是变量。因为实参是函数在调用刚开始时传递的具体数据,所以必须是确定的值;形参是用来接受数据的,只有在内存中占有存储空间才能存放数据,因此,形参必须是变量。在定义函数时,必须指定形参类型。形参实际上就是定义的变量,如果不指定变量的类型,将无法分配内存单元。第17页/共55页 实参传递给形参的实际值必须与函数定义中的形参类型一致。不一致时要在主调函数中对被调函数作说明。调用语句中的实参个数应与被调用函数的形参个数相等,其类型、顺序必须一一对应。实参和形参在内存里占用不同的存储空间,即使同名也不会相互影响。C语言规定:实参对形参的传递是值传递,即单向传递,只能由实参传给形参,而不能
11、由形参传给实参。第18页/共55页六、函数的返回值 任何函数都是有值的,如果值是恒定的,可以返回,则有返回值;如果值不恒定,无法返回,则没有返回值。函数的返回值是用return语句来实现的。return语句的格式有两种:return r;或return(r);其中r为返回值,且从该函数返回。r可以是常量、变量、表达式,也可以是函数调用。注意:如果函数没有返回值,可以事先说明该函数的类型 是void型(即空类型)第19页/共55页说明:函数类型应与返回值的类型保持一致,如果类型不一致,则以函数类型为准。若函数中无return语句,并不是不带回返回值,只是不带回有用的值,所以若不需要有返回值,则函
12、数类型说明符为void,以明确表示不带回值。一个函数一次只能返回一个返回值。#include stdio.hmain()int a=2,b=3,c;int f(int x,int y);c=f(a,b);printf(f(%d,%d)=%dn,a,b,c),int f(int x,int y)int z;z=xy?x+:y+;return z;例5-2第20页/共55页一、函数的嵌套调用 C语言中,函数的定义是相对独立的、平行的,没有隶属关系,函数不能嵌套定义,但可以嵌套调用。即在调用一个函数的过程中,又可以调用另外的函数。第21页/共55页main()函数 f1()函数 f2()函数 调用f
13、1()函数 调用f2()函数 结束 返回 返回main()int f1(int x,int y)int f2(int m,int n).c=f1(a,b);z=f2(m,n);.第22页/共55页例 5-3 求S=1K+2K+3K+nk的值分析:本题可以用三个不同的函数来分别描述。f1函数计算nk f2函数求S=1K+2K+3K+nk main()函数输入、输出初始条件和最后结果。#include stdio.hlong f1(int n,int k)long power=n;int i;for(i=1;ik;i+)power*=n;return power;long f2(int n,int
14、 k)long sum=0;int i;for(i=1;i=n;i+)sum+=f1(i,k);return sum;main()int n,k;printf(“input n,k:);scanf(“%d,%d,&n,&k);printf(%dn,f2(n,k);第23页/共55页二、函数的递归调用 在函数的调用过程中,允许直接或间接地调用函数自身,这种调用称为递归调用。函数直接自己调用自己,为直接递归。函数间接自己调用自己,为间接递归。第24页/共55页例5-3 求整数n!#include stdio.hlong fact(int n);main()int i;long fac;printf
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计
限制150内