Probeklausuraufgabe



  • hallo,

    übungsklausuraufgabe war folgt:

    Schreiben Sie eine Funktion durschnitt. An die Funktion soll ein integer-Array übergeben werden können; die Funktion soll das arithmetische Mittel aller übergebenden Zahlen im Array an die aufrufende Funktion zurückgeben ( wählen sie einen geeigneten Rückgabetyp!.
    In der Funktion selbst soll kein Ein- oder Ausgabe erfolgen!:

    ____________ durschnitt(_______________________)
    {

    }

    hatte jetzt hier als Vorgabe schon:

    float durschnitt( int array[] ){

    }

    ( wobei ich mir noch length dazugemogelt hätte^^)

    hab dann folgendes daraus gemacht:

    float durschnitt(int array[] ){
    float x = 0;
    float y = 0;
    int i = 0;
    for (i=0;array[i]!='\0';i++)
    { x = x + array[i];
      y = y + 1;
    }
    x = x / y;
    return x;
    
    }
    

    y soll die anzahl der schleifendurchgänge mitzählen und dann x teilen wobei x
    eigentlich die Werte enthalten soll: 3+54+0+3; etc.
    sieht jemand den Fehler?



  • HinzundKunz schrieb:

    ...eigentlich die Werte enthalten soll: 3+54+0+3; etc.
    sieht jemand den Fehler?

    er bricht bei der 0 ab. gib lieber die anzahl der elemente mit, dann kannste dir auch den zähler sparen.
    🙂



  • Nur noch mal zum Verständnis, warum bricht er bei der 0 ab?
    hätte ich in der main funktion lenght= strlen(feld)-1; gebraucht?
    Was wäre die Alternative für diese Funktion.



  • #include <stdio.h>
    #define max 10
    
    float durschnitt(int array[] ){
    float x = 0;
    float zaehler = 0;
    int i = 0;
    for (i=0;array[i]!='\0';i++)
    { x = x + array[i];
      zaehler = zaehler + 1;
    }
    x = x / zaehler;
    return x;
    }
    
    int main(){
    
    int array[max];
    int lenght = 0;
    
    int i;
    for(i=0;i<max;i++){
    printf("Zahl eingeben:\n");
    scanf("%d", &array[i]);
    }
    
    printf("Durschnitt: %f", durschnitt(array));
    system("Pause");
    return 0;
    }
    

    sehr merkwürdig, was da raus kommt.



  • HinzundKunz schrieb:

    Nur noch mal zum Verständnis, warum bricht er bei der 0 ab?
    hätte ich in der main funktion lenght= strlen(feld)-1; gebraucht?
    Was wäre die Alternative für diese Funktion.

    Er bricht ab, weil du es so in der for Schleife festgelegt hast. Ein integer Array ist nicht Null terminiert.
    Besser ist, du übergibst die Anzahl der Arrayelemente an die Funktion als Parameter und benutzt diesen Wert in der for Schleife:

    float durschnitt( int array[], int anzahl )
    { 
    	float x = 0; 
    	float y = 0; 
    	int i = 0; 
    	for ( i=0; i<anzahl; i++ ) {
    		x = x + array[i]; 
    		y = y + 1; 
    	} 
    	x = x / y; 
    	return x; 
    }
    


  • Hier nochmal zum besseren Verständnis:

    int main(){
    	if ( 0 == '\0' ) puts ("Wir sind gleich!");
    	return 0;
    }
    


  • achso, bricht der auf 0 genauso ab, wie auf '\0'?



  • 0 und '\0' ist das gleiche.


Anmelden zum Antworten