C语言程序设计第七讲.ppt





《C语言程序设计第七讲.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计第七讲.ppt(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C C语言程序设计语言程序设计主讲:杨雪青主讲:杨雪青华北水利水电学院计算中心华北水利水电学院计算中心1/16/20235.3模块的递归调用模块的递归调用 人们在解决一些复杂问题时,为了降低问题的复杂程人们在解决一些复杂问题时,为了降低问题的复杂程度(如问题的规模等),一般总是将问题逐层分解,最后度(如问题的规模等),一般总是将问题逐层分解,最后归结为一些最简单的问题。归结为一些最简单的问题。第六讲第六讲 模块程序设计模块程序设计(一一)1/16/2023例例5.5编写一个编写一个C函数,对于输入的参数函数,对于输入的参数n,依次打印输,依次打印输出自然数出自然数1到到n。这是一个很简单的问题
2、,实际上不用递归就能解决,其这是一个很简单的问题,实际上不用递归就能解决,其C函数如下:函数如下:#includestdio.hwrt(intn)intk;for(k1;kn;k)printf(%dn,k);return;1/16/2023解决这个问题还可以用以下的递归函数来实现:解决这个问题还可以用以下的递归函数来实现:#includestdio.hwrt1(intn)if(n!0)wrt1(n1);printf(%dn,n);return;1/16/2023自自己己调调用用自自己己的的过过程程称称为为递递归归调调用用过过程程。在在C语语言言中中,自己调用自己的函数称为递归函数。自己调用自己
3、的函数称为递归函数。递归分为直接递归与间接递归两种。递归分为直接递归与间接递归两种。所谓直接递归,是指直接调用函数本身。所谓直接递归,是指直接调用函数本身。1/16/20235.4程序举例程序举例例例5.6编编写写一一个个函函数数,其其功功能能是是判判断断给给定定的的正正整整数数是是否否是是素素数数,若是素数则返回函数值若是素数则返回函数值1,否则返回函数值,否则返回函数值0。其其C函数如下:函数如下:#includemath.hsushu(intn)intk,i,flag;ksqrt(double)n);i2;flag0;while(ik)&(flag0)if(n%i0)flag1;ii1;
4、return(!flag);1/16/2023例例5.8Hanoi塔问题。塔问题。相相传传古古代代印印度度有有一一座座Bramah庙庙,庙庙中中有有三三根根插插在在黄黄铜铜板板上上的的宝宝石石柱柱,在在其其中中的的一一根根柱柱子子上上放放了了64个个金金盘盘子子,大大盘盘在在下下,小小盘盘在在上上,称称为为Hanoi塔塔。有有一一天天,庙庙里里的的和和尚尚们们想想把把这这些些盘盘子子从从一一根根柱柱子子上上移移到到另另一一根根柱柱子子上上,规规定定每每次次只只允允许许移移动动一一个个盘盘子子,并并且且,在在移移动动过过程程中中都都不不允允许许出出现现大大盘盘子子压压在在小小盘盘子子上上面面的的
5、现现象象,但但在在移动盘子的过程中可以利用三根柱子中的任何一根。移动盘子的过程中可以利用三根柱子中的任何一根。为为了了使使问问题题具具有有普普遍遍性性,假假设设圆圆盘盘数数为为n,按按直直径径从从小小到到大大依依次次编编号号为为1,2,n;三三根根柱柱子子的的名名称称分分别别为为X,Y,Z。开开始始时时,n个个圆圆盘盘按按从从大大到到小小的的顺顺序序(即即下下面面放放大大圆圆盘盘,上上面面放放小小圆圆盘盘)放放在在X柱柱子子上上,现现在在要要将将X柱柱子子上上的的n个个圆圆盘盘移移到到Z柱柱子子上上,其其移移动动的原则如上所述。这个问题称为的原则如上所述。这个问题称为n阶阶Hanoi塔问题。塔
6、问题。1/16/2023可以写出可以写出C程序如下:程序如下:#includestdio.hmain()intn;charxX,yY,zZ;voidhanoi();printf(inputn);scanf(%d,&n);hanoi(n,x,y,z);voidhanoi(n,x,y,z)intn;charx,y,z;voidmove();1/16/2023if(n1)move(x,n,z);elsehanoi(n1,x,z,y);move(x,n,z);hanoi(n1,y,x,z);return;voidmove(x,n,z)intn;charx,z;printf(%c(%d)%cn,x,n,
7、z);1/16/20235.5编译预处理编译预处理编编译译预预处处理理功功能能是是C语语言言的的一一个个重重要要特特点点。所所谓谓编编译译预预处处理理,是是指指C语语言言编编译译系系统统首首先先对对程程序序模模块块中中的的编编译译预预处处理理命命令令进行处理。进行处理。C语言提供的编译预处理命令主要有以下语言提供的编译预处理命令主要有以下3种:种:(1)宏定义;)宏定义;(2)文件包含命令;)文件包含命令;(3)条件编译命令。)条件编译命令。编编译译预预处处理理命命令令一一般般是是在在函函数数体体的的外外面面。正正确确使使用用编编译译预预处理命令,可以编写出易于调试、易于移植的程序模块。处理命
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 第七

限制150内