3
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

4 回答 4

9

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

const = 35 * num_of_sections / num_of_students 

即使cost是 double 也会给你一个 int ,因为所有组件都是ints.

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

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

请注意,这太过分了,将等式中的一个值提升为两倍就足够了。

cont = 35.0 * num_of_sections / num_of_students;

然后,C 会自动为您提升其他值。

于 2012-09-28T18:23:00.583 回答
3

两个整数相除返回一个整数,去掉了小数部分。试试这个:

cost = 35.0 * num_of_sections / num_of_students;

35.0是双精度文字而不是整数文字。这将导致表达式35.0 * num_of_sections被评估为double * double(在计算之前将int转换为 a double),然后除法也将使用两个双精度数进行。

于 2012-09-28T18:23:42.527 回答
2

问题是促进num_of_studentsnum_of_sections加倍,以便cost可以正确计算。

double cost(double num_of_students, double num_of_sections)
于 2012-09-28T18:25:02.857 回答
1

看看你所有的操作:它们都只涉及整数,所以 C 做整数数学。最快的解决方法是做35a 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文字)

于 2012-09-28T18:27:05.273 回答