(整理)C语言常用算法集合.
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
scanf ("%lf%lf",&x,&eps);
3)迁移。for(n=1;fabs(a)>eps; n++){
(1)环境的使用价值。环境的使用价值(UV)又称有用性价值,是指环境资源被生产者或消费者使用时,满足人们某种需要或偏好所表现出的价值,又分为直接使用价值、间接使用价值和选择价值。for(f=1,m=1;m<=n;m++)
}
if(flag) break;
}
}
/*交换法排序2*/
void sort(int a[],int n)
{ int i,j,t;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(a[i]>a[j]){
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
/*选择法排序*/
void sort(int a[],int n)
int main(void)
{ int x, loop=0;
do{
for(x=1;x<5;x++) {
int x=2;
printf("%d",x);
}
printf("%d ",x);
f();
loop++;
}while(loop<1);
getch();
}
void f()
{ printf("%d",x++); }
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<n; i++)
if(n%i==0) t=0;
if(t) printf("%d is prime",n);
/*方法二*/
#include <stdio.h>
#include <math.h>
int main(void)
{ double x,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)函数*/
for(t=1,i=2; i<=(int)sqrt(n); i++)
if(n%i==0){
t=0;
break;
}
if(t) printf("%d is prime",n);
4.反序数:
/*求反序数*/
long fan(long n)
{ long k;
for(k=0;n>0;n/=10)
k=10*k+n%10;
{ int i,j,point,t;
for(i=0;i<n-1;i++){
point=i;
for(j=i+1;j<n;j++)
if(a[point]<a[j]) point=j;
if(point!=i){
t=a[point];
a[point]=a[i];
a[i]=t;
}
}
}
7.一元非线性方程求根:
/*牛顿迭代法求函数跟*/
if(n==1)
head=p2=p1;
else{
p2->next=p1;
p2=p1;
}
}while(1);
return head;
}
10.级数的近似计算:
(5)法律、行政法规和国务院规定的其他建设项目。#include <stdio.h>
#include <math.h>
int main(void)
unsigned score;
int n=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;
1.定积分近似计算:
/*梯形法*/
double integral(double a,double b,long n)
{ long i;double s,h,x;
h=(b-a)/n;
s=h*(f(a)+f(b))/2;
x=a;
for(i=1;i<n;i++){
x+=h;
s+=h*f(x) ;
}
return(s);
{ double s=1,a=1,x,eps,f;
规划环境影响评价技术导则由国务院环境保护主管部门会同国务院有关部门制定;规划环境影响评价技术规范由国务院有关部门根据规划环境影响评价技术导则制定,并抄送国务院环境保护主管部门备案。int n,m;
第二节 安全预评价printf("input x and eps:");
int fib(int n)
{ int i,f1=1,f2=1,f;
for(i=3;i<=n;i++){
f=f1+f2;
f1=f2;
f2=f;
}
if(n==1||n==2) return 1;
else return f;
}
/*递归调用*/
void fib(int n,int*s)
{ int f1,f2;
}
/*弦截法求函数跟*/
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 <stdio.h>
void f();
{
int r;
while((r=x%y)!=0){
x=y;
y=r;
}
return y;
}
/*方法三*/
int gcd(int a ,int b)
{ int r ;
if((r=a%b)==0)
returΒιβλιοθήκη Baidu b;
else
return gcd(b,r);
}
6.数组常用算法:
查找:
/*线性查找*/
int find(int num,int x[],int key)
if(fabs(f(a))<1e-6)
x=a;
else if (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);
}
/*矩形法*/
double integral(double a,double b,long n)
{ long i;double t=0,h,x;
h=(b-a)/n;
x=a;
for(i=0;i<n;i++){
t+=h*f(x);
x+=h;
}
return(t);
}
2.生成斐波那契数列:
/*直接计算*/
{
int mid;
mid=(low+high)/2;
if(x[mid]==key) return mid;
if(low>=high) return -1;
else if(key<x[mid])
return b_search(x,low,mid-1,key);
else
return b_search(x,mid+1,high,key);
Hanoi(n-1,B, A, C);
}
}
int main(void)
{ Hanoi(3,'A','B','C');
getch();
}
9.建立链表:
NODE *creat(void) /* void表示无参函数*/
{
NODE *head=NULL,*p1=NULL,*p2=NULL;
long num;
#include <math.h>
double f(double x)
{ return 6-x*(5-x*(4-3*x)); /*f(x)函数*/
}
int main(void)
{ double a,b,c,x,eps=1e-6;
do{
scanf("%lf%lf",&a,&b);
}while(f(a)*f(b)>0);
for (t=1,i=2;i<n&&t; i++)
if(n%i==0) t=0;
if(t) printf("%d is prime",n);
/*方法三*/
for (i=2;i<n; i++)
if(n%i==0) break;
if(i==n) printf("%d is prime",n);
/*方法四*/
{ int i=0,n=0;char s[80],*p;
strcpy(s,"It is a book.");
for(p=s;p!='\0';p++)
if(*p=='')
i=0;
else
if(i==0)
{n++;i=1;}
printf("%d\n",n);
getch();
}
排序:
/*插入法排序*/
void sort(int a[],int n)
mid=(low+high)/2;
if(x[mid]==key){
m=mid;
break;
}
else if(x[mid]>key) high=mid-1;
else low=mid+1;
}
return m;
}
/*折半查找(递归)*/
int b_search(int x[ ],int low,int high,int key)
{ int i,m=-1;
for(i=0;i<num;i++)
if(x[i]==key){
m=i;
break;
}
return m;
}
/*折半查找*/
int find(int x[],int num,int key)
{ int m=-1,low=0,high=num-1,mid;
while(low<=high){
for(i=0,j=0,k=0;i<=x&&j<=y;){
if(a[i]<b[j]){
c[k++]=a[i];i++;}
else{
c[k++]=b[j];j++;}
}
if(i<x) for(k=k-1;i<x;i++)
c[k++]=a[i];
if(j<x) for(k=k-1;j<y;j++)
c[k++]=a[j];
{ int i,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<stdio.h>
#include<string.h>
void main()
8.汉诺塔:
#include<stdio.h>
void Hanoi(int n, char A, char B, char C)
{
if(n==1)
printf("\n move %d from %c to %c",n,A,C);
else{
Hanoi(n-1,A,C,B);
printf("\nmove %d from %c to %c",n,A,C);
count++;
return count;
}
5.求最大公约数:
/*方法一*/
int gcd(int x,int y)
{ int z;
z=x<y?x:y;
while(!(x%z==0&&y%z==0))/*x%z||y%z*/
z--;
return z;
}
/*方法二*/
int gcd(int x,int y)
{ int i,j,t;
for(i=1;i<n;i++){
t=a[i];
for(j=i-1;j>=0&&t<a[j];j--)
a[j+1]=a[j];
a[j]=t;
}
}
/*归并排序*/
#define x 10
#define y 10
void com(int *a,int *b,int *c)
{ int i,j,k;
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 <stdio.h>
return k;
}
/*求回文数*/
int f(long n)
{ long k,m=n;
for(k=0;n>0;n/=10)
k=10*k+n%10;
if(m==k) return 1;
return 0;
}
/*求整数位数*/
int f(long n)
{ int count;
for(count=0;n>0;n/=10)
}
/*寻找子串*/
int find(char *s1,char *s2)
{ int i,k=0;
while(s1[i]==s2[i]) i++;
if(s2[i]==0) return k;
s1++;
k++;
return -1;
}
分词:
/*方法一*/
void fen(char s[][10],char str)
}
/*交换法排序1冒泡排序*/
void sort(int a[],int n)
{ int i,j,t,flag;
for(i=0;i<n-1;i++){
flag=1;
for(j=0;j<n-1-i;j++)
if(a[j]>a[j+1]){
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
flag=0;
3)迁移。for(n=1;fabs(a)>eps; n++){
(1)环境的使用价值。环境的使用价值(UV)又称有用性价值,是指环境资源被生产者或消费者使用时,满足人们某种需要或偏好所表现出的价值,又分为直接使用价值、间接使用价值和选择价值。for(f=1,m=1;m<=n;m++)
}
if(flag) break;
}
}
/*交换法排序2*/
void sort(int a[],int n)
{ int i,j,t;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(a[i]>a[j]){
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
/*选择法排序*/
void sort(int a[],int n)
int main(void)
{ int x, loop=0;
do{
for(x=1;x<5;x++) {
int x=2;
printf("%d",x);
}
printf("%d ",x);
f();
loop++;
}while(loop<1);
getch();
}
void f()
{ printf("%d",x++); }
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<n; i++)
if(n%i==0) t=0;
if(t) printf("%d is prime",n);
/*方法二*/
#include <stdio.h>
#include <math.h>
int main(void)
{ double x,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)函数*/
for(t=1,i=2; i<=(int)sqrt(n); i++)
if(n%i==0){
t=0;
break;
}
if(t) printf("%d is prime",n);
4.反序数:
/*求反序数*/
long fan(long n)
{ long k;
for(k=0;n>0;n/=10)
k=10*k+n%10;
{ int i,j,point,t;
for(i=0;i<n-1;i++){
point=i;
for(j=i+1;j<n;j++)
if(a[point]<a[j]) point=j;
if(point!=i){
t=a[point];
a[point]=a[i];
a[i]=t;
}
}
}
7.一元非线性方程求根:
/*牛顿迭代法求函数跟*/
if(n==1)
head=p2=p1;
else{
p2->next=p1;
p2=p1;
}
}while(1);
return head;
}
10.级数的近似计算:
(5)法律、行政法规和国务院规定的其他建设项目。#include <stdio.h>
#include <math.h>
int main(void)
unsigned score;
int n=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;
1.定积分近似计算:
/*梯形法*/
double integral(double a,double b,long n)
{ long i;double s,h,x;
h=(b-a)/n;
s=h*(f(a)+f(b))/2;
x=a;
for(i=1;i<n;i++){
x+=h;
s+=h*f(x) ;
}
return(s);
{ double s=1,a=1,x,eps,f;
规划环境影响评价技术导则由国务院环境保护主管部门会同国务院有关部门制定;规划环境影响评价技术规范由国务院有关部门根据规划环境影响评价技术导则制定,并抄送国务院环境保护主管部门备案。int n,m;
第二节 安全预评价printf("input x and eps:");
int fib(int n)
{ int i,f1=1,f2=1,f;
for(i=3;i<=n;i++){
f=f1+f2;
f1=f2;
f2=f;
}
if(n==1||n==2) return 1;
else return f;
}
/*递归调用*/
void fib(int n,int*s)
{ int f1,f2;
}
/*弦截法求函数跟*/
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 <stdio.h>
void f();
{
int r;
while((r=x%y)!=0){
x=y;
y=r;
}
return y;
}
/*方法三*/
int gcd(int a ,int b)
{ int r ;
if((r=a%b)==0)
returΒιβλιοθήκη Baidu b;
else
return gcd(b,r);
}
6.数组常用算法:
查找:
/*线性查找*/
int find(int num,int x[],int key)
if(fabs(f(a))<1e-6)
x=a;
else if (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);
}
/*矩形法*/
double integral(double a,double b,long n)
{ long i;double t=0,h,x;
h=(b-a)/n;
x=a;
for(i=0;i<n;i++){
t+=h*f(x);
x+=h;
}
return(t);
}
2.生成斐波那契数列:
/*直接计算*/
{
int mid;
mid=(low+high)/2;
if(x[mid]==key) return mid;
if(low>=high) return -1;
else if(key<x[mid])
return b_search(x,low,mid-1,key);
else
return b_search(x,mid+1,high,key);
Hanoi(n-1,B, A, C);
}
}
int main(void)
{ Hanoi(3,'A','B','C');
getch();
}
9.建立链表:
NODE *creat(void) /* void表示无参函数*/
{
NODE *head=NULL,*p1=NULL,*p2=NULL;
long num;
#include <math.h>
double f(double x)
{ return 6-x*(5-x*(4-3*x)); /*f(x)函数*/
}
int main(void)
{ double a,b,c,x,eps=1e-6;
do{
scanf("%lf%lf",&a,&b);
}while(f(a)*f(b)>0);
for (t=1,i=2;i<n&&t; i++)
if(n%i==0) t=0;
if(t) printf("%d is prime",n);
/*方法三*/
for (i=2;i<n; i++)
if(n%i==0) break;
if(i==n) printf("%d is prime",n);
/*方法四*/
{ int i=0,n=0;char s[80],*p;
strcpy(s,"It is a book.");
for(p=s;p!='\0';p++)
if(*p=='')
i=0;
else
if(i==0)
{n++;i=1;}
printf("%d\n",n);
getch();
}
排序:
/*插入法排序*/
void sort(int a[],int n)
mid=(low+high)/2;
if(x[mid]==key){
m=mid;
break;
}
else if(x[mid]>key) high=mid-1;
else low=mid+1;
}
return m;
}
/*折半查找(递归)*/
int b_search(int x[ ],int low,int high,int key)
{ int i,m=-1;
for(i=0;i<num;i++)
if(x[i]==key){
m=i;
break;
}
return m;
}
/*折半查找*/
int find(int x[],int num,int key)
{ int m=-1,low=0,high=num-1,mid;
while(low<=high){
for(i=0,j=0,k=0;i<=x&&j<=y;){
if(a[i]<b[j]){
c[k++]=a[i];i++;}
else{
c[k++]=b[j];j++;}
}
if(i<x) for(k=k-1;i<x;i++)
c[k++]=a[i];
if(j<x) for(k=k-1;j<y;j++)
c[k++]=a[j];
{ int i,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<stdio.h>
#include<string.h>
void main()
8.汉诺塔:
#include<stdio.h>
void Hanoi(int n, char A, char B, char C)
{
if(n==1)
printf("\n move %d from %c to %c",n,A,C);
else{
Hanoi(n-1,A,C,B);
printf("\nmove %d from %c to %c",n,A,C);
count++;
return count;
}
5.求最大公约数:
/*方法一*/
int gcd(int x,int y)
{ int z;
z=x<y?x:y;
while(!(x%z==0&&y%z==0))/*x%z||y%z*/
z--;
return z;
}
/*方法二*/
int gcd(int x,int y)
{ int i,j,t;
for(i=1;i<n;i++){
t=a[i];
for(j=i-1;j>=0&&t<a[j];j--)
a[j+1]=a[j];
a[j]=t;
}
}
/*归并排序*/
#define x 10
#define y 10
void com(int *a,int *b,int *c)
{ int i,j,k;
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 <stdio.h>
return k;
}
/*求回文数*/
int f(long n)
{ long k,m=n;
for(k=0;n>0;n/=10)
k=10*k+n%10;
if(m==k) return 1;
return 0;
}
/*求整数位数*/
int f(long n)
{ int count;
for(count=0;n>0;n/=10)
}
/*寻找子串*/
int find(char *s1,char *s2)
{ int i,k=0;
while(s1[i]==s2[i]) i++;
if(s2[i]==0) return k;
s1++;
k++;
return -1;
}
分词:
/*方法一*/
void fen(char s[][10],char str)
}
/*交换法排序1冒泡排序*/
void sort(int a[],int n)
{ int i,j,t,flag;
for(i=0;i<n-1;i++){
flag=1;
for(j=0;j<n-1-i;j++)
if(a[j]>a[j+1]){
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
flag=0;