资源描述:
《闽高校计算机二级C语言常用算法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、常用算法1.求最大公约数与最小公倍数例1:求两个正数的最大公约数。⑴循环实现用辗转相除法,m、n是两个正整数,r是余数,用直到循环操作的流程图:#includeintmain(){intm,n,r;do{printf("Pleaseinputtowpositiveintegert:");scanf("%d%d",&m,&n);}while(m<=0
2、
3、n<=0);do{r=m%n;m=n;n=r;}while(r!=0);printf("Thegreatestcommandfactoris:%d",m);return0;}⑵函数递归调用实现用递
4、归算法求m与n的最大公约数。设求m和n最大公约数的函数为gcd(m,n),根据辗转相除求最大公约数的思想,其递归算法为:#includeintgcd(intm,intn);intmain(){intm,n;printf("Inputtownumber:");scanf("%d%d",&m,&n);printf("Greatestcommondivisorof%dand%d=%d",m,n,gcd(m,n));return0;}intgcd(intm,intn){intg;if(n==0)/*若除操作的余数为0*/g=m;/*则除数为最大公约
5、数*/elseg=gcd(n,m%n);/*上次除操作的除数和余数作参数递归调用gcd()函数*/returng;}2.求阶乘例2:求1!+2!+……+n!。⑴循环实现#includeintmain(void){inti,n;longs=0,p=1;printf("Inputainteger:");scanf("%d",&n);for(i=1;i<=n;i++){p*=i;s+=p;}printf("1!+2!+……+%d=%ld",n,s);return0;}⑵函数递归调用实现#includelongfact(intn){l
6、ongp;if(n==1)p=1;elsep=n*fact(n-1);returnp;}intmain(void){inti,n;longs=0,p=1;printf("Inputainteger:");scanf("%d",&n);for(i=1;i<=n;i++){s+=fact(i);}printf("1!+2!+……+%d=%ld",n,s);return0;}3.求素数例3:求3至1000间的全部素数。#include#includemain(){intm,i,k,n=0;shortprime;for(m=3;m<=1
7、000;m=m+2){prime=1;k=(int)(sqrt(m));for(i=2;i<=k;i++)if(m%i==0){prime=0;break;}if(prime){printf("%5d",m);n=n+1;}if(n==10){n=0;printf("");}}printf("");return0;}4.Fibonacii数列例4:求Fibonacci数列前20个数。这个数列有如下特点:第1、2个数为1、1,从第3个数开始,每个数是其前两个数和之和。即:1,1,2,3,5,8,13,21,……⑴循环实现#includemai
8、n(){longf1,f2;inti;f1=f2=1;for(i=1;i<=20;i++){printf("%-12ld%-12ld",f1,f2);/*右对齐占12字符*/if(i%2==0)printf("");f1=f1+f2;f2=f2+f1;}return0;}⑵函数递归调用实现#includeintf(inti){intfi;if(i==1
9、
10、i==2)fi=1;elsefi=f(i-1)+f(i-2);returnfi;}main(){inti;for(i=1;i<=20;i++){printf("%-12ld",f(i));/*
11、右对齐占12字符*/if(i%4==0)printf("");}return0;}5.整数各位数字的拆分例5:输入一个正整数,要求以相反的顺序输出该数各位。(1)用递归方法实现。#includevoidf(intn){if(n>0){printf("%d",n%10);f(n/10);}}intmain(){intn;printf("Inputainteger:");scanf("%d",&n);f(n);putchar('');return0;}例6:求一正长整型数的各位数字之和。(2)用递归算法实现#include