C语言计算1-1/2+1/3-1/4+...+1/99-1/100
答案:7 悬赏:0 手机版
解决时间 2021-03-06 16:20
- 提问者网友:那叫心脏的地方装的都是你
- 2021-03-06 06:28
C语言计算1-1/2+1/3-1/4+...+1/99-1/100
最佳答案
- 五星知识达人网友:野味小生
- 2021-03-06 08:08
#include
int main(){
double i=0;
double res=1;
for(i=2;i<=100;i++){
int k=i-1;
if(k%2!=0){
res=res-1/i;
}else{
res=res+1/i;
}
}
printf("%lf",res);
return 0;
}
int main(){
double i=0;
double res=1;
for(i=2;i<=100;i++){
int k=i-1;
if(k%2!=0){
res=res-1/i;
}else{
res=res+1/i;
}
}
printf("%lf",res);
return 0;
}
全部回答
- 1楼网友:逐風
- 2021-03-06 14:54
#include
int main()
{
int fz = 1;
int fm = 1;
double value;
double sum = 0.0;
for (fm = 1; fm <= 100; fm++) {
value = (double)fz / (double)fm;
sum += value;
fz *= -1;
}
printf("%f", sum);
return 0;
}
int main()
{
int fz = 1;
int fm = 1;
double value;
double sum = 0.0;
for (fm = 1; fm <= 100; fm++) {
value = (double)fz / (double)fm;
sum += value;
fz *= -1;
}
printf("%f", sum);
return 0;
}
- 2楼网友:举杯邀酒敬孤独
- 2021-03-06 13:28
你的输入n是什么意思?
如果是计算
1-1/2+1/3-1/4+...+1/99-1/100
那么不需要输入n,其他不变就是了
如果是计算
1-1/2+1/3-1/4+...+1/n
才需要输入n
代码如下(不需要math.h头文件):
#includevoid main(){ double sum; int i,n,m; //加个变量i printf("请输入n:"); scanf("%d",&n); for(i=1,m=1,sum=0;i<=n;i++) //n改为i,100改为n { sum+=m*(1.0/i); m=-m; } printf("sum=%lf\n",sum); }追问感觉你是复制粘贴来的。哪里来的n?好像用不着scanf吧?
如果是计算
1-1/2+1/3-1/4+...+1/99-1/100
那么不需要输入n,其他不变就是了
如果是计算
1-1/2+1/3-1/4+...+1/n
才需要输入n
代码如下(不需要math.h头文件):
#include
- 3楼网友:拾荒鲤
- 2021-03-06 11:57
发生除0错误 ,,,,
i=2时 a=0 1/0 这一段导致程序崩溃
指出几个问题,第一 1/i 是得不出想要的小数的 你可以试试,1/10 = 0 1/2 = 0 因为都是int型
结果也是int 你要 1.0 / i 这样 double/int 结果是范围大的那个类型,即double
#include
int main()
{
double a=1,sum;
int i;
sum=0;
for(i=1;i<=100;i++)
{
sum+=1.0/i*a;
a*=-1;
}
printf("1+2+3+...+100=%lf\n",sum);
}追问先试试,如果可以就采纳你的
i=2时 a=0 1/0 这一段导致程序崩溃
指出几个问题,第一 1/i 是得不出想要的小数的 你可以试试,1/10 = 0 1/2 = 0 因为都是int型
结果也是int 你要 1.0 / i 这样 double/int 结果是范围大的那个类型,即double
#include
int main()
{
double a=1,sum;
int i;
sum=0;
for(i=1;i<=100;i++)
{
sum+=1.0/i*a;
a*=-1;
}
printf("1+2+3+...+100=%lf\n",sum);
}追问先试试,如果可以就采纳你的
- 4楼网友:患得患失的劫
- 2021-03-06 11:00
改如下:
void main(void){
int i;
double sum;
for(sum=0,i=2;i<=100;i+=2)
sum+=1.0/(i*i-i);
printf("1-1/2+1/3-...+1/99-1/100=%f\n",sum);
}
void main(void){
int i;
double sum;
for(sum=0,i=2;i<=100;i+=2)
sum+=1.0/(i*i-i);
printf("1-1/2+1/3-...+1/99-1/100=%f\n",sum);
}
- 5楼网友:蓝房子
- 2021-03-06 10:00
1-1/2+1/3-1/4+...+1/99-1/100
结果是不是0啊。。
1-1=0 0.。。追问嗯,算错了
结果是不是0啊。。
1-1=0 0.。。追问嗯,算错了
- 6楼网友:动情书生
- 2021-03-06 09:07
根据你的需要,改进了一下代码,如下
#include
void main()
{
int i;
float a=1,sum=0;
for (i=1;i<101;i++)
{
sum=sum+a/i;
a=a*(-1);
}
printf("1-1/2+1/3-1/4....-1/100=%f\n",sum);
}
不懂再交流
望采纳追问我找到关键了,%d应该改为%f,请问为什么不能是%d?追答%d是整形数据,1/2等明显是浮点型的数据,所以要用%f,不然会导致数据丢失等问题追问%d的输出结果是-536870912,差距太大了吧?追答对啊,在没有强制转换的情况下,这种数据类型变化的读取错误导致输出结果是什么都正常。
因为,没有强制转化的话,数据通过转化为二进制来转化,而%d只截取了部分%f的二进制数,导致出现离谱的数据
主要还是浮点型数据的二进制数与整形数据的二进制数组成方式不一样,整形和浮点型所占字节也不一样,所以这种默认转化一般都导致数据错的离谱
#include
void main()
{
int i;
float a=1,sum=0;
for (i=1;i<101;i++)
{
sum=sum+a/i;
a=a*(-1);
}
printf("1-1/2+1/3-1/4....-1/100=%f\n",sum);
}
不懂再交流
望采纳追问我找到关键了,%d应该改为%f,请问为什么不能是%d?追答%d是整形数据,1/2等明显是浮点型的数据,所以要用%f,不然会导致数据丢失等问题追问%d的输出结果是-536870912,差距太大了吧?追答对啊,在没有强制转换的情况下,这种数据类型变化的读取错误导致输出结果是什么都正常。
因为,没有强制转化的话,数据通过转化为二进制来转化,而%d只截取了部分%f的二进制数,导致出现离谱的数据
主要还是浮点型数据的二进制数与整形数据的二进制数组成方式不一样,整形和浮点型所占字节也不一样,所以这种默认转化一般都导致数据错的离谱
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯