c语言 第8章 带参宏递归及习题课.ppt_第1页
c语言 第8章 带参宏递归及习题课.ppt_第2页
c语言 第8章 带参宏递归及习题课.ppt_第3页
c语言 第8章 带参宏递归及习题课.ppt_第4页
c语言 第8章 带参宏递归及习题课.ppt_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1,带参宏定义格式:#define宏名(参数表)字符串例如:#defines(a,b)a*bmain()intm=s(3,4);printf(“m=%d”,m);,8.7编译预处理,m=12,2,#definesqr(x)x*xvoidmain()printf(%d,sqr(2+3);,printf(%d,2+3*2+3);,3,#definesqr(x)(x)*(x)voidmain()printf(%d,sqr(2+3);,printf(%d,(2+3)*(2+3);,4,第8章习题课,5,1、使用函数求出所有的水仙花数,分析:判断范围:100999假如:有一个函数fun可直接判断一个数是不是水仙花数,那么怎么编?,voidmain()intk;for(k=100;k=999;k+)if(k是水仙花数)printf(“%dn”,k);,fun(k)=1,函数习题课,6,voidmain()intk;for(k=100;k=999;k+)if(fun(k)=1)printf(“%dn”,k);,fun,(intn),int,inta,b,c;a=n/100;b=n%100/10;c=n%10;if(a*a*a+b*b*b+c*c*c=n)return1;elsereturn0;,函数习题课,7,2、编写一个函数能够实现打印2100之间所有素数。for(i=2;i=100;i+)if(prime(i)printf(%d,i);,prime,(intn),int,intj;for(j=2;j=n-1;j+)if(n%j=0)return0;return1;,函数习题课,8,3、试编制一个求最大公约数的函数,并利用它求任意两个数的最大公约数和最小公倍数。,gongyue,(inta,intb),int,intr;r=m%n;while(r!=0)m=n;n=r;r=m%n;,returnn;,函数习题课,9,voidmain()inta,b;scanf(%d,%d,函数习题课,10,选择题:在以下所列的各函数原型声明中,正确的是:A、voidplay(var:Integer,varb:Integer);B、voidplay(inta,b);C、voidplay(inta,intb);D、Subplay(aasinteger,basinteger),函数习题课,11,函数习题课,选择题:在C语言程序中,_。A、函数的定义可以嵌套,但调用不可以嵌套B、函数的定义不可以嵌套,但函数的调用可以嵌套C、函数的定义和函数的调用都不可以嵌套D、函数的定义和调用均可以嵌套,12,选择题:在函数调用语句f(a,b,(c,d);中,实参个数是_。A、3B、4C、5D、语法错误,函数习题课,13,填空题:写出以下函数的原型声明:donut()函数接收一个整数,并输出若干个0,输出0的个数等于所接收整数的值。random函数不接收任何数据,但返回一个整数。digits()函数接收一个双精度数和一个整数,并返回一个整数。,函数习题课,voiddonut(intn);,intrandom(void);,intdigits(doublea,intb);,14,voids(inta,intb)intt;t=a;a=b;b=t;printf(%d,%dn,a,b);voidmain()intm=3,n=4;s(m,n);printf(%d,%dn,m,n);,函数习题课,程序阅读题,15,程序阅读题,func(inta,intb)staticintm=0,i=2;i+=m+1;m=i+a+b;returnm;voidmain()intk=4,m=1,p;p=func(k,m);printf(%d,p);p=func(k,m);printf(%d,p);,函数习题课,4,k,1,m,p,0,m,2,i,3,8,12,17,17,16,f(5),=1*2*3*4*5,=5!,longf(intn)if(n=0|n=1)return1;elsereturnf(n-1)*n;voidmain()printf(%ld,f(5);,函数习题课,程序阅读题,17,5!,1,1,120,求解结束,函数习题课,18,递归函数的设计和调用,一个函数不仅可以调用其它函数,还可以直接或间接调用它本身,这种调用过程被称作递归(recursion)。这种调用自身的函数为递归函数。,递归调用的组成:递归公式和递归终止条件,递归调用过程:回归和递推,8.4.2函数的递归调用,19,例:用递归的方法计算n!。,n!=1*2*3*(n-1)*nn!=n*(n-1)*(n-2)*1n!=n*(n-1)!,递归终止条件是什么?,0!=1!=1,n!=,递归公式:,函数习题课,20,longfact(intn)longf;if(n0)printf(nb或b=2,答案:1).intk2).mcmc3).k%17=0或k%174).returnm,23,题目:函数fun的功能是:计算正整数num的各位上的数字之积。longfun(longnum)/*FOUND*/longk;dok*=num%10;/*FOUND*/num=10;while(num);returnk;main()longn;printf(nPleaseenteranumber:);/*FOUND*/scanf(%ld,n);/*FOUND*/printf(n%ldn,fun(longn);,答案:1).longk=1;2).num/=10;或num=num/10;3).scanf(%ld,24,题目:下列给定程序中,函数fun的功能是:求1到10的阶乘的和。main()inti;floatt,s=0;floatfac(intn);/*FOUND*/for(i=1;i10;i+)/*FOUND*/s=fac(i);printf(%fn,s);floatfac(intn)/*FOUND*/inty=1;inti;for(i=1;i=n;i+)y=y*i;/*FOUND*/return;,答案:1).for(i=1;i=10;i+)2).s=s+fac(i);或s+=fac(i);3).floaty=1.0;4).returny;或return(y);,25,题目:fun函数的功能是:找出大于m的最小素数,并将其作为函数值返回。intfun(intm)inti,k;for(i=m+1;i+)/*FOUND*/for(k=1;ki;k+)/*FOUND*/if(i%k!=0)break;/*FOUND*/if(ki)/*FOUND*/returnk;main()intn;scanf(%d,答案:1).for(k=2;k=i)或if(k=i)4).returni;或return(i);,26,题目:编写函数fun求1!+2!+3!+n!的和,在main函数中由键盘输入n值,并输出运算结果。请编写fun函数。例如

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论