2016-08-05 24 views
1

Ich lerne C aus einem Buch namens "C by Example"Berechnungen Funktioniert nicht richtig

Am Ende jedes Kapitels ist eine Übung zu absolvieren. Wie Sie unten aus dem Code sehen können, ist die Übung an der Spitze geschrieben hier

/* Chapter 7 Review Exercises #2 
- You are a college professor and you have to get the average grades for 10 students. Write a program which prompts you for 10 different grades and then 
displays their average */ 

#include <stdio.h> 

int main() 
{ 

    float score1, score2, score3, score4, score5, score6, score7, score8, score9, score10; 

    float average = score1+score2+score3+score4+score5+score6+score7+score8+score9+score10/10; 

    printf("Please input the scores of the students: \n"); 
    scanf(" %f",&score1); 
    scanf(" %f",&score2); 
    scanf(" %f",&score3); 
    scanf(" %f",&score4); 
    scanf(" %f",&score5); 
    scanf(" %f",&score6); 
    scanf(" %f",&score7); 
    scanf(" %f",&score8); 
    scanf(" %f",&score9); 
    scanf(" %f",&score10); 

    printf("The average score is: %.2f" , average); 

    return 0; 

} 

Das Problem ist, dass die Zahlen jedes Mal, I-Eingang (wenn der Code ausgeführt wird) Es gibt mir immer eine große Zahl zurück (wie mindestens 20 Nummern lang)

Gibt es eine Möglichkeit, die Anzahl zu begrenzen, oder mache ich etwas falsch?

+0

Könnten Sie bitte [mcve] bereitstellen? Es wäre einfacher zu beantworten, wenn wir Ihre Eingabe kennen würden. – xenteros

+1

Sie müssen den "Durchschnittswert" ** nach der Eingabe seiner Komponentenwerte berechnen ...... Oder machen Sie "Durchschnitt" zu einer Funktion, die sie bei Bedarf immer neu liest. So wie es ist, ruft Ihr Programm undefiniertes Verhalten auf, indem es (10) nicht initialisierte Variable (n) liest und diese in "Durchschnitt" speichert, was nicht geändert wird, wenn einer der Punkte zählt. –

+0

Ich gab Ihnen eine Antwort mit korrigiertem Code. Bitte zögern Sie nicht, es zu benutzen. Es wurde zweimal aufgestockt und zweimal von anderen Beantwortern abgelehnt, um ihre Antworten zu bewerben:/Es ist eine gute Übung, die richtige Antwort als Lösung mit dem grünen Häkchen zu markieren und die richtigen Antworten zu erhalten. – xenteros

Antwort

1

Der folgende Code funktioniert. Ihr Code funktioniert nicht, weil Sie versuchen, Zahlen zu berechnen, bevor sie gescannt werden. Immer noch müssen Sie daran denken, dass C die Reihenfolge der Operationen so hält, dass / vor + ausgeführt wird. Fügen Sie fehlende Klammern () hinzu. In C wird der Code von oben nach unten verarbeitet!

#include <stdio.h> 
int main() { 

    float score1, score2, score3, score4, score5, score6, score7, score8, score9, score10; 

    printf("Please input the scores of the students: \n"); 
    scanf(" %f",&score1); 
    scanf(" %f",&score2); 
    scanf(" %f",&score3); 
    scanf(" %f",&score4); 
    scanf(" %f",&score5); 
    scanf(" %f",&score6); 
    scanf(" %f",&score7); 
    scanf(" %f",&score8); 
    scanf(" %f",&score9); 
    scanf(" %f",&score10); 

    float average = (score1+score2+score3+score4+score5+score6+score7+score8+score9+score10)/10; 
    printf("The average score is: %.2f" , average); 

    return 0; 

} 
+1

OK die Antwort funktioniert, und dies ist kein Kommentar gegen Xenteros, aber es ist kein sehr effizienter Weg, es zu tun. Versuchen Sie es mit einer Schleife, obwohl Sie vielleicht noch nichts über sie gelernt haben. –

3

Sie fehlen einige Klammern hier:

float average = score1+score2+score3+score4+score5+score6+score7+score8+score9+score10/10; 

Ändern Sie diese an:

float average = (score1+score2+score3+score4+score5+score6+score7+score8+score9+score10)/10; 

Sie müssen auch Sie sich diese Linie bewegen, so dass es nach die Eingangsstufe kommt (dh nach all den Aufrufen an scanf), da es keinen Sinn macht zu versuchen, etwas zu berechnen vor haben Sie alle Eingabewerte.


Sie könnten auf Operator Vorrang lesen möchten, und auch Loops, da Ihr Programm kann viel einfacher geschrieben werden und prägnant:

#include <stdio.h> 

int main() 
{ 
    const int n = 10; 
    float sum = 0.0f; 
    float average; 
    int i; 

    printf("Please input the scores of the students: \n"); 

    for (i = 0; i < n; ++i) 
    { 
     float score; 

     scanf(" %f", &score); 
     sum += score; 
    } 

    average = sum/n; 

    printf("The average score is: %.2f" , average); 

    return 0; 
} 
+0

Ohh, ich wusste nicht, dass du das tun musstest! Vielen Dank: D – ImperfectLion

1

Die Zahl ist in der Tat falsch, weil Sie don‘ Ich verstehe, wie C Code ausführt. Es funktioniert von oben bis unten. Also, wenn Sie den Wert von score1 ... score 10 benötigen, müssen Sie zuerstscanf tun und dann nur + verwenden.

+0

Ahh, das hat es behoben! Vielen Dank für die Hilfe! Total vergessen über die von oben nach unten Lesen von C :) – ImperfectLion