2016-08-22 12 views
1

プログラムはすべての実験室運動の平均を取得することについてです。 7.7778小数点以下を切り捨てたい私はceilfとroundf()を試してみましたが、私のコードに問題はありませんか?どのような助けに感謝しますありがとう!整数に切り捨て

マイコード

#include<stdio.h> 
#include<conio.h> 
#include <math.h> 
int main() 
{ 
    int numberof_laboratory,lab_exercises,total_numberof_laboratory,average,roundoff; 
    char answer; 
    do 
    { 
     printf("\nEnter number of laboratory:"); 
     scanf("%d",&numberof_laboratory); 
     for(int i=1;i<=numberof_laboratory;++i) 
     { 
      printf("\nEnter laboratory exercise %d:",i); 
      scanf("%d",&lab_exercises); 
      total_numberof_laboratory += lab_exercises; 
      average = total_numberof_laboratory/3; 
      roundoff = ceilf(average * 100)/100; 
     } 
     printf("The average laboratory exercise grade is %d",roundoff); 
     printf("\nDo you want to continue(Y/N)?"); 
     scanf(" %c", &answer); 
    } 
    while(answer != 'N' && answer != 'n'); 
    printf("Goodbye!"); 
} 

実験室の数を入力:7

:10

ラボNO 2を行使しない:3

ラボには1が行使しますラボ演習1:6

平均実験室運動グレードがある:7 //それは8

+3

機能していませんか?期待される成果は?実際の出力は何ですか? –

+3

プログラムに浮動小数点数はありません。 –

+0

平均を浮動小数点数に変更して浮動小数点数に変換しようとしましたが、現在の平均出力は0です – Holow

答えて

3

あなたroundoff = ceilf(average * 100)/100;

average間違っているべきであるintとして宣言されています。次のようにあなたがそれを宣言する必要があり

float average; 
... 
average = total_numberof_laboratory/3.0f; // thanks to Ed Heal 
roundoff = roundf(average); 

をあなたが次のことをしたいようだ:

gcc -o main main.c -lm -Wall -pedantic 
+0

iがフロートにフロートと丸めに平均を変更しようとしました、私の平均の出力は現在0 – Holow

+1

はまた '平均= total_numberof_laboratory/3を変更でgcc、数学ライブラリをリンクする-lmを試してください。 –

+0

を使用している場合 –

1

としてgcc

#include <stdio.h> 
#include <math.h> 
int main() 
{ 
    int numberof_laboratory, lab_exercises, total_numberof_laboratory, roundoff; 
    float average; /* see here */ 
    char answer; 
    do 
    { 
     printf("\nEnter number of laboratory:"); 
     scanf("%d",&numberof_laboratory); 
     total_numberof_laboratory = 0; /* see here important */ 
     for(int i=1;i<=numberof_laboratory;++i) 
     { 
      printf("\nEnter laboratory exercise %d:",i); 
      scanf("%d",&lab_exercises); 
      total_numberof_laboratory += lab_exercises; 
     } 
     average = total_numberof_laboratory/(float)numberof_laboratory; /* see here */ 
     roundoff = roundf(average); /* see here */ 
     printf("The average laboratory exercise grade is %d",roundoff); 
     printf("\nDo you want to continue(Y/N)?"); 
     scanf(" %c", &answer); 
    } 
    while(answer != 'N' && answer != 'n'); 
    printf("Goodbye!"); 
} 

コンパイルあなたに次のコードを使用する必要があります必要な平均値を見つける -

#include<stdio.h> 
#include<conio.h> 
#include <math.h> 
int main() 
{ 
int i,numberof_laboratory, lab_exercises, total_numberof_laboratory=0,roundoff; 
float average; 
char answer; 
do 
{ 
    printf("\nEnter number of laboratory:"); 
    scanf("%d",&numberof_laboratory); 
    for(i=1;i<=numberof_laboratory;++i) 
    { 
     printf("\nEnter laboratory exercise %d:",i); 
     scanf("%d",&lab_exercises); 
     total_numberof_laboratory += lab_exercises; 
    } 
    average = (float)total_numberof_laboratory /numberof_laboratory ; 
    roundoff = ceil(average); 
    printf("The average laboratory exercise grade is %d",roundoff); 
    printf("\nDo you want to continue(Y/N)?"); 
    scanf(" %c", &answer); 
} 
while(answer != 'N' && answer != 'n'); 
printf("Goodbye!"); 
} 

あなたはそれを明確に理解し、変更が行われたことに気づくべきです。合計が

  • averageを評価された後

    1. total_numberof_laboratorylab_exercises の総和をカウントした場合、それは0値
    2. averageで初期化する必要がありますが計算されなければならないフロート
    3. 宣言する必要があります平均はaverage = (float)total_numberof_laboratory /numberof_laboratory ;で計算され、average = (float)total_numberof_laboratory/3 ;はそれを作成しません
    4. 最後にceilのみで十分ですceilf助けて幸せ

    ; - ]