求助!!c++程序设计设s=1+1/2+1/3+....+1/n,求与八最接近的s的值与其对应的n值。最好用到do。。。while语

n是一个输入量是整数

#include<iostream>
#include<windows.h>
using std::cout ;
using std::endl ;
int main()
{
int n=1 ;
double s=0,s2 ; //s是当前表达式的和,s2是上一次计算时的和。
do{
s2=s ;
s+=(double)(1.0/n) ;
n++ ;
}while(s<8) ; //退出循环的时候,s大于8,s2小于等于8
if(8-s2>s-8) //算绝对值。。。小的输出
cout<<"s="<<s<<" n="<<n-1<<endl ;
else cout<<"s="<<s2<<" n="<<n-2<<endl ; //输出
return 0 ; //return 0;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-04-24
#include<iostream>
using namespace std;
void main()
{
int n=1;
double s=0;
do
{
s=s+(1.0/n);
n++;
}
while(s<8.0);
cout <<"s="<<s<<endl;
cout <<"n="<<n<<endl;
}本回答被提问者采纳
第2个回答  2011-04-24
#include<cstdio>
int main()
{
double s1=0,s2;
int t=0;
do {
t++;
s2=s1;
s1+=1.0/t;
}while(s1<8);
if(s1+s2>16) printf("%lf %d\n",s2,t-1);
else printf("%lf %d\n",s1,t);
}
补:
#include<cstdio>
#include<cmath>
int main()
{
int n;
while(~scanf("%d",&n)){
double s1=0,s2;
int t=0;
do {
t++;
s2=s1;
s1+=1.0/t;
}while(s1<8&&t<n);
if(fabs(s1-8)>fabs(8-s2)) printf("%lf %d\n",s2,t-1);
else printf("%lf %d\n",s1,t);
}
}
第3个回答  2011-04-24
#include<iostream>
using namespace std;
int main()
{
double sum=0;
double i=1;
do
{
sum+=(1.0/i);
i+=1;
}while(sum<8.0);
i-=1;
double temp = sum-1.0/i;
double a = 8-temp;
double b = sum-8;
if (a<b)
{
sum = temp;
i-=1;
}
cout<<i<<"\t"<<sum<<endl;
}
第4个回答  2011-04-25
#include<iostream>
void main()
{
int n=1;
double limit;
double sum=0;
cin>>limit;//输入limit
while(1)
{
sum=sum+(double)(1/n);//求和
if (sum>limit)//满足条件
{
cout<<n;//输出n
return;//跳出循环
}
n++;
}
return;
}
相似回答