c++实验4
2019-11-06 07:25:36
供稿:网友
一、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 10void 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-5void 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-5float 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;}