1

このプログラムは、小数値を出力せずに整数の平均を計算しています。結果を整数として出力します:N.000000。なんで?

//Store name, roll no, marks of 4 students using structure
//and calculating average
struct student
{
    char name[10];
    int roll_no;
    int marks;
};

void main()
{
    struct student s1,s2,s3,s4;
    float avg;
    clrscr();
    printf("\nEnter name, rollnumber and marks of student 1 : \n");
    scanf("%s%d%d",&s1. name,&s1. roll_no,&s1. marks);
    printf("\nEnter name, rollnumber and marks of student 2 : \n");
    scanf("%s%d%d",&s2. name,&s2. roll_no,&s2. marks);
    printf("\nEnter name, rollnumber and marks of student 3 : \n");
    scanf("%s%d%d",&s3. name,&s3. roll_no,&s3. marks);
    printf("\nEnter name, rollnumber and marks of student 4 : \n");
    scanf("%s%d%d",&s4. name,&s4. roll_no,&s4. marks);
    avg = (s1. marks + s2. marks + s3. marks + s4. marks) / 4;
    printf("\nAverage : %f",avg);

    getch();
}
4

5 に答える 5

3
int marks;

各マークが整数であることを意味します。次に、それらを合計します。これも整数です。次に、それらを4で除算します。これも整数であるため、この演算は整数除算になります。これは、結果の小数部分を破棄する演算です。代わりにそれを割れ4.0ば、あなたは行っても大丈夫でしょう。

于 2012-09-06T15:03:26.340 に答える
2
avg = (s1. marks + s2. marks + s3. marks + s4. marks) / 4;

すべてのマークは整数であり、4も整数であるため、除算は整数の規則に従います。最初から小数はありません。

マークの1つをdoubleまたはにキャストしてみてください。または、 4の後にfloat追加することもできます。.0

于 2012-09-06T15:02:09.987 に答える
1

計算のすべてのオペランドは。intであるため、結果は。になりますint

平均の小数部分を保持するために、計算にフロートを導入します。

avg = (s1. marks + s2. marks + s3. marks + s4. marks) / 4.0;
于 2012-09-06T15:03:30.310 に答える
1

合計を4.0で割るだけです

コードは以下の通りです:

avg = (s1. marks + s2. marks + s3. marks + s4. marks) / 4.0;

これはあなたの問題を解決します。


これは、マークを値として取り、それを値(つまり、4)intで割ったためです。intしたがって、両方の値を除算intすると、結果はint値になります。ただし、double値(つまり、4.0)で割ると、結果は形式で計算され、に割り当てられたときにdouble変換されます。floatavg

于 2012-09-06T15:05:57.193 に答える
0

2つの問題があります。

  1. 生徒の成績はintタイプです。つまり、生徒の成績を除算、加算、またはほとんどの操作を行うと、int除算、加算などが返され、intsが返されます。

  2. 出力ステートメントは%d、渡された値をintとしてフォーマットするフォーマットディレクティブとして使用します。

最初の問題を修正するには

((float)s1.marks) + ...

にキャストintfloat、将来はyieldintsに追加されます。floatsfloats

2番目の問題を修正するには

printf("... %f ...", value);

値をfloatであるかのようにフォーマットします(そうあるべきです)。

他の解決策もあります。たとえば、多くの金融システムは1ペニーの端数を処理したくないため、値は考慮される最小の端数のカウントとして保存され、小数ドルとして適切にフォーマットされます($ 11.03ですが、保存される値は1103です。 )。

于 2012-09-06T15:08:11.127 に答える