:: Laboratorio C - Domande e risposte ::
Le risposte corrette sono quelle in grassetto.
1. Un programma scritto in Fortran, C o Java è
NOTA: Andava bene anche la seconda, però la risposta completa è: ”un file di testo”, dato che all'interno del programma inseriamo anche delle dichiarazioni.
2. La definizione di una etichetta puo' essere posta:
NOTA: Le etichette vanno dichiarate prima del main perchè sono necessarie prima delle compilazione del programma
3. La seguente porzione di codice (x=8) è
NOTA: Una espressione non termina mai con il “;”. Se fosse stata (x=8); sarebbe stata una istruzione.
4. Quali delle seguenti espressioni sono vere (anche piu' di una)?
NOTA: La prima non può essere perché ad esempio l'espressione “i++” ha degli effetti sulle variabili;la seconda nemmeno, perché (x==3) è una espressione e non una istruzione. Quindi è la terza!
5. L'espressione 'a[x = n *2, y = n++] = (b = 27) + (c = (f = e - 3));' è corretta?
NOTA: Non è corretta perché è una istruzione e non un espressione (termina con il “;”).
6. Qualunque dato allocato in un programma C in esecuzione e' semplicemente un insieme di bit:
NOTA: Il programma durante l'esecuzione diventa un sequenza di bit!
7. Una variabile carattere memorizzata in un programma C in realta' e' scritta come un numero intero:
NOTA: Ogni carattere ha un corrispondente valore in numeri interi (secondo il codice ASCII).
8. Quale delle seguenti parole riservate serve per dichiarare variabili di tipo built-in?
NOTA: I tipi di dato “built-in” sono quei dati già esistenti in c. La prima è errata perchè non è un tipo di variabile; union e enum non sono parole di tipo built-in. Le risposte corrette sono le ultime due.
9. La memoria che viene impiegata da un programma è stata allocata:
NOTA: E' il sistema operativo che deve allocare la memoria per i programmi!
10. Le funzioni allocano i loro parametri formali:
11. Il segmento di memoria che contiene il programma puo' crescere se il programma ha necessità
NOTA: Quando scriviamo le istruzione di un programma al momento della compilazione le istruzioni vengono tradotte in linguaggio macchina, ma rimangono quelle. Quindi lo spazio non aumenta e non diminuisce!
12. Avendo dichiarato int x[100]; che differenza c'e' tra x e x[0]?
13. Avendo la seguente dichiarazione: float * p; si evince che p è:
NOTA: L'istruzione è chiaramente un puntatore a float dato che c'è il simbolo '*'. Se non ci fosse stato il simbolo '*' p sarebbe stata una semplice variabile di tipo float.
14. Avendo definito int i; e int *pi; cosa vuole dire che e' possibile fare in modo che pi punti a i?
15. Il prototipo di una funzione è:
16. Il prototipo di una funzione finisce sempre con un ";".
NOTA: E'la definizione che non termina con il “;”, ma con delle parentesi graffe.
17. La definizione di una funzione ha come prima riga il prototipo della funzione stessa.
18. Nel prototipo i parametri formali...
19. I file che includiamo con la direttiva #include possono essere delle semplici collezioni di prototipi di funzioni.
20. Le variabili che definiamo in una funzione sono visibili all'esterno e quindi dobbiamo stare attenti con i nomi delle variabili perche' non si confondano con quelli del main.
NOTA: Le variabili dichiarate all'interno di un blocco muoiono quando il blocco viene chiuso, quindi non si vedono!
21. Usare delle variabili globali e' sempre una buona idea che risolve spesso problemi di strutturazione del codice
NOTA: Se dichiariamo delle variabili globali e all'interno di un blocco utilizziamo lo stesso nome per una variabile, possiamo avere spiacevoli imprevisti. Quindi è meglio non utilizzare le variabili globali.
22. La funzione fscanf non puo' essere usata per leggere i dati dallo standard input:
NOTA: La funzione fscanf è utilizzata per leggere da file!
23. Tutti i file devono essere aperti prima di essere letti o scritti, per questo motivo stdin, stdout e lo standard error devono essere aperti con una fopen prima di essere usati:
NOTA: E' vero che i file prima di essere letti o scritti devono essere aperti, ma è falso che che devono essere aperti gli stdin e stdout e lo standard error.
24. Tutti i file devono essere chiusi prima della uscita dal main con fclose:
NOTA: Prima di operare sui file bisogna aprirli (con una fopen();) ci si opera e infine bisogna chiuderli (con una fclose();).
25. Per trovare un record in un file ad accesso casuale non e' necessario scorrere tutti gli altri record nel file
NOTA: Basta utilizzare la funzione fseek(); la quale ci permette di spostare la testina su un byte qualunque del file.
26. La funzione fseek deve essere usata solo per trovare l'inizio del file:
NOTA: Per trovare l'inizio del file bisogna utilizzare la funzione rewind();.
27. L'istruzione malloc(n):
NOTA: Gli passiamo il numero dei byte, per questo è corretta la seconda! Es: v = (*int)malloc (sizeof(int));
28. Dopo l'istruzione x = (4>9) ? 7 : 88; la variabile intera x contiene:
NOTA: Osserviamo l'istruzione: la dobbiamo interpretare così: 4 è maggiore di 9 ? se si x vale 7 altrimenti x=88.
29. La funzione clock() restituisce un valore che si riferisce
NOTA: E' la funzione time() che ci restituisce un tempo assoluto.
30. La funzione sprintf() e' equivalente alla printf eccetto che l'output sara' memorizzato su una stringa invece che stampato a terminale.
NOTA: Le funzioni sprintf() e printf() sono simili, solo che la funzione printf() stampa a monitor, mentre la funzione sprintf() stampa su una stringa