Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于C中除法的意外结果_C_Division - Fatal编程技术网

关于C中除法的意外结果

关于C中除法的意外结果,c,division,C,Division,我的目标是输出输入数及其反转的平均值 当我输入974时,结果是726.0而不是726.5。这个问题我想了很久,但还是得不到答案 希望有人能帮助我。 多谢各位 #include <stdio.h> int main(void) { int N, D1, D2, D3; double aver; scanf("%d", &N); D1 = N % 10; D2 = ((N - D1) / 10) % 10; D3 = (N - D

我的目标是输出输入数及其反转的平均值

当我输入974时,结果是726.0而不是726.5。这个问题我想了很久,但还是得不到答案

希望有人能帮助我。 多谢各位

#include <stdio.h>
int main(void)
{
    int N, D1, D2, D3;
    double aver;

    scanf("%d", &N);
    D1 = N % 10;
    D2 = ((N - D1) / 10) % 10;
    D3 = (N - D1 - D2) / 100;
    aver = (D1*100 + D2*10 + D3 + N) / 2;

    printf("%lf", aver);

    return 0;
}
#包括
内部主(空)
{
int N、D1、D2、D3;
双平均;
scanf(“%d”和“&N”);
D1=N%10;
D2=((N-D1)/10)%10;
D3=(N-D1-D2)/100;
平均值=(D1*100+D2*10+D3+N)/2;
printf(“%lf”,平均值);
返回0;
}

在您的代码中,
N
D1
D2
D3
,都是
int
s,因此计算

(D1*100 + D2*10 + D3 + N) / 2;
将作为整数算术执行,然后将结果提升为
double
。因此,结果只是一个
int
值的
double
表示

要强制执行浮点算术,请执行以下操作之一

  • 将操作数数据类型更改为
    double
    float
  • 将至少一个操作数强制转换为浮点值

  • 在您的代码中,
    N
    D1
    D2
    D3
    ,都是
    int
    s,因此计算

    (D1*100 + D2*10 + D3 + N) / 2;
    
    将作为整数算术执行,然后将结果提升为
    double
    。因此,结果只是一个
    int
    值的
    double
    表示

    要强制执行浮点算术,请执行以下操作之一

  • 将操作数数据类型更改为
    double
    float
  • 将至少一个操作数强制转换为浮点值

  • 只需添加
    double
    。见下文:

    #include <stdio.h>
    int main(void)
    {
        int N, D1, D2, D3;
        double aver;
    
    scanf("%d", &N);
    D1 = N % 10;
    D2 = ((N - D1) / 10) % 10;
    D3 = (N - D1 - D2) / 100;
    aver = (double)(D1*100 + D2*10 + D3 + N) / 2;
    
    printf("%lf", aver);
    
    return 0;
    }
    
    #包括
    内部主(空)
    {
    int N、D1、D2、D3;
    双平均;
    scanf(“%d”和“&N”);
    D1=N%10;
    D2=((N-D1)/10)%10;
    D3=(N-D1-D2)/100;
    平均值=(双倍)(D1*100+D2*10+D3+N)/2;
    printf(“%lf”,平均值);
    返回0;
    }
    

    签出

    只需添加
    double
    。见下文:

    #include <stdio.h>
    int main(void)
    {
        int N, D1, D2, D3;
        double aver;
    
    scanf("%d", &N);
    D1 = N % 10;
    D2 = ((N - D1) / 10) % 10;
    D3 = (N - D1 - D2) / 100;
    aver = (double)(D1*100 + D2*10 + D3 + N) / 2;
    
    printf("%lf", aver);
    
    return 0;
    }
    
    #包括
    内部主(空)
    {
    int N、D1、D2、D3;
    双平均;
    scanf(“%d”和“&N”);
    D1=N%10;
    D2=((N-D1)/10)%10;
    D3=(N-D1-D2)/100;
    平均值=(双倍)(D1*100+D2*10+D3+N)/2;
    printf(“%lf”,平均值);
    返回0;
    }
    

    签出

    一个
    int
    除以
    int
    就是一个
    int
    <代码>(D1*100+D2*10+D3+N)是一个
    int
    。如果您想要
    双除法,请用
    2.0
    而不是
    2
    。更好的复制方法是:用
    int
    除以
    int
    就是
    int
    <代码>(D1*100+D2*10+D3+N)
    是一个
    int
    。如果您想要
    double
    除法,请将其除以
    2.0
    ,而不是
    2
    。最好复制: