Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Вкладені Структури | Розширене Використання Структур
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
Опанування Структур у C

bookВкладені Структури

У C структурах можна використовувати інші структури як члени, окрім базових типів, таких як int або char, масивів і вказівників. Вкладені структури корисні для логічного групування пов’язаних даних.

Вбудована вкладена структура

Вбудована вкладена структура оголошується безпосередньо всередині зовнішньої структури. Це означає, що вкладена структура існує лише у межах зовнішньої структури й не може бути використана в інших місцях.

main.c

main.c

copy
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; }

У цьому прикладі структура Address визначена всередині Person, тому вона існує лише в контексті структури Person. Доступ до полів вкладеної структури здійснюється через person.address, що дозволяє отримати street, city та index. Такий підхід зручний, коли вкладені дані є специфічними для однієї зовнішньої структури і не потребують повторного використання в інших місцях.

Окрема вкладена структура

Окрема вкладена структура оголошується незалежно, а потім включається до зовнішньої структури. Це дозволяє повторно використовувати вкладену структуру в декількох зовнішніх структурах або створювати її окремі екземпляри.

main.c

main.c

copy
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; }

Тут Address оголошується незалежно від Person, тому його можна використовувати окремо або всередині кількох структур. Під час ініціалізації Person ми присвоюємо екземпляр Address полю address. Доступ до вкладених полів здійснюється так само через person.address. Такий підхід є більш гнучким і сприяє повторному використанню коду та модульному проєктуванню.

Завдання

Swipe to start coding

Кожен продукт представлений структурою Product, яка містить вкладену структуру Manufacturer. Функція повинна проходити по масиву продуктів, перевіряти, чи належить продукт вказаному виробнику, і підсумовувати загальну вартість (price * quantity) усіх відповідних продуктів.

Реалізуйте функцію calculateManufacturerTotal з типом повернення float.

  1. Усередині функції створіть змінну типу float з іменем total, ініціалізовану значенням 0.0f.
  2. Використайте цикл for для проходження по масиву продуктів від 0 до n.
  3. Для кожного продукту порівнюйте поле manufacturer.companyName продукту з параметром companyName за допомогою strcmp.
  4. Якщо значення співпадають, додайте price * quantity до total.
  5. Поверніть фінальне значення змінної total.

Рішення

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 4. Розділ 1
single

single

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Suggested prompts:

Can you show me an example of how to declare an embedded nested structure in C?

What are the advantages and disadvantages of using embedded versus separate nested structures?

How do I access the fields of a nested structure in C?

close

bookВкладені Структури

Свайпніть щоб показати меню

У C структурах можна використовувати інші структури як члени, окрім базових типів, таких як int або char, масивів і вказівників. Вкладені структури корисні для логічного групування пов’язаних даних.

Вбудована вкладена структура

Вбудована вкладена структура оголошується безпосередньо всередині зовнішньої структури. Це означає, що вкладена структура існує лише у межах зовнішньої структури й не може бути використана в інших місцях.

main.c

main.c

copy
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; }

У цьому прикладі структура Address визначена всередині Person, тому вона існує лише в контексті структури Person. Доступ до полів вкладеної структури здійснюється через person.address, що дозволяє отримати street, city та index. Такий підхід зручний, коли вкладені дані є специфічними для однієї зовнішньої структури і не потребують повторного використання в інших місцях.

Окрема вкладена структура

Окрема вкладена структура оголошується незалежно, а потім включається до зовнішньої структури. Це дозволяє повторно використовувати вкладену структуру в декількох зовнішніх структурах або створювати її окремі екземпляри.

main.c

main.c

copy
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; }

Тут Address оголошується незалежно від Person, тому його можна використовувати окремо або всередині кількох структур. Під час ініціалізації Person ми присвоюємо екземпляр Address полю address. Доступ до вкладених полів здійснюється так само через person.address. Такий підхід є більш гнучким і сприяє повторному використанню коду та модульному проєктуванню.

Завдання

Swipe to start coding

Кожен продукт представлений структурою Product, яка містить вкладену структуру Manufacturer. Функція повинна проходити по масиву продуктів, перевіряти, чи належить продукт вказаному виробнику, і підсумовувати загальну вартість (price * quantity) усіх відповідних продуктів.

Реалізуйте функцію calculateManufacturerTotal з типом повернення float.

  1. Усередині функції створіть змінну типу float з іменем total, ініціалізовану значенням 0.0f.
  2. Використайте цикл for для проходження по масиву продуктів від 0 до n.
  3. Для кожного продукту порівнюйте поле manufacturer.companyName продукту з параметром companyName за допомогою strcmp.
  4. Якщо значення співпадають, додайте price * quantity до total.
  5. Поверніть фінальне значення змінної total.

Рішення

Switch to desktopПерейдіть на комп'ютер для реальної практикиПродовжуйте з того місця, де ви зупинились, використовуючи один з наведених нижче варіантів
Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 4. Розділ 1
single

single

some-alt