Struct Taulukoiden ja Muiden Structien Kanssa
Joissakin rakenteissa on tarpeen käyttää sisäkkäiden rakenteiden taulukkoa, kun yhdellä oliolla on useita siihen liittyviä alikohteita. Esimerkiksi, jos opiskelija voi osallistua useille kursseille, on järkevää esittää kurssit taulukkona rakenteita Student-rakenteen sisällä.
Esimerkkisyntaksi:
OuterStruct.NestedStruct[1].NestedField;
Päästäksesi käsiksi sisäkkäisen rakenteen taulukon alkioon, viittaa ensin ulompaan rakenteeseen, käytä sitten indeksiä valitaksesi haluttu taulukon alkio ja lopuksi viittaa kyseisen alkion tiettyyn kenttään.
Käytännön esimerkki
Kuvittele, että jokaisella opiskelijalla on nimi, ikä ja joukko kursseja. Jokainen kurssi sisältää otsikon, opettajan ja opintopisteiden määrän.
main.c
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152#include <stdio.h> #include <string.h> struct Course { char name[50]; char instructor[50]; int credits; }; struct Student { char name[50]; int age; struct Course courses[3]; // array of nested structures }; int main() { struct Student student; // Initialize student strcpy(student.name, "Alice Johnson"); student.age = 20; // Initialize courses strcpy(student.courses[0].name, "Mathematics"); strcpy(student.courses[0].instructor, "Dr. Smith"); student.courses[0].credits = 4; strcpy(student.courses[1].name, "Computer Science"); strcpy(student.courses[1].instructor, "Prof. Brown"); student.courses[1].credits = 3; strcpy(student.courses[2].name, "History"); strcpy(student.courses[2].instructor, "Dr. Green"); student.courses[2].credits = 2; // Display information printf("Student: %s\n", student.name); printf("Age: %d\n", student.age); printf("Courses:\n"); for (int i = 0; i < 3; i++) { printf(" Course %d: %s, Instructor: %s, Credits: %d\n", i + 1, student.courses[i].name, student.courses[i].instructor, student.courses[i].credits); } // Example of accessing a specific nested field printf("\nInstructor of the second course: %s\n", student.courses[1].instructor); return 0; }
Tässä esimerkissä Student-rakenne sisältää courses-taulukon, jossa on kolme Course-tyyppistä alkiota. Jokaisella kurssilla on oma otsikko, opettaja ja opintopistemäärä. Yksittäiseen kurssiin pääsee käsiksi käyttämällä taulukon indeksiä ja pisteoperaattoria: student.courses[1].instructor.
Sisäkkäisten rakenteiden taulukoiden käyttö on hyödyllistä, kun halutaan kuvata olioita, joilla on toistuvia alaolioita, kuten opiskelijoita kursseineen, kauppoja tuotteineen tai kirjoja kirjoittajineen.
Swipe to start coding
Opiskelija esitetään rakenteella Student, joka sisältää kiinteänkokoisen taulukon sisäkkäisiä rakenteita Course. Jokaisella kurssilla on nimi, opettaja ja opintopisteiden määrä. Funktion tulee käydä kaikki kurssit läpi ja laskea opintopisteiden summa.
Toteuta funktio calculateTotalCredits, jonka paluuarvotyyppi on int.
- Funktion sisällä luodaan
int-tyyppinen muuttujatotalja asetetaan sen arvoksi0. - Käytetään
for-silmukkaa, jossa indeksi i alkaa arvosta0ja jatkuu kurssien määrään asti. - Jokaisella silmukan kierroksella lisätään kurssin
credits-arvo muuttujaantotal. - Lopuksi palautetaan muuttujan
totalarvo.
Ratkaisu
Kiitos palautteestasi!
single
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Can you show me a code example of how to define these nested structures?
How do I access or modify a specific course for a student?
What are some other real-world scenarios where nested structure arrays are useful?
Mahtavaa!
Completion arvosana parantunut arvoon 4.35
Struct Taulukoiden ja Muiden Structien Kanssa
Pyyhkäise näyttääksesi valikon
Joissakin rakenteissa on tarpeen käyttää sisäkkäiden rakenteiden taulukkoa, kun yhdellä oliolla on useita siihen liittyviä alikohteita. Esimerkiksi, jos opiskelija voi osallistua useille kursseille, on järkevää esittää kurssit taulukkona rakenteita Student-rakenteen sisällä.
Esimerkkisyntaksi:
OuterStruct.NestedStruct[1].NestedField;
Päästäksesi käsiksi sisäkkäisen rakenteen taulukon alkioon, viittaa ensin ulompaan rakenteeseen, käytä sitten indeksiä valitaksesi haluttu taulukon alkio ja lopuksi viittaa kyseisen alkion tiettyyn kenttään.
Käytännön esimerkki
Kuvittele, että jokaisella opiskelijalla on nimi, ikä ja joukko kursseja. Jokainen kurssi sisältää otsikon, opettajan ja opintopisteiden määrän.
main.c
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152#include <stdio.h> #include <string.h> struct Course { char name[50]; char instructor[50]; int credits; }; struct Student { char name[50]; int age; struct Course courses[3]; // array of nested structures }; int main() { struct Student student; // Initialize student strcpy(student.name, "Alice Johnson"); student.age = 20; // Initialize courses strcpy(student.courses[0].name, "Mathematics"); strcpy(student.courses[0].instructor, "Dr. Smith"); student.courses[0].credits = 4; strcpy(student.courses[1].name, "Computer Science"); strcpy(student.courses[1].instructor, "Prof. Brown"); student.courses[1].credits = 3; strcpy(student.courses[2].name, "History"); strcpy(student.courses[2].instructor, "Dr. Green"); student.courses[2].credits = 2; // Display information printf("Student: %s\n", student.name); printf("Age: %d\n", student.age); printf("Courses:\n"); for (int i = 0; i < 3; i++) { printf(" Course %d: %s, Instructor: %s, Credits: %d\n", i + 1, student.courses[i].name, student.courses[i].instructor, student.courses[i].credits); } // Example of accessing a specific nested field printf("\nInstructor of the second course: %s\n", student.courses[1].instructor); return 0; }
Tässä esimerkissä Student-rakenne sisältää courses-taulukon, jossa on kolme Course-tyyppistä alkiota. Jokaisella kurssilla on oma otsikko, opettaja ja opintopistemäärä. Yksittäiseen kurssiin pääsee käsiksi käyttämällä taulukon indeksiä ja pisteoperaattoria: student.courses[1].instructor.
Sisäkkäisten rakenteiden taulukoiden käyttö on hyödyllistä, kun halutaan kuvata olioita, joilla on toistuvia alaolioita, kuten opiskelijoita kursseineen, kauppoja tuotteineen tai kirjoja kirjoittajineen.
Swipe to start coding
Opiskelija esitetään rakenteella Student, joka sisältää kiinteänkokoisen taulukon sisäkkäisiä rakenteita Course. Jokaisella kurssilla on nimi, opettaja ja opintopisteiden määrä. Funktion tulee käydä kaikki kurssit läpi ja laskea opintopisteiden summa.
Toteuta funktio calculateTotalCredits, jonka paluuarvotyyppi on int.
- Funktion sisällä luodaan
int-tyyppinen muuttujatotalja asetetaan sen arvoksi0. - Käytetään
for-silmukkaa, jossa indeksi i alkaa arvosta0ja jatkuu kurssien määrään asti. - Jokaisella silmukan kierroksella lisätään kurssin
credits-arvo muuttujaantotal. - Lopuksi palautetaan muuttujan
totalarvo.
Ratkaisu
Kiitos palautteestasi!
single