Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Rakenne, Jossa on Taulukoita ja Muita Rakenteita | Edistynyt Structien Käyttö
C-Rakenteet
Osio 4. Luku 2
single

single

Rakenne, Jossa on Taulukoita ja Muita Rakenteita

Pyyhkäise näyttääksesi valikon

Joissakin rakenteissa on tarpeen käyttää sisäkkäisten 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, viitataan ensin ulompaan rakenteeseen, sitten käytetään indeksiä halutun taulukon alkion valitsemiseksi, ja lopuksi viitataan kyseisen alkion tiettyyn kenttään.

Käytännön esimerkki

Kuvitellaan, että jokaisella opiskelijalla on nimi, ikä ja joukko kursseja. Jokainen kurssi sisältää otsikon, opettajan ja opintopisteiden määrän.

main.c

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.

Tehtävä

Pyyhkäise aloittaaksesi koodauksen

Opiskelija kuvataan rakenteella Student, joka sisältää kiinteän mittaisen taulukon sisäkkäisiä rakenteita Course. Jokaisella kurssilla on nimi, opettaja ja opintopisteiden määrä. Funktion tulee käydä läpi kaikki kurssit ja laskea opintopisteiden summa.

Toteuta funktio calculateTotalCredits, jonka paluuarvotyyppi on int.

  1. Luo funktion sisälle int-tyyppinen muuttuja total ja aseta sen arvoksi 0.
  2. Käytä for-silmukkaa, joka käy indeksit 0–3 läpi (koska kursseja on 3).
  3. Jokaisella silmukan kierroksella lisää kurssin credits-arvo muuttujaan total.
  4. Palauta lopuksi 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

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

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

some-alt