3个回答
展开全部
这段代码的问题在于图中红色框内jc数据类型不合适,不能定义为int,需为double。
解释:
C语言中一般int为32位,最大只能表示12的阶乘,超过12就会产生溢出,而题目中明确说明了数据会在double范围内,就是有可能超过int所表示范围。需要改为double类型。
监测点划分依据:
Cmn表示从n中选m个有多少情况,通过数学分析我们知道,当m=n/2时取得最大值。因为我们有公式只要m1+m2=n那Cm1n=Cm2n。所以这些监测点以n/2为分界点,用了三个范围内的数据进行测试。
错误分析:
之所以在第二个范围内即为n/2时出错,原因可能是此时只有分子产生了溢出,而分母没有;其它两个数据范围内,虽然分子产生了溢出,但是碰巧分母也产生了溢出抵消了。要知道具体问题还得把真实数据拿出来看,并不是所有等于n/2的数据都是错的,只是有部分数据不通过测试。
另外通过了的数据范围也不一定都对,结果显示正确可能是数据样本不够全。
补充说明:
在C语言编程中,选择适当的数据类型很重要,需要根据数据范围合理选择。选择大了浪费内存,同时也增加了计算机计算负担;选择小了就会产生溢出得不到我们想要的结果。
展开全部
你while循环里面每回删掉一个节点,不是报到3删除一个,所以缺少一个计算器,结果肯定不对,而且while(p->next=p)里面条件总是为真,所以循环不会出来。
望采纳!
望采纳!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
double fact(int n)
{
int i = 1;
double jc = 0;
if(n <= 0)
{
jc =1;
}
else
{
for(;i<=n;i++)
{
jc*=i;
}
}
return jc;
}
明显的问题是你的求阶乘函数中的变量jc应该定义为double类型。
{
int i = 1;
double jc = 0;
if(n <= 0)
{
jc =1;
}
else
{
for(;i<=n;i++)
{
jc*=i;
}
}
return jc;
}
明显的问题是你的求阶乘函数中的变量jc应该定义为double类型。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询