给分判断二级C这道改错题,谢谢,欢迎讨论

来源:百度知道 编辑:UC知道 时间:2024/06/21 18:18:09
这道题关系我本次二级C机试的命运,所以请人回答,谢谢。
(下面只给出函数部分,因为只有这里面的东西有错)

*************FOUND**************
if k>0
return(k*fun(k-1);
else
*************FOUND**************
if (k=0)
return 1L;
else
return 1L;

现在的焦点问题是,除了第一个K〉0要加括号,第二个K=0改为K==0以外,第一个K〉0是否要改为k>1???????

我同学说应该改成K>1。

但是我在网上曾经发现过这样一道题
*************FOUND**************
if _______
return(k*fun(k-1);
else
if (k==0)
return ______;
else
return -1;

这两道题几乎是一样的,两个空填的是K》0和1。不一样的就是最后一个RUTURN是-1。

我看了很久这个题,如果是填K》0和K==0那么最后一个ELSE包含的情况就只有负数了,可负数是没有阶乘的啊?即使有,他也不等于-1或者是1。所以两道题从道理上来说是一样的。如果填错那就两道题都是错的,填对就应该两道题都是对的。

即使我同学说的是对的,那最后一个ELSE包含的就是K=1的情况,这样似乎也能说通,但是这样也没排除负数的情况啊??而网上那道填空题的用意很明显就是最后一个ELSE是负数的情况。

我是因为想到,还没见过一道改错题既改格式又改内容的(同一处),所以只加了括号,最终没改为K》1。

请高人回答
我问一下到底该怎么改才是对的,不要把原题照搬来好不好!

我支持你的答案。
第一,我也没见过一道改错题既改格式又改内容的。而且又是计算机二级,不会动两处的。这是经验之谈。
第二,当k=1,k*fun(k-1)1*0!=1。
如果按照你同学说的,当k=1时,只能return 1L了?

不知道你要找的是不是这道题,注意第二个if...else...语句属于第一个else内的部分。
程序功能:函数fun的功能是求k!(k<13),所求阶乘的值作为函数值返回。#include<conio.h>
#include<stdio.h>
long fun(int k)
{
if(k>0)
return(k*fun(k-1));
else
if(k==0)
return 1;
else
return -1;
}
main()
{
int k=10;
printf("%d!=%ld\n",k,fun(k));
}

不知道你要找的是不是这道题,注意第二个if...else...语句属于第一个else内的部分。
程序功能:函数fun的功能是求k!(k<13),所求阶乘的值作为函数值返回。#include<conio.h>
#include<stdio.h>
long fun(int k)
{
if(k>0)
return(k*fun(k-1));
else
if(k==0)
return 1;
else
return -1;
}
main()
{
int k=10;

在计算机上编编试试不就知道了吗