0

当我输入像 3,000,000,000(不带逗号)这样的大数字时,我没有得到正确的结果。无论我输入多大的数字,显示的数字都不大于 9 位。

问题如下:

执行以下计算,其中系统只接受从0到(ie ) 的正整数,并将结果显示为 VDU 输出:。3x1093,000,000,000y = 3x2 - 2x + 6

如果数字是整数或在范围内,则无需检查算法。我们假设它总是正确输入。但是,您必须尝试使用​​正确的数据类型进行编码。请检查书中的数据类型以使用在定义范围内的正整数

这是代码

#include <stdio.h>
#include <stdlib.h>

int main()
{
    unsigned x=0, y=0;

    printf("Enter a positive number between 0 to 300000000\n");
    scanf("%u",&x);

    y=(3*x*x)-(2*x)+6;
    
    printf("\n\nThe value of y is %u",y);

    return 0;
}
4

3 回答 3

1

您为scanf/使用了错误的格式代码printf%d是有符号整数。用于%u无符号整数。

正在发生的事情是scanfa%d将用户输入作为有符号整数读取,并将扫描为负数。 scanf不检查您传入的变量的数据类型,因此它确实存储在无符号变量中 - 但是它不存储为 -10,因为该变量是无符号的。相反,由于负数的存储方式(二进制补码),它将是一个非常大的正数。

正确的输入验证需要一些工作,这就是您的指示说忽略它的原因。

于 2013-10-27T18:28:30.860 回答
0

x 不能取值 -10。如您的问题所述,您无需检查该值,因为假定始终输入正确。通过使用 -10,您可以打破假设。只需在支票中使用正数即可。

编辑:此外,通过使用unsigned你暗示unsigned int. 如果您使用的 c-int 是 32 位 int,而不是 16 位 int,则最大数字只能适合 int。

EDIT2:除了必须在 scanf 函数中使用 %u 之外,您还需要使用给定的格式进行输出。那就是您需要在屏幕上可视化您的计算线。

提供的信息应该已经足以让您找出答案。这是一项任务,你应该自己做一些事情,对吧?

于 2013-10-27T18:22:35.890 回答
0

因为价值大于最大值。整数数据类型的限制因此,如果您输入的值超过整数范围,它将被翻转,这就是您没有得到正确值的原因。因此,为此,如果您想避免此问题,则必须使用 long long integer,而不是获得正确的值

于 2015-12-24T11:00:01.643 回答