




如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
递推算法(常用级数、数列求和、二分法、梯形积分法、穷举法等) 常用级数、数列求和 例累加和 程序1:应用for循环设计 /*for循环求s=1*2+2*3+…99*100*/ main() { longi,s; s=0; for(i=1;i<=99;i++)/*设置循环i=1,2,…,99*/ s+=i*(i+1);/*把通项i*(i+1)累加到s中*/ printf("1*2+2*3+...+99*100=%ld\n",s);/*此处结果s为long,故用%ld输出*/ } 输出格式符含义: %d短整形,一般占两个字节,范围:-32768~32767,用于int,shortint %u无符号短整形,一般占两个字节,范围:0~65535,用于unsignedint %ld长整形,一般占四个字节,范围:-2147483648~2147483647,用于long,longint %c字符型,用于char %s字符串,用于chara[] %f单精度浮点型,用于float %lf双精度浮点型,用于double 程序2:应用while循环设计 /*while循环求s=1*2+2*3+…+99*100*/ main() { longi,s; i=1;s=0; while(i<=99)/*设置循环i=1,2,…,99*/ { s+=i*(i+1);/*把通项i*(i+1)累加到s中*/ i++; } printf("1*2+2*3+…+99*100=%ld\n",s); } 例代数和 /*求s=1-1/2+1/3-1/4+…-1/100*/ main() { intk,n;floats=0; for(k=1;k<=100;k++) if(k%2==1) {s+=1.0/k;}/*应用分支实现符号一正一负*/ else {s-=1.0/k;} printf("s=%9.6f",s); } 例阶乘计算 /*循环累乘求阶乘n!*/ main() { inti,n; longt; scanf("%d",&n);/*输入n的值*/ t=1;/*积变量t赋初值1*/ for(i=1;i<=n;i++) { t=t*i;/*循环变量i累乘到t,体现阶乘运算*/ } printf("%d!=%ld\n",n,t); } 二分法/折半法 (只能对有序数列进行查找) 基本思想:设n个有序数(从小到大)存放在数组a[1]----a[n]中,要查找的数为x。用变量min、max、mid分别表示查找数据范围的底部(数组下界)、顶部(数组的上界)和中间,mid=(max+min)/2,折半查找的算法如下:(1)x=a(mid),则已找到退出循环,否则进行下面的判断;(2)x<a(mid),x必定落在min和mid-1的范围之内,即max=mid-1;(3)x>a(mid),x必定落在mid+1和max的范围之内,即min=mid+1;(4)在确定了新的查找范围后,重复进行以上比较,直到找到或者min<=max。 将上面的算法写成如下程序: voidmain() { inta[10],mid,min,max,x,i,find; printf("pleaseinputthearray:\n"); for(i=0;i<10;i++) scanf("%d",&a[i]); printf("pleaseinputthenumberyouwantfind:\n"); scanf("%d",&x); printf("\n"); min=0; max=9; find=0;/*find用于标记是否找到x*/ while(min<=max&&find==0) { mid=(max+min)/2;/*计算中间*/ if(x==a[mid]) { find=1;/*找到find=1*/ break;/*跳出循环*/ } elseif(x<a[mid]) max=mid-1; else min=mid+1; } if(find==1) printf("thenumberisfoundtheno%d\n",mid); else printf("thenumberisnotfound\n"); } 梯形积分法 (这个你应该能看懂什么意思,我看不明白。呵呵呵!) #include"math.h" main() { inti,n=1000; floata,b,h,t1,t2,s,x; printf("请输入积分限a,b:"); scanf("%f,%f",&a,&b); h=(b-a)/n; for(s=0,i=1;i<=n;i++) { x=a+(i-1)*h; t1=exp(-x*x/2); t2=exp(-(x+h)*(x+h)/2); s+=(t1+t2)*h/2;

快乐****蜜蜂
实名认证
内容提供者


最近下载