2016-08-03 26 views
0

Möchten Sie zum Beispiel Grade drucken: 4/5 80 Prozent Programm einen Benutzer fragen, wie viele mathematische Probleme, die sie lösen wollen und druckt die Anzahl der „Unrecht/die Anzahl der Rechte "und ihre Note. Ich glaube, ich habe nicht meine Mathe direkt am Ende des Codes veranlassen, seine zum Beispiel des Ausdruck: Erhaltung: 4/5 -7.446.528 ProzentC-Programm: Einfache Mathematik-Programm

+++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++

# include <stdio.h> 

int main() 
{ 
    int NumberOfTimes, AddAns, SubAns, AddCorrect=0, SubCorrect=0, CorrectAnsAdd, CorrectAnsSub, TotalCorrect, TotalWrong, Add; 
    int i,a,b,c,d,e,f,g; 
    float percent; 

    printf("\n"); 
    printf("-------------------MATH QUIZ------------------------\n"); 
    printf("Enter the number of Math problems you want to solve:"); //enters the # of problems the program produces 
    scanf("%d", &NumberOfTimes); 
    printf("\n"); 
    srand(time(NULL)); 
    //Random number generator 
    for (i=0;i<NumberOfTimes;++i) 
    { 
     b = rand() %3 + 1; 
     c = rand() %3 + 1; 
     a = rand() %2 + 1; 

     //Random addition problems 
     if (a == 1) 
     { 
      printf("%d + %d = ", b,c); 
      scanf("%d", &AddAns); 
      d = b + c; 
      if (AddAns == d) 
      { 
       printf(" +Correct\n"); 
       AddCorrect = AddCorrect + 1; 
      } 
      //Random subtraction problems 
      else 
      { 
       printf(" +Wrong, it was %d\n", d); 
       AddIncorrect = AddIncorrect + 1; 
      } 
     } 
     if (a == 2) 
     { 
      printf("%d - %d = ", b,c); 
      scanf("%d", &SubAns); 
      g = b - c; 
      //Produces right or wrong answers 
      if (SubAns == g) 
      { 
       printf(" +Correct\n"); 
       SubCorrect = SubCorrect + 1; 
      } 
      else 
      { 
       printf(" +Wrong, it was %d\n", g); 
       SubIncorrect = SubIncorrect + 1; 
      } 
     } 
    } 
    //Producing the output to wrong/right numbers and grade percentage 
    TotalCorrect = AddCorrect + SubCorrect; 
    printf("\n"); 
    printf("Grade: %d/%d\n",TotalCorrect,NumberOfTimes); 
    printf("\n"); 
    percent=NumberOfTimes/TotalCorrect; 
    printf("%d percent \n", percent); 
    return 0; 
} 
+0

Verwenden Sie '% f', um den Gleitkommawert zu drucken. I.e. 'printf ("% f Prozent \ n ", Prozent);'. – Marian

+0

Ihre Berechnung für den Prozentsatz ist falsch ... sollte die Nummer korrekt geteilt durch die Anzahl der Fragen sein, nicht umgekehrt ... und es muss mit 100 multipliziert werden, und etwas in dort muss "float" sein, damit es gewonnen hat werde nicht mit ganzzahliger Division berechnet. Außerdem benötigen Sie den Formatbezeichner '% f', um es zu drucken, nicht'% d', was für Ganzzahlen steht. – Dmitri

+0

Es ist unklar, wonach Sie fragen. Fragen enden normalerweise mit "?". Lesen Sie [fragen]. – xenteros

Antwort

3

Es gibt ein paar Dinge, die gehen. Um einen float mit printf zu drucken, verwenden Sie zuerst %f. %d ist für int s.

Zweitens, wenn Sie percent berechnen, verwenden Sie versehentlich Ganzzahldivision. Da NumberOfTimes und TotalCorrect beide Ganzzahlen sind, führt NumberOfTimes/TotalCorrect eine ganzzahlige Division durch und erzeugt eine int. Es wird nur in floatkonvertiert, nachdem der gesamte Initialisierungsausdruck ausgewertet wurde. Verwenden Sie stattdessen:

percent = (float)TotalCorrect/NumberOfTimes; 
// OR, if you want an actual percent: 
percent = 100.0f*TotalCorrect/NumberOfTimes; 

Dann, mit %f:

printf("%f percent\n", percent); // "80.000000 percent" 

Beachten Sie, dass dies den Prozentsatz, um viele Dezimalstellen angezeigt werden; wenn Sie eine deutlichere Anzeige ohne Dezimalpunkt möchten, können Sie berechnen nur den Prozentsatz als int:

// multiply before dividing to avoid integer division problems 
int percent = 100*TotalCorrect/NumberOfTimes; 
printf("%d percent\n", percent); // "80 percent" 

hoffe, das hilft!

1

In C, Division zweier ganzer Zahlen Sie nicht eine Fließkommazahl, auch wenn die Zuordnung zu einem Schwimmer ist. So funktioniert die Sprache. Sie müssen NumberOfTimes und TotalCorrect als Floats darstellen.

So percent=NumberOfTimes/TotalCorrect; mit Außerdem

percent=(float)TotalCorrect/(float)NumberOfTimes * 100; 

ersetzen, Sie versuchen, einen Schwimmer als eine ganze Zahl in der Zeile

printf("%d percent \n", percent); 

zu drucken, die Ihnen ein wackelig Ergebnis gibt. Versuchen Sie stattdessen:

printf("%d percent \n", (int)percent); 
+0

Casting einer von ihnen wird ... der andere wird automatisch konvertiert werden. Oder verschiebe multiply nach vorne und benutze ein 'float' Literal (' 100f') anstelle eines 'int'. – Dmitri