我非常擅长编程,参加我的第一个计算机科学课程。我正在编写程序,出于某种原因,每当我尝试计算任何操作的浮点值时,它只会产生0.00000。如果有人能帮助我,我将非常感激!
#include <stdio.h>
int main(void)
{
int numa, numb;
int sum, halffirst, halfsecond, quotient, remainder;
// get input
printf("\nPlease enter two integers: ");
scanf("%d%d", &numa, &numb);
// calculate dimensions
sum = numa + numb;
halffirst = (double)numa / 2.0;
halfsecond = numb / 2;
quotient = numa / numb;
remainder = numa % numb;
// display report
printf("\n%20s%20s", "Description", "Data");
printf("\n%20s%20s", "-----------", "----");
printf("\n%20s%20d", "Sum", sum );
printf("\n%20s%20lf", "Half (1st #)", halffirst);
printf("\n%20s%20d", "Half (2nd #)", halfsecond);
printf("\n%20s%20lf", "Quotient", quotient);
printf("\n%20s%20d", "Remainder", remainder);
// format and finish
printf("\n\n");
return 0;
}
答案 0 :(得分:2)
那是因为您使用的是int
数据类型,它是一个整数。对整数执行的操作往往会产生整数(截断),如:
int nom = 6;
int den = 10;
float frac = nom / den;
将给出一个零值,因为算术是对整数进行的,并且只在末尾转换为浮点数(在损坏完成后)。
你可以通过施放来解决这个问题,例如:
float frac = (float)nom / (float)den;
将在除法之前的整数中生成浮点值。
但是,最好先为所有值使用浮点数。 float
(单精度)或double
(双精度)就是你所追求的。双精度值具有更多......良好,精确,这意味着它们可以存储更多数字和更大范围的数字。对于课堂作业,float
应该没问题。
答案 1 :(得分:1)
您应该将变量指定为float或double以保存正确的值而不是使用整数。
double sum, halffirst, halfsecond, quotient, remainder;
替换行:
int sum, halffirst, halfsecond, quotient, remainder;
与上面的那个。
答案 2 :(得分:1)
根据C-99标准第7.19.6.1节第9段
如果转换规范无效,则行为为 undefined .251)如果任何参数不是正确的类型 相应的转换规范,行为未定义。
halffirst
和quotient
定义为int
,但在printf
次调用中,您使用%lf
作为double
的说明符
printf("\n%20s%20lf", "Half (1st #)", halffirst);
printf("\n%20s%20lf", "Quotient", quotient);
根据标准,这是未定义的行为。
使用%d
打印整数
printf("\n%20s %d", "Half (1st #)", halffirst);
printf("\n%20s %d", "Quotient", quotient);
OR,在传递
之前将整数强制转换为float
printf("\n%20s%20lf", "Half (1st #)", (float)halffirst);
printf("\n%20s%20lf", "Quotient", (float)quotient);
或者在传递它之前将int
强制转换为浮动。
答案 3 :(得分:0)
所有变量都声明为int
。
尝试使用float
或double
。
答案 4 :(得分:0)
有几件事:
float
而不是int
。在C和C ++中,当您对一个数字进行除法并将其赋值给int
时,结果会丢弃所有小数,只留下存储在变量中的实数。如果您正在潜水并且分母中有一个整数,则必须将整数转换为浮点数,如下所示:
int num1 = 1, num2 = 2;
float theDiv = num1/(float)num2;
如果你不这样做,它也会删除小数。
答案 5 :(得分:-1)
类型是初学程序员的噩梦。你在这里处理两种类型:
int
,一个整数值,和
double
,一个双精度浮点数。
halffirst = (double)numa / 2.0;
。我们来举个例子;说numa
的值为5。
numa
投射到double
。这可以。你现在有5.0作为你的除数。halffirst
中。 halffirst
是int
类型;我们无法将double
的值直接存储到int
变量中。因此,我们必须转换它; (int)2.5
产生2,因此我们将2存储到halffirst
。如果要存储除法的double
结果,则需要将目标变量halffirst
声明为类型double
,否则最后的隐式转换将为软管您。出于同样的原因,halfsecond
也是一样的。因此,在main
方法顶部的声明中,请尝试以下操作:
int numa, numb;
int sum, quotient, remainder;
double halffirst, halfsecond;
有意义吗?