libri-javascript-python

In questa lezione studieremo le strutture in C, cioè un insieme di variabili di uno o più tipi, raggruppate da un nome in comune. Fino a questo momento abbiamo studiato gli array, tramite i quali siamo riusciti a raggruppare dati dello stesso tipo, cioè omogenei.

Ma nel momento in cui dobbiamo gestire dati di tipo diverso, possiamo utilizzare le strutture in C. Queste strutture le chiameremo record.

Quindi un record, identificato da un nome, è un insieme di dati, non necessariamente omogenei, identificati dal tipo e dal nome, detti campi.

Il campo è un singolo componente di un record che a sua volta può essere strutturato.

Possiamo anche utilizzare un record come tipo elementare di un altro record, definendo strutture dati complesse che prendono nome di record di record.

O ancora è possibile utilizzare i record come elementi di un array, in questo caso parliamo di array di record o tabella, anche questa è una struttura dati complessa.


Sintassi delle strutture in C

Definiamo adesso la sintassi delle strutture. In linguaggio C il record viene definito dunque con questa sintassi:

struct <nome_struttura> {

<definizione_campi>

}

Facciamo subito degli esempi per capire bene i concetti.

struct alunno {
 char cognome[30];
 char nome[20];
 int classe;
 char sezione;
}

O ancora:

struct auto{
char marca[20];
char modello[20];
char targa[7];
unsigned cilindrata;
}

Innanzitutto è importante dire che all’interno della dichiarazione non è consentita alcuna inizializzazione dei campi. Non è inoltre consentito utilizzare per un campo un nome uguale a quello della struttura. Si possono utilizzare tipi semplici, tipi aggregati o anche tipi definiti dall’utente.


Dichiarare le variabili

Abbiamo visto negli esempi precedenti come definire un tipo di dato aggregato. Adesso, continuiamo a parlare delle strutture in C, e in particolar modo di come dichiarare le variabili.


Ad esempio per dichiarare due variabili di tipo alunno, riferendoci alla struttura precedente, potremmo scrivere:

struct alunno a1,a2;

In definitiva a1 e a2 sono delle istanze di alunno.


Se volessimo dichiarare invece due variabili di tipo auto potremmo scrivere ad esempio:

struct auto m1,m2;

Ma è possibile anche dichiararle in fase di dichiarazione del tipo di struct, ad esempio:

struct alunno {
char cognome[30];
char nome[20];
int classe;
char sezione;
}a1, a2;

La dichiarazione:

struct alunno a1={“Coding”,”Creativo”,2,”A”}

rappresenta una variabile a1 con i valori dei suoi campi inizializzati.


Accedere agli elementi delle strutture

Per riferci ad un campo di una struttura possiamo utilizzare questa sintassi:

<variabile_struct>.<campo>

Utilizzando il punto “.” cioè la notazione puntata.


Cioè, ad esempio: a1.classe

dove a1 è la variabile di tipo struct e classe è il campo.


Quindi per assegnare il valore ad una variabile posso scrivere:

unsigned x;

x=a1.classe;


Per inserire invece nella struct ad esempio il cognome potremmo utilizzare:

gets(a1.cognome);


Mentre per stampare potremmo scrivere:

printf(“cognome: %s”,a1.cognome);


Semplice esempio d’uso

Facciamo dunque un piccolo esempio d’uso delle strutture in C a scopo didattico.

Definiamo una struttura alunno e inseriamo il nome e il cognome. Dichiariamo due variabili a1 e a2. Dopo inseriamo i dati nella struttura e infine li visualizziamo.

#include <stdio.h>

struct alunno {
   char cognome[30];
   char nome[20];
}a1,a2;

int main(){ 
	printf("inserisci il nome:");
	gets(a1.nome);
	printf("inserisci il nome:");
	gets(a1.cognome);
	printf("inserisci il nome:");
	gets(a2.nome);
	printf("inserisci il nome:");
	gets(a2.cognome);
	
	printf("nome: %s", a1.nome);
	printf("\ncognome:%s", a1.cognome);
	printf("\nnome:%s", a2.nome);
	printf("\ncognome:%s", a2.cognome);	

return 0;
}

Nella prossima lezione parleremo ancora delle strutture in C, in particolar modo dell’istruzione typedef e faremo anche degli esempi pratici.

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