哪种格式说明符

时间:2011-08-16 20:28:32

标签: c

#include <stdio.h>
#include <stdlib.h>
#define calc(a,b) (a*b)/(a-b)
void calculate(){
    int a = 20, b = 10;
    printf("%f\n", calc(a+4,b-2));//output 0.00000
}

如何打印实际答案,4.83。

3 个答案:

答案 0 :(得分:2)

#define calc(a,b) ((a)*(b))/((a)-(b))

你能发现额外的括号吗?

- &GT; calc(a+4,b-2)解析为((a+4)*(b-2))/((a+4)-(b-2))。正确的。

没有额外括号的解决方案:

- &GT; calc(a+4,b-2)解析为(a+4*b-2)/(a+4-b-2)。这是非常不同的!

答案 1 :(得分:1)

这里的问题是您的数据类型是整数,而不是格式说明符。整数除法总是被截断为整数。您应该考虑将变量更改为float而不是int。

试试这个:

#include <stdio.h>
#include <stdlib.h>
#define calc(a,b) (a*b)/(a-b)
void calculate(){
    float a = 20.0f, b = 10.0f;
    printf("%f\n", calc(a+4,b-2));//output 0.00000
}

答案 2 :(得分:1)

您需要先修复表达式。 calc(a+4,b-2)的类型为int,整数除法为截断。

例如,您可以将声明更改为:

double a = 20.0, b = 10.0;

然后将"%f\n"更改为"%.2f\n"以获得两位小数。