2

Scarica in formato pdf o txt
Scarica in formato pdf o txt
Sei sulla pagina 1di 7

Programmazione I (Classe 1) – Prima prova intercorso - 21.12.

2021
TEMPO: 75 minuti
INDIRIZZO e-mail per la consegna: rzizza@unisa.it
Cognome: Nome:
Matricola: Firma:

Svolgere gli esercizi giustificando ogni risposta. Alle risposte corrette ma non giustificate sarà
assegnato un punteggio di poco superiore allo zero.

Esercizio 1 Consideriamo il seguente programma.


1 #include <stdio.h>
2
3 int x=18;
4
5 int f(int *n){
6 int num=*n, s=0;
7 while (*n>0) {
8 s+=*n%10;
9 *n/=10;
10 }
11 i f (num%s) return 0;
12 e l s e return 1;
13 }
14
15 void g(int a[], int x) {
16 int i;
17 for (i=1; i<x; i++) {
18 a[i]=a[i-1]+a[i];
19 }
20 }
21
22 int main(void) {
23 printf("%d\n", f(&x));
24 printf("%d\n", x);
25 int a[]={10,20,30,40,50};
26 g(a,5);
27 printf("a[1]=%d, a[4]=%d\n", a[1], a[4]);
28 return 0;
29 }

a) Indicare cosa fanno le funzioni f e g.


b) Indicare cosa stampa il main.
c) Indicare come chiamare la funzione g alla linea 26 in modo che sia eseguita tra il secondo
e il quarto elemento e cosa verrebbe stampato in questo caso.

1
Esercizio 2 Descrivere il significato della seguente funzione e cosa viene stampato dal main.
int f (char s[], char t[]) {
char *s1=s;
char *t1=t;
for (; *s1 !=’\0’; s1++)
f o r (t1=t; *t1!=’\0’; t1++)
i f (*s1==*t1) return s1-s;
return -1;
}

int main(void) {
char a[]="natale";
char b[]="studio";
char c[]="sempre";
char d[]="vita";

printf("Valore della chiamata: %d\n", f(a,b));


printf("Valore della chiamata: %d\n", f(b,c));
printf("Valore della chiamata: %d\n", f(c,d));
return 0;
}

2
Esercizio 3 Si consideri il seguente codice.

#include <stdio.h>
#include <stdlib.h>

void f(int *a, int *b) {


int i=0;
for (i=*a+1; i<=*b; i++) *a+=i;
}

int main(int argc, char *argv[]) {


int *x=atoi(argv[1]);
int *y=atoi(argv[2]);
f(x,y);
printf("I valori inseriti sono: %d, %d\n", *x, *y);
return 0 ;
}

Il codice non viene compilato correttamente. Qual è l’errore? Come correggerlo? Una volta
corretto, cosa viene stampato se da linea di comando vengono passati 3 e 5.

3
Esercizio 4 Il seguente programma presenta un errore. Indicare qual è, come correggerlo e
una volta corretto indicare cosa viene stampato, spiegando il significato della funzione.

#include <stdio.h>

void f (char *s, int i, int n){


char *p=s+i, *q=s+n-1, ch;
for (; p < q; p++, q--){
ch = *p;
*p = *q;
*q = ch;
}
}

int main(void) {
char *s="pinna";
f(s,1,5);
printf("%s\n", s);
return 0 ;
}

4
Esercizio 5 Il seguente programma presenta due errori. Dopo averli individuati, indicare
come correggerli e cosa stampa il programma, motivando la risposta.

#include <stdio.h>
#define N 10
int main(void){
int array[] = {10,21,3,24,5};
int i, x=*array;

for (i=1; i<N; i++) {


array++;
i f (*array<x)
x = *array;
}
printf("%d\n", x);
return 0;
}

5
BRUTTA COPIA

6
BRUTTA COPIA

Potrebbero piacerti anche