一道C语言题

编程
任意输入一个正整数n用两个子函数实现1+2+3+……+n以及n!,在主函数中输出该结果。
实验问题:求n!子函数的数据类型(或返回值),将其设为int型会发生溢出吗?
还要求编程序!!

会溢出的。用float和double型的就好些不过也不能无限的,用float就会数比较大才会溢出double 的就是还要的啊的才会溢出
这个比较容易看的懂
#include"stdio.h"
float fun(float a)/*n!调用函数声明部分*/
{float m=1.0;
int i;
for(i=1;i<=a;i++)
m*=i;
return m;}
float sum(float a)/*s项和调用函数声明部分*/
{float m=1.0;
int i;
for(i=1;i<=a;i++)
m+=i;
return m;}

main()
{
int n;
printf("请输入n:");
scanf("%d",&n);
printf("n!=%f\n",fun(n));
printf("n项和=%f\n",sum(n));
}
int型的最多就是32767
求和函数里用for(i=1;i<=n;i++)
阶乘函数用递归吧,for循环和调用的配合着用也可以
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-06-19
前面几个都不按题目要求来编程,题目说要用两个子函数实现,所以应该是这样.
#include "stdio.h"
int a(int n)
{
int i,sum=0;
for(i=1;i<=n;i++)
{
sum=sum+i;
}
return sum;
}
double b(int n)
{
int i;
double nn=1;
for(i=1;i<=n;i++)
{
nn=nn*i;
}
return nn;
}
int main(int argc, char* argv[])
{
int n,sum;
double nn;
printf("请输入n的值:");
scanf("%d",&n);
sum=a(n);
nn=b(n);
printf("1+2+3+....+n=%d n!=%0.0f\n",sum,nn);
return 0;
}本回答被提问者采纳
第2个回答  2009-06-19
//你看下我写的。不过也不能无限的,用double就会数比较大才会溢出
#include <stdio.h>
double fun(int n);//函数先声明
void main()
{
int i,n;
double sum=0;
printf("请输入n:");//输入数字,计算到几的阶乘和
scanf("%d",&n);

for (i=1;i<=n;i++)
{
sum+=fun(i);
}
printf("sum=%.lf\n",sum);

}
double fun(int n)//计算阶乘,利用递归
{
if(n==1)
return 1;
return n*fun(n-1);
}
第3个回答  2009-06-19
必然会,int也就到32767。8的阶乘就超过他了,,,当然,如果你的n不超过7,那估计没问题
第4个回答  2009-06-19
int 一般占4个字节(看编译器或者机器)。所以最大值为2的16次方。大于2的16次方就会溢出。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网