关于C中除法的意外结果
我的目标是输出输入数及其反转的平均值 当我输入974时,结果是726.0而不是726.5。这个问题我想了很久,但还是得不到答案 希望有人能帮助我。 多谢各位关于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
#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
。最好复制: