实验一:
内容:
编写一个程序,对于给定的正整数n,求1+2+……+n,采用逐个累加和n(n+1)/2(高斯法)两种解法。对于相同的n,给出这两种解法的求和结果和求解时间,并用相关数据进行测试。
程序:
#include<iostream>
#include<ctime>
#include<math.h>
using namespace std;
long add1(long n){
long sum=0;
for(int i=0;i<=n;i++){
sum=sum+i;
}
return sum;
}
void addtime1(long n){
clock_t t;
long sum;
t=clock();
sum=add1(n);
t=clock()-t;
cout<<"方法一:"<<endl;
cout<<"结果:1~"<<n<<"之和为:"<<sum<<endl;
cout<<"用时:"<<((float)t)/CLOCKS_PER_SEC<<"秒"<<endl;
}
long add2(long n){
return n*(n+1)/2;
}
void addtime2(long n){
clock_t t;
long sum;
t=clock();
sum=add2(n);
t=clock()-t;
cout<<"方法二:"<<endl;
cout<<"结果:1~"<<n<<"之和为:"<<sum<<endl;
cout<<"用时:"<<((float)t)/CLOCKS_PER_SEC<<"秒"<<endl;
}
int main(){
int n;
cout<<"输入n(大于1000000):";
cin>>n;
if(n<100000){
return 0;
}
addtime1(n);
addtime2(n);
return 0;
}
运行结果:
实验二
内容:
编写一个程序,对于1~n的每个整数n,输出log₂(n),√n,n,nlog₂(n),n²,n³,2ⁿ和n!的值。
程序:
#include<iostream>
#include<math.h>
#include<stdio.h>
using namespace std;
double log2(double n){
return log10(n)/log10(2);
}
long exponent(int n){
long s=1;
for(int i=1;i<=n;i++){
s=s*2;
}
return s;
}
long factorial(int n){
long s=1;
for(int i=1;i<=n;i++){
s=s*i;
}
return s;
}
void fun(int n){
cout<<"log2(n)sqrt(n) nnlog2(n) n^2 n^3 2^nn!"<<endl;
cout<<"-------------------------------------------------------------------------------"<<endl;
for(int i=1;i<=n;i++){
printf("%5.2f\t",log2(double(i)));
printf("%5.2f\t",sqrt(i));
printf("%2d\t",i);
printf("%7.2f\t",i*log2(double(i)));
printf("%5d\t",i*i);
printf("%7d\t",i*i*i);
printf("%8d\t",exponent(i));
printf("%10d\n",factorial(i));
}
}
int main(){
int n=10;
fun(n);
return 0;
}
运行结果: