Struct com Arrays e Outros Structs
Em algumas estruturas, torna-se necessário utilizar um array de estruturas aninhadas quando um objeto contém vários sub-objetos relacionados. Por exemplo, se um estudante pode cursar várias disciplinas, faz sentido representar as disciplinas como um array de estruturas dentro da estrutura Student.
Sintaxe de exemplo:
OuterStruct.NestedStruct[1].NestedField;
Para acessar um elemento do array de estruturas aninhadas, primeiro faz-se referência à estrutura externa, depois utiliza-se um índice para selecionar o elemento desejado do array e, por fim, acessa-se um campo específico desse elemento.
Exemplo prático
Imagine que cada estudante possui um nome, idade e um conjunto de disciplinas. Cada disciplina contém seu título, instrutor e número de créditos.
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; }
Neste exemplo, a estrutura Student possui um array courses com três elementos do tipo Course. Cada curso possui seu próprio título, instrutor e número de créditos. Para acessar um curso específico, utilize o índice do array e o operador ponto: student.courses[1].instructor.
O uso de arrays de estruturas aninhadas é útil para representar objetos com subobjetos repetidos, como estudantes com cursos, lojas com produtos ou livros com autores.
Swipe to start coding
O estudante é representado por uma estrutura Student que contém um array de tamanho fixo de estruturas aninhadas Course. Cada curso possui um nome, instrutor e número de créditos. A função deve iterar por todos os cursos e somar os créditos.
Implemente uma função calculateTotalCredits com tipo de retorno int.
- Dentro da função, crie uma variável
intchamadatotalinicializada com0. - Utilize um laço
forpara iterar de0até o número de cursos (3). - Para cada curso, acesse
creditse adicione aototal. - Retorne o valor final de
total.
Solução
Obrigado pelo seu feedback!
single
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Incrível!
Completion taxa melhorada para 4.35
Struct com Arrays e Outros Structs
Deslize para mostrar o menu
Em algumas estruturas, torna-se necessário utilizar um array de estruturas aninhadas quando um objeto contém vários sub-objetos relacionados. Por exemplo, se um estudante pode cursar várias disciplinas, faz sentido representar as disciplinas como um array de estruturas dentro da estrutura Student.
Sintaxe de exemplo:
OuterStruct.NestedStruct[1].NestedField;
Para acessar um elemento do array de estruturas aninhadas, primeiro faz-se referência à estrutura externa, depois utiliza-se um índice para selecionar o elemento desejado do array e, por fim, acessa-se um campo específico desse elemento.
Exemplo prático
Imagine que cada estudante possui um nome, idade e um conjunto de disciplinas. Cada disciplina contém seu título, instrutor e número de créditos.
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; }
Neste exemplo, a estrutura Student possui um array courses com três elementos do tipo Course. Cada curso possui seu próprio título, instrutor e número de créditos. Para acessar um curso específico, utilize o índice do array e o operador ponto: student.courses[1].instructor.
O uso de arrays de estruturas aninhadas é útil para representar objetos com subobjetos repetidos, como estudantes com cursos, lojas com produtos ou livros com autores.
Swipe to start coding
O estudante é representado por uma estrutura Student que contém um array de tamanho fixo de estruturas aninhadas Course. Cada curso possui um nome, instrutor e número de créditos. A função deve iterar por todos os cursos e somar os créditos.
Implemente uma função calculateTotalCredits com tipo de retorno int.
- Dentro da função, crie uma variável
intchamadatotalinicializada com0. - Utilize um laço
forpara iterar de0até o número de cursos (3). - Para cada curso, acesse
creditse adicione aototal. - Retorne o valor final de
total.
Solução
Obrigado pelo seu feedback!
single