任务和代码:
/*
*Copyright (c)2017,CSDN学院
*All rights reserved.
*文件名称: main.c
*作 者: 伍志鹏
*完成日期: 2017年9月13日
*版本号: v1.0
*
*问题描述: 计算:(1)s=1-(1/(2^1))+(1/(2^2))-....+(1/(2^8))
* (2)f=1-(1/2!)+(1/3!)-...+(1/9!)
*关注效率,要求用单重循环完成,第一个式子的计算不能用求幂函数pow()
*/
#include <stdio.h>
#include <stdlib.h>
/*
* 题目(1)s=1-(1/(2^1))+(1/(2^2))-....+(1/(2^8))
*/
int main()
{
int i=0,m=1; //m表示2的幂,1为2的0次幂,与循环相符
double sum=0,s=1.0; //s直接取double型,保证除的结果是浮点型
for(i;i<=8;++i)
{
sum=sum+s/m;
m*=2; //2的i次幂由此计算得到
s=-s;
}
printf("%f\n",sum);
return 0;
}
/*
* 题目(2)f=1-(1/2!)+(1/3!)-...+(1/9!)
*/
int main()
{
int i=1,fect=1; //fect表示加数分母上的阶乘,初值1为1的阶乘
double sum=0,s=1.0; //s直接取double型,保证除的结果是浮点数
for(i;i<=9;++i)
{
fect=fect*i; //计算得到i的阶乘
sum=sum+s/fect;
s=-s;
}
printf("%f\n", sum);
return 0;
}
运行结果:
题目(1)
题目(2)