Affronteremo in questa lezione le strutture complesse in C, in quanto i singoli campi di una struct possono essere a loro volta di tipo complesso. Possono essere array o anche tipi definiti come struct.
Vediamo subito qualche esempio per capire le strutture complesse. Proponiamo dapprima la struttura semplice:
typedef struct {
char cognome[20];
char nome[20];
char telefono[20];
int anno;
int mese;
int giorno;
} rec_rubrica;
La struttura seguente può essere trasformata in modo da poter gestire la data anche come unico campo piuttosto che per singole componenti:
typedef struct {
char cognome[20];
char nome[20];
char telefono[20];
struct rec_data{
int anno;
int mese;
int giorno;
} dataNascita;
} rec_rubrica;
Dichiariamo quindi la variabile del tipo rubrica:
Fondamenti solidi di programmazione
Impara le basi della programmazione in C in modo semplice, pratico ed efficace. Variabili, cicli, funzioni, logica e algoritmi.
⏱️9 ore di corso registrato
🧩Più di 50 algoritmi risolti passo passo
🎯Livello base
💻100% online, fruibile quando vuoi
rec_rubrica contatto; //dichiarazione di variabile
In questo modo se devo accedere ai campi si possono utilizzare ad esempio queste notazioni.
contatto.nome="Coding";
contatto.dataNascita.anno=2019;
contatto.dataNascita.mese=02;
contatto.dataNascita.giorno=20;
Esempio pratico sull'uso delle strutture complesse in C
Definire la struttura di una Squadra che descrive una squadra di calcio con il proprio allenatore. Ogni squadra è identificata da un nome, dal colore della maglia, dal punteggio raggiunto e dal proprio allenatore. Per ciascun allenatore specifichiamo i campi nome, cognome e il numero dei titoli vinti. Scrivere quindi un programma in C che, dichiarata una tabella Fantacalcio di tipo Squadra con al massimo 10 elementi, permetta di inserire i dati delle squadre e degli allenatori. Visualizzare poi il cognome e il nome degli allenatori che hanno più di 10 punti in classifica. Visualizzare inoltre il numero totale di allenatori che hanno vinto almeno un titolo.
Quindi definiamo la struttura rec_Squadra che contiene i campi specificati sopra e i campi inerenti i dati dell'allenatore definiti come struttura.
#include <stdio.h>
#include <string.h>
#define MAX 10
typedef struct{
char squadra[20];
char maglia[20];
int punteggio;
struct rec_Allenatore{
char cognome[20];
char nome[20];
int titoli_vinti;
}allenatore;
} rec_Squadra;
void main(void){
int i,n,tot=0;
rec_Squadra fantacalcio[MAX]; /*tabella Fantacalcio di tipo rec_Squadra che al più contiene 10 elementi*/
do{
printf("Quante squadre vuoi inserire?:");
scanf("%d", &n);
} while (n<1 || n>MAX);
for (i=0; i<n; i++){
printf("Squadra %d:",i+1);
scanf("%s", fantacalcio[i].squadra);
printf("Colore della maglia:");
scanf("%s", fantacalcio[i].maglia);
printf("punteggio corrente:");
scanf("%d", &fantacalcio[i].punteggio);
printf("cognome allenatore :");
scanf("%s", fantacalcio[i].allenatore.cognome);
printf("nome allenatore :");
scanf("%s", fantacalcio[i].allenatore.nome);
printf("titoli vinti :");
scanf("%d", &fantacalcio[i].allenatore.titoli_vinti);
}
printf("Allenatori la cui squadra ha piu' di 30 punti:");
for (i=0; i<n; i++){
if(fantacalcio[i].punteggio>10)
printf("\nSquadra: %s\n Allenatore: %s\t %s\n ",fantacalcio[i].squadra, fantacalcio[i].allenatore.cognome, fantacalcio[i].allenatore.nome );
if(fantacalcio[i].allenatore.titoli_vinti>=1)
tot++;
}
printf("\nAllenatori che hanno vinto almeno un titolo: %d", tot );
}
Chiaramente questi sono solo dei semplici esempi d'uso delle strutture complesse in C.
Un'email ogni tanto con i nuovi articoli e le guide — niente spam, ti disiscrivi quando vuoi.
🍪 Questo sito usa i cookie
Utilizziamo cookie tecnici necessari al funzionamento e, previo tuo consenso, cookie
analitici e di terze parti per migliorare l'esperienza di navigazione.
Leggi la Cookie Policy e la
Privacy Policy.