cerca
Laboratorio C - Domande e risposte
modifica cronologia stampa login logout

Wiki

UniCrema


Materie per semestre

Materie per anno

Materie per laurea


Help

Laboratorio C - Domande e risposte

 :: Laboratorio C - Domande e risposte ::

Le risposte corrette sono quelle in grassetto.


1. Un programma scritto in Fortran, C o Java è

  • un file di testo
  • una sequenza di istruzioni
  • un insieme di 0 e 1
  • una sequenza di numeri binari che il processore puo' interpretare

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:

  • ovunque, tanto e' una sostituzione che avviene a livello di pre-compilazione, ma e' prassi inserirla sopra il main del programma
  • solo sopra il main del programma

NOTA: Le etichette vanno dichiarate prima del main perchè sono necessarie prima delle compilazione del programma


3. La seguente porzione di codice (x=8) è

  • una espressione
  • una istruzione

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)?

  • Una espressione non ha mai effetti sulle variabili
  • (x==3) e' una istruzione di controllo
  • Un'istruzione è un'espressione con un punto e virgola alla fine

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?

  • No

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:

  • no

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:

  • no

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?

  • if
  • union
  • enum
  • void
  • double

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:

  • dal programma stesso
  • dal sistema operativo
  • da nessuno dei due, e' pronta dall'avvio della macchina

NOTA: E' il sistema operativo che deve allocare la memoria per i programmi!


10. Le funzioni allocano i loro parametri formali:

  • sullo heap
  • sullo stack
  • nell'area del programma

11. Il segmento di memoria che contiene il programma puo' crescere se il programma ha necessità

  • No
  • Si'

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]?

  • x e' un indirizzo, mentre x[0] e' il primo dato contenuto nell'array
  • Nessuna, sono entrambi riferimenti all'indirizzo prima cella

13. Avendo la seguente dichiarazione: float * p; si evince che p è:

  • nulla, la riga e' sbagliata
  • un puntatore a float
  • un puntatore flottante
  • un puntatore con un cast a float

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?

  • Che pi e' una cella che conterra' l'indirizzo della variabile i
  • Che saranno la stessa cosa e potro' intercambiarli nel codice.

15. Il prototipo di una funzione è:

  • uno strumento che il compilatore usa per definire i tipi di dato in ingresso e uscita alla funzione
  • una funzione solo abbozzata, appunto allo stato di prototipo
  • una nota per gli sviluppatori futuri

16. Il prototipo di una funzione finisce sempre con un ";".

  • Vero
  • Falso, finisce con una graffa aperta a cui segue il codice della funzione

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.

  • Falso, il prototipo puo' non contenere il nome dei parametri formali, quindi non sempre sono uguali
  • Vero, sono sempre uguali

18. Nel prototipo i parametri formali...

  • si inseriscono solo a scopo documentativo, il compilatore li ignora e guarda solo il TIPO dei dati passati
  • devono sempre essere inclusi altrimenti il compilatore non riesce ad usarlo

19. I file che includiamo con la direttiva #include possono essere delle semplici collezioni di prototipi di funzioni.

  • Vero, il codice delle funzioni potrebbe essere gia' compilato in una libreria
  • Falso, se alla fine vogliamo compilare il nostro codice che usa quelle funzioni allora nel file incluso deve esserci TUTTO il codice

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.

  • Falso, proprio non si vedono e quindi non esiste questo problema
  • Vero, meglio usare sempre nomi diversi

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

  • Falso, è sinonimo di cattiva progettazione del codice, generano errori imprevisti e difficili da debuggare, sono da evitare come la peste.
  • Vero, e' sempre consigliabile definire molte variabili globali. Infatti avendo il nome TUTTO IN MAIUSCOLO non possono essere confuse con le altre

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:

  • vero
  • falso

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:

  • vero
  • falso

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:

  • vero
  • falso

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

  • vero
  • falso

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:

  • vero
  • falso

NOTA: Per trovare l'inizio del file bisogna utilizzare la funzione rewind();.


27. L'istruzione malloc(n):

  • alloca n interi in memoria
  • alloca n byte in memoria
  • alloca la memoria della variabile 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:

  • 7
  • 88
  • (4>9)

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

  • al tempo relativo che il programma e' stato effettivamente in esecuzione
  • ad un tempo assoluto

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.

  • vero
  • falso

NOTA: Le funzioni sprintf() e printf() sono simili, solo che la funzione printf() stampa a monitor, mentre la funzione sprintf() stampa su una stringa


Torna al Laboratorio di C | Programmazione.