时间= C中的速度距离

时间:2013-10-27 21:26:13

标签: c time

我正试图找到在C中以恒定速度行进输入距离所花费的时间。代码我有功能但输出打印为0?什么出了什么问题?

#include <stdio.h>
#include <stdlib.h>
int main() {
    int distance, speed = 80;
    float time;

    // This is how to read an int value
    printf("Please enter a distance in kilometers to be covered at 80KPH. \n");
    scanf("%d", & distance);
    printf("You typed: %d\n", distance);
    printf("\n");
    time = distance / speed;
    printf("It will take you %.2f to cover ", time);
}

3 个答案:

答案 0 :(得分:8)

因为两个操作数是整数,所以编译器会生成整数除法的代码。但你想要真正的分裂。因此,将一个或多个操作数强制转换为浮点类型,编译器将发出实际除法的代码。

time = (float) distance / time;

整数分工是你在小学学到的。因此,例如,11/3是3余数2。在C中,表达式11/3的计算结果为3.这是整数除法。在你的情况下,似乎分子(距离)小于分母(时间),因此表达式

distance / time

评估为0。

这是由除法运算符重载引起的常见混淆。如果两个操作数都是整数,则此运算符表示整数除法,否则为实数除法。

要学习的关键点是操作数类型决定是使用整数还是实数除法。存储结果的变量类型对此选择没有影响。

答案 1 :(得分:3)

更改

time = distance / speed;

time = (float) distance / speed;

你正在进行整数除法而不是浮点除法。

答案 2 :(得分:0)

根据其他人所说的内容(强制转换为浮动或双重转换)更改代码后,您还需要将格式说明符从“%d”更改为“%f”以显示浮点数(无论如何)浮动或双重),否则你会在输出中看到垃圾。

编辑:很抱歉混淆了这一点。我想到了一个修复,你将速度和距离定义为float而不是int。在这种情况下,您可以简单地将“int”转换为“float”,将“%d”转换为“%f”(可能具有精确度和/或舍入标志)。但是,这将改变程序的工作方式(因为用户现在可以输入非整数值),因此它可能不是您想要的。