Ga naar inhoud

Arrays, For Loops...C


Aanbevolen berichten

Ik wil een C programma maken waarbij gebruikt gemaak wordt voor arrays. Het is een array van 5 x 5 integers. Het programma vraagt de gebruiker 5 cijfers per toets. Er zijn 5 toetsen. Aangezien er 5 cijfers zijn per toets, zijn er 5 scholieren waarvan de cijfers verwerkt moeten worden. Er zijn 2 dimensies dus, toets en scholier. Nadat de cijfers zijn ingevoerd, dmv arrays, moeten ze dus verwerkt worden. Alle cijfers voor elk van de 5 scholieren moeten bij elkaar opgeteld worden en ook moet daarna het gemiddelde van die 5 cijfers gemaakt worden per scholier. Voorbeeld: scholier1 heeft een 5 5 5 5 5 gehaald voor respectievelijk toets 1 t/m 5, dan is zijn totale score 25, maar zijn gemiddelde een 5. Maar voor docenten moet het programma ook handig zijn. Het moet wat statistische gegevens geven voor hoe hun leerlingen het hebben gedaan als groep. Dus de gemiddelde, de laagste score en hoogste score moeten weergeven worden. Wat is de eenvoudigste manier om dit aan te pakken? Ik zou graag wat tips (strategie) van jullie willen horen... Dit is wat ik tot nu toe heb en ik zit totaal vast en ik denk dat ik op de verkeerde weg zit. [code:1:0bcf1c5989] #include <stdio.h> #define NR_STUDENTS 5 #define NR_QUIZES 5 int main(void) { int i, j; int score[NR_STUDENTS][NR_QUIZES]; for (i = 0; i < NR_STUDENTS; i++) { for (j = 0; j < NR_QUIZES; j++) { printf ("Enter the score for student %d for test %d of %d: ", i+1, j+1, NR_QUIZES); fflush(stdout); scanf("%d",&score[i][j]); } } for (i = 0; i < NR_STUDENTS; i++) for (j = 0; j < NR_QUIZES; j++) printf ("%d %d %d\n", i, j, score[i][j]); return(0); }[/code:1:0bcf1c5989] Sorry voor de layout...scherm is te klein.
Link naar reactie
Niks verkeerd aan deze code. Waarmee zit je vast? Gemiddelde per student: alles van een student optellen en delen door NR_QUIZES Gemiddelde per test: alles van een test optellen en delen door NR_STUDENTS Laagste en hoogste: gebruik een tijdelijk variabele en initialiseer die (voor laagste bv op -1 als het laagste cijfer een 0 kan zijn, voor hoogste bv op 11 als hoogste cijfer een 10 kan zijn). Deze vraag zag ik (volgens mij) ook bij tweakers 8)
Link naar reactie
[quote:9f0874357f="Wim Sturkenboom"]Deze vraag zag ik (volgens mij) ook bij tweakers 8)[/quote:9f0874357f] Dat klopt, ze hebben hem daar gesloten voordat ik erop kon reageren. Ik zat een heel verhaal te typen en toen merkte ik dat het al gesloten was. Heel mijn verhaal inclusief nieuwe code kwijt....Ze zijn daar echt niet normaal en ze claimen nog toegankelijk te willen zijn voor iedereen, maar ze gedragen zich daar als elitaire kakkers. Alsof iedereen expert is in C. Alsof zij vroeger nooit met deze problemen hebben gezeten. Zo, dat moest ik even kwijt. ;) [quote:9f0874357f="Wim Sturkenboom"]Niks verkeerd aan deze code. Waarmee zit je vast? Gemiddelde per student: alles van een student optellen en delen door NR_QUIZES Gemiddelde per test: alles van een test optellen en delen door NR_STUDENTS Laagste en hoogste: gebruik een tijdelijk variabele en initialiseer die (voor laagste bv op -1 als het laagste cijfer een 0 kan zijn, voor hoogste bv op 11 als hoogste cijfer een 10 kan zijn).[/quote:9f0874357f] Ik zit vast met het geven van schematisch voorbeeld waarbij de ingevoerde cijfers gepresenteerd worden. Dit is wat ik tot nu toe heb, ik heb het gevoel dat ik zeer omslachtig aan het werken ben. [code:1:9f0874357f] #include <stdio.h> #define NR_STUDENTS 5 #define NR_QUIZES 5 int main() { int i, j; int score[NR_STUDENTS][NR_QUIZES]; for (i = 0; i < NR_STUDENTS; i++) { for (j = 0; j < NR_QUIZES; j++) { printf ("Enter the score for student %d for test %d of %d: ", i+1, j+1, NR_QUIZES); fflush(stdout); scanf("%d",&score[i][j]); } } printf("\n"); printf("Here are the scores in schematic overview. \n"); for (i = 0; i < NR_STUDENTS; i++) for (j = 0; j < NR_QUIZES; j++) { printf("%3d", score[i][j]); if (j > 5) { printf("\n"); } } printf("\n"); printf("The total score is the sum of all quizes. \n"); printf("The total score for student 1 for all quizes: %3d\n", score[0][0] + score[0][1] +score[0][2] + score[0][3] + score[0][4]); printf("The total score for student 2 for all quizes: %3d\n", score[1][0] + score[1][1] +score[1][2] + score[1][3] + score[1][4]); printf("The total score for student 3 for all quizes: %3d\n", score[2][0] + score[2][1] +score[2][2] + score[2][3] + score[2][4]); printf("The total score for student 4 for all quizes: %3d\n", score[3][0] + score[3][1] +score[3][2] + score[3][3] + score[3][4]); printf("The total score for student 5 for all quizes: %3d\n", score[4][0] + score[4][1] +score[4][2] + score[4][3] + score[4][4]); printf("The average score is the sum of all quizes divided by 5. \n"); printf("The average score for student 1 for all quizes: %.1f\n", (float)(score[0][0] + score[0][1] +score[0][2] + score[0][3] + score[0][4]) / 5); printf("The average score for student 2 for all quizes: %.1f\n", (float)(score[1][0] + score[1][1] +score[1][2] + score[1][3] + score[1][4]) / 5); printf("The average score for student 3 for all quizes: %.1f\n", (float)(score[2][0] + score[2][1] +score[2][2] + score[2][3] + score[2][4]) / 5); printf("The average score for student 4 for all quizes: %.1f\n", (float)(score[3][0] + score[3][1] +score[3][2] + score[3][3] + score[3][4]) / 5); printf("The average score for student 5 for all quizes: %.1f\n", (float)(score[4][0] + score[4][1] +score[4][2] + score[4][3] + score[4][4]) / 5); return(0); } [/code:1:9f0874357f]
Link naar reactie
[code:1:8c34be3560]int total; for(i=0;i<NR_STUDENTS;i++) { total=0; // reset total for each student (iteration) for(j=0;j<NR_QUIZES;j++) { total+=score[i][j]; } printf("Student %d : total = %d, average = %d\n", i, total, total/NR_QUIZES); }[/code:1:8c34be3560] En tweakers verwacht inderdaad een zeker nivo; dat wordt ook ergens aangegeven in de FAQ of zo.
Link naar reactie
[quote:9596349eb2="Wim Sturkenboom"] Laagste en hoogste: gebruik een tijdelijk variabele en initialiseer die (voor laagste bv op -1 als het laagste cijfer een 0 kan zijn, voor hoogste bv op 11 als hoogste cijfer een 10 kan zijn).[/quote:9596349eb2] Wim, hier kom ik niet uit. Ik heb het nu geinitaliseerd, maar het werkt niet. Ik zal mijn code volledig posten. [code:1:9596349eb2] #include <stdio.h> #define NR_STUDENTS 5 #define NR_QUIZES 5 int main() { int i, j; int score[NR_STUDENTS][NR_QUIZES]; for (i = 0; i < NR_STUDENTS; i++) { for (j = 0; j < NR_QUIZES; j++) { printf ("Enter the score for student %d for quiz %d of %d: ", i+1, j+1, NR_QUIZES); scanf("%3d",&score[i][j]); } } printf("\nHere are the scores in schematic overview. \n"); for (i = 0; i < NR_STUDENTS; i++) { printf ("Student %d (quiz 1 to 5): ", i+1); for (j = 0; j < NR_QUIZES; j++) printf ("%3d", score[i][j]); printf("\n"); } int total_score; for(i=0;i<NR_STUDENTS;i++) { total_score=0; // reset total for each student (iteration) for(j=0;j<NR_QUIZES;j++) { total_score += score[i][j]; } printf("\nStudent %d: total = %d, average = %.1f", i+1, total_score, (float)total_score/NR_QUIZES); } for(j = 0; j < NR_QUIZES ; j++) { total_score=0; /*reset total score for quizes */ for(i = 0; i < NR_STUDENTS ; i++) { total_score += score[i][j]; } int low_score = 11; int high_score = 0; if(high_score < score[i][j]) { high_score = score[i][j]; } if(low_score > score[i][j]) { low_score = score[i][j]; } printf("\nQuiz %d: Lowest score = %d, Highest score = %d, Average score = %.1f", j+1, low_score, high_score,(float)total_score/NR_STUDENTS); } return(0); } [/code:1:9596349eb2] Bedankt!
Link naar reactie
1) Zorg voor duidelijk inspringen; gebruik spaties of een optie in de editor om tabs te vervangen door spaties. 2) Zorg voor consistent gebruik van accolades; ik zoek me rot om te zien welke sluit-accolade bij welke start-accolade hoort. Dus of overal [code:1:f995102a7f]for(i=0;i<10;i++) { // iets }[/code:1:f995102a7f]of[code:1:f995102a7f]for(i=0;i<10;i++) { // iets }[/code:1:f995102a7f]Persoonlijk vind ik de laatste duidelijker, maar dat terzijde. 3) Geef duidelijk aan wat er niet werkt. Ik vermoed dat je hoogste en laagste niet goed werken en dat komt vermoedelijk omdat[code:1:f995102a7f] if(high_score < score[i][j]) { high_score = score[i][j]; } if(low_score > score[i][j]) { low_score = score[i][j]; } [/code:1:f995102a7f] op de verkeerde plek staat (buiten de tweede for-loop).
Link naar reactie
Bedankt, Ik denk dat ik het heb opgelost met die accolades, het gaat goed voor de eerste quiz, maar daarna reset het niet denk ik. Het blijft voor quiz 2 tm 5 de hoogste score van quiz 1 gebruiken en laagste score komt wel van quiz 2, maar die gebruikt ie dan voor quiz 2 tm 5. Ik zie de fout niet. [code:1:40f0ed2839] /* initialised the values to compute the highest and lowest score */ int low_score = 11; int high_score = -1; /* The same as the For loop above, only reversed, it will show the lowest, highest and average score for each quiz. */ for(j = 0; j < NR_QUIZES ; j++) { total_score=0; /*reset total score for quizes */ for(i = 0; i < NR_STUDENTS ; i++) { { total_score += score[i][j]; } /* Here is the highest and lowest score computed using 2 if statements */ if(score[i][j] < low_score) { /* if the grade is lower than 11, then the low_score gets updated */ low_score = score[i][j]; } if(score[i][j] > high_score) { /* if the grade is higher than -1, then the high_score gets updated */ high_score = score[i][j]; } } printf("\nQuiz %d: Lowest score = %d, Highest score = %d, Average score = %.1f", j+1, low_score, high_score,(float)total_score/NR_STUDENTS); } [/code:1:40f0ed2839]
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...