Cvičení – vytvoření struktury vnořené smyčky pro výpočty známek studentů
V tomto cvičení přidáte pole řetězců pro uložení jmen studentů a poté implementujete vnořenou strukturu foreach, která prochází jména studentů ve vnější smyčce a skóre studentů ve vnitřní smyčce. Začnete vytvořením studentNames pole a smyčky foreach , která prochází prvky pole. V dalším kroku přesunete kód používaný k výpočtu známek Sophii do bloku kódu smyčky "names". Nakonec implementujete logiku kódu, která používá jméno studenta pro přístup k poli skóre, výpočet průměrného skóre a zápis známek do konzoly. Podrobné úkoly, které jste dokončili během tohoto cvičení, jsou:
Vytvoření pole názvů: Vytvořte pole jmen studentů.
Vytvořit vnější smyčku: Vytvořte smyčku
foreach, která iteruje jména studentů.Vývoj bloku kódu vnější smyčky: Přemísťuje kód, který vypočítá a hlásí skóre Sophia, a umístí ho do bloku kódu smyčky "names".
Aktualizace výpočtů a vytváření sestav: Aktualizujte kód, který provádí výpočty skóre studentů pomocí nového pole skóre.
Důležité
Před zahájením tohoto cvičení musíte dokončit předchozí cvičení "Vytvoření polí a smyčky foreach".
Vytvoření pole jmen studentů a vnější smyčky foreach
V tomto úkolu vytvoříte pole jmen studentů a smyčku foreach , která iteruje jména studentů.
Ujistěte se, že máte otevřený soubor Program.cs v editoru visual Studio Code.
Posuňte se na začátek souboru kódu a vyhledejte řádky kódu, které se používají k deklaraci polí skóre.
Pod deklarací polí skóre vytvořte prázdný řádek kódu.
Prázdný řádek kódu by měl být umístěn mezi řádky použitými k deklaraci polí skóre a řádku použitého k deklaraci
sophiaSum.Pokud chcete vytvořit pole
studentNamesřetězců, které obsahuje jména studentů, zadejte následující kód:// Student names string[] studentNames = new string[] { "Sophia", "Andrew", "Emma", "Logan" };Všimněte si, že jste zadali jména studentů jako součást deklarace.
Pokud chcete vytvořit
foreachpříkaz, který můžete použít k iteraci jmen studentů, zadejte následující kód:foreach (string name in studentNames) { }Pokud chcete ověřit, že smyčka
foreachprocházístudentNamespolem podle očekávání, aktualizujte blokforeachkódu příkazu následujícím způsobem:foreach (string name in studentNames) { Console.WriteLine($"{name}"); }Projděte si kód, který jste vytvořili, chvilku.
// Student names string[] studentNames = new string[] { "Sophia", "Andrew", "Emma", "Logan" }; foreach (string name in studentNames) { Console.WriteLine($"{name}"); }Váš kód použije tuto
foreachsmyčku jako vnější smyčku vaší aplikace. V tomto cvičení implementujete ve své aplikaci následující logiku:Pro každého ze studentů v
studentNamespoli bude vaše aplikace:- určit aktuálního studenta.
- přístup k skóre aktuálního studenta.
- vypočítat známku aktuálního studenta (součet a průměr).
- napište do konzoly známku aktuálního studenta.
Prozatím ale stačí napsat jména studentů do konzoly.
V nabídce Soubor editoru Visual Studio Code klepněte na tlačítko Uložit.
V zobrazení Průzkumníka editoru Visual Studio Code klikněte pravým tlačítkem myši na Starter a pak vyberte Otevřít v integrovaném terminálu.
Důležité
Příkazový řádek terminálu musí obsahovat cestu ke složce pro váš Program.cs soubor.
Na příkazovém řádku terminálu zadejte dotnet build a stiskněte Enter.
Příkaz
dotnet builddává kompilátoru pokyn k sestavení aplikace. Pokud se zjistí nějaké chyby, budou hlášeny.Pokud se zobrazí chybové nebo upozorňující zprávy, musíte je před pokračováním opravit.
Na příkazovém řádku terminálu zadejte příkaz dotnet run a stiskněte Enter.
Ověřte, že váš kód vytvořil následující výstup:
Sophia Andrew Emma Logan Student Grade Sophia: 92.2 A- Press the Enter key to continuePoznámka:
Pokud seznam jmen studentů nad sestavou skóre Sophia nevidíte, vraťte se a ověřte, že jste kód zadali správně.
Na panelu TERMINÁL zastavte spuštěnou aplikaci stisknutím klávesy Enter.
Zavřete panel Terminálu.
Výpočet skóre Sophia uvnitř smyčky vnějších názvů
V tomto úkolu přemístíte kód, který vypočítá a hlásí skóre Sophia, a umístíte ho do bloku kódu smyčky "names".
V editoru Visual Studio Code vyhledejte řádky kódu, které se používají k výpočtu a hlášení známky 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-");Poznámka:
Dalším krokem bude přesunutí tohoto kódu z jeho aktuálního umístění do bloku kódu smyčky "names"
foreach.Pomocí operace vyjmutí a vložení přesuňte kód, který vypočítá a hlásí známky Sophia do bloku kódu smyčky "names"
foreach.Pokud si nejste jistí, jak v editoru Visual Studio Code vyjmout a vložit, zkuste použít postup popsaný v následujících krocích:
Vyberte kód, který se používá k výpočtu a hlášení známky Sophia.
Kliknutím a přetažením můžete vybrat řádky kódu.
V nabídce Úpravy editoru Visual Studio Code vyberte Vyjmout.
V editoru Visual Studio Code umístěte kurzor na prázdný řádek kódu pod následujícím kódem:
Console.WriteLine($"{name}");V nabídce Úpravy editoru Visual Studio Code vyberte Vložit.
Aktualizujte kód tak, aby zobrazoval správné odsazení řádku kódu.
Návod
Visual Studio Code poskytuje
Format Documentpříkaz, který se dá použít k aktualizaci formátování kódu. Klikněte pravým tlačítkem myši do editoru Visual Studio Code a v místní nabídce vyberte Formát dokumentu. Na počítačích s Windows je klávesová zkratka pro tento příkaz:Shift + Alt + F. Počítače s Linuxem a macOS používají v případě potřeby alternativní klávesové zkratky, aby nedocházelo ke konfliktům se zadanými zástupci operačního systému.Ujistěte se, že aktualizace odpovídají následujícímu kódu:
// 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();Všimněte si, že v tomto okamžiku bude váš kód počítat a hlásit skóre Sophia bez
nameohledu na aktuální studenta. Za chvíli to vyřešíte.Odstraňte následující kód:
Console.WriteLine($"{name}");Na prázdný řádek kódu, který jste právě vytvořili, zadejte následující kód:
if (name == "Sophia") {Vytvořte prázdný řádek kódu za kódem, který se používá k psaní známky Sophia do konzoly.
Pokud chcete zavřít blok
ifkódu příkazu, zadejte následující kód:}Aktualizujte kód tak, aby zobrazoval správné odsazení řádku kódu.
Návod
Format DocumentPomocí příkazu můžete zachovat aktualizované formátování kódu. Klikněte pravým tlačítkem myši na panel Editoru sady Visual Studio a v místní nabídce vyberte Formát dokumentu.Než si kód prohlédnou, udělejte si chvilku.
Váš kód by měl odpovídat následujícímu kódu:
// 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();Všimněte si, že
ifpříkaz uvnitř bloku vnějšíhoforeachkódu omezuje, které známky studenta se vypočítá a ohlásí. To není přesně to, co potřebujete, ale je to krok ve správném směru.V nabídce Soubor editoru Visual Studio Code klepněte na tlačítko Uložit.
V zobrazení Průzkumníka editoru Visual Studio Code klikněte pravým tlačítkem myši na Starter a pak vyberte Otevřít v integrovaném terminálu.
Důležité
Příkazový řádek terminálu musí obsahovat cestu ke složce pro váš Program.cs soubor.
Na příkazovém řádku terminálu zadejte dotnet build a stiskněte Enter.
Příkaz
dotnet builddává kompilátoru pokyn k sestavení aplikace. Pokud se zjistí nějaké chyby, budou hlášeny.Pokud se zobrazí chybové nebo upozorňující zprávy, musíte je před pokračováním opravit.
Na příkazovém řádku terminálu zadejte příkaz dotnet run a stiskněte Enter.
Ověřte, že váš kód vytvořil následující výstup:
Student Grade Sophia: 92.2 A-Poznámka:
Pokud se stále zobrazuje seznam jmen studentů zobrazených nad sestavou skóre Sophia, ujistěte se, že jste si uložili aktualizace.
Na panelu TERMINÁL zastavte spuštěnou aplikaci stisknutím klávesy Enter.
Zavřete panel Terminálu.
Aktualizace vnořené smyčky pro výpočet všech skóre studentů
V tomto úkolu aktualizujete kód, který provádí výpočty skóre studentů pomocí nového pole skóre. Začnete vytvořením pole s názvem studentScores , které se dá použít k uchování skóre libovolného studenta. Dále vytvoříte if .. elseif konstruktor, který použije jméno aktuálního studenta k přiřazení pole skóre.studentScores Nakonec aktualizujete kód, který počítá a podává zprávy o známkách studenta. Po dokončení by sestava měla obsahovat jméno a číselné skóre pro všechny studenty.
Pod deklarací
studentNamespole vytvořte prázdný řádek kódu.Prázdný řádek by měl být nad vnějším
foreachpříkazem.Chcete-li vytvořit celočíselné pole, které můžete použít k uchování skóre aktuálního studenta, zadejte následující kód:
int[] studentScores = new int[10];Všimněte si, že tento kód v tomto okamžiku nepřiřazuje k poli žádné hodnoty. Jednoduše určíte, že pole může obsahovat 10 prvků.
Vytvořte prázdný řádek kódu v horní části vnějšího
foreachbloku kódu.Prázdný řádek by měl být uvnitř
foreachbloku kódu a nadifpříkazem, který vyhodnocuje, jestlinamese rovná Sophia.Pokud chcete vytvořit řetězcovou proměnnou, která se použije k uložení jména aktuálního studenta, zadejte následující kód:
string currentStudent = name;Poznámka:
Při iteraci v matici názvů můžete dál sledovat
namejméno aktuálního studenta, ale použitícurrentStudentvám usnadní pochopení logiky kódu při sestavování aplikace v nadcházejících krocích.Chcete-li nahradit
currentStudentnamevifpříkazu, který vyhodnotí, zdanameje rovna Sophia, aktualizujte kód následujícím způsobem:if (currentStudent == "Sophia")Přesuňte kód, který počítá a hlásí skóre Sophia, do umístění pod blokem kódu.
Přesouváte veškerý kód, který je v bloku kódu, do umístění pod blokem kódu. Důvod, proč to udělat, se projeví během několika dalších kroků.
Ověřte, že kód ve vnějším
foreachbloku kódu odpovídá následujícímu kódu:{ 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-"); }Chcete-li přiřadit
sophiaScorespole kstudentScoreswhencurrentStudent == "Sophia", aktualizujteifkód příkazu následujícím způsobem:if (currentStudent == "Sophia") studentScores = sophiaScores;Všimněte si, že jste během této aktualizace kódu příkazu odebrali složené závorky z
ifbloku kódu příkazu.Chcete-li přidat
else ifpříkaz, který přiřazujeandrewScorespole,studentScorescurrentStudent == "Andrew"zadejte následující kód:else if (currentStudent == "Andrew") studentScores = andrewScores;Vytvořte další
else ifpříkaz pro přiřazeníemmaScorespole whenstudentScorescurrentStudent == "Emma".Vytvořte příkaz
else ifpro přiřazeníloganScorespole kstudentScorescurrentStudent == "Logan"when .Ujistěte se, že blok
foreachkódu odpovídá následujícímu kódu: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-"); }Dále je potřeba aktualizovat vnitřní
foreachsmyčku tak, aby používalastudentScoresa "depersonalizovat" proměnné, které používáte ve výpočtech.Pokud chcete nahradit
studentScoressophiaScoresveforeachsmyčce, která prochází polem skóre, aktualizujte kód následujícím způsobem:foreach (int score in studentScores)Pokud chcete nahradit deklarace proměnných specifických pro Sophia obecnějšími názvy, aktualizujte kód následujícím způsobem:
int sumAssignmentScores = 0; decimal currentStudentGrade = 0;Tyto dvě deklarace proměnných jsou určeny k nahrazení následujících deklarací proměnných specifických pro Sophia:
int sophiaSum = 0; decimal sophiaScore;Pokud chcete nový název proměnné použít na rovnici použitou k sumarizačnímu skóre studentů, aktualizujte vnitřní
foreachblok kódu následujícím způsobem:foreach (int score in studentScores) { // add the exam score to the sum sumAssignmentScores += score; }Pokud chcete pro rovnici použitou k výpočtu průměrného skóre použít nový název proměnné, aktualizujte kód následujícím způsobem:
currentStudentGrade = (decimal)(sumAssignmentScores) / currentAssignments;Než si kód prohlédnou, udělejte si chvilku.
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-"); }Vaše vnořené
foreachsmyčky teď iterují jména studentů a k výpočtu známek používají skóre studenta, ale stále potřebujete aktualizovat kód použitý k vygenerování sestavy skóre.Pokud chcete vytisknout jméno studenta a počítané skóre do konzoly, aktualizujte druhý
Console.WriteLinepříkaz následujícím způsobem:Console.WriteLine($"{currentStudent}\t\t{currentStudentGrade}\t?");Všimněte si, že tento kód nahradil zadání známky písmenem "?". V dalším cvičení budete pracovat na automatizaci udělování známek.
Console.WriteLinePřesuňte příkaz, který se používá k napsání popisků sloupců sestavy skóre, do umístění těsně nad vnějšíforeachsmyčkou.Nechcete opakovat záhlaví sloupců pro každé skóre studenta, takže tento kód přesunete na bod nad vnější
foreachsmyčkou.V nabídce Soubor editoru Visual Studio Code klepněte na tlačítko Uložit.
Než si prohlédnou kód aplikace, udělejte si chvilku.
Vaše úplná aplikace by teď měla odpovídat následujícímu kódu:
// 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?"); }S kódem, který vygeneruje sestavu skóre studenta, se aktualizuje; zdá se, že jste připraveni zkontrolovat svou práci.
Kontrola práce
V této úloze spustíte aplikaci, abyste ověřili, že logika kódu funguje podle očekávání.
Ujistěte se, že jste změny uložili do souboru Program.cs.
V zobrazení Průzkumníka editoru Visual Studio Code klikněte pravým tlačítkem myši na Starter a pak vyberte Otevřít v integrovaném terminálu.
Na příkazovém řádku terminálu zadejte dotnet build a stiskněte Enter.
Pokud se zobrazí chybové nebo upozorňující zprávy, musíte je před pokračováním opravit.
Na příkazovém řádku terminálu zadejte příkaz dotnet run a stiskněte Enter.
Ověřte, že váš kód vytvořil následující výstup:
Student Grade Sophia 92.2 ? Andrew 89.6 ? Emma 85.6 ? Logan 91.2 ? Press the Enter key to continueNa panelu TERMINÁL zastavte spuštěnou aplikaci stisknutím klávesy Enter.
Zavřete panel Terminálu.
Blahopřejeme, vaše aplikace ušla dlouhou cestu od začátku. Efektivně používáte pole a foreach iterace a jste integrovali příkaz if, který vašemu kódu umožňuje vybrat správné pole skóre.