Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Struct Taulukoiden ja Muiden Structien Kanssa | Edistyneet Structin Käyttötavat
C-Rakenteiden Hallinta

bookStruct 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

main.c

copy
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.

Tehtävä

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.

  1. Funktion sisällä luodaan int-tyyppinen muuttuja total ja asetetaan sen arvoksi 0.
  2. Käytetään for-silmukkaa, jossa indeksi i alkaa arvosta 0 ja jatkuu kurssien määrään asti.
  3. Jokaisella silmukan kierroksella lisätään kurssin credits-arvo muuttujaan total.
  4. Lopuksi palautetaan muuttujan total arvo.

Ratkaisu

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 4. Luku 2
single

single

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Suggested prompts:

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?

close

bookStruct 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

main.c

copy
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.

Tehtävä

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.

  1. Funktion sisällä luodaan int-tyyppinen muuttuja total ja asetetaan sen arvoksi 0.
  2. Käytetään for-silmukkaa, jossa indeksi i alkaa arvosta 0 ja jatkuu kurssien määrään asti.
  3. Jokaisella silmukan kierroksella lisätään kurssin credits-arvo muuttujaan total.
  4. Lopuksi palautetaan muuttujan total arvo.

Ratkaisu

Switch to desktopVaihda työpöytään todellista harjoitusta vartenJatka siitä, missä olet käyttämällä jotakin alla olevista vaihtoehdoista
Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 4. Luku 2
single

single

some-alt