Menu
Coddy logo textTech

Инициализация структур

Часть раздела Logic & Flow путешествия по C на Coddy — урок 42 из 63.

Хотя вы можете создавать переменные структур, а затем присваивать значения их членам по отдельности, язык C предоставляет более удобный способ установки начальных значений. Вы можете инициализировать переменную структуры во время объявления, используя список инициализации, заключенный в фигурные скобки.

Синтаксис инициализации структуры:

struct StructureName variableName = {value1, value2, ...};

Используя наш пример структуры Point, вы можете объявить и инициализировать её одной строкой:

struct Point p1 = {10, 20};

Это создает переменную Point с именем p1, где x установлено в 10, а y — в 20. Значения в списке инициализации присваиваются членам структуры в том порядке, в котором они были объявлены в определении структуры.

Этот подход к инициализации не только более лаконичен, чем отдельные присваивания, но и гарантирует, что ваша struct будет содержать осмысленные значения, а не случайные «мусорные» данные. Это особенно полезно, когда начальные значения известны на этапе компиляции и вы хотите эффективно создавать готовые к использованию переменные struct.

challenge icon

Задание

Легко

Создайте программу на языке C, которая демонстрирует инициализацию структур с использованием списков инициализации. Ваша программа должна:

  1. Определить struct с именем Employee со следующими членами:
    • Целое число id для хранения идентификатора сотрудника
    • Символьный массив department размером 15 для хранения названия отдела
    • Целое число yearsOfService для хранения стажа работы (в годах)
    • Число с плавающей точкой salary для хранения зарплаты сотрудника
  2. Создать три переменные типа Employee, используя списки инициализации со следующими данными:
    • emp1: ID 101, отдел "Engineering", 5 лет стажа, зарплата 75000.50
    • emp2: ID 102, отдел "Marketing", 3 года стажа, зарплата 65000.25
    • emp3: ID 103, отдел "Sales", 8 лет стажа, зарплата 80000.75
  3. Вывести информацию о каждом сотруднике в следующем точном формате:
    • Employee 1:
    • ID: [id]
    • Department: [department]
    • Years of Service: [yearsOfService]
    • Salary: [salary]
    • Employee 2:
    • ID: [id]
    • Department: [department]
    • Years of Service: [yearsOfService]
    • Salary: [salary]
    • Employee 3:
    • ID: [id]
    • Department: [department]
    • Years of Service: [yearsOfService]
    • Salary: [salary]
  4. Рассчитать и вывести общую зарплату всех трех сотрудников в формате: Total Salary: [total]
  5. Рассчитать и вывести средний стаж работы в формате: Average Years of Service: [average]

Эта задача проверяет ваше понимание инициализации структур с использованием списков инициализации, где вы объявляете и инициализируете переменные структуры в одной строке. Значения в списке инициализации должны быть указаны в том же порядке, в котором члены были объявлены в определении структуры.

Ваш ожидаемый вывод должен быть следующим:

Employee 1:
ID: 101
Department: Engineering
Years of Service: 5
Salary: 75000.50
Employee 2:
ID: 102
Department: Marketing
Years of Service: 3
Salary: 65000.25
Employee 3:
ID: 103
Department: Sales
Years of Service: 8
Salary: 80000.75
Total Salary: 220001.50
Average Years of Service: 5.33

Шпаргалка

Вы можете инициализировать переменную структуры во время объявления, используя список инициализации, заключенный в фигурные скобки:

struct StructureName variableName = {value1, value2, ...};

Пример со структурой Point:

struct Point p1 = {10, 20};

Значения в списке инициализации присваиваются членам структуры в том порядке, в котором они были объявлены в определении структуры. Этот подход более лаконичен, чем отдельные присваивания, и гарантирует, что ваша структура начнется со значимых значений, а не со случайных «мусорных» данных.

Попробуйте сами

#include <stdio.h>

// TODO: Определите структуру Employee здесь

int main() {
    // TODO: Создайте три переменные типа Employee, используя списки инициализации
    
    // TODO: Выведите информацию о каждом сотруднике
    
    // TODO: Рассчитайте и выведите общую зарплату и средний стаж работы
    
    return 0;
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Logic & Flow