Oefening: een geneste lusstructuur maken voor berekeningen van leerlingen/studenten
In deze oefening voegt u een tekenreeksmatrix toe om de namen van leerlingen/studenten vast te houden en implementeert u vervolgens een geneste foreach structuur die de namen van leerlingen/studenten doorloopt in een buitenste lus en scores van leerlingen/studenten in de binnenste lus. U begint met het samenstellen van de studentNames matrix en een foreach lus die door de matrixelementen wordt herhaald. Vervolgens verplaatst u de code die wordt gebruikt om de cijfers van Sophia te berekenen in het codeblok van de lus 'namen'. Ten slotte implementeert u de codelogica die gebruikmaakt van de naam van de leerling/student om toegang te krijgen tot hun scoresmatrix, hun gemiddelde score te berekenen en hun cijfer naar de console te schrijven. De gedetailleerde taken die u tijdens deze oefening hebt voltooid, zijn:
Namenmatrix maken: Maak een matrix met namen van leerlingen/studenten.
Een buitenste lus maken: maak een
foreachlus die de namen van leerlingen/studenten doorloopt.Codeblok voor buitenste lus ontwikkelen: Verplaats de code die de score van Sophia berekent en rapporteert, waarbij deze in het codeblok van de lus 'namen' wordt geplaatst.
Berekeningen en rapportage bijwerken: werk de code bij waarmee studentscoreberekeningen worden uitgevoerd met behulp van een nieuwe scoresmatrix.
Belangrijk
U moet de vorige oefening van deze module, 'Matrices en foreach-lussen maken' hebben voltooid voordat u met deze oefening begint.
Een matrix met namen van leerlingen/studenten en een buitenste foreachlus maken
In deze taak maakt u een matrix met namen van leerlingen/studenten en een foreach lus die de namen van leerlingen/studenten doorloopt.
Zorg ervoor dat het Program.cs-bestand is geopend in de Visual Studio Code-editor.
Schuif naar het begin van het codebestand en zoek de coderegels die worden gebruikt om de scoresmatrices te declareren.
Maak een lege coderegel onder de declaratie van de scoresmatrices.
De lege coderegel moet zich bevinden tussen de regels die worden gebruikt om de scoresmatrices en de regel te declareren
sophiaSum.Als u een tekenreeksmatrix
studentNameswilt maken met de namen van de leerlingen/studenten, voert u de volgende code in:// Student names string[] studentNames = new string[] { "Sophia", "Andrew", "Emma", "Logan" };U ziet dat u de namen van leerlingen/studenten hebt opgegeven als onderdeel van de declaratie.
Als u een
foreachinstructie wilt maken waarmee u de namen van leerlingen/studenten kunt herhalen, voert u de volgende code in:foreach (string name in studentNames) { }Als u wilt controleren of de
foreachlus door destudentNamesmatrix wordt herhaald zoals bedoeld, werkt u het codeblok van deforeachinstructie als volgt bij:foreach (string name in studentNames) { Console.WriteLine($"{name}"); }Neem even de tijd om de code te bekijken die u hebt gemaakt.
// Student names string[] studentNames = new string[] { "Sophia", "Andrew", "Emma", "Logan" }; foreach (string name in studentNames) { Console.WriteLine($"{name}"); }Uw code gebruikt deze
foreachlus als de buitenste lus van uw toepassing. Tijdens deze oefening implementeert u de volgende logica in uw toepassing:Voor elk van de leerlingen/studenten in de
studentNamesmatrix zal uw toepassing het volgende doen:- de huidige student bepalen.
- toegang tot de scores van de huidige leerling/student.
- het cijfer van de huidige student berekenen (som en gemiddelde).
- schrijf het cijfer van de huidige leerling/student naar de console.
Op dit moment schrijft u echter alleen de namen van de leerlingen/studenten naar de console.
Klik in het menu Visual Studio Code File op Opslaan.
Klik in de visual Studio Code EXPLORER-weergave met de rechtermuisknop op Starter en selecteer Openen in geïntegreerde terminal.
Belangrijk
De Terminal-opdrachtprompt moet het mappad voor het Program.cs-bestand weergeven.
Typ dotnet build bij de Terminal-opdrachtprompt en druk op Enter.
Met
dotnet buildde opdracht wordt de compiler geïnstrueerd om de toepassing te bouwen. Als er fouten worden gedetecteerd, worden deze gerapporteerd.Als u foutberichten of waarschuwingen ziet, moet u deze oplossen voordat u doorgaat.
Typ dotnet run bij de Terminal-opdrachtprompt en druk op Enter.
Controleer of de code de volgende uitvoer heeft geproduceerd:
Sophia Andrew Emma Logan Student Grade Sophia: 92.2 A- Press the Enter key to continueNotitie
Als u de lijst met namen van leerlingen/studenten boven het scorerapport van Sophia niet ziet, gaat u terug en controleert u of u de code correct hebt ingevoerd.
Druk in het TERMINAL-deelvenster op Enter om de actieve toepassing te stoppen.
Sluit het deelvenster Terminal.
De score van Sophia berekenen binnen de buitenste namenlus
In deze taak verplaatst u de code die de score van Sophia berekent en rapporteert, en plaatst u deze in het codeblok van de lus 'namen'.
Zoek in de Visual Studio Code-editor de coderegels die worden gebruikt om het cijfer van Sophia te berekenen en te rapporteren.
int sophiaSum = 0; decimal sophiaScore; foreach (int score in sophiaScores) { // add the exam score to the sum sophiaSum += score; } sophiaScore = (decimal)sophiaSum / currentAssignments; Console.WriteLine("Student\t\tGrade\n"); Console.WriteLine("Sophia:\t\t" + sophiaScore + "\tA-");Notitie
De volgende stap is het verplaatsen van deze code van de huidige locatie naar het codeblok van de lus 'namen'
foreach.Gebruik een knip-en-plakbewerking om de code te verplaatsen die het cijfer van Sophia berekent en rapporteert aan het codeblok van de lus 'namen'
foreach.Als u niet zeker weet hoe u visual Studio Code kunt knippen en plakken, probeert u de methode die wordt beschreven in de volgende stappen:
Selecteer de code die wordt gebruikt om het cijfer van Sophia te berekenen en te rapporteren.
U kunt klikken en slepen om coderegels te selecteren.
Selecteer Knippen in het menu Bewerken van Visual Studio Code.
Plaats in de Visual Studio Code-editor de cursor op de lege coderegel onder de volgende code:
Console.WriteLine($"{name}");Selecteer Plakken in het menu Bewerken van Visual Studio Code.
Werk uw code bij om de juiste inspringing van de coderegel weer te geven.
Aanbeveling
Visual Studio Code biedt een
Format Documentopdracht die kan worden gebruikt om de codeopmaak bijgewerkt te houden. Klik met de rechtermuisknop in de Visual Studio Code-editor en selecteer Document opmaken in het pop-upmenu. Op Windows-computers is de sneltoets voor deze opdracht:Shift + Alt + F. Linux- en macOS-computers gebruiken indien nodig alternatieve sneltoetsen om conflicten met door het besturingssysteem geleverde snelkoppelingen te voorkomen.Zorg ervoor dat uw updates overeenkomen met de volgende code:
// Student names string[] studentNames = new string[] { "Sophia", "Andrew", "Emma", "Logan" }; foreach (string name in studentNames) { Console.WriteLine($"{name}"); int sophiaSum = 0; decimal sophiaScore; foreach (int score in sophiaScores) { // add the exam score to the sum sophiaSum += score; } sophiaScore = (decimal)sophiaSum / currentAssignments; Console.WriteLine("Student\t\tGrade\n"); Console.WriteLine("Sophia:\t\t" + sophiaScore + "\tA-"); } Console.WriteLine("Press the Enter key to continue"); Console.ReadLine();U ziet dat uw code op dit moment de score van Sophia berekent en rapporteert, ongeacht de
namehuidige student. U gaat dat zo dadelijk aanpakken.Verwijder de volgende code:
Console.WriteLine($"{name}");Voer op de lege coderegel die u zojuist hebt gemaakt de volgende code in:
if (name == "Sophia") {Maak een lege coderegel na de code die wordt gebruikt om Sophia's cijfer naar de console te schrijven.
Voer de volgende code in om het codeblok van de
ifinstructie te sluiten:}Werk uw code bij om de juiste inspringing van de coderegel weer te geven.
Aanbeveling
Gebruik de
Format Documentopdracht om de codeopmaak bijgewerkt te houden. Klik met de rechtermuisknop in het deelvenster Visual Studio Code Editor en selecteer Document opmaken in het pop-upmenu.Neem even de tijd om uw code te controleren.
Uw code moet overeenkomen met de volgende code:
// initialize variables - graded assignments int currentAssignments = 5; int[] sophiaScores = new int[] { 90, 86, 87, 98, 100 }; int[] andrewScores = new int[] { 92, 89, 81, 96, 90 }; int[] emmaScores = new int[] { 90, 85, 87, 98, 68 }; int[] loganScores = new int[] { 90, 95, 87, 88, 96 }; // Student names string[] studentNames = new string[] {"Sophia", "Andrew", "Emma", "Logan"}; foreach (string name in studentNames) { if (name == "Sophia") { int sophiaSum = 0; decimal sophiaScore; foreach (int score in sophiaScores) { // add the exam score to the sum sophiaSum += score; } sophiaScore = (decimal)(sophiaSum) / currentAssignments; Console.WriteLine("Student\t\tGrade\n"); Console.WriteLine("Sophia:\t\t" + sophiaScore + "\tA-"); } } Console.WriteLine("Press the Enter key to continue"); Console.ReadLine();U ziet dat de
ifinstructie in het buitensteforeachcodeblok de limieten voor het cijfer van de leerling/student heeft berekend en gerapporteerd. Dit is niet precies wat u nodig hebt, maar het is een stap in de juiste richting.Klik in het menu Visual Studio Code File op Opslaan.
Klik in de visual Studio Code EXPLORER-weergave met de rechtermuisknop op Starter en selecteer Openen in geïntegreerde terminal.
Belangrijk
De Terminal-opdrachtprompt moet het mappad voor het Program.cs-bestand weergeven.
Typ dotnet build bij de Terminal-opdrachtprompt en druk op Enter.
Met
dotnet buildde opdracht wordt de compiler geïnstrueerd om de toepassing te bouwen. Als er fouten worden gedetecteerd, worden deze gerapporteerd.Als u foutberichten of waarschuwingen ziet, moet u deze oplossen voordat u doorgaat.
Typ dotnet run bij de Terminal-opdrachtprompt en druk op Enter.
Controleer of de code de volgende uitvoer heeft geproduceerd:
Student Grade Sophia: 92.2 A-Notitie
Als u nog steeds de lijst met namen van leerlingen/studenten ziet die boven het scorerapport van Sophia worden weergegeven, controleert u of u uw updates hebt opgeslagen.
Druk in het TERMINAL-deelvenster op Enter om de actieve toepassing te stoppen.
Sluit het deelvenster Terminal.
De geneste lus bijwerken om alle scores van leerlingen/studenten te berekenen
In deze taak werkt u de code bij waarmee studentscoreberekeningen worden uitgevoerd met behulp van een nieuwe scoresmatrix. U begint met het maken van een matrix met de naam studentScores die kan worden gebruikt om de scores van elke leerling/student te bewaren. Vervolgens maakt u een if .. elseif constructie die gebruikmaakt van de naam van de huidige leerling/student om de scoresmatrix toe te wijzen aan studentScores. Ten slotte werkt u de code bij waarmee de cijfers van de leerling/student worden berekend en gerapporteerd. Wanneer u klaar bent, moet het rapport de naam en de numerieke score voor alle leerlingen/studenten bevatten.
Maak een lege coderegel onder de declaratie van de
studentNamesmatrix.De lege regel moet boven de buitenste
foreachinstructie staan.Als u een matrix met gehele getallen wilt maken die u kunt gebruiken om de scores van de huidige student vast te houden, voert u de volgende code in:
int[] studentScores = new int[10];U ziet dat met deze code op dit moment geen waarden worden toegewezen aan de matrix. U geeft gewoon op dat de matrix 10 elementen kan bevatten.
Maak een lege coderegel boven aan het buitenste
foreachcodeblok.De lege regel moet zich in het
foreachcodeblok en boven deifinstructie die evalueert ofnamegelijk is aan Sophia.Als u een tekenreeksvariabele wilt maken die wordt gebruikt om de naam van de huidige student op te geven, voert u de volgende code in:
string currentStudent = name;Notitie
U kunt de naam van de huidige leerling/student blijven gebruiken terwijl u de namenmatrix doorloopt, maar door deze te gebruiken
namecurrentStudent, kunt u uw codelogica gemakkelijker begrijpen terwijl u uw toepassing in de komende stappen uitbouwt.Als u wilt vervangen
currentStudentnamedoor deifinstructie die evalueert ofnamedeze gelijk is aan Sophia, werkt u uw code als volgt bij:if (currentStudent == "Sophia")Verplaats de code die de score van Sophia berekent en rapporteert naar een locatie onder het codeblok.
U verplaatst alle code in het codeblok naar een locatie onder het codeblok. De reden hiervoor wordt tijdens de volgende stappen duidelijk.
Controleer of de code in het buitenste
foreachcodeblok overeenkomt met de volgende code:{ string currentStudent = name; if (currentStudent == "Sophia") { } int sophiaSum = 0; decimal sophiaScore; foreach (int score in sophiaScores) { // add the exam score to the sum sophiaSum += score; } sophiaScore = (decimal)sophiaSum / currentAssignments; Console.WriteLine("Student\t\tGrade\n"); Console.WriteLine("Sophia:\t\t" + sophiaScore + "\tA-"); }Als u de
sophiaScoresmatrix wilt toewijzen aanstudentScoreswanneercurrentStudent == "Sophia", werkt u deifinstructiecode als volgt bij:if (currentStudent == "Sophia") studentScores = sophiaScores;U ziet dat u de accolades uit het
ifinstructiecodeblok hebt verwijderd tijdens deze code-update.Als u een
else ifinstructie wilt toevoegen waaraan deandrewScoresmatrixstudentScoreswordt toegewezen wanneercurrentStudent == "Andrew", voert u de volgende code in:else if (currentStudent == "Andrew") studentScores = andrewScores;Maak een andere
else ifinstructie om deemmaScoresmatrix toe te wijzen aanstudentScoreswanneercurrentStudent == "Emma".Maak een
else ifinstructie om deloganScoresmatrix toe te wijzen aanstudentScoreswanneercurrentStudent == "Logan".Zorg ervoor dat uw
foreachcodeblok overeenkomt met de volgende code:foreach (string name in studentNames) { string currentStudent = name; if (currentStudent == "Sophia") studentScores = sophiaScores; else if (currentStudent == "Andrew") studentScores = andrewScores; else if (currentStudent == "Emma") studentScores = emmaScores; else if (currentStudent == "Logan") studentScores = loganScores; int sophiaSum = 0; decimal sophiaScore; foreach (int score in sophiaScores) { // add the exam score to the sum sophiaSum += score; } sophiaScore = (decimal)sophiaSum / currentAssignments; Console.WriteLine("Student\t\tGrade\n"); Console.WriteLine("Sophia:\t\t" + sophiaScore + "\tA-"); }Vervolgens moet u de binnenste
foreachlus bijwerken om de variabelen die u in uw berekeningen gebruikt te gebruikenstudentScoresen depersonaliseren.Als u wilt vervangen
studentScoressophiaScoresdoor deforeachlus die door de scoresmatrix wordt herhaald, werkt u de code als volgt bij:foreach (int score in studentScores)Als u de declaraties van Sophia-specifieke variabelen wilt vervangen door algemenere namen, werkt u uw code als volgt bij:
int sumAssignmentScores = 0; decimal currentStudentGrade = 0;Deze twee variabeledeclaraties zijn bedoeld om de volgende Sophia-specifieke variabeledeclaraties te vervangen:
int sophiaSum = 0; decimal sophiaScore;Als u de nieuwe variabelenaam wilt toepassen op de vergelijking die wordt gebruikt voor het optellen van scores van leerlingen/studenten, werkt u het interne
foreachcodeblok als volgt bij:foreach (int score in studentScores) { // add the exam score to the sum sumAssignmentScores += score; }Als u de nieuwe variabelenaam wilt toepassen op de vergelijking die wordt gebruikt om de gemiddelde score te berekenen, werkt u de code als volgt bij:
currentStudentGrade = (decimal)(sumAssignmentScores) / currentAssignments;Neem even de tijd om uw code te controleren.
int[] studentScores = new int[10]; foreach (string name in studentNames) { string currentStudent = name; if (currentStudent == "Sophia") studentScores = sophiaScores; else if (currentStudent == "Andrew") studentScores = andrewScores; else if (currentStudent == "Emma") studentScores = emmaScores; else if (currentStudent == "Logan") studentScores = loganScores; // initialize/reset the sum of scored assignments int sumAssignmentScores = 0; // initialize/reset the calculated average of exam + extra credit scores decimal currentStudentGrade = 0; foreach (int score in studentScores) { // add the exam score to the sum sumAssignmentScores += score; } currentStudentGrade = (decimal)(sumAssignmentScores) / currentAssignments; Console.WriteLine("Student\t\tGrade\n"); Console.WriteLine("Sophia:\t\t" + sophiaScore + "\tA-"); }Uw geneste
foreachlussen doorlopen nu de namen van leerlingen/studenten en gebruiken de scores van de leerling/student om hun cijfers te berekenen, maar u moet de code die wordt gebruikt om het scorerapport te genereren, bijwerken.Als u de naam van de leerling/student en de berekende score wilt afdrukken naar de console, werkt u de tweede
Console.WriteLineinstructie als volgt bij:Console.WriteLine($"{currentStudent}\t\t{currentStudentGrade}\t?");U ziet dat deze code de cijfertoewijzing voor letters heeft vervangen door een '?'. In de volgende oefening gaat u werken aan het automatiseren van het toekennen van lettercijfers.
Verplaats de
Console.WriteLineinstructie die wordt gebruikt om de kolomlabels van uw scorerapport naar de locatie net boven de buitensteforeachlus te schrijven.U wilt de kolomkoppen voor elke studentscore niet herhalen, dus verplaatst u deze code naar een punt boven de buitenste
foreachlus.Klik in het menu Visual Studio Code File op Opslaan.
Neem even de tijd om uw toepassingscode te controleren.
Uw volledige toepassing moet nu overeenkomen met de volgende code:
// initialize variables - graded assignments int currentAssignments = 5; int[] sophiaScores = new int[] { 90, 86, 87, 98, 100 }; int[] andrewScores = new int[] { 92, 89, 81, 96, 90 }; int[] emmaScores = new int[] { 90, 85, 87, 98, 68 }; int[] loganScores = new int[] { 90, 95, 87, 88, 96 }; // Student names string[] studentNames = new string[] { "Sophia", "Andrew", "Emma", "Logan" }; int[] studentScores = new int[10]; // Write the Report Header to the console Console.WriteLine("Student\t\tGrade\n"); foreach (string name in studentNames) { string currentStudent = name; if (currentStudent == "Sophia") studentScores = sophiaScores; else if (currentStudent == "Andrew") studentScores = andrewScores; else if (currentStudent == "Emma") studentScores = emmaScores; else if (currentStudent == "Logan") studentScores = loganScores; // initialize/reset the sum of scored assignments int sumAssignmentScores = 0; // initialize/reset the calculated average of exam + extra credit scores decimal currentStudentGrade = 0; foreach (int score in studentScores) { // add the exam score to the sum sumAssignmentScores += score; } currentStudentGrade = (decimal)(sumAssignmentScores) / currentAssignments; Console.WriteLine($"{currentStudent}\t\t{currentStudentGrade}\t?"); }Met de code waarmee het scorerapport van de leerling/student wordt gegenereerd, bijgewerkt; het lijkt erop dat u klaar bent om uw werk te controleren.
Controleer uw werk
In deze taak voert u de toepassing uit om te controleren of uw codelogica werkt zoals verwacht.
Zorg ervoor dat u de wijzigingen in het Program.cs-bestand hebt opgeslagen.
Klik in de visual Studio Code EXPLORER-weergave met de rechtermuisknop op Starter en selecteer Openen in geïntegreerde terminal.
Typ dotnet build bij de Terminal-opdrachtprompt en druk op Enter.
Als u foutberichten of waarschuwingen ziet, moet u deze oplossen voordat u doorgaat.
Typ dotnet run bij de Terminal-opdrachtprompt en druk op Enter.
Controleer of de code de volgende uitvoer heeft geproduceerd:
Student Grade Sophia 92.2 ? Andrew 89.6 ? Emma 85.6 ? Logan 91.2 ? Press the Enter key to continueDruk in het TERMINAL-deelvenster op Enter om de actieve toepassing te stoppen.
Sluit het deelvenster Terminal.
Gefeliciteerd, uw toepassing is al heel ver weg van waar u bent begonnen. U maakt efficiënt gebruik van matrices en foreach iteraties en u hebt een if instructie geïntegreerd waarmee uw code de juiste scoresmatrix kan selecteren.