Structs em C
Registros (Estruturas) em C
- As estruturas (struct)
em C permitem agrupar dados heterogêneos que estão naturalmente relacionados
da mesma forma que os registros (record) em Pascal.
- Registro / Estrutura em algoritmo:
tipo
<registro> = registro
<campo1>: <tipo1>;
<campo2>: <tipo2>;
...
<campoN>: <tipoN>;
fim;
struct <nomeStruct>
{
<tipo1>: <campo1>;
<tipo2>: <campo2>
...
<campoN>: <tipoN>;
}
- Exemplo 1 (definição de um
registro/estrutura
que representa um aluno e de uma variável global):
struct regAluno {
char nome[30];
char matricula[8];
float media;
int frequencia;
};
// variavel global do tipo struct
struct regAluno aluno;
- Exemplo 2 (definição de um
registro/estrutura
que representa um aluno juntamente com a declarações de variáveis):
struct
{
char nome[30];
char matricula[8];
float media;
int frequencia;
} aluno1, aluno2; // duas variáveis declaradas
- Observe que a struct acima não tem um nome e portanto não é
possível declarar outras variáveis além de aluno1 e aluno2 reusando a
struct definida.
- O acesso aos campos da estrutura é realizado através da mesma notação
usada em algoritmos e Pascal, ou seja, colocando um "." entre o nome da
variável do tipo struct e o nome do campo que se deseja acessar. Por
exemplo, para acessar o campo nome da variável aluno1 ,
utiliza-se a expressão aluno1.nome.
- Exemplo:
#include <stdio.h>
#include <strings.h>
struct regAluno {
char nome[30];
char matricula[8];
float media;
int frequencia;
};
// variavel global do tipo struct
struct regAluno aluno;
int main()
{
// struct regAluno aluno;
// struct {
// char nome[30];
// char matricula[8];
// float media;
// int frequencia;
// } aluno;
int aprovados, reprovados;
aprovados = reprovados = 0;
printf("Nome:"); scanf("%s", aluno.nome);
while (strcmp(aluno.nome, "fim") != 0)
{
printf("Matricula:"); scanf("%s", aluno.matricula);
printf("Media:"); scanf("%f", &aluno.media);
printf("Frequencia:"); scanf("%d", &aluno.frequencia);
if ((aluno.media >= 7.0) && (aluno.frequencia >= 60))
aprovados++;
else
reprovados++;
printf("Nome:"); scanf("%s", aluno.nome);
}
printf("Total de aprovados: %d\n", aprovados);
printf("Total de reprovados: %d", reprovados);
}