Strutture complesse in C

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:

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 allentatori 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.


Alcuni link utili

Media per riga e per colonna

Somma elementi diagonale principale di una matrice

Come sommare gli elementi della cornice esterna

Come sommare due matrici

Sommare dei numeri di una matrice

Matrice trasposta

Prodotto tra matrici

Ricerca elementi in una matrice

Inserire dati in una matrice

Tavola pitagorica in C

Array multidimensionali

Programma sui triangoli in C

Media dei numeri in un array

Array con numeri random

Quick sort in C

Selection sort in C

Merge sort in C

Insertion Sort in C

Autore dell'articolo: cristina

Avatar per Coding Creativo

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *