c语言程序设计中常用计算方法(未完)

//筛选法求素数

#include 
#include 
#define MAX_SIZE 1000

void getPrimeTab(int *,int);
void initSieve(int*,int);
int getNext(int*,int,int);
int outPrimeTab(int *,int);

int main()
{
    int n;
    int cnt;
    int sieve[MAX_SIZE]={0};
    initSieve(sieve,MAX_SIZE);
    scanf("%d",&n);
    getPrimeTab(sieve,n);
    cnt=outPrimeTab(sieve,n);
    printf("total primes = %d\n",cnt);
    return 0;
}
void initSieve(int*ps,int n)
{
    int i;
    for(i=2;i)
    {
        ps[i]=1;
    }
}
int outPrimeTab(int *ps,int n)
{
    int i,count=0;
    for(i=2;i)
    {
        if(ps[i]==1)
        {
            if(count++%6==0)
            {
                printf("\n");
            }
            printf("%8d",i);
        }
    }
    printf("\n");
    return count;
}
int getNext(int*ps,int p,int n)
{
    int q=p+1;
    while(q0)
    {
        q++;
    }
    return q;
}
void getPrimeTab(int *ps,int n)
{
    int p,q,i;
    for(p=2;p*pgetNext(ps,p,n))
    {
        for(q=p;p*qgetNext(ps,q,n))
        {
            for(i=p*q;ip)
            {
                ps[i]=0;
            }
        }
    }
}

 

上完课过来整理一下笔记

 

1、穷举法

//百钱买百鸡问题(简化后)

#include 
#include 

int main()
{
    int i,j,k;
    for(i=0; i<20; i++)
    {
        for(j=0; j<34; j++)
        {
            k=100-i-j;
            if(i*15+j*9+k==300)
            {
                printf("%d %d %d\n",i,j,k);
            }
        }
    }
    return 0;
}

 

2、迭代法

//求解一元三次方程指定范围的根
#include 
#include 
#include 

double biroot(double,double);
double foo(double);

int main()
{
        double x1,x2;
        do
        {
            scanf("%lf%lf",&x1,&x2);
        }while(foo(x1)*foo(x2)>0);

    printf("%.2f\n",biroot(x1,x2));
    return 0;
}
double biroot(double x1,double x2)
{
    double ret;
    do
    {
        ret=(x1+x2)/2;
        if(foo(ret)*foo(x1)>0)
        {
            x1=ret;
        }
        else
        {
            x2=ret;
        }
    }while(fabs(x1-x2)>=1e-7);
    ret=(x1+x2)/2;
    return ret;
}
double foo(double x)
{
    return(x*x*x-7.7*x*x+19.2*x-15.3);
}

 

3、牛顿迭代(牛顿切线法)

//求解一元三次方程在1.0附近的根

#include 
#include 
#include 

double ntroot(double);
double foo(double);
double dfoo(double);

int main()
{
    double x0;
    scanf("%lf",&x0);
    printf("%.2f\n",ntroot(x0));
    return 0;
}
double ntroot(double x)
{
    double x0;
    double f,df;
    do
    {
        x0=x;
        f=foo(x0);
        df=dfoo(x0);
        x=x0-f/df;
    }
    while(fabs(x-x0)>=1e-7);
    return x;
}
double foo(double x)
{
    return (x*x*x-7.7*x*x+19.2*x-15.3);
}
double dfoo(double x)
{
    return(3.0*x*x-15.4*x+19.2);
}

 

4、递推法(归纳法)

//累加和累乘
#include 
#include
#include
double getSum(int);
int main()
{
int n;
scanf("%d",&n);
    printf("%f\n",getSum(n));
    return 0;
}
double getSum(int n)
{
    int i;
    double s=0.0;
    for(i=1;i<=n;i++)
    {
        s+=pow(-1,i+1)/i;
    }
    return s;
}
 
 

 

 

你可能感兴趣的:(c语言程序设计中常用计算方法(未完))