如何在C语言中整数相除?

13

我想要将两个数字相除并得到类似于以下结果的答案:

5 / 2 = 2.50

但是代码只输出了 2。

我不知道哪里出错了。

这是我的代码:

int a;
int b;
int c;
printf("First num\n");
scanf("%d", &a);
printf("Second num\n");
scanf("%d", &b);
c = a / b;
printf("%d", c);

3
2.50 不是整数,不能存储在“int”类型中。 - PC Luddite
int 意味着“整数”,你知道的... - Eugene Sh.
1
虽然浮点数是一种解决方案,但也许你想了解更多关于“定点数”的知识。 - user3528438
5个回答

19

你需要一个 double 变量来存储结果。 int 只能存储整数。此外,在执行除法之前,你还需要对其他变量进行类型转换。


可以像这样做

double c;
.
.
.
c = (double)a / (double)b;
printf("%f", c);

注意:

printf() 语句中不需要使用 & 符号。


3

你需要使用 floatdouble 变量,而不是 int(整数)变量。另外请注意,两个整数之间的除法会得到一个整数结果,而一个 float/double 和一个整数之间的除法会得到一个浮点数结果。这是因为 C 会将该整数隐式地转换为 float

例如:

5/2 = 2
5/2.0f = 2.5f

请注意.0f,这实际上意味着我们正在使用浮点数进行除法运算。

3

'/'符号表示除法。在C语言中,如果你用一个整数除以另一个整数并将结果存储在一个整数中,那么输出的答案也将是一个整数。例如

int a = 3, b = 2, c = 0;
c = a/b; // That is c = 3/2;
printf("%d", c);

收到的输出为:1
原因是您使用了整数(int)类型的变量。
每当使用整数来存储输出时,结果将存储为整数而不是十进制值。 用于存储十进制结果的C语言提供floatdoublelong floatlong double
每当执行操作并希望以十进制形式输出时,可以使用上述数据类型作为结果存储变量。例如
int a = 3, b = 2;
float c = 0.0;
c = (float)a/b; // That is c = 3/2;
printf("%.1f", c);

收到的输出为:1.5
因此,我认为这将有助于您理解这个概念。
请记住:当您使用float时,访问说明符是%f。 您需要将答案转换为float,就像我所做的那样,然后答案将反映出来。

@user3528438 您认为我是从那里复制答案的吗?让我告诉您,这是我的独立样本。我只是拿了一些数字来支持我的回答。我不知道为什么您针对我,我没写错任何东西。我的回答是恰当的。 - Jaffer Wilson
1
不,我把你的代码复制到那里是为了展示我为什么投了反对票:你的答案是错误的(看一下stdout,或者尝试自己编译和运行代码)。 - user3528438
1
@user3528438 是的,你是正确的。现在我已经编辑了我的答案。请检查一下。我希望这会让你满意。好的,谢谢你告诉我我错了。在这里我也测试了它:https://ideone.com/ibwTpu - Jaffer Wilson

3
为避免浮点数类型转换问题,可以直接使用带有%f标志的scanf函数。
float a;
float b;
float c;
printf("First number\n");
scanf("%f", &a);
printf("Second number\n");
scanf("%f", &b);
c = a / b;
printf("%f", c);

-3
在C语言中,只有int类型的数字可以被显示。5/2会得到一个浮点数类型的数字。因此,编译器只会将其编译为整数值。

仅显示 int 类型数字,但实际显示的是浮点数值。"5/2" 得到的是浮点类型数字,这就是问题的核心所在。 - Yunnosch
我认为user9598609理解了正在发生的事情。答案只是措辞不当。答案中再多一点细节会更有帮助。5/2确实会产生浮点值;不幸的是,在C语言中,需要做更多的工作才能揭示它。 - Bob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接