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

接近8的有两种情况,一种是小于8,一种是大于8,要比较出最接近的那个,再输出s值和对应的n值。

声明一个int型变量n作为分母兼作项数记数变量,声明一个double型变量s记录前n项之和;利用do~while语句,n从1开始到当前项的浮点和小于8时继续循环,否则退出。退出循环后,比较s-8和8-(s-1.0/n),取小者(相等时取前一项)的最后一项的n便是题解。代码如下:

#include "stdio.h"
int main(int argc,char *argv[]){
int n;
double s;
s=n=0;
do{
s+=1.0/++n;
}while(s<8);
if(s-8 > 8-s+1.0/n)
s-=1.0/n--;
printf("s = %f\tn = %d\n",s,n);
return 0;
}

运行结果如下:

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-17
#include "stdio.h"
void main()
{
double s=1.0;
int n=1;
do
{
++n;
s+=1.0/n;
}while(s<8);
if((8-s)>(s+1.0/(n+1)-8)
printf("n=%d,s=%lf",n+1,s+1.0/(n+1));
else
printf("n=%d,s=%lf",n,s);

}追问

do while 循环后s不是大于8吗

追答

也是,我失误了,不好意思。我给你改改
#include "stdio.h"
void main()
{
double s=1.0;
int n=1;
do
{
++n;
s+=1.0/n;
}while(s(8-(s-1.0/(n-1)))
printf("n=%d,s=%lf",n-1,s-1.0/(n-1));
else
printf("n=%d,s=%lf",n,s);

}

本回答被网友采纳
第2个回答  2012-04-17
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void main()
{
double s=0;
double i=1;
double s1=0,s2=0;
char a[20]="";
do{
s+=1/i;
i++;
}while(s<8.0000000000000001);

s1=s-8;
s-=1/i;
s2=8-s;
if(s1>s2)
{
gcvt(s,18,a);
printf("%f\n",i-1);
}
else
{
s+=1/i;
gcvt(s,18,a);
printf("%f\n",i);
}

puts(a);
}
第3个回答  2012-04-17
#include "stdio.h"
void main()
{
double s=1.0;
int n=1;
do
{
++n;
s+=1/n;
}while(s<=8);
printf("%d,%f",n,s);

}

用C语言写的看看
相似回答