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 x+=h; s+=h*f(x) ; } return(s); } /*矩形法*/ 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 t+=h*f(x); x+=h; } return(t); } 2. 生成斐波那契数列: /*直接计算*/ 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; 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("%d is prime",n); /*方法二*/ for (t=1,i=2;i if(n%i==0) t=0; if(t) printf("%d is prime",n); /*方法三*/ for (i=2;i if(n%i==0) break; if(i==n) printf("%d is prime",n); /*方法四*/ 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; 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) count++; return count; } 5.求最大公约数: /*方法一*/ int gcd(int x,int y) { int z; z=x while(!(x%z==0&&y%z==0))/*x%z||y%z*/ z--; return z; } /*方法二*/ int gcd(int x,int y) { 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) return b; else return gcd(b,r); } 6.数组常用算法: 查找: /*线性查找*/ int find(int num,int x[],int key) { int i,m=-1; for(i=0;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){ 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 mid; mid=(low+high)/2; if(x[mid]==key) return mid; if(low>=high) return -1; else if(key return b_search(x,low,mid-1,key); else return b_search(x,mid+1,high,key); } /*寻找子串*/ 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) { 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 #include void main() { 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) { int i,j,t;