Un esercizio piuttosto complesso che unisce molti elementi di programmazione: c, struct, vettori, puntatori a tipi strutturati, con selezione switch e le immancabili funzioni. Vediamoli applicati ad un contesto semplice di alunni con la ricerca di un cognome e la visualizzazione del voto massimo.
Il livello di questo esercizio è piuttosto altino. Considerando che queste tematiche vengono affrontate nel terzo anno di informatica di un istituto tecnico, l’esercizio rappresenta un ottimo riepilogo conclusivo per i più giovani e un punto di partenza doveroso per chi prosegue con la carriera universitaria.
#include <stdio.h>
#include <string.h> //per la funzione strcmp
#define MAX 100
typedef struct {
char cognome[30];
char nome[20];
int voto;
}alunno;
void trova(alunno [], int );
void votoMax(alunno [], int );
int main() {
alunno a[MAX];
int n,i,scelta;
do
{
printf("Quanti alunni vuoi inserire?");
scanf("%d", &n);
}
while (n<1 || n>MAX);
for(i=0; i<n; i++)
{
printf("Inserisci il cognome dell'alunno:");
scanf("%s", a[i].cognome);
printf("Inserisci il nome dell'alunno:");
scanf("%s", a[i].nome);
printf("Inserisci il voto:");
scanf("%d", &a[i].voto);
}
printf("\nCerca -> Digita 1");
printf("\nVoto Max -> Digita 2 ");
printf("\nVoto Scegli ");
scanf("%d", &scelta);
switch(scelta)
{
case 1:
trova( a, n);
break;
case 2:
votoMax(a, n);
break;
default:
printf("\n Scelta sbagliata");
}
return 0;
}
void trova(alunno _v[], int n)
{
int i;
int trovato;
char cerca[20];
alunno *p; //useremo un puntatore per scorrere il vettore degli alunni
printf("\nInserisci il cognome dell'alunno da cercare: ");
scanf("%s", cerca);
p = &_v[0]; //posiziono il puntatore all'inizio del vettore
trovato=0;
for(i=0;i<n;i++)
{
if(strcmp(p->cognome, cerca)==0)
{
printf("\nAlunno trovato in posizione %d.\n%s\t%d\n",i+1,p->nome, p->voto);
trovato=1;
}
p= &_v[i+1]; //scorro un alunno avanti
}
if (!trovato)
printf("\nAlunno non trovato.\n");
}
void votoMax(alunno _v[], int n)
{
int i;
alunno *p; //useremo un puntatore per scorrere il vettore degli alunni
alunno *maxp; //useremo un puntatore per fissare l'alunno con voto massimo
p = &_v[0]; //posiziono il puntatore all'inizio del vettore
maxp = &_v[0]; //posiziono il puntatore all'inizio del vettore
for(i=0;i<n;i++)
{
if(p->voto > maxp->voto)
{
*maxp = *p;
}
p= &_v[i+1]; //scorro un alunno avanti
}
printf("\nAlunno trovato in posizione %d.\n%s\t%d\n",i+1,maxp->cognome, maxp->voto);
}
Ultima modifica 30 Gennaio 2022