当我输入大数字如3,000,000,000(没有逗号)时,我得不到正确的结果。无论我输入的数字有多大,显示的数字都不会超过9位数。
问题如下:
执行以下计算,其中系统仅接受从
0
到3x109
的正整数(即3,000,000,000
),并将结果显示为VDU输出:y = 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;
}
答案 0 :(得分:1)
您使用的scanf
/ printf
格式代码错误。 %d
是有符号整数。使用%u
表示无符号整数。
正在发生的事情是scanf
%d
正在将用户输入读取为有符号整数,并将以负数扫描。 scanf
不会检查传入的变量的数据类型,因此它会存储在无符号变量中 - 但是它不会存储为-10,因为变量是无符号的。相反,由于负数的存储方式(Two's complement),这将是一个非常大的正数。
正确的输入操作需要一些工作,这就是为什么你的指示要忽略它。
答案 1 :(得分:0)
x不能取值-10。如您的问题中所述,您无需检查值,因为假定始终正确输入。通过使用-10,你就失败了。只需在支票中使用正数。
编辑:此外,使用unsigned
暗示unsigned int
。如果您使用的c-int是32位int,而不是16位int,则最大数量只能适合int。
EDIT2:除了必须在scanf函数中使用%u之外,还需要使用给定的格式输出。那就是你需要在屏幕上可视化你的计算线。
所提供的信息应该足以让您找出答案。这是一项任务,你应该自己做点什么,对吗?
答案 2 :(得分:0)
因为价值大于最大值。整数数据类型的限制因此,如果输入的值大于整数范围而不是它将翻转,这就是你没有得到正确值的原因。 所以对于这个,如果你想避免这个问题,你必须使用长整数,而不是你会得到正确的值