C语言常用数值计算算法(素数、公约数、级数、方程根和定积分)

素数判断

#include<stdio.h> #include<math.h> int main() { int n,min,max,isprime; scanf('%d %d',&min,&max); if(min<=2){ printf('%4d',2); min=3; } if(min%2==0) min++; for(n=min;n<=max;n+=2){ for(isprime=1,i=2;t&&i<=sqrt(n);i++) if(n%i==0) isprime=0; if(isprime) printf('%4d',n); } return 0; }

最大公约数

1.brute-force算法

#include<stdio.h>
int main()
{
    int x=30,y=45,z;
    z=x;
    while(!(x%z==0&&y%z==0))
        z--;
    printf('%d',z);
    return 0;
}

2.欧几里得算法

#include<stdio.h> int main() { int x=35,y=45,r; while((r=x%y)!=0){ x=y; y=r; } printf('%d',y); return 0; }

穷举法

解方程: ①x+y+z=100 ②5x+3y+z/3=100

#include<stdio.h>
int main()
{
    int x,y,z;
    for(x=0;x<=20;x++)
        for(y=0;y<=33;y++)
            for(z=0;z<=100;z++)
                if(x+y+z==100&&5*x+3*y+z/3==100&&z%3==0)
                    printf('x=%d,y=%d,z=%d\n');
    return 0;
}
#include<stdio.h> int main() { int x,y,z; for(x=0;x<=20;x++) for(y=0;y<=33;y++){ z=100-x-y; if(5*x+3*y+z/3==100&&z%3==0) printf('x=%d,y=%d,z=%d\n',x,y,z); } return 0; }

级数近似

#include<stdio.h>
#include<math.h>
int main()
{
    double s=1,a=1,x,eps;
    int n;
    scanf('%lf%lf',&x,&eps);
    for(n=2;fabs(a)>eps;n++){
        a=a*x/(n-1);
        s+=a;
    }
    printf('%f',s);
    return 0;
)
#include<stdio.h> #include<math.h> int main() { double sum,x,eps=1e-6,fn,tn; int s=1,n=2; scanf('%lf',&x); s=fn=x; do{ s=-s; fn=fn*(2*n-3)/(2*n-2)*x*x; tn=sign*fn/(2*n-1); sum=sum+tn; n++; }while(fabs(tn)>eps); printf('%f',sum);

一元非线性方程求根

一、牛顿迭代法

  1.基本概念:如果函数连续,且待求零点孤立,那么在零点周围存在一个区域,当初值在这个邻域内时,牛顿法收敛。如果零点不为0, 那么牛顿法将具有平方收敛的性能。

  2.基本公式:xk+1=xk-f(xk)/f'(xk)

  3.判断条件:|f(xn+1)|<ε或|xn+1-xn|<ε是否为真。若为真则xn+1就是方程f(x)=0在x0附近误差ε范围内的一个近似根。

  4.实际应用:求cos(x)-x=0的近似解,精确到10-6

#include<stdio.h>
#include<math.h>

int main()
{
    double x1=0, x2 = 2;
    while (fabs(cos(x2)-x2)>1e-6&&fabs(x2-x1)>1e-6){
        x1 = x2;
        x2 = x1 + (cos(x1) - x1) / (sin(x1) + 1);
    }
    printf('x=%f\nf(x)=%.6f',x2,fabs(cos(x2)-x2));
    return 0;
}

二、二分法

  1.基本概念:对于区间[a,b]上连续不断且 f(a)f(b)<0的函数y=f(x) ,通过不断地把函数 f(x) 的零点所在的区间一分为二,使区间的两个端点逐步逼近零点,进而得到零点近似值的方法叫二分法。

  2.实际应用:求exp(x)+x=0在(-1, 0)的根,精确到10-6

#include<stdio.h> #include<math.h> double f(double x); int main() { double a=-1, b=0, c; c = (a+b)/2; do{ if(f(a)*f(c)>0) a = c; else b = c; c = (a+b)/2; } while (fabs(f(c)) > 1e-6&&fabs(a-b)>1e-6); printf('x=%.6f', c); return 0; } double f(double x) { return exp(x) + x; }

三、弦截法

  1.基本概念:弦截法是求非线性方程近似根的一种线性近似方法。它是以与曲线弧AB对应的弦AB与x轴的交点横坐标作为曲线弧AB与x轴的交点横坐标的近似值μ来求出方程的近似解。

  2.实际应用:求((x+2)*x-2)*x-1=0在(-1, 0)的根,精确到10-6

#include <math.h>
#include <stdio.h>
float f(float x)
{
    float y;
    y = ((x + 2.0) * x - 2.0) * x - 1.0;
    return y;
}

int main()
{
    float x, x1, x2;
    x1 = -1, x2 = 0;
    do{
        x = (x1 * f(x2) - x2 * f(x1)) / (f(x2) - f(x1));
        if (f(x) * f(x1) > 0)
            x1 = x;
        else
            x2 = x;
    } while (fabs(f(x)) >= 1e-6);
    printf('the root is %f\n', x);
    printf('((x+2.0)*x-2.0)*x-1.0=%f\n', f(x));
    return 0;
}

定积分近似计算

1.梯形法

  算法思想

  程序实现

#include<stdio.h> #include<math.h> int main() { long n, i; double a=-1.57,b=1.57,h,s,x; scanf('%ld',&n); h=(b-a)/n; s=(cos(a)+cos(b))/2; x=a; for(i=1;i<n;i++){ x+=h; s+=cos(x); } printf('%f',s*h); return 0; }

2.矩形法

  算法思想

  程序实现

#include<stdio.h>
#include<math.h>
int main()
{
    long n,i;
    double a=-1.57,b=1.57,h,s=0,x;
    scanf('%ld',&n);
    h=(b-a)/n;
    x=a;
    for(i=0;i<n;i++){
        s+=cos(x);
        x+=h;
    }
    printf('%f',s*h);
    return 0;
}
(0)

相关推荐

  • C++ if语句讲解+例题

    [例题]计算出租车价格.小于3分里收11元,大于3公里先收11元,3公里以外部分再每公里2.1元. 这里有两种情况,分为小于3公里和大于3公里两种,我们需要使用到if语句. 一,if语句 if(条件表 ...

  • C语言求最小公倍数和最大公约数三种算法(经典)

    最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,其中一个最小的公倍数是他们的最小公倍数,同样地,若干个整数公有的倍数中最小的正整数称为它们的最小公倍数,维基百科:定义点击打开链接 求 ...

  • STL_常用的算法

    STL_常用的算法 一.常用的查找算法 adjacent_find() adjacent_find(iterator beg, iterator end, _callback); 在iterator对 ...

  • GO语言常用工具有哪些?这两款很重要

    Go语言是一门发展较久的编程语言,至今已有10年之多,它不仅优势多.领域广,而且前景非常好,是区块链的首选语言.那么Golang IDE有哪些呢?我想这是很多学习者都想要知道的问题,接下来我们一起来看 ...

  • 区块链中常用共识算法总结

    本文是对区块链技术中涉及的共识算法的学习总结整理. 其中PBFT是联盟链常用共识算法,Raft是私有链常用的共识算法,而PoW(比特币采用)是公有链常用的共识算法. 建议对区块链的学习,要分成是公有链 ...

  • 七大经典、常用排序算法的原理、Java 实现以及算法分析

    0. 前言 大家好,我是多选参数的程序锅,一个正在 neng 操作系统.学数据结构和算法以及 Java 的硬核菜鸡.数据结构和算法是我准备新开的坑,主要是因为自己在这块确实很弱,需要大补(残废了一般) ...

  • 总结 | 常用机器学习算法的优缺点

    人工智能算法与Python大数据 致力于提供深度学习.机器学习.人工智能干货文章,为AI人员提供学习路线以及前沿资讯 23篇原创内容 公众号 点上方人工智能算法与Python大数据获取更多干货 在右上 ...

  • 算法——列表排序和常用排序算法

    目录 一.列表排序 二.常见排序算法 1.冒泡排序(Bubble Sort) 2.选择排序(Selection Sort) 3.插入排序(Insertion Sort) 4.快速排序(Quick So ...

  • 诗歌语言常用术语汇释

    诗歌语言常用术语汇释

  • 常用机器学习算法小结

    常用机器学习算法小结