我的思维在跳跃 发表于 2015-1-14 09:46:31

为什么5除以8等于0?

亲们,帮帮忙,菜鸟又来讨教各位大神了,教教我哈:shy:


#include <stdio.h>
#include <stdlib.h>
int main()
{

        int a,b,c;
        char z;
        scanf("%d",&a);
        scanf("%c",&z);
        scanf("%d",&b);
        if(z=='+'){c=a+b;}
        if(z=='-'){c=a-b;}
        if(z=='*'){c=a*b;}
        if(z=='/'){c=a/b;}
       
        printf("%d",c);

我的思维在跳跃 发表于 2015-1-14 10:30:16

:cry

Mr.屎壳螂 发表于 2015-1-14 12:51:36

因为你的 a b c 都是int型的,
除法之后也会返回int型的,
int型的数不存在小数部分.小数部分会被截去~,所以等于0;
同样 8/5 也就会等于1.

我的思维在跳跃 发表于 2015-1-14 14:09:21

Mr.屎壳螂 发表于 2015-1-14 12:51
因为你的 a b c 都是int型的,
除法之后也会返回int型的,
int型的数不存在小数部分.小数部分会被截去~,所 ...

该怎么解决啊亲。。。帮帮忙嘛

Mr.屎壳螂 发表于 2015-1-14 21:38:16

我的思维在跳跃 发表于 2015-1-14 14:09
该怎么解决啊亲。。。帮帮忙嘛

改一下数据类型,试试~

鸡籽饼响边度 发表于 2015-1-15 14:35:40

看你输出的是什么型咯

淡雅夏伤 发表于 2015-1-15 15:26:47

改成float

醉雪 发表于 2015-1-15 17:05:25

float

雪是梅之香 发表于 2015-1-16 12:57:40

这样你看可以不
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int a,b;
    double c;
    char z;
    printf("请输入:")
    scanf("%d,%c,%d",&a,&z,&b);
    switch(z)
    {
    case '+':
      c=a+b;
      break;
    case '-':
      c=a-b;
      break;
    case '*':
      c=a*b;
      break;
    case '/':
      c=1.0*a/b;
      break;
    }
    printf("%f",c);
    return 0;
}
附上结果运行图:

Vikki 发表于 2015-1-16 14:38:13

啊,这个不就是整除 的问题么?

只爱陌生猴 发表于 2015-1-17 00:15:03

因为5和8都是int型变量,所以结果也只能是int型变量,5/8本来等于0.625,这里0.625取整后得到0,如果是1.625取整后为1。如果想得到精确结果,可以用5.0/8或者5/8.0或者5.0/8.0,或者把5和8至少其中一个定义为double型变量即可。

雨落的瞬间 发表于 2015-1-18 14:07:19

相互学习。。。貌似我的鱼B没了、、、、

zjc7836 发表于 2015-1-19 21:15:04

变量类型的问题,可以转化成float型运算就是小数了

爱琴海里的星 发表于 2015-1-20 16:42:29


float
页: [1]
查看完整版本: 为什么5除以8等于0?