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
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.
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.
- Luo funktion sisälle
int-tyyppinen muuttujatotalja aseta sen arvoksi0. - Käytä
for-silmukkaa, joka käy indeksit0–3 läpi (koska kursseja on 3). - Jokaisella silmukan kierroksella lisää kurssin
credits-arvo muuttujaantotal. - Palauta lopuksi muuttujan
totalarvo.
Ratkaisu
Kiitos palautteestasi!
single
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme