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