c++实验4

一、400以内亲密对数

#include<iostream>
using namespace std;
int fun(int n);void main()
{  
 for(int i=2;i<400;i++)
  if(fun(fun(i))==i)
   cout<<i<<' '<<fun(i)<<'\n';
}
int fun(int n)
{
 int s=0;
    for(int i=1;i<n;i++)
  if(n%i == 0)
   s+=i;
    return s;
}

二、10000内平方和最大n

#include<iostream>
using namespace std;
void main()
{
    int s=0,n;
    for(int i=1;;i++)
    {
        s+=i*i;
        if(s>10000)
        {n=i-1;s=s-i*i;break;} //输出小于10000的s辅助判断程序的正确性
    }
    cout<<"1*1+2*2+···+"<<n<<"*"<<n<<"="<<s<<"<10000\n";
}

三、分数序列之和

//求 2/1+3/2+5/3+5/18+8/13+...的和
//思路:发现其实一种Fibonacci数列,利用a[n+1]个存储n+1项Fibonacci的值,即可求前n项和

#include<iostream>
using namespace std;
/*
int f(int n)
{
    if(n>2)
        f(n)=f(n-1)+f(n-2);
    if(n==1||n==2)
    {
        f(2)=2;
        f(1)=1;
     }
    return f(n);}
递归的理解错误,最简单的情况下return数值,其余情况return“简化公式”,实际递归是代码的一种折叠。  
*/
int f(int n)
{
    if(n>2)
        return f(n-1)+f(n-2);
    if(n==1)
        return 1;
    if(n==2)
        return 2;
}
#define N 10

void main()
{
    int n;
    cout<<"请输入要计算前多少项分数和(10内):\n";
    //递归10项后求Fibonacci数列很慢,可以改变宏定义N的值实验
    cin>>n;
    int a[N];
    float s=0;     
    for(int i=0;i<n+1;i++)
    {
        a[i]=f(i+1);
        cout<<a[i]<<(i%10==9?'\n':'\t');

        if(!i) continue;     //数列前2项才能表示通项第一项
        s+=float(a[i])/float(a[i-1]);

    }
    cout<<'\n';
    for(int i=0;i<n;i++)
    {
        if(i!=0)
            cout<<"+";
        cout<<a[i+1]<<'\/'<<a[i];
    }
    cout<<"\n前n项总和为:";
    cout<<s<<endl;
}

四、级数展开cosx

#include<iostream>
using namespace std;
#include<math.h>
int factorial(int n)    //阶乘函数
{
    if(n>1)
        return n*factorial(n-1);
    return 1;
}
float f(float x,int n)  //第n项
{
    return pow(-1.0,n)*pow(x,2*n)/factorial(2*n);
}
#define E 0.00001    //1e-5
void main()
{
    float x;
    cout<<"请输入x的值:\n";
    cin>>x;
    float s=0;
    int i;
    for(i=0;;i++)
    {
        //if(abs(f(x,i)<E))  ***括号很重要...
        if(abs(f(x,i))<E)
            break;
    }
    cout<<"第"<<i+1<<"项:"<<f(x,i)<<'\n';  //i从0开始,项数为i+1 
    cout<<"第"<<i<<"项:"<<f(x,i-1)<<endl;
}

五、求方程解

#include<iostream>
using namespace std;
#define _USE_MATH_DEFINES     //使用Pi
#include<math.h>
#define E 0.00001    //1e-5
float fx(float x)
{
    return cos(x/2)-sin(x);
}
void find_x(float a[])
{
    for(;;)
    {
        if(fx(a[0])>0)
            fx((a[0]+a[1])/2)>0?a[0]=((a[0]+a[1])/2):a[1]=((a[0]+a[1])/2);
        else
            fx((a[0]+a[1])/2)<0?a[0]=((a[0]+a[1])/2):a[1]=((a[0]+a[1])/2);
        if(abs(fx((a[0]+a[1])/2))<E)
            break;
    }
}
void main()
{
    float bound[2]={0,M_PI};  //bound[0]下界,bound[1]上界
    find_x(bound);
    float x_root=(bound[0]+bound[1])/2;

    cout<<"cos(x/2)-sinx=0在0到Pi之间的根为:"<<x_root<<'\n';
    cout<<"cos"<<x_root/2<<"="<<cos(x_root/2)<<"\tsin"<<x_root<<"="<<sin(x_root)<<endl;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值