Exerciții - Construiți o structură de buclă imbricată pentru calculele notelor elevilor/studenților
În acest exercițiu, adăugați o matrice de șiruri pentru a conține numele elevilor/studenților, apoi implementați o structură imbricată foreach care iterează numele elevilor/studenților într-o buclă exterioară și punctajele elevilor/studenților în bucla internă. Începeți prin a construi matricea studentNames și o foreach buclă care iterează prin elementele matricei. În continuare, mutați codul utilizat pentru a calcula notele Sophia în blocul de cod al buclei "nume". În sfârșit, implementați logica de cod care utilizează numele elevului/studentului pentru a-și accesa matricea de punctaje, a calcula punctajul mediu și a scrie nota pe consolă. Activitățile detaliate pe care le efectuați în timpul acestui exercițiu sunt:
Creare matrice de nume: Creați o matrice de nume de elevi/studenți.
Creați o buclă exterioară: creați o
foreachbuclă pe care o iterează prin numele elevilor/studenților.Dezvoltați blocul de cod buclă exterioară: Repoziționați codul care calculează și raportează scorul Sophia, plasându-l în blocul de cod al buclei "nume".
Actualizare calcule și raportare: Actualizați codul care efectuează calcule de punctaj pentru elevi/studenți utilizând o matrice nouă de punctaje.
Importantă
Trebuie să fi finalizat exercițiul anterior al acestui modul, "Creați matrice și bucle de prim-rând", înainte de a începe acest exercițiu.
Crearea unei matrice de nume de elevi/studenți și buclă exterioară
În această activitate, veți crea o matrice de nume de elevi/studenți și o foreach buclă care iterează numele elevilor/studenților.
Asigurați-vă că aveți fișierul Program.cs deschis în Visual Studio Code Editor.
Defilați în partea de sus a fișierului de cod, apoi găsiți liniile de cod utilizate pentru a declara matricele de punctaje.
Creați o linie de cod necompletată sub declarația matricelor de punctaje.
Linia de cod necompletată ar trebui să se afle între liniile utilizate pentru a declara matricele de punctaje și linia utilizată pentru a declara
sophiaSum.Pentru a crea o matrice de șiruri denumită
studentNamescare conține numele elevilor/studenților, introduceți următorul cod:// Student names string[] studentNames = new string[] { "Sophia", "Andrew", "Emma", "Logan" };Observați că ați specificat numele elevilor/studenților ca parte a declarației.
Pentru a crea o
foreachinstrucțiune pe care o puteți utiliza pentru a itera numele elevilor/studenților, introduceți următorul cod:foreach (string name in studentNames) { }Pentru a verifica dacă bucla parcurge matricea
foreachașa cum intenționați, actualizațistudentNamesblocul de cod al instrucțiuniiforeachdupă cum urmează:foreach (string name in studentNames) { Console.WriteLine($"{name}"); }Citiți codul pe care l-ați creat.
// Student names string[] studentNames = new string[] { "Sophia", "Andrew", "Emma", "Logan" }; foreach (string name in studentNames) { Console.WriteLine($"{name}"); }Codul dvs. va utiliza această
foreachbuclă ca buclă exterioară a aplicației. În timpul acestui exercițiu, veți implementa următoarea logică în aplicația dvs.:Pentru fiecare dintre elevii/studenții din
studentNamesmatrice, aplicația dvs. va:- determinați elevul/studentul curent.
- să acceseze punctajele elevilor/studenților actuali.
- calculați nota curentă a elevilor/studenților (suma și media).
- scrieți nota studentului curent pe consolă.
Deocamdat, veți scrie numele elevilor/studenților pe consolă.
În meniul Fișier cod Visual Studio, faceți clic pe Salvare.
În vizualizarea Visual Studio Code EXPLORER, faceți clic dreapta pe Starter, apoi selectați Deschidere în Terminal integrat.
Importantă
Linia de comandă Terminal trebuie să afișeze calea folderului pentru fișierul Program.cs.
În linia de comandă Terminal, tastați compilare dotnet , apoi apăsați pe Enter.
Comanda
dotnet buildinstruiește compilatorul să construiască aplicația. Dacă sunt detectate erori, acestea vor fi raportate.Dacă vedeți Mesaje de eroare sau Avertisment, trebuie să le remediați înainte de a continua.
În linia de comandă Terminal, tastați run dotnet , apoi apăsați pe Enter.
Verificați dacă codul dvs. a produs următoarea ieșire:
Sophia Andrew Emma Logan Student Grade Sophia: 92.2 A- Press the Enter key to continueNotă
Dacă nu vedeți lista de nume de elevi/studenți deasupra raportului de punctaj sophia, reveniți și verificați dacă ați introdus corect codul.
În panoul TERMINAL, pentru a opri rularea aplicației, apăsați tasta Enter.
Închideți panoul Terminal.
Calcularea scorului Sophia în bucla de nume exterioare
În această activitate, veți muta codul care calculează și raportează scorul Sophia, plasându-l în blocul de cod al buclei "nume".
În Visual Studio Code Editor, găsiți liniile de cod utilizate pentru a calcula și a raporta nota 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-");Notă
Următorul pas va fi să mutați acest cod din locația curentă în blocul de cod al buclei "nume".
foreachUtilizați o operațiune de decupare și lipire pentru a muta codul care calculează și raportează nota Sophia la blocul de cod al buclei "nume".
foreachDacă nu sunteți sigur cum să decupați și să lipiți în Visual Studio Code, încercați abordarea descrisă în următorii pași:
Selectați codul utilizat pentru a calcula și a raporta nota Sophia.
Puteți să faceți clic și să glisați pentru a selecta linii de cod.
În meniul Editare cod Visual Studio, selectați Decupare.
În Visual Studio Code Editor, poziționați cursorul pe linia de cod necompletată de sub următorul cod:
Console.WriteLine($"{name}");În meniul Editare cod Visual Studio, selectați Lipire.
Actualizați codul pentru a afișa indentarea corectă a liniei de cod.
Sfat
Visual Studio Code furnizează o
Format Documentcomandă care poate fi utilizată pentru a menține actualizată formatarea codului. Faceți clic dreapta în Visual Studio Code Editor, apoi selectați Formatare document din meniul pop-up. Pe computerele Windows, comanda rapidă de la tastatură pentru această comandă este:Shift + Alt + F. Computerele Linux și macOS utilizează comenzi rapide alternative atunci când este necesar pentru a evita conflictele cu comenzile rapide furnizate de sistemul de operare.Asigurați-vă că actualizările se potrivesc cu următorul cod:
// 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();Observați că, în acest moment, codul dvs. va calcula și va raporta punctajul Sophia indiferent de elevul
name/studentul curent. Veți rezolva acest lucru în scurt timp.Ștergeți următorul cod:
Console.WriteLine($"{name}");În linia de cod necompletată pe care tocmai ați creat-o, introduceți următorul cod:
if (name == "Sophia") {Creați o linie de cod necompletată după codul utilizat pentru a scrie nota Sophia pe consolă.
Pentru a închide blocul de cod al declarației
if, introduceți următorul cod:}Actualizați codul pentru a afișa indentarea corectă a liniei de cod.
Sfat
Format DocumentUtilizați comanda pentru a păstra formatarea codului actualizată. Faceți clic dreapta în panoul Visual Studio Code Editor, apoi selectați Formatare document din meniul pop-up.Acordați-vă un minut pentru a vă revizui codul.
Codul dvs. ar trebui să corespundă următorului cod:
// 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();Observați că instrucțiunea
ifdin interiorul codului exteriorforeachlimitează limitele notei elevilor/studenților care sunt calculate și raportate. Nu este exact ceea ce ai nevoie, dar este un pas în direcția corectă.În meniul Fișier cod Visual Studio, faceți clic pe Salvare.
În vizualizarea Visual Studio Code EXPLORER, faceți clic dreapta pe Starter, apoi selectați Deschidere în Terminal integrat.
Importantă
Linia de comandă Terminal trebuie să afișeze calea folderului pentru fișierul Program.cs.
În linia de comandă Terminal, tastați compilare dotnet , apoi apăsați pe Enter.
Comanda
dotnet buildinstruiește compilatorul să construiască aplicația. Dacă sunt detectate erori, acestea vor fi raportate.Dacă vedeți Mesaje de eroare sau Avertisment, trebuie să le remediați înainte de a continua.
În linia de comandă Terminal, tastați run dotnet , apoi apăsați pe Enter.
Verificați dacă codul dvs. a produs următoarea ieșire:
Student Grade Sophia: 92.2 A-Notă
Dacă vedeți în continuare lista de nume de elevi/studenți afișată deasupra raportului scorului Sophia, asigurați-vă că ați salvat actualizările.
În panoul TERMINAL, pentru a opri rularea aplicației, apăsați tasta Enter.
Închideți panoul Terminal.
Actualizați bucla imbricată pentru a calcula toate punctajele elevilor/studenților
În această activitate, veți actualiza codul care efectuează calcule ale punctajelor elevilor utilizând o matrice nouă de punctaje. Veți începe prin a crea o matrice denumită studentScores care poate fi utilizată pentru a păstra punctajele oricărui elev/student. În continuare, veți crea o if .. elseif construcție care utilizează numele curent al elevului/studentului pentru a-i atribui matricea de punctaje .studentScores În sfârșit, veți actualiza codul care calculează și raportează notele elevilor/studenților. După ce ați terminat, raportul ar trebui să includă numele și punctajul numeric pentru toți elevii/studenții.
Creați o linie de cod necompletată sub declarația matricei
studentNames.Linia necompletată ar trebui să fie deasupra instrucțiunii exterioare
foreach.Pentru a crea o matrice întreagă pe care o puteți utiliza pentru a reține punctajele elevului/studentului curent, introduceți următorul cod:
int[] studentScores = new int[10];Observați că acest cod nu atribuie nicio valoare matricei în acest moment. Specificați pur și simplu că matricea poate conține 10 elemente.
Creați o linie de cod necompletată în partea de sus a blocului de cod exterior
foreach.Linia necompletată ar trebui să fie în interiorul blocului de
foreachcod și deasupra instrucțiuniiifcare evaluează dacănameeste egal cu Sophia.Pentru a crea o variabilă șir care va fi utilizată pentru a reține numele elevului/studentului curent, introduceți următorul cod:
string currentStudent = name;Notă
Puteți continua să utilizați
namepentru a urmări numele elevului/studentului curent pe măsură ce parcurgeți matricea de nume, dar utilizareacurrentStudentva face mai ușor de înțeles logica de cod pe măsură ce construiți aplicația în pașii următori.Pentru a înlocui
currentStudentnamecu instrucțiuneaifcare evaluează dacănameeste egal cu Sophia, actualizați codul după cum urmează:if (currentStudent == "Sophia")Mutați codul care calculează și raportează scorul Sophia într-o locație sub blocul de cod.
Mutați tot codul care se află în blocul de cod într-o locație de sub blocul de cod. Motivul pentru care acest lucru va deveni evident în următorii câțiva pași.
Verificați dacă codul din blocul de cod exterior
foreachcorespunde următorului cod:{ 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-"); }Pentru a atribui matricea
sophiaScoresstudentScoresla datacurrentStudent == "Sophia", actualizați codul de instrucțiuneifdupă cum urmează:if (currentStudent == "Sophia") studentScores = sophiaScores;Observați că ați eliminat acoladele curbate din blocul
ifcodului de instrucțiune în timpul acestei actualizări de cod.Pentru a adăuga o
else ifinstrucțiune care atribuie matriceaandrewScoresstudentScoresatunci cândcurrentStudent == "Andrew", introduceți următorul cod:else if (currentStudent == "Andrew") studentScores = andrewScores;Creați o altă
else ifinstrucțiune pentru a atribui matriceaemmaScoresstudentScorescândcurrentStudent == "Emma".Creați o
else ifinstrucțiune pentru a atribui matricealoganScoresstudentScoresla cândcurrentStudent == "Logan".Asigurați-vă că blocul de
foreachcod corespunde următorului cod: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-"); }În continuare, trebuie să actualizați bucla internă
foreachpentru a utilizastudentScoresși a "depersonaliza" variabilele pe care le utilizați în calcule.Pentru a înlocui
studentScoressophiaScoresînforeachbuclă faptul că iterează prin matricea de punctaje, actualizați codul după cum urmează:foreach (int score in studentScores)Pentru a înlocui declarațiile variabilei specifice Sophia cu nume mai generice, actualizați codul după cum urmează:
int sumAssignmentScores = 0; decimal currentStudentGrade = 0;Aceste două declarații de variabilă sunt menite să înlocuiască următoarele declarații specifice variabilei Sophia:
int sophiaSum = 0; decimal sophiaScore;Pentru a aplica noul nume de variabilă la ecuația utilizată pentru a însuma punctajele elevilor/studenților, actualizați blocul de cod interior
foreachdupă cum urmează:foreach (int score in studentScores) { // add the exam score to the sum sumAssignmentScores += score; }Pentru a aplica noul nume de variabilă ecuației utilizate pentru a calcula punctajul mediu, actualizați codul după cum urmează:
currentStudentGrade = (decimal)(sumAssignmentScores) / currentAssignments;Acordați-vă un minut pentru a vă revizui codul.
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-"); }Buclele imbricate
foreachvor trece acum prin numele elevilor/studenților și vor utiliza punctajele elevilor/studenților pentru a-și calcula notele, dar tot trebuie să actualizați codul utilizat pentru a genera raportul de punctaj.Pentru a imprima numele elevului/studentului și punctajul calculat pe consolă, actualizați a doua
Console.WriteLineinstrucțiune după cum urmează:Console.WriteLine($"{currentStudent}\t\t{currentStudentGrade}\t?");Observați că acest cod a înlocuit atribuirea notei cu litera "?". Veți lucra la automatizarea atribuirii notelor de scrisoare în următorul exercițiu.
Mutați instrucțiunea
Console.WriteLineutilizată pentru a scrie etichetele de coloană ale raportului de punctaj în locația aflată imediat deasupra buclei exterioareforeach.Nu doriți să repetați anteturile de coloană pentru fiecare punctaj de elev/student, astfel încât să mutați acest cod într-un punct deasupra buclei exterioare
foreach.În meniul Fișier cod Visual Studio, faceți clic pe Salvare.
Luați un minut pentru a revizui codul aplicației.
Aplicația completă ar trebui să corespundă acum următorului cod:
// 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?"); }Cu codul care generează raportul de punctaj al elevului/studentului actualizat; se pare că sunteți gata să vă verificați lucrul.
Verificați-vă activitatea
În această activitate, veți rula aplicația pentru a verifica dacă logica de cod funcționează așa cum vă așteptați.
Asigurați-vă că ați salvat modificările în fișierul Program.cs.
În vizualizarea Visual Studio Code EXPLORER, faceți clic dreapta pe Starter, apoi selectați Deschidere în Terminal integrat.
În linia de comandă Terminal, tastați compilare dotnet , apoi apăsați pe Enter.
Dacă vedeți Mesaje de eroare sau Avertisment, trebuie să le remediați înainte de a continua.
În linia de comandă Terminal, tastați run dotnet , apoi apăsați pe Enter.
Verificați dacă codul dvs. a produs următoarea ieșire:
Student Grade Sophia 92.2 ? Andrew 89.6 ? Emma 85.6 ? Logan 91.2 ? Press the Enter key to continueÎn panoul TERMINAL, pentru a opri rularea aplicației, apăsați tasta Enter.
Închideți panoul Terminal.
Felicitări, aplicația dvs. a ajuns foarte departe de locul de unde ați început. Utilizați eficient matricele și foreach iterațiile și ați integrat o if instrucțiune care permite codului să selecteze matricea corectă de punctaje.