Informatica B Allievi Elettrici - AA Fondamenti della programmazione in linguaggio C (III)
Anche i cicli si possono annidare #include main() { int n, m, i, j; printf(“Inserisci n:”); scanf (“%d”,&n); /*input */ printf(“Inserisci m:”); scanf (“%d”,&m); /*input */ for(i=1; i<=n; i++) for(j=1; j<=m; j++) printf(“i:%d j: %d \n”, i, j); } Esercizio: provare a vedere cosa si visualizza per n=4 ed m=3.
Salti break: serve a saltare alla prima istruzione fuori dal ciclo (non si ritorna più nel ciclo). continue: serve a saltare le istruzioni che restano del blocco del ciclo e a ritornare a una nuova iterazione. exit: serve a saltare fuori dal programma e ritorna il controllo al sistema operativo (fa parte della libreria standard del C stdlib.h).
Uso del break (pessimo!!!) #include /* Calcolo n fattoriale */ main() { int n, fatt, m; printf(“Inserisci n:”); scanf (“%d”,&n); /*input */ if n > 0 /* Verifica dati d’ingresso */ {fatt = n; for (m=n; m--) /* exp2 in questo caso è vuota:*/ /* equivale a true */ {if (m<1) break; fatt = fatt * (m-1);} printf(“\Il fattoriale di %d è:%d\n”,n,fatt); } N.B. : nel caso di cicli annidati l’istruzione break provoca l’uscita solo dal ciclo più interno!!!
Ancora sulla dichiarazione dei dati: le costanti const int modelloauto = 156; const float pigreco = ; –si inizializza in fase di dichiarazione –non si può modificare nel corso del programma –non provoca allocazione di memoria N.B.: Esiste un altro modo di definire un valore una volta per tutte: la direttiva define
Sostituzione di macro: #define PIGRECO –è una delle direttive al precompilatore –non si può modificare (ma si può annullare) nel corso del programma –non provoca allocazione di memoria –non viene terminata dal punto e virgola (non è una istruzione C!) #define VERO 1 #define FALSO 0 printf(“%d %d %d”, FALSO,VERO,VERO+1); visualizza: –si possono costruire macro a partire da altre macro: #define UNO 1 #define DUE UNO+UNO
Altre direttive al precompilatore Abbiamo già visto: #include serve a richiamare librerie (comanda al preprocessore di leggere anche da un altro file sorgente) Altre direttive frequentemente usate: #undef VERO serve a rimuovere il nome della macro (da questo punto in poi la costante VERO non è più definita) #error ATTENZIONE DIVISIONE PER 0 serve a visualizzare messaggi di errore (il messaggio non è racchiuso tra doppi apici)
Dichiarazione dei dati: altri tipi semplici Diversi tipi di intero: si possono aggiungere dei qualificatori: –long, short si possono aggiungere a int o a double –unsigned si aggiunge a int o a char Variabili enumerative: enum PAPERO {QUI,QUO,QUA}; enum mese{gennaio,febbraio,marzo,aprile, maggio,giugno,luglio,agosto,settembre, ottobre,novembre,dicembre};
Dichiarazione dei dati: dati complessi o strutturati Array: vettore di elementi indicizzati, omogenei, memorizzati in modo contiguo: int A[20]; (A e’ un array di 20 elementi di tipo Int)
Esempi sugli array Inizializzazione: for(i=0;i<=19;i++) A[i] = 0; oppure: for(i=0;i<=19;i++) {printf(“inser.intero:\n”); scanf(“%d”,&A[i]);} Ricerca del massimo: max = A[0]; for(i=1;i<=19;i++) if (A[i] > max) max = A[i]; Calcolo della media: media= A[0]; for(i=1;i<=19;i++) media = media + A[i]; media = media/20; Nota: In C l’indice inferiore dei vettori e’ sempre 0 !!!
Esempi sugli array Massimo, minimo e media: max= A[0]; min= A[0]; media= A[0]; for(i=1;i<=19;i++) {media = media + A[i]; if (A[i] > max) max = A[i]; if (A[i] < min) min = A[i]} media = media/20;