- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
例8. 7 编写函数,验证陈景润研究的哥德巴赫猜想:任意大偶数为两个素数之和并输出这两个素数(所谓大偶数是指6开始的偶数)。 分析: isprime(int a)实现判断一个数a是否为素数;even(int x)实现找到并输出两个素数(其和等于x);main()实现输入一个大偶数,并调用even()输出该大偶数对应的两个素数。 设变量x为任意大偶数,可从x中依次减去i,i从2变化到x/2;依次判断i、x-I是否为素数。步骤如下: ①i初值为2。 ②判断i是否是素数。若是,执行步骤③;若不是,执行步骤⑤。 ③判断x-i是否是素数。若是,执行步骤④;若不是,执行步骤⑤。 ④输出结果,返回调用函数。 ⑤使i增1。 ⑥重复执行步骤②。 /*例8.7程序*/ #include math.h int isprime (int); /*函数声明*/ void even(int); main() { int a; printf(Enter a even number(≥6):); scanf(%d, a); if(a%2==0a=6) even(a); /*函数调用语句*/ else printf(The %d isnt even number\n,a); } void even(int x) /*函数定义*/ { int i; for(i=2;i=x/2;i++) if(isprime(i)) if(isprime(x-i)) {printf(%d=%d+%d\n,x,i,x-i); return ; } } int isprime(int a) /*函数定义*/ { int i, k= sqrt(a); for(i=2; i=k; i++) if (a%i==0) return 0; return 1; } 8.4递归调用 递归:一个函数直接或间接的调用自己。 分析递归问题的关键: 1)每次调用自己时参数的变化规律。 2)递归结束的条件。 例8.8 求n!. 分析:f(n)=f(n-1)*n (n1)规律 f(1)=1 (n=1)递归结束条件 程序:l8_4_1.c 分析程序的执行过程,理解递归中的“递进”与“回推”。 main() /*程序:L8_4_1.c*/ { int n; long p; long f(int); /*对被调函数的声明*/ printf(\n input n:); scanf(%d,n); p=f(n); /*函数调用*/ printf(\n n!=%ld,p); } long f(int m) / *函数定义*/ { long t; if(m==1) t=1; else t=m*f(m-1); /*函数递归调用*/ return(t); /*函数的返回*/ } 类似的递归问题: 1。猴子吃桃: int peach( int day) { int n; if(d==10) n=1; else n=2*(peach(day+1)+1); return n; } 2。猜年龄:第一个人说它比第二个人大4岁,第二个人说它比第三个人大4岁,第三个人说它比第四个人大四岁,第四个人10岁,问:第一个人多大? 8.5 局部变量和全局变量 指变量的作用范围不同。 局部变量 :在函数体内定义的变量。 作用范围:只在本函数内有效 如前面例题中的变量、数组等。 全局变量 :在函数体外定义的变量 作用范围:从定义该变量的位置开始,到本源程序文件结束。 程序: /*全局变量x, y*/ int x=100; float y=66.6; f1() {float y=0; /*局部变量 y*/ printf(“x=%d\t”,x); printf(“y=%f\t”,y); } int z=1; f2() {int i; /*局部变量 i*/ for(i=1;i5;i++) putchar(*); printf(\n z=%d\t ,z); } /*全局变量 z 从 定义起至程序末起作
文档评论(0)