编程分段函数求值为什么这样不对

img


这样如果输入14的话,结果是2731,而不是31,然后为什么把那个X>等于10,删去结果就对了。

两处问题,供参考:

img

11行那个分号导致else啥都不干。

【以下回答由 GPT 生成】

这段代码的目的是根据输入的值x,计算并输出不同的结果。代码中存在一些逻辑错误,导致输入14时结果异常。

首先,我来解释为什么删除x>=10的判断条件后结果变得正确。

else (x >= 10) {
    printf("%d", 3 * x - 11);
}

这段代码是在判断x是否大于等于10,并输出3*x-11的结果。但实际上,这段代码在逻辑上是有问题的。这是因为在C语言中,条件语句使用的是if或者else if来进行逻辑判断,而不是直接使用else后接条件。所以,如果你想要添加一个根据x大于等于10进行判断的语句,应该使用:

else if (x >= 10) {
    printf("%d", 3 * x - 11);
}

这样的话,逻辑上才会正确。现在我们来看看为什么删除了这段代码后,结果变得正确。

在你的代码中,由于逻辑判断条件的问题,实际上当输入14时,会进入到else部分的代码块中,然后执行printf("%d", 3 * x - 11)这段代码。计算结果是2731,而不是期望的31。这是因为C语言中的逻辑运算符的使用存在问题。在这里,你使用了1 <= x < 18来判断x的范围,希望是x在1到18之间时执行printf("%d", 2 * x - 1)这段代码。然而,这样的写法是错误的。

正确的写法应该是1 <= x && x < 18,它表示x大于等于1并且小于18时的条件判断。所以,将if的判断条件改为1 <= x && x < 18

代码改正后的版本如下:

#include<stdio.h>
int main()
{
    int x, y;
    scanf("%d", &x);
    if (x < 1) {
        printf("%d", x);
    }
    else if (1 <= x && x < 18) {
        printf("%d", 2 * x - 1);
    }

    return 0;
}

通过这样的修改后,输入14时会得到正确的结果31。

是否还有其他问题需要我解答呢?



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

🌿