Esercitazione 3
Esercizio 1. Sono corrette le seguenti dichiarazioni di variabili e comandi C? Che valore ha tmp dopo 1--4?
int a[4]={9,8,7,6}, *p=a, tmp;Esercizio 2. Scrivere una funzione C che scambia fra loro il valore di due variabili a e b. Qual'e il prototipo corretto :
void scambia (int a, int b);
oppure void scambia (int *a, int *b); ? perche'?Esercizio 3. Scrivere una funzione sumvect di prototipo
int sumvect (int s[], int n);
che restituisce la somma degli elementi del vettore
s di lunghezza n(s[0]+...+s[n-1]).Esercizio 4. (variante dell'esercizio
della scorsa volta) Scrivere un programma C che legge una sequenza di studenti
da file passato come parametro al programma (argv[1]). Ogni studente e'
memorizzato su file in una singola linea contenente tre stringhe di caratteri
nome cognome
numero_di_matricola
\n
(newline). Notate che NON sono ammessi nomi, cognomi o matricole di piu' di una stringa (es. Di Caprio, Maria Gabriella, 34 56 23)Il programma memorizza i dati relativi a ciascun studente in un array di strutture di tipo studente opportunamente definito e li stampa in ordine alfabetico. Si richiede di definire due funzioni separate per la lettura e l'ordinamento
int fleggi_stud (char* name, studente s[], int * lung) /* legge gli studenti dal file name, li memorizza in s[], restituisce in *lung il numero di studenti letti, ritorna 0 se l'operazione ha avuto successo -1 altrimenti*/ void ordina_stud (studente s[], int lung) /* ordina gli studenti in stud in ordine alfabetico */
Esercizio 5. Scrivere un programma C che calcola il segmento di somma massima (SSM) di una array.Ad esempio l'array [2,-4,2,-1,6-3] ha come SSM il segmento [2,-1,6] di valore 7. Si chiede di definire due funzioni separate per la stampa e per il calcolo di SSM, con i seguenti prototipi :
void stampa_array(int s[], int n); /* stampa l'array s di lunghezza n */
int ssm (int s[], int lung, int * s_init, int * s_lung);
/* calcola SSM sull'array s di lunghezza lung e restituisce : (1) come valore della funzione il valore del segmento di somma massima (7 nell'esempio), (2) nella variabile s_init la posizione in cui inizia il segmento di somma massima (2 nell'esempio) e (3) nella variabile s_lung la lunghezza del segment odi somma massima (3 nell'esempio) */