C语言程序设计教程CJ04模块化程序设计New潭浩强第.ppt
《C语言程序设计教程CJ04模块化程序设计New潭浩强第.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计教程CJ04模块化程序设计New潭浩强第.ppt(49页珍藏版)》请在三一办公上搜索。
1、辽宁师范大学计算机与信息技术学院 蔡静,C语言程序设计,目录,C语言程序设计初步数据描述与基本操作C程序的流程控制函数数组指针结构体和共用体位运算文件综合应用,第四章 函数,4.1 函数概述4.2 变量的存储属性4.3 编译预处理,程序设计-2005秋,Page 4,4.1 函数 设计C语言的程序就是设计函数,函数:把对应于一个问题求精的程序写在一起,作为一个单独的程序模块,称为函数。函数 源程序文件 C 程序函数的分类从用户角度分 标准函数/库函数 用户自定义函数 按函数形式分 有参函数 无参函数例4.1:,程序设计-2005秋,说明:类型说明符:表示函数返回值的类型 有返回值的:是某种类型
2、(缺省为int 或 char)无返回值的:是 void 函数名:命名规则同标识符(且见名知义),函数名后紧跟一对小括号(无分号),且其后无分号。,4.1.2 函数定义的一般形式,1.无参函数类型说明符 函数名()函数体,2.有参函数类型说明符 函数名(形参说明表列)函数体,程序设计-2005秋,形参说明表列 写法:类型说明符 形参,类型说明符 形参.形参与实参的类型、个数、位置必须一致。调用过程中存储空间的分配 实参可为常量、变量或表达式,各实参间用逗号分隔 值传递(实参 形参)函数体 一般包括说明定义部分和语句序列 也可为空,即占位以等待扩充功能。,void 函数名(void),空函数,程序
3、设计-2005秋,函数的返回-RETURN语句 格式:retnrn(.);.的类型应与函数类型一致,否则将之转化为指定类型。函数中可以有多个retnrn语句,执行到的第一个语句即为被调用函数的结束。return 后的小括号可以省略。函数定义的外部性:函数不能嵌套定义(可以嵌套调用),一个函数不能定义在别的函数的内部。各函数相互独立。,程序设计-2005秋,int absolutevalue(int x)return(x=0?x:-x);,void spc(int n)int i;for(i=0;in;i+);printf();return;,程序设计-2005秋,Page 9,函数定义与函数声
4、明,在主调函数中要对在本函数中被调用的函数事先声明。标准函数的声明#include#include“文件名”自定义函数的声明:在调用函数之前说明被调用函数。格式:类型说明符 函数名(形参说明表列);说明:函数类型为int、char可以不作声明;被调用函数定义在调用函数之前,可不作说明;在所有函数定义之前声明,则在主调用函数中不再声明。一般,在文件开头,main()之外,声明函数。注意:函数声明是一个语句,后跟分号,程序设计-2005秋,Page 10,函数的调用,调用的一般形式 函数名(实参表列)调用的方式函数语句(.);如:do_some();draw(20);printf(“n*”);函数
5、表达式如:c=max(a,b);c=max(a,b)*2+3;函数作为另一函数的参数。如:printf(“%d”,max(a,b);d=max(a,max(b,c);,程序设计-2005秋,Page 11,函数的调用是传值调用:,一个入口:实参值传给形参。过程:形参在调用前不占内存,调用时才被分配存储单元,然后将实参值传给形参。一个出口:函数返回值。,main().f1();f2();.,f1().f11();,f2().f21();f22();.,f11().,f21().,f22().,程序设计-2005秋,Page 12,例1:,#include stdio.hint add();voi
6、d main()int x=3,y=7;printf(%d+%d=%dn,x,y,add(x,y);int add(int a,int b)return(a+b);,程序设计-2005秋,Page 13,例2:,void swap(int x,int y)int temp;printf(n swap()中交换前:n);printf(x=%d,y=%dn,x,y);temp=x,x=y,y=temp;printf(n swap()中交换后:n);printf(x=%d,y=%dn,x,y);,/这样能交换变量的值?#include stdio.hvoid swap(int x,int y);in
7、t main(void)int a=3,b=5;printf(n main()中交换前:n);printf(a=%d,b=%dn,a,b);swap(a,b);printf(n main()中交换后:n);printf(a=%d,b=%dn,a,b);return 0;,程序设计-2005秋,Page 14,4.1.5 函数的嵌套调用,例CJ_Combination.c:求 的值。,1.接收m,n2.计算m,n的组合,求某数的阶乘,程序设计-2005秋,Page 15,4.1.6 函数的递归调用,递归调用:调用一个函数的过程中又出现直接或间接调用该函数本身。直接调用:A调用A.间接调用:A调用
8、B,B调用A.,程序设计-2005秋,Page 16,例:,例CJ_Recursion_Age.c:有五个人坐在一起,问第五人的年龄,他说比第四人大2岁,第四人比第三人大2岁,第三人比二人大2岁,第二人比第一人大2岁,第一人是10岁。求第五人的年龄。age(n)=age(n-1)+2 age(1)=10,程序设计-2005秋,Page 17,例:,main()printf(,age(5);,age(5)int iold;if(n1)iold=2+age(n-1);else iold=10;return iold;,age(4)int iold;if(n1)iold=2+age(n-1);els
9、e iold=10;return iold;,age(1)int iold;if(n1)iold=2+age(n-1);else iold=10;return iold;,age(2)int iold;if(n1)iold=2+age(n-1);else iold=10;return iold;,age(3)int iold;if(n1)iold=2+age(n-1);else iold=10;return iold;,程序设计-2005秋,Page 18,例:,例CJ_Recursion_factorial.c:用递归方法求n!n!=1 n=0,1 n!=n*(n-1)!n 1,程序设计-2
10、005秋,Page 19,例CJ_Recursion_Hanoi.c:汉诺塔(Tower of Hanoi)问题只能用递归方法求解,游戏传说:据传古代印度布拉玛庙里僧侣们玩一种称为汉诺塔的游戏,据说游戏结束就标志着世界末日的到来。游戏装置:一块铜板,上面有三根杆,最左杆自下而上、由大到小顺序串有64个金盘,呈一个塔形。游戏要求:把左边杆上的金盘全部移到最右边的杆上,条件是一次只能够动一个盘,并且不允许大盘在小盘上面。推导:n个盘从一根杆移到另一根杆需要2n-1次,所以64个盘的移动次数为:264-1=18,446,744,073,709,511,615,这是一个天文数字,即使一台功能很强的现代
11、计算机来解汉诺塔问题,每一微秒可能计算(不印出)一次移动,那么也需要几乎100万年。而如果每秒移动一次,则需近5800亿年。,程序设计-2005秋,Page 20,程序设计-2005秋,Page 21,第一步:先把上面的n-1个盘子设法借助b杆放到c杆,如箭头所示,记做hanoi(n-1,a,c,b)。第二步:把第n个盘子从a杆直接移到b杆,如箭头所示第三步:把c杆上的n-1个盘子借助a杆移到b杆,如箭头所示,记做hanoi(n-1,c,b,a)。,假定僧侣们要把n个盘子按题中的规定由a杆借助c杆移到b杆。模拟这一过程的算法称为hanoi(n,a,b,c),程序设计-2005秋,Page 22



- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 教程 CJ04 模块化 程序设计 New 潭浩强第

链接地址:https://www.31ppt.com/p-6504091.html