功能计算

时间:2012-09-28 18:21:50

标签: c

double cost_factor(int num_of_sections, int num_of_students) {
    double cost;
    cost = 35 * num_of_sections / num_of_students;
    printf("Cost = %.2lf\n", cost);
    return cost;

}

无论我为num_of_sections和num_of_students输入什么,我都会得到1.00的返回值。 如果我输入11(num_of_sections)和364(num_of_students),我得到1.00,但是它应该是1.06。任何人都可以识别他们的错误吗?

4 个答案:

答案 0 :(得分:9)

你正在用整数做数学。所以你会得到整数值。

const = 35 * num_of_sections / num_of_students 
即使cost是双引号,

也会给你一个int,因为所有组件都是ints

您需要对值进行类型转换以获得double

cont = 35.0 * (double)num_of_sections /  (double)num_of_students;

请注意,过度杀戮,足以将等值中的一个值提升为双倍。

cont = 35.0 * num_of_sections / num_of_students;
然后,

C将自动为您宣传其他值。

答案 1 :(得分:3)

除以两个整数会返回一个整数,并删除小数部分。试试这个:

cost = 35.0 * num_of_sections / num_of_students;

35.0是双字面而不是整数字面值。这将导致表达式35.0 * num_of_sections被评估为double * double(在计算之前将int转换为double,然后分割也将使用两个双打

答案 2 :(得分:2)

问题是要将num_of_studentsnum_of_sections提升一倍,以便正确计算cost

double cost(double num_of_students, double num_of_sections)

答案 3 :(得分:1)

查看所有操作:它们都只涉及整数,因此C进行整数运算。最快的解决方法是使35成为double,这将导致其他操作数的double升级(如果操作中的任何操作数为double另一个是晋升的。)

所以你可以这样做:

cost = ((double)35) * num_of_sections / num_of_students;

或者更好,

cost = 35. * num_of_sections / num_of_students;

(有些人更喜欢35.0,但35.末尾的点足以指定它是double字面值; 35仅用int作为{{1}}字面意思