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;}