首页 > 试题广场 >

要找出该程序的错误,正确的调试方法是( )。

[单选题]
函数fun计算prod=1*2*3*…*n,并返回计算结果值。但当n=100时,程序不正确。要找出该程序的错误,正确的调试方法是( )。
int fun(int n) {
    int prod, i;
    prod = 1;
    for (i = 1; i <= n; i++)
        prod *= i;
    return prod;
}
  • 监视变量prod的值,在prod *= i;行处设置断点,然后单步运行,直到发现错误原因
  • 监视变量prod的值,在return prod;行处设置断点,程序中断后,即可发现错误原因
  • 在prod=1;处设置断点,然后在函数调用堆栈中即可发现错误原因
  • 监视变量i的值,在for (i=1; i<=n; i++)行处设置断点,然后单步运行,直到发现错误原因
prod的值会溢出!监视该值.
发表于 2017-06-15 14:51:10 回复(0)
我选的是B,错了,因为:
prob是在求阶乘过程中溢出的,但是溢出并不会返回错误,而是按照我们意想不到的值进行“正常运算”,
所以加入在return处设置断点,程序运行结束,返回一个数值,还是不知道程序错在了什么地方。

发表于 2018-01-25 11:24:49 回复(3)
100!比int的最大值还要大所以prod会溢出,溢出发生在prod*=i;所以监视这一句;
发表于 2018-04-26 10:41:21 回复(0)
反正就是A。
发表于 2017-05-27 21:40:58 回复(7)
原来考的是int的溢出问题
发表于 2018-03-11 09:32:43 回复(0)
所以要单布调试一百次吗
发表于 2021-07-09 09:15:42 回复(1)
按a选项方法快速的调试,可以发现prod的值在某一刻变成了负数
编辑于 2024-03-11 08:09:24 回复(0)
原来会溢出,懂了
发表于 2023-10-09 22:45:01 回复(0)
int 算阶乘会溢出,但是溢出不算错误,还是会接着运行,会返回一个错误值,此时我们仍不知道哪里错误。

发表于 2022-11-15 15:08:51 回复(0)
应该监视可能出问题的点,比如值溢出等
发表于 2022-03-08 11:26:29 回复(0)
n都没参与运算,n有什么用啊?
发表于 2017-07-30 21:41:02 回复(2)