第4章 利用函数实现指定的功能

4.1 最大公约数和最小公倍数(引入函数)

#include <iostream>
using namespace std;

int GCD=1, LCM=0;

int main()
{
    int m, n;
    int GCD_function(int x, int y);//声明函数求最大公约数
    int LCM_function(int p,int q);//声明函数求最小公倍数
    /*输入两个整数*/
    cout <<"Please enter number:";
    cin >> m;
    cin >> n;
    
    cout << "Greater common divisor(m&n):" << GCD_function(m,n) << '\n';
    cout << "Least common multiple(m&n):" << LCM_function(m,n) << endl;

    return 0;
}

int GCD_function(int x, int y) {

    int i;
    for (i = 1; i < x + 1; i++) {
        if (x % i == 0)
            if (y % i == 0)
                GCD = i;
    }
    return GCD;

}
int LCM_function(int p, int q) {

    GCD_function(p,q);
    LCM = (p * q) / GCD;
    return LCM;
}

4.2 求一元二次方程的解

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    double a=0, b=0, c=0;
    
    double OverZero(double x, double y, double z);
    double EqualZero(double x, double y, double z);
    double BelowZero(double x, double y, double z);
    cout << "Please enter a:";
    cin >> a;
    cout << "Please enter b:";
    cin >> b;
    cout << "Please enter c:";
    cin >> c;

    if ((b*b - 4.0 * a * c) > 0)
        OverZero(a,b,c);
    else if ((b * b - 4.0 * a * c) == 0)
        EqualZero(a,b,c);
    else 
        BelowZero(a, b, c);

    return 0;
}

double OverZero(double x, double y, double z) {
    double p=0,q=0;
    /*求根公式*/
    p = (-y + sqrt(y * y - 4.0 * x * z)) / (2.0 * x);
    q = (-y - sqrt(y * y - 4.0 * x * z)) / (2.0 * x);

    cout << "X1="<<p<<'\n'<<"X2="<<q<<endl;

    return 0;
}
double EqualZero(double x, double y, double z){
    double p=0;
    p= -(y / (2.0 * x));
    cout << "X1=X2=" << p << endl;
    return 0;
}
double BelowZero(double x, double y, double z) {
    cout << "Not solution in real number field.";
    return 0;
}

4.3 判别素数

#include <iostream>
using namespace std;

int main()
{
    int  a=0;
    int Prime_number(int x);
   
    cout << "Please enter a number:";
    cin >> a;
    Prime_number(a);
    
    return 0;
}
int Prime_number(int x) {
    int i,n=0;
    for (i = 1; i < x;i++) {
        if (x % i == 0) {
            n++;
            if (n > 2) {
                cout << "It isn't a prime number.";
                return 0;
            }
        }
    }
    cout << "It is a prime number!";

    return 0;
}

4.4 求三个数的阶乘和

#include <iostream>
using namespace std;

int main()
{
    int  a=0,b=0,c=0;
    int fac(int x);
   
    cout << "Please enter a:";
    cin >> a;
    cout << "Please enter b:";
    cin >> b;
    cout << "Please enter c:";
    cin >> c;
   
    cout << "a!+b!+c!="<<fac(a) + fac(b) + fac(c)<<endl;
    
    return 0;
}
int fac(int x) {
   long f;
   if (x < 0) {
       cout << "Data error, input value must over 0!";
       return -1;
   }
   else if ((x == 0) || (x == 1))
       f = 1;
   else
       f = fac(x - 1) * x;
   return f;
}

4.5 求sinh(x)的值

#include <iostream>
//#include <cmath>
using namespace std;

int main()
{
    int  a=0;
    double exp(int x);
   
    cout << "Please enter a:";
    cin >> a;
   
    cout << "sinh(x)="<<(exp(a)-exp(-a))/(2.0)<<endl;

    return 0;
}
double exp(int x) {
   double f=1;
   double e = 2.7182;
   int i;
   if (x < 0) {
       for (i = 1; i <= -x; i++){
           f = f * e;
       }
       f = 1.0 / f;
   }
   else if (x == 0)
       f = 1;
   else {
       for (i = 1; i <= x; i++) {
           f = f * e;
       }
   }
       
   return f;
}

4.6 牛顿迭代法求一元三次方程的近似解

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    double a,b,c,d,X0=0;
    double Newton(double x,double y,double z,double p,double X0);
   
    cout << "Please enter a:";
    cin >> a >> b >> c >> d;
    X0 = 1;
   
    cout << "ax^3+bx^2+cx+b = 0, X0 = 1,x="<< Newton(a,b,c,d,X0)<<endl;

    return 0;
}
double Newton(double x, double y, double z, double p, double X0){
    double n=X0,t=0;
    while (fabs(t-n) > 1e-7) {
        t = n;
        n = t - ((x * t * t * t + y * t * t +
         z * t + p) / (3.0 * x * t * t + 2.0 * y * t + z));//taylor 展开到一阶
    }
    return n;

}

4.7 哥德巴赫猜想

#include <iostream>
using namespace std;

int main()
{
    int num;
    int gotbaha(int x);
    int prime(int y);
    cin >> num;
    if (num < 6 || num % 2 != 0)
		return 0;       
    gotbaha(num);

    return 0;
}
int prime(int y) {
    int i, temp = 0;
    for (i = 1; i < y; i++) {
        if (y % i == 0) {
            temp++;
            if (temp > 1)
                return 0;
        }
    }
    return 1;
}
int gotbaha(int x) {
    int n=0, m=0,i=0;
    for (i = 3; i < x; i++) {
        n = i;
        m = x - n;
        if (prime(n) && prime(m)) {
            cout << x << "=" << n << "+" << m << endl;
            return 0;
        }
    }
    n = m = x / 2;
    if (prime(n) && prime(m)) {
        cout << x << "=" << n << "+" << m << endl;
        return 0;
    }
   
    return 0;
}

4.8 勒让德多项式

#include <iostream>
using namespace std;

int main()
{
    int n;
    double x;
    double Legendre(int temp, double y);

    cin >> x;
    cin >> n;
    cout << Legendre(n,x)<<endl;
  
    return 0;
}
double Legendre(int temp,double y) {
    double f;
    if (temp == 0)
        return 1;
    else if (temp == 1)
        return y;
    else
        f = (2 * temp) * y - Legendre(temp - 1,y) -
         (temp - 1) * Legendre(temp-2,y);
   
    return f;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值