【网学提醒】:本文主要为网上学习者提供C语言程序设计实习报告,希望对需要C语言程序设计实习报告网友有所帮助,学习一下吧!
资料包括: 论文(4页670字) 源码 图纸
说明:一 题目的提出
1题目的描述
设计一个可容纳40位数的求n!的
程序,
2测试数据
40
二 系统分析
1设计思想
使用递归算法。
2 设计方案
递归定义一步比一步简单,要计算n!,先调用并计算(n-1)!要计算计算(n-1)!先调用并计算[(n-1)-1]!……依次类推,通过转化将一个问题转变成 为一个新问题,使
问题逐渐简单化,再将数据依次返回上一步,最后得到运算结果。
三 模块设计
void main( ) 主函数
long double fact( ) 自定义函数,返回计算结果
四 重点难点
编这个
程序是应该注意的有以下三个方面,即递归算法求解所具备的三个条件:
(1)能将一个问题转变成为一个新问题,而的问题与原问题的解法相同或类同,所不同的仅是所处理的对象,并且这些对象的变化是有规律的。
(2)可以通过上述转化使问题逐渐简单化
(3)必须有1个明确的递归出口,或者递归边界,决不能无限循化下去
五 代码
#include
long double fact(int n )//自定义函数,返回long double 型的计算结果
{
if(n==1||n==0) //递归出口
{
return 1;
}
else
return (n*fact(n-1));//递归调用函数fact
}
void main( )
{
int n,i=0;
long double f;
printf("n=");
scanf("%d",&n);//输入要算的阶乘
for(i=0;i<=n;i++)//循环计算并输出
{
f=fact(i);//调用函数
printf("%d!=%.0lf\n",i,f);
目录:
一 题目的提出
二 系统分析
三 模块设计
四 重点难点
五 代码
六 测试结果
七 使用手册
八 总结
作者点评:
先定义为int型,出现了数据的外溢;为了克服这个现象,将其改为double型,但数据稍大是依然会出现外溢现象;最后,使用了long double型,此时不再外溢。
2)但随之又出现了新的问题,即运算结果中有小数部分,影响美观。针对这个现象,我修改了printf语句,将原来的语句改成了现在的
printf("%d!=%.0lf\n",i,f);
这样,屏幕在显示运算结果的时候就将小数部分省略掉了。