Bird
Raised Fist0
Cprogramming~30 mins

Nested structures - Mini Project: Build & Apply

Choose your learning style10 modes available
Working with Nested Structures in C
📖 Scenario: You are creating a simple program to store information about books in a library. Each book has a title, an author, and a publication year. The author itself has a first name and a last name.
🎯 Goal: Build a program that uses nested structures to store and display information about a book and its author.
📋 What You'll Learn
Define a structure called Author with firstName and lastName as character arrays.
Define a structure called Book that contains a title character array, an Author structure, and an year integer.
Create a variable of type Book and assign exact values to all fields.
Print the book's title, author's full name, and publication year.
💡 Why This Matters
🌍 Real World
Nested structures are used to model complex data like books with authors, addresses with cities, or employees with departments.
💼 Career
Understanding nested structures is important for jobs involving C programming, embedded systems, and software that manages structured data.
Progress0 / 4 steps
1
Define the nested structures
Define a structure called Author with firstName and lastName as character arrays of size 50 each. Then define a structure called Book that contains a title character array of size 100, an Author structure called author, and an integer year.
C
Hint

Use struct keyword to define both Author and Book structures. Remember to include the nested Author inside Book.

2
Create a book variable and assign values
Create a variable called myBook of type struct Book. Assign the title as "The C Programming Language", the author's first name as "Brian", last name as "Kernighan", and the year as 1978. Use strcpy to copy strings.
C
Hint

Remember to include string.h for strcpy. Use dot notation to access nested fields.

3
Write code to print book details
Inside the main function, after assigning values, write printf statements to print the book's title, author's full name (first and last name separated by a space), and publication year on separate lines.
C
Hint

Use printf with format specifiers %s for strings and %d for integers. Access nested fields with dot notation.

4
Run the program and display output
Run the program and print the output exactly as shown:
Title: The C Programming Language
Author: Brian Kernighan
Year: 1978
C
Hint

Make sure your printf statements match the expected output exactly, including spaces and new lines.

Practice

(1/5)
1. What is a nested structure in C programming?
easy
A. A structure that contains another structure as a member
B. A structure with only one member
C. A structure declared inside a function
D. A structure that uses pointers only

Solution

  1. Step 1: Understand structure composition

    A nested structure means one structure is included inside another as a member.
  2. Step 2: Rule out distractors

    The other options describe unrelated concepts: a structure using pointers only, with only one member, or declared inside a function.
  3. Final Answer:

    A structure that contains another structure as a member -> Option A
  4. Quick Check:

    Nested structure = structure inside structure [OK]
Hint: Nested means one structure inside another [OK]
Common Mistakes:
  • Thinking nested means pointer usage
  • Confusing nested with single-member structures
  • Assuming nested means declared inside functions
2. Which of the following is the correct syntax to access a member of a nested structure in C?
easy
A. outer.inner->member
B. outer->inner->member
C. outer.inner.member
D. outer->inner.member

Solution

  1. Step 1: Identify access operator for nested structures

    When using nested structures (not pointers), use dot notation for each level: outer.inner.member.
  2. Step 2: Understand pointer vs non-pointer access

    Arrow (->) is used only when accessing members through pointers, which is not stated here.
  3. Final Answer:

    outer.inner.member -> Option C
  4. Quick Check:

    Use dot for nested struct members [OK]
Hint: Use dot notation for nested struct members [OK]
Common Mistakes:
  • Using arrow (->) when not using pointers
  • Mixing dot and arrow incorrectly
  • Confusing member access syntax
3. What is the output of the following C code?
typedef struct {
    int day;
    int month;
    int year;
} Date;

typedef struct {
    char name[20];
    Date birthday;
} Person;

int main() {
    Person p = {"Alice", {15, 8, 1990}};
    printf("%d-%d-%d", p.birthday.day, p.birthday.month, p.birthday.year);
    return 0;
}
medium
A. 15-8-1990
B. Alice-15-8
C. 1990-8-15
D. Compilation error

Solution

  1. Step 1: Understand structure initialization

    Person p is initialized with name "Alice" and birthday as Date {15, 8, 1990}.
  2. Step 2: Trace printf output

    printf prints p.birthday.day (15), p.birthday.month (8), p.birthday.year (1990) separated by dashes.
  3. Final Answer:

    15-8-1990 -> Option A
  4. Quick Check:

    Print nested struct members correctly [OK]
Hint: Access nested members with dot notation [OK]
Common Mistakes:
  • Printing name instead of date
  • Mixing order of day, month, year
  • Forgetting to initialize nested struct
4. Identify the error in this nested structure code snippet:
struct Address {
    char city[20];
    int zip;
};

struct Employee {
    char name[30];
    struct Address addr;
};

int main() {
    struct Employee emp;
    emp.addr->zip = 12345;
    return 0;
}
medium
A. Missing semicolon after struct definitions
B. Using '->' operator on a non-pointer structure variable
C. Incorrect declaration of nested structure
D. Cannot assign integer to zip member

Solution

  1. Step 1: Check member access syntax

    emp.addr is a structure variable, not a pointer, so '->' operator is invalid here.
  2. Step 2: Correct operator usage

    Use dot operator '.' to access zip: emp.addr.zip = 12345;
  3. Final Answer:

    Using '->' operator on a non-pointer structure variable -> Option B
  4. Quick Check:

    Use '.' for struct variables, '->' for pointers [OK]
Hint: Use '.' for struct, '->' only for pointers [OK]
Common Mistakes:
  • Using '->' on struct variables
  • Confusing pointer and non-pointer access
  • Ignoring compiler error messages
5. Given the following nested structures, how would you write a function in C that takes a Person and returns the birth year?
typedef struct {
    int day;
    int month;
    int year;
} Date;

typedef struct {
    char name[50];
    Date birthday;
} Person;

// Function prototype here
Which of the following is the correct function definition?
hard
A. int getBirthYear(Person *p) { return p.birthday->year; }
B. int getBirthYear(Person *p) { return p->birthday.year; }
C. int getBirthYear(Person p) { return p.year; }
D. int getBirthYear(Person p) { return p.birthday.year; }

Solution

  1. Step 1: Understand parameter passing

    The function takes a Person by value, so use dot notation to access members.
  2. Step 2: Access nested member correctly

    Access birthday.year as p.birthday.year since p is not a pointer.
  3. Final Answer:

    int getBirthYear(Person p) { return p.birthday.year; } -> Option D
  4. Quick Check:

    Use dot for struct value parameters [OK]
Hint: Use dot for struct, arrow for pointer parameters [OK]
Common Mistakes:
  • Using arrow (->) on non-pointer parameter
  • Accessing wrong member name
  • Confusing pointer and value parameter syntax
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard