C语言常用算法集合共16页.docx

上传人:b****2 文档编号:17949446 上传时间:2023-08-05 格式:DOCX 页数:13 大小:16.76KB
下载 相关 举报
C语言常用算法集合共16页.docx_第1页
第1页 / 共13页
C语言常用算法集合共16页.docx_第2页
第2页 / 共13页
C语言常用算法集合共16页.docx_第3页
第3页 / 共13页
C语言常用算法集合共16页.docx_第4页
第4页 / 共13页
C语言常用算法集合共16页.docx_第5页
第5页 / 共13页
C语言常用算法集合共16页.docx_第6页
第6页 / 共13页
C语言常用算法集合共16页.docx_第7页
第7页 / 共13页
C语言常用算法集合共16页.docx_第8页
第8页 / 共13页
C语言常用算法集合共16页.docx_第9页
第9页 / 共13页
C语言常用算法集合共16页.docx_第10页
第10页 / 共13页
C语言常用算法集合共16页.docx_第11页
第11页 / 共13页
C语言常用算法集合共16页.docx_第12页
第12页 / 共13页
C语言常用算法集合共16页.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

C语言常用算法集合共16页.docx

《C语言常用算法集合共16页.docx》由会员分享,可在线阅读,更多相关《C语言常用算法集合共16页.docx(13页珍藏版)》请在冰点文库上搜索。

C语言常用算法集合共16页.docx

C语言常用算法集合共16页

1.定积分近似计算:

/*梯形法*/

doubleintegral(doublea,doubleb,longn)

{longi;doubles,h,x;

h=(b-a)/n;

s=h*(f(a)+f(b))/2;

x=a;

for(i=1;i

x+=h;

s+=h*f(x);

return(s);

/*矩形法*/

doubleintegral(doublea,doubleb,longn)

{longi;doublet=0,h,x;

h=(b-a)/n;

x=a;

for(i=0;i

t+=h*f(x);

x+=h;

return(t);

2.生成斐波那契数列:

/*直接计算*/

intfib(intn)

{inti,f1=1,f2=1,f;

for(i=3;i<=n;i++){

f=f1+f2;

f1=f2;

f2=f;

if(n==1||n==2)return1;

elsereturnf;

/*递归调用*/

voidfib(intn,int*s)

{intf1,f2;

if(n==1||n==2)*s=1;

else{fib(n-1,&f1);

fib(n-2,&f2);

*s=f1+f2;

3.素数的判断:

/*方法一*/

for(t=1,i=2;i

if(n%i==0)t=0;

if(t)printf("%disprime",n);

/*方法二*/

for(t=1,i=2;i

if(n%i==0)t=0;

if(t)printf("%disprime",n);

/*方法三*/

for(i=2;i

if(n%i==0)break;

if(i==n)printf("%disprime",n);

/*方法四*/

for(t=1,i=2;i<=(int)sqrt(n);i++)

if(n%i==0){

t=0;

break;

if(t)printf("%disprime",n);

4.反序数:

/*求反序数*/

longfan(longn)

{longk;

for(k=0;n>0;n/=10)

k=10*k+n%10;

returnk;

/*求回文数*/

intf(longn)

{longk,m=n;

for(k=0;n>0;n/=10)

k=10*k+n%10;

if(m==k)return1;

return0;

/*求整数位数*/

intf(longn)

{intcount;

for(count=0;n>0;n/=10)

count++;

returncount;

5.求最大公约数:

/*方法一*/

intgcd(intx,inty)

{intz;

z=x

x:

y;

while(!

(x%z==0&&y%z==0))/*x%z||y%z*/

z--;

returnz;

/*方法二*/

intgcd(intx,inty)

intr;

while((r=x%y)!

=0){

x=y;

y=r;

returny;

/*方法三*/

intgcd(inta,intb)

{intr;

if((r=a%b)==0)

returnb;

else

returngcd(b,r);

6.数组常用算法:

查找:

/*线性查找*/

intfind(intnum,intx[],intkey)

{inti,m=-1;

for(i=0;i

if(x[i]==key){

m=i;

break;

returnm;

/*折半查找*/

intfind(intx[],intnum,intkey)

{intm=-1,low=0,high=num-1,mid;

while(low<=high){

mid=(low+high)/2;

if(x[mid]==key){

m=mid;

break;

elseif(x[mid]>key)high=mid-1;

elselow=mid+1;

returnm;

/*折半查找(递归)*/

intb_search(intx[],intlow,inthigh,intkey)

intmid;

mid=(low+high)/2;

if(x[mid]==key)returnmid;

if(low>=high)return-1;

elseif(key

returnb_search(x,low,mid-1,key);

else

returnb_search(x,mid+1,high,key);

/*寻找子串*/

intfind(char*s1,char*s2)

{inti,k=0;

while(s1[i]==s2[i])i++;

if(s2[i]==0)returnk;

s1++;

k++;

return-1;

分词:

/*方法一*/

voidfen(chars[][10],charstr)

{inti,j,k;

for(i=0,j=0,k=0;str[i]!

=0;i++)

if(isalpha(a[i]))

s[j][k++]=str[i];

else{

s[j][k]=0;

k=0;

j++;

/*方法二*/

#include

#include

voidmain()

{inti=0,n=0;chars[80],*p;

strcpy(s,"Itisabook.");

for(p=s;p!

='\0';p++)

if(*p=='')

i=0;

else

if(i==0)

{n++;i=1;}

printf("%d\n",n);

getch();

排序:

/*插入法排序*/

voidsort(inta[],intn)

{inti,j,t;

for(i=1;i

t=a[i];

for(j=i-1;j>=0&&t

a[j+1]=a[j];

a[j]=t;

/*归并排序*/

#definex10

#definey10

voidcom(int*a,int*b,int*c)

{inti,j,k;

for(i=0,j=0,k=0;i<=x&&j<=y;){

if(a[i]

c[k++]=a[i];i++;}

else{

c[k++]=b[j];j++;}

if(i

c[k++]=a[i];

if(j

c[k++]=a[j];

/*交换法排序1冒泡排序*/

voidsort(inta[],intn)

{inti,j,t,flag;

for(i=0;i

flag=1;

for(j=0;j

if(a[j]>a[j+1]){

t=a[j];

a[j]=a[j+1];

a[j+1]=t;

flag=0;

if(flag)break;

/*交换法排序2*/

voidsort(inta[],intn)

{inti,j,t;

for(i=0;i

for(j=i+1;j

if(a[i]>a[j]){

t=a[i];

a[i]=a[j];

a[j]=t;

/*选择法排序*/

voidsort(inta[],intn)

{inti,j,point,t;

for(i=0;i

point=i;

for(j=i+1;j

if(a[point]

if(point!

=i){

t=a[point];

a[point]=a[i];

a[i]=t;

7.一元非线性方程求根:

/*牛顿迭代法求函数跟*/

#include

#include

intmain(void)

{doublex,x1,eps=1e-6,f,f1;/*误差为eps*/

x=1.0;/*x=1.0是初值*/

do{

x1=x;

f=6-x1*(5-x1*(4-3*x1));/*f为f(x)函数*/

f1=-5+x1*(8-9*x1);/*f1为f(x)的导函数*/

x=x1-f/f1;

f=6-x*(5-x*(4-3*x));

}while(fabs(f)>=eps&&

fabs(x-x1)>=eps);

printf("x=%f",x);

/*二分法求函数跟*/

#include

#include

doublef(doublex)

{return6-x*(5-x*(4-3*x));/*f(x)函数*/

intmain(void)

{doublea,b,c,x,eps=1e-6;

do{

scanf("%lf%lf",&a,&b);

}while(f(a)*f(b)>0);

if(fabs(f(a))<1e-6)

x=a;

elseif(fabs(f(b))<1e-6)

x=b;

else{

c=(b+a)/2;

while(fabs(f(c))>eps&&fabs(b-a)>eps){

if(f(a)*f(c)<0)

b=c;

else

a=c;

c=(b+a)/2;

x=c;

printf("x=%f",x);

/*弦截法求函数跟*/

c=(a*f(b)-b*f(a))/(f(b)-f(a));

while(fabs(f(c))>eps){

if(f(a)*f(c)<0)

b=c;

else

a=c;

c=(a*f(b)-b*f(a))/(f(b)-f(a));

#include

voidf();

intmain(void)

{intx,loop=0;

do{

for(x=1;x<5;x++){

intx=2;

printf("%d",x);

printf("%d",x);

f();

loop++;

}while(loop<1);

getch();

voidf()

{printf("%d",x++);}

8.汉诺塔:

#include

voidHanoi(intn,charA,charB,charC)

if(n==1)

printf("\nmove%dfrom%cto%c",n,A,C);

else{

Hanoi(n-1,A,C,B);

printf("\nmove%dfrom%cto%c",n,A,C);

Hanoi(n-1,B,A,C);

intmain(void)

{Hanoi(3,'A','B','C');

getch();

9.建立链表:

NODE*creat(void)/*void表示无参函数*/

NODE*head=NULL,*p1=NULL,*p2=NULL;

longnum;

unsignedscore;

intn=0;

do{

scanf(“%ld%u”,&num,&score);

if(num==0)break;

n++;

p1=(NODE*)malloc(sizeof(NODE));

p1->data.num=num,

p1->data.score=score;

p1->next=NULL;

if(n==1)

head=p2=p1;

else{

p2->next=p1;

p2=p1;

}while

(1);

returnhead;

10.级数的近似计算:

#include

#include

intmain(void)

{doubles=1,a=1,x,eps,f;

intn,m;

printf("inputxandeps:

");

scanf("%lf%lf",&x,&eps);

for(n=1;fabs(a)>eps;n++){

for(f=1,m=1;m<=n;m++)

f*=m;

a=pow(x,n)/f;

s+=a;

printf("%f",s);

希望以上资料对你有所帮助,附励志名言3条:

1、有志者自有千计万计,无志者只感千难万难。

2、实现自己既定的目标,必须能耐得住寂寞单干。

3、世界会向那些有目标和远见的人让路。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2