C程序划分错误?

时间:2014-02-01 07:47:08

标签: c

当我运行以下代码时,我得到正确的加法,减法,乘法的答案但是除法给出了错误的答案:

#include<stdio.h>
#include<conio.h>

int main()
{
    int num1, num2, add, sub, mul, div;
    printf("Enter numbers \n");
    scanf_s("%d %d", &num1, &num2);

    add = num1 + num2;
    sub = num1 - num2;
    mul = num1 * num2;
    div = (float)(num1 / num2);   // typecasting

    printf("Addition answer = %d \n", add);
    printf("Subtraction answer = %d \n", sub);
    printf("Multiplication answer = %d \n", mul);
    printf("Division answer = %.2f \n", div);

    _getch();
    return 0;
    }

enter image description here

Division = 0.00 ??

的原因是什么?

7 个答案:

答案 0 :(得分:2)

div = (float)(num1 / num2);   // typecasting

错了,你应该施放操作数

div = (float)num1 / (float)num2;

当然,您应该声明

float div;

并且在所有警告的情况下,一个好的编译器(如gcc -Wall -g调用GCC)会注意到printf

的差异

实际上,您最好使用double代替float,因为printf(3) %.2f需要 double 参数...(但是将参数传递给float时,double值会提升为printf

所以你的代码应该是

double div = (double)num1 / (double)num2;
printf("Division answer = %.2f \n", div);

了解floating pointthe floating point guide以及what every programmer should know about floating point

答案 1 :(得分:1)

您将div声明为整数,但将其打印为浮点数。整数和浮点数的二进制格式不一样,因此会导致打印错误的值。

div声明为float,或将其打印为整数。

您应该构建更多警告,因为这可能是两个警告的原因:首先将float分配给int,然后将int打印为float

答案 2 :(得分:0)

float num1, num2, add, sub, mul, div;

需要是一个浮点数,否则它将降至0.00

或者您需要使用浮动

来投射它们

答案 3 :(得分:0)

正在进行整数除法。即整数 - 然后转换为浮点

答案 4 :(得分:0)

dev被定义为整数,然后以%f格式打印。您需要将其定义为浮动。

答案 5 :(得分:0)

#include<stdio.h>
#include<conio.h>

int main()
{
int num1, num2, add, sub, mul;
float div;
printf("Enter numbers \n");
scanf_s("%d %d", &num1, &num2);

add = num1 + num2;
sub = num1 - num2;
mul = num1 * num2;
div = (float)(num1 / num2);   // typecasting

printf("Addition answer = %d \n", add);
printf("Subtraction answer = %d \n", sub);
printf("Multiplication answer = %d \n", mul);
printf("Division answer = %.2f \n", div);

_getch();
return 0;
}

答案 6 :(得分:0)

首先,你将div声明为整数。所以如果你将两个浮点数的除法存储在整数变量中那么你会得到错误的答案。

你应该将div声明为float。像,

float div;

并且你的类型转换应该是,

div = (float)num1/(float) num2;

然后你会得到正确答案。