Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Sisäkkäiset Rakenteet | Edistynyt Structien Käyttö
C-Rakenteet
Osio 4. Luku 1
single

single

Sisäkkäiset Rakenteet

Pyyhkäise näyttääksesi valikon

C-kielessä rakenteet voivat sisältää muita rakenteita jäseniä, perusdatatyyppien kuten int tai char, taulukoiden ja osoittimien lisäksi. Sisäkkäiset rakenteet ovat hyödyllisiä, kun halutaan ryhmitellä toisiinsa liittyvää tietoa loogisella tavalla.

Sisäänrakennettu sisäkkäinen rakenne

Sisäänrakennettu sisäkkäinen rakenne määritellään suoraan ulomman rakenteen sisällä. Tämä tarkoittaa, että sisäkkäinen rakenne on olemassa vain ulomman rakenteen sisällä eikä sitä voi käyttää muualla.

main.c

main.c

123456789101112131415161718192021
#include <stdio.h> struct Person { char name[50]; int age; struct Address { char street[50]; char city[50]; char index[10]; } address; // embedded nested structure }; int main() { struct Person person = { "Sherlock Holmes", 27, {"Baker Street", "London", "221B"} }; printf("Name: %s\n", person.name); printf("Age: %d\n", person.age); printf("Address: %s, %s, %s\n", person.address.index, person.address.street, person.address.city); return 0; }

Tässä esimerkissä Address-rakenne on määritelty Person-rakenteen sisällä, joten se on olemassa vain Person-rakenteen yhteydessä. Sisäkkäisen rakenteen kenttiin pääsee käsiksi käyttämällä person.address, jonka avulla voidaan hakea street, city ja index. Tämä lähestymistapa on kätevä, kun sisäkkäinen tieto liittyy vain yhteen ulompaan rakenteeseen eikä sitä tarvitse käyttää muualla.

Erillinen sisäkkäinen rakenne

Erillinen sisäkkäinen rakenne määritellään itsenäisesti ja liitetään sitten ulompaan rakenteeseen. Tämä mahdollistaa sisäkkäisen rakenteen uudelleenkäytön useissa ulommissa rakenteissa tai sen itsenäisen käytön.

main.c

main.c

123456789101112131415161718192021222324
#include <stdio.h> struct Address { char street[50]; char city[50]; char index[10]; }; struct Person { char name[50]; int age; struct Address address; // nested structure }; int main() { struct Address addr = {"Baker Street", "London", "221B"}; struct Person person = {"Sherlock Holmes", 27, addr}; printf("Name: %s\n", person.name); printf("Age: %d\n", person.age); printf("Address: %s, %s, %s\n", person.address.index, person.address.street, person.address.city); return 0; }

Tässä Address määritellään itsenäisesti erillään Person-rakenteesta, joten sitä voidaan käyttää sellaisenaan tai useissa eri rakenteissa. Kun alustetaan Person, Address-kenttään annetaan address-instanssi. Sisäkkäisiin kenttiin päästään käsiksi samalla tavalla käyttäen person.address. Tämä lähestymistapa on joustavampi ja edistää koodin uudelleenkäyttöä sekä modulaarista suunnittelua.

Tehtävä

Pyyhkäise aloittaaksesi koodauksen

Jokainen tuote esitetään rakenteella Product, joka sisältää sisäkkäisen rakenteen Manufacturer. Funktion tulee käydä läpi tuote-taulukko, tarkistaa kuuluuko tuote määritellylle valmistajalle, ja laskea yhteen kaikkien täsmäävien tuotteiden kokonaisarvo (price * quantity).

Toteuta funktio calculateManufacturerTotal, jonka paluuarvotyyppi on float.

  1. Luo funktion sisällä float-tyyppinen muuttuja total ja aseta sen arvoksi 0.0f.
  2. Käytä for-silmukkaa, joka käy tuotteet läpi indeksistä 0 arvoon n asti.
  3. Jokaiselle tuotteelle vertaa tuotteen manufacturer.companyName-kenttää parametrina annettuun companyName-arvoon käyttäen strcmp-funktiota.
  4. Jos nimet täsmäävät, lisää price * quantity muuttujaan total.
  5. 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 1
single

single

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

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

some-alt