Esercizi C++ sugli array ...e altro

Corso sul Linguaggio C++ Edizione 2010
6.Esercizi
84) Supponiamo che sia presente in memoria il seguente vettore creato con intA[5]
5
1
3
4
6
2
Viene anche creato un vettore B con int B[5]. Dopo l’esecuzione delle seguenti istruzioni
cosa conterrà il vettore B[]?
for (i = 1; i<5; i++) B[i]=A[i-1]+A[i];
B() =
85) Dire quale dei seguenti frammenti di programma calcola in j la media del vettore di interi
positivi v contenente n elementi, posto che j sia inizializzato a zero:
a) for(i=0; i<n; i++) j = v[i]; j = j/n;
b) for(i=0; i<n; i++) j += v[i]; j = j/n;
c) for(i=0; i<n; i++) j += v[i];
86) Dire quale dei seguenti frammenti di programma calcola in j l'indice del primo elemento
positivo del vettore di interi v contenente n elementi, posto che j sia inizializzato a zero
(potete assumere che il vettore contenga sempre almeno un elemento positivo):
a) for(i=0; i<n; i++) if (v[i] > 0) j=i;
b) for(i=n-1; i>=0; i--) if (v[i] > 0) v[j]=v[i];
c) for(i=n-1; i>=0; i--) if (v[i] > 0) j=i;
87) Considerate il seguente frammento di programma:
t=-1;
for (i=1; i<=n; i++)
if (f(i)) t=i;
if (t>=0) cout << t;
Quale delle seguenti affermazioni è corretta?
a) Il programma cerca e stampa il più piccolo intero x fra 1 e n tale che f(x)!=0; se tale
intero non esiste, il programma entra in un ciclo infinito.
b) Il programma cerca e stampa il più grande intero x fra 1 e n tale che f(x)!=0; se tale
intero non esiste, il programma entra in un ciclo infinito.
c) Il programma cerca e stampa il più piccolo intero x fra 1 e n tale che f(x)!=0; se tale
intero non esiste, il programma non stampa nulla.
d) Il programma cerca e stampa il più grande x fra 1 e n tale che f(x)!=0; se tale intero
non esiste, il programma non stampa nulla.
88) Dato il seguente frammento di programma:
int a[5]={10, 7, 4, 2, 1};
int b[5]={3,2,5,6,4};
int i, j, k;
for(i=0; i<5; i++){
k=1;
for(j=4; j>=0; j--)
if (a[i]<=b[j])
k=0;
if (k)
printf("%d ", a[i]);
}
Indicare i valori stampati in uscita:
!98
Corso sul Linguaggio C++ Edizione 2010
a)
b)
c)
d)
e)
f)
g)
10 7
10 7 4
10 7 4 2
10 7 4 2 1
21
1
nessuna delle risposte precedenti è corretta
89) Qual è il ciclo corretto per trovare l'indice del primo elemento negativo in un vettore dichiarato come float v[MAX] ?
a) while(i<MAX) if(v[i]>=0) i++;
b) while(v[i]>=0 && i<MAX) i++;
c) while(i<MAX || v[i]<0) i++;
d) while(i<MAX && v[i]>=0.0) i++;
90) Dato il seguente pezzo di programma
t=x[1];
for (i = 2 ; i <=n ; i++) t*=x[i]/i ;
Quale dei seguenti calcoli viene effettuato?
a)
b)
c)
d)
t=
x(1) + x(2) + ..... + x(n)
n
t=
x(1) * x(2) * ..... * x(n)
n
t=
x(1) * x(2) * ..... * x(n)
n!
t = x(1) *
x(2)
x(3)
x ( n)
+ x(1) *
+ ...... + x(1) *
2
3
n
91) Scrivere il pezzo di programma per calcolare la seguente somma supponendo presente in
memoria e già valorizzato il vettore float X[…] con N elementi.
1+
1
1
1
+
+ ...... +
x(1) X (2)
X (N )
92) Sia dichiarato un array int a[10]. Cosa succede dopo l'esecuzione del seguente codice:
for (i=0; i<=10; i++)
a[i]=2;
a)
b)
c)
d)
Tutto l'array viene inizializzato al valore 2;
Si superano i limiti dell'array. L'errore viene segnalato in fase di compilazione;
Si superano i limiti dell'array. L'errore viene segnalato all'esecuzione del codice;
Si superano i limiti dell'array. L'errore non viene segnalato, ma si hanno conseguenze
imprevedibili;
e) Si superano i limiti dell'array. All'accesso all'undicesimo elemento, il sistema operativo assegna altro spazio all'array a e l'esecuzione prosegue.
93) Supponete che i e j siano variabili intere, e che s e t siano vettori di interi. Assumete che,
in un dato istante, i=j=0 e che il contenuto dei due vettori sia il seguente:
s = { 0,
1,
2,
3}
!99
Corso sul Linguaggio C++ Edizione 2010
t = { 3,
2,
1,
0}
Se viene eseguita la seguente istruzione:
s[i++]=t[++j]+1;
Quali valori avranno alla fine le variabili i e s?
a) i= 0, s= [3,2,1,0]
b) i = 1, s= [2,1,0,3]
c) i= 1, s=[4,3,2,1]
d) i=1, s=[3,1,2,3]
e) i=0, s=[3,1,2,3]
f) nessuno dei precedenti
94) Quale sarà il contenuto del vettore V al termine del ciclo se è V={1,21,31,4,51,6} e n=6?
t=n/2;
for (i=0; i<t ;i=i+1) {
temp=V[i]; V[i]=V[n-i-1]; V[n-i-1]=temp;
}
Programmi con i vettori
95) Calcolare lo scarto quadratico medio di un vettore numerico. Se x(i), con i da 1 a n, sono
gli elementi del vettore e se M è la media aritmetica degli stessi, per definizione lo scarto
quadratico medio, normalmente indicato con σ, si ottiene con la seguente formula:
n
∑ ( x(i) − M )
σ=
2
i =1
n
96) Moltiplicare 2 vettori (il risultato è la somma dei prodotti di tutti gli elementi con lo stesso
indice nei due vettori).
97) Scrivere un programma per far leggere n numeri (n<=100) e visualizzarli al contrario.
98) Prendendo spunto dal programma descritto nel paragrafo 5.3 realizzare un programma
per trasformare in lettere un qualsiasi numero intero fino a un miliardo.
99) Dato un vettore numerico (max 4 cifre ogni numero) contare quanti elementi sono compresi tra 0 e 99, quanti fra 100 e 199, quanti fra 200 e 299 ecc. fino a contare quanti sono
compresi fra 9900 e 9999.
100)Dato un vettore qualsiasi individuare la moda ovvero l’elemento che si ripete più volte.
101)Far caricare da tastiera in un vettore gli n+1 coefficienti di un polinomio P(x) di grado n:
P(x) = a0 + a1x + a2x2 + a3x3 + ....... + an-1xn-1 + anxn
poi far calcolare e visualizzare il valore del polinomio per K valori di x a partire da un numero
A con un incremento di S (K,A,S in input).
102)Far determinare i numeri primi da 1 a 1000 con il crivello di Eratostene (inserire i numeri da 1 a 1000 in un vettore poi partendo dal primo cancellare tutti i multipli, andare
!100
Corso sul Linguaggio C++ Edizione 2010
avanti nel vettore considerando gli elementi non cancellati e per ognuno cancellarne i
multipli, alla fine visualizzare i numeri non cancellati).
103)Far determinare i primi N numeri primi mettendoli in un vettore. (Mettere 2 nel primo
elemento del vettore poi, considerando solo i numeri dispari da 3 in poi controllare che
non siano multipli di nessun elemento presente nel vettore e inferiore alla radice quadrata
del numero, se questa condizione si verifica si può inserire l'elemento nel vettore perché
é primo).
104)Far visualizzare le prime n righe del triangolo di Tartaglia:
1 1
1 2 1
1 3 3 1
1 4 6 4 1
. . . . . . .
(la prima riga è costituita da due uno, il primo e ultimo numero di ogni riga è sempre 1, ogni
altro numero è uguale alla somma di due numeri della riga precedente: quello che si trova
proprio sopra il numero da determinare e quello immediatamente a sinistra).
105)Fare un programma che assegnato una frase isoli e metta in un vettore tutte le parole in
essa contenute.
106)Fare un programma per caricare un testo in un vettore di stringhe.
107)Fare un programma che assegnata in input una parola ne generi tutti gli anagrammi possibili (anche quelli senza significato).
108) Far leggere una serie di nomi con il relativo indirizzo e numero di telefono e far stampare la lista in ordine alfabetico.
109) Dato un vettore ordinare gli elementi di posto dispari in ordine crescente e quelli di posto pari in ordine decrescente.
110) Dati due vettori numerici ordinati, riunirli in un terzo sempre ordinato (fusione).
111) Dato un vettore far visualizzare l'elemento mediano (cioè quello che si trova al centro
del vettore dopo l'ordinamento).
112) Far inserire in input le N squadre del campionato e i punti totalizzati dopo di che far visualizzare la classifica.
113) Assegnare ad un vettore di 40 elementi, ognuno di due caratteri, delle sigle per simulare
un mazzo di carte napoletane, per esempio "1C","2C","3C" ecc. potrebbero indicare le
carte asso di coppe, due di coppe, 3 di coppe ecc., "1S","2S" ...potrebbero indicare asso
di spade, due di spade e analogamente per tutte le altre carte. Fare un programma per mischiare le carte usando la funzione rand.
114) Problema assegnato alla selezione regionale del 2001. È venerdì, e il cassiere Camillo
ha davanti a sé una lunga fila di clienti della sua banca venuti a ritirare contante per il
weekend. Per fare presto, Camillo decide di usare per ogni cliente il numero minimo possibile di banconote. Sapreste scrivere un programma per evitargli il mal di testa, conside!101
Corso sul Linguaggio C++ Edizione 2010
rato che ha a disposizione banconote da 100.000, 10.000, 5.000, 2.000 e 1.000 in quantità
illimitata e che l'entità di ogni prelievo è un multiplo di 1.000 lire?
Puntatori
115)Quale delle seguenti istruzioni non ha lo stesso effetto sulle due variabili a e b?
a) int a,b; a=b;
b) int a,b, *p,*c; p=&a; c=&b; *p=*c;
c) int a,b, *p,*c; p=&a; c=&b; *p=b;
d) int a,b, *p,*c; p=&b; c=&a; *c=b;
e) int a,b, *p,*c; p=&a; c=&b; p=c;
f) nt a,b, *p,*c; p=&a; c=p; *c=b;
116) Si consideri il seguente frammento di codice:
void foo( int *a, int b) {
int temp = *a; *a = b; b = temp;
};
int main( ) {
int a = 1, b = 5;
foo( &a, b );
}
Quanto valgono le variabili a e b alla fine dell'esecuzione?
Risposte esercizi
Esercizio 84)
B() =
6
4
7
10
8
Esercizio 85) Risposta = b)
Esercizio 86) Risposta = c)
Esercizio 87) Risposta = d)
Esercizio 88) Risposta = a)
Esercizio 89) Risposta = d)
Esercizio 90) Risposta = c);
Esercizio 92) Risposta = d)
Esercizio 93) Risposta =d)
Esercizio 94) Risposta = 6, 51, 4, 31, 21, 1
Esercizio 114) Il cassiere Camillo – problema assegnto alla selezione regionale 2001
Si vuole realizzare un programma che data in input la somma da pagare calcoli quante banconote da 100000, quante da 10000, quante da 5000, quante da 2000 e quante da 1000 sono necessarie. In pratica un numero in input e 5 numeri in output. Per utilizzare il numero minimo
di banconote basta utilizzare se possibile i tagli più grandi ovvero per pagare 100000 bisogna
utilizzare una banconota da 100000 e non 10 da 10000. Si possono inserire i 5 tagli in un vettore numerico e poi in un ciclo clalcolare per ogni taglio quante banconote servono cominciando dal più grande. Per questo calcolo basta dividere la somma che resta da pagare per il
taglio delle banconote il quoziente è il numero di banconote che bisogna utilizzare per quel
taglio e il resto è la somma da pagare con i tagli più piccoli.
Il programma è il seguente:
#include <stdio.h>
#include <stdlib.h>
// programma cam.cpp - Cassiere Camillo- selezioni regionali 2001
int main(){
int tb[]={100000, 10000, 5000, 2000, 1000}; // i 5 tipi di banconote
int somma, i; // somma = l'importo in input
int nb[5]; // nb[] = numero banconote per ogni taglio (dati in output)
printf("Inserisci la somma da pagare: "); scanf("%d", &somma);
!102
Corso sul Linguaggio C++ Edizione 2010
}
for (i= 0; i <5; i++) {
nb[i] = somma / tb[i]; // numero banconote del taglio i
somma %= tb[i];// quello che resta dopo aver dato il taglio i
printf("Servono %d banconote da %d \n", nb[i], tb[i]);
}
system("PAUSE");
return 0;
Esercizio 115) Risposta = e)
Esercizio 116) a=5; b=5
!103