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.06 のはずなのに 1.00 になります。誰でも自分のエラーを特定できますか?

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;

これはオーバーキルであることに注意してください。等式の 1 つの値を 2 倍に昇格させるだけで十分です。

cont = 35.0 * num_of_sections / num_of_students;

C は、他の値を自動的にプロモートします。

于 2012-09-28T18:23:00.583 に答える
3

2 つの整数を除算すると、小数部分が削除された整数が返されます。代わりにこれを試してください:

cost = 35.0 * num_of_sections / num_of_students;

35.0整数リテラルではなく倍精度リテラルです。これにより、式35.0 * num_of_sectionsが次のように評価されdouble * double(は計算前intに a に変換されdoubleます)、除算も 2 つの 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 は整数演算を行います。解決する最も簡単な方法は、 を作成することです35。これにより、他のオペランドdoubleが に昇格されdoubleます (操作のオペランドのいずれかが他のオペランドである場合は、double昇格されます)。

したがって、次のいずれかを実行できます。

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

または、より良い、

cost = 35. * num_of_sections / num_of_students;

( を好む人もいます35.0が、 の最後のドットは、それがリテラル35.であることを指定するのに十分です。代わりに、単独で、リテラルとして意図されています)double35int

于 2012-09-28T18:27:05.273 に答える