/*
*文件名称:Ex1.1cpp
*作者:张艳华
*完成日期:2016年3月2日
*版本号:v1.0
*对任务及求解方法的描述部分:应用函数的调用求出1到9的阶层,再根据是否为偶数确定符号,输出最后的结果。
*输入描述:f=1-1/2!+1/3!+...+1/9!
*问题描述:利用do-while循环,for循环,while循环.
*程序输出:0.63
*问题分析:这是一个利用阶层的算法。
*算法设计:利用函数的调用求阶层,然后在主函数中计算结果。
*/
一问题及代码:
1.do-while循环
#include<iostream>
using namespace std;
int fact(int n);
int main()
{
int i=9;
double f=0.0;
do
{
fact(i);
if(i%2==0)
f-=1.0/fact(i);
else
f+=1.0/fact(i);
i--;
}
while(i);
cout<<f<<endl;
}
int fact(int n)
{
if(n==0)
return(1);
else
return(n*fact(n-1));
}
2.for循环
#include<iostream>
using namespace std;
int fact(int n);
int main()
{
int i=9;
double f=0.0;
for(i=1; i<10; i++)
{
fact(i);
if(i%2==0)
f-=1.0/fact(i);
else
f+=1.0/fact(i);
}
cout<<f<<endl;
}
int fact(int n)
{
if(n==0)
return(1);
else
return(n*fact(n-1));
}
3.while循环
#include<iostream>
using namespace std;
int fact(int n);
int main()
{
int i=9;
double f=0.0;
while(i)
{
fact(i);
if(i%2==0)
f-=1.0/fact(i);
else
f+=1.0/fact(i);
i--;
}
cout<<f<<endl;
}
int fact(int n)
{
if(n==0)
return(1);
else
return(n*fact(n-1));
}
二运行结果:
三心得体会:这题需要注意精度的问题以及正负号的问题。
四知识点总结:本程序应用了函数的调用,使问题简单化,并且利用函数的调用求阶层,以及循环条件的判断。