C语言常用算法.docx
- 文档编号:6952845
- 上传时间:2023-01-13
- 格式:DOCX
- 页数:23
- 大小:28.43KB
C语言常用算法.docx
《C语言常用算法.docx》由会员分享,可在线阅读,更多相关《C语言常用算法.docx(23页珍藏版)》请在冰豆网上搜索。
C语言常用算法
一、.累加累乘
基本知识:
S=S+X累加0
X=X+1计数0
T=T*X累乘求Xn1
T=T*I累乘求N!
1
应用:
级数求和
1.输入x、n后输出下列算式的值。
(次数控制)
[程序1]
#include
voidmain()
{floats,t,x,t1=1.0,t2=1.0;inti,n;
scanf("%f%d",&x,&n);
s=0,t=-1;
for(i=1;i<=n;i++){
t1=t1*x;
t2=t2*i;
t=-t;s=s+t*t1/t2;}
printf(“%f”,s);
}
[程序2]
#include
floatf1(floatx,intn)
{floaty=1.0;intk;
for(k=0;k y=y*x; returny; } longf2(intn) {longm=1;intk; for(k=1;k<=n;k++) m=m*k; returnm; } voidmain() {floats,t,x;inti,n; scanf("%f%d",&x,&n); s=0,t=-1; for(i=1;i<=n;i++) {t=-t;s=s+t*f1(x,i)/f2(i);} printf(“%f”,s); } 二、整除性 基本知识: x%y==0 (int)(x/y)==x/y fmod(x,y)==0 应用: 1.素数(质数) #include #include voidmain() { intm,i,n=0; do{ scanf(“%d”,&m); n=sqrt(m); for(i=2;i<=n;i++) if(m%i==0)break; if(i>n) printf(“%d”,m);} while(m! =0);/*输入0结束*/ } [素数2] #include #include intprime(intm) {intk,p; p=sqrt(m); for(k=2;k<=p;k++) if(m%k==0)break; if(k>p)return1; elsereturn0; } voidmain() { intm,i,n=0; do{ scanf(“%d”,&m); if(prime(m)) printf(“%d是素数.”,m); else printf(“%d不是素数.”,m); } 2.水仙花数: 若某数等于各位数字的立方和,则称该数为水仙花数 for(i=100;i<=999;i++) {a=i%10; b=i/10%10; c=i/100; if(a*a*a+b*b*b+c*c*c==i) printf(“%d”,&i); } 输入一个整数判断是否是水仙花数. scanf(“%d”,&m);t=0;n=m; while(n>0) {k=n%10;t=t+k*k*k;n=n/10;} if(m==t)printf(“%d是水仙花数.”,m); [水仙花数] #include intf(intm) {intk,n,t; n=m;t=0; while(n>0) {k=n%10;t=t+k*k*k;n=n/10;} if(m==t)return1; elsereturn0; } voidmain() { intm; do {scanf(“%d”,&m); if(f(m))printf(“%d是水仙花数.”,m); elseprintf(“%d不是水仙花数.”,m); }while(m! =0); } 3.完数: 某数等于其诸因子之和则该数为完数,如6=1+2+3,28=1+2+4+7+14则6、28就是完数。 #include #include voidmain() {intn,i,s; for(n=6;n<=1000;n++) {s=0; for(i=1;i if(n%i==0)s+=i; if(n==s)fprintf(p,"%6d",n); } 4.数位截取: 输入一个长整型数,求各位数字的平方和 #include voidmain() {intdigit; longin,s; scanf(“%ld”,in); if(in<0)in=-in; s=0; while(in>0) {digit=in%10; s=s+digit*digit in=in/10; } printf(“sum=%ld\n”,s); } 5.最大公约数、最小公倍数 #include voidmain() {intm,n,k,t,p; scanf("%d%d",&m,&n); if(m>n){k=m;p=n;} else{k=n;p=m;} while((t=(k%p))! =0) { k=p; p=t; } printf("gongyueshu=%d\n",p); printf("gongbeishu=%d\n",m*n/p); } 6.亲密数对: 说明: 若a、b为1对亲密数,则a的因子和等于b、b的因子和等于a、且a不等于b。 如: 220、284是1对亲密数,284、220也是1对亲密数。 #include voidmain() { inta,b,c,i; for(a=6;a<=5000;a++) { b=c=0; for(i=1;i if(a%i==0) b=b+i; for(i=1;i if(b%i==0) c=c+i; if(a==c&&a! =b) printf("%6d,%6d\n",a,b); } } 三、最大最小 1.从输入的若干个正数中选出最小数 #include voidmain() { floatx,min; scanf("%f",&x); min=x; while(x>=0){ if(x min=x; scanf("%f",&x); } printf("theminiumnumberis%f",min); } 2.编制函数,其功能是在float类型1维数组中查找最大值、最小值,并将它们返回到调用程序。 #include voidmax_min(intx[],intn,int*max,int*min) {inti; *max=x[0];*min=x[0]; for(i=1;i { if(*max *max=x[i]; if(x[i]<*min) *min=x[i]; } } voidmain() {intx[10],i,min,max; for(i=0;i<10;i++) scanf("%d",x+i); max_min(x,10,&max,&min); printf("MAX=%dMIN=%d\n",max,min); } 四、双重循环 1.求 (n由输入决定) #include voidmain() { inti,j,n; longintt=1,sum=0; scanf("%d",&n); for(i=1;i<=n;i++){ t=1; for(j=1;j<=i;j++) t=t*j; sum=sum+t; } printf("n! =%ld",sum); } 2.输入一个3*6的二维整型数组数据,输出其中最大值及其所在行列下标。 #include voidmain() { inta[3][6],i,j,m,n,max; for(i=0;i<3;i++) for(j=0;j<6;j++) scanf("%d",&a[i][j]); max=a[0][0]; for(i=0;i<3;i++) for(j=0;j<6;j++) if(a[i][j]>max) { max=a[i][j]; m=i;n=j; } printf("themaxnumis%d,row%dline%d\n",max,m,n); } 3.鞍点问题: 找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小 #defineN10 #defineM10 voidmain() { inti,j,k,m,n,flag1,flag2,a[N][M],max,maxi,maxj; scanf("%d",&n); scanf("%d",&m); for(i=0;i for(j=0;j scanf("%d",&a[n][m]); for(i=0;i { for(j=0;j printf("%d",a[n][m]); printf("\n"); } flag2=0; for(i=0;i max=a[i][0]; for(j=0;j if(a[i][j]>max) { max=a[i][j]; maxj=j; } for(k=0,flag1=1;k if(max>a[k][maxj]) flag1=0; if(flag1) { printf("\n第%d行,第%d列的%d是鞍点",i,maxj,max); flag2=1; } } if(! flag2)printf("\n矩阵中无鞍点"); } 五、三种排序 1.选择排序: 函数sort使用选择法将一维整型数组中各元素按值从大到小排序。 #include #defineN10 voidsort(inta[],intn) {inti,j,temp; for(i=0;i { for(j=i+1;j if(a[i] { temp=a[i]; a[i]=a[j]; a[j]=temp; } } } voidmain() { inta[N],i; for(i=0;i scanf("%d",&a[i]); sort(a,N); for(i=0;i printf("%d",a[i]); } 2.冒泡法(从大到小排序) #include voidmain() { inta[10],i,j,t; printf("Input10numbers: \n"); for(i=0;i<10;i++)/*输入排序数*/ scanf("%d",&a[i]); printf("\n"); for(j=0;j<9;j++)/*控制比较趟数*/ for(i=0;i<9-j;i++)/*控制比较对数*/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 常用 算法