4 aprile 2002
Avvisi:
• 1o Esonero: mercoledi 17 aprile ore 11:30 – 14:00
consulta la pag. WEB alla voce “esoneri”
si raccomanda la puntualita’!
Introduzione
• Array
– Struttura di elementi di dati, tutti dello
stesso tipo, correlati.
• Strutture di elementi di dati di tipi diversi
correlati (struct ), in seguito.
– Struttura dati statica : ha la stessa
dimensione per tutta la durata del
programma
• Strutture dati dinamiche saranno considerate
nella parte finale del corso
Array
–Gruppo di locazioni di memoria consecutive
–Stesso nome e stesso tipo
Nome dell’array
(Tutti gli elementi
hanno lo stesso
nome, c)
c[0]
c[1]
c[2]
c[3]
c[4]
c[5]
c[6]
c[7]
c[8]
c[9]
c[10]
c[11]
-45
6
0
72
1543
-89
0
62
-3
1
6453
78
Posizione dell’elemento nell’array
Dichiarazioni di Array
• Per dichiarare un array si deve specificare
– Nome
– Tipo dell’ array
– Numero di elementi
• Formato:
arrayType arrayName[numberOfElements];
int c[ 10 ];
float myArray[ 3284 ];
• Dichiarare molti array dello stesso tipo
– Similmente a quando si dichiarano le variabili comuni
int b[ 100 ], x[ 27 ];
Array
• Per riferirsi ad un elemento, specificare:
– Nome dell’array
– Posizione (indice)
• Formato:
nomearray [posizione]
– Primo elemento alla posizione 0
– Array di nome c di n elementi : c[0], c[1]...c[n-1]
Array
• Gli elementi sono normali variabili
c[0] = 3;
printf( "%d", c[0] );
• Si possono effettuare operazioni negli indici.
Se x = 3,
c[5-2] == c[3] == c[x]
Esempio di uso di un array
• Inizializzatori
int n[5] = {1, 2, 3, 4, 5 };
– Se non ci sono abbastanza inizializzatori, i piu’ a destra
saranno 0
– Se ci sono troppi inizializzatori, errore di sintassi
int n[5] = {0}
• Tutti gli elementi sono inizializzati a 0
• Se la size e’ omessa, viene determinata
dagli inizializzatori
int n[] = { 1, 2, 3, 4, 5 };
– 5 inzializzatori, dunque l’array ha 5 elementi
1.
/* Inizializzazione di un array */
2.
#include <stdio.h>
3.
main()
4.
{
5.
int n[10], i;
6.
7.
8.
for (i = 0; i <= 9; i++)
n[i] = 0;
9.
printf("%s%13s\n", "Element", "Value");
10.
for(i = 0; i <= 9; i++)
11.
printf("%7d%13d\n", i, n[i]);
12. return 0;
13. }
/* print array */
Element
Value
0
0
1
0
2
0
3
0
4
0
5
0
6
0
7
0
8
0
9
0
Output
1.
/* Inizializzazione di un array con una dichiarazione */
2.
#include <stdio.h>
3.
main()
4.
{
5.
int n[10] = {32, 27, 64, 18, 95, 14, 90, 70, 60, 37};
6.
int i;
7.
8.
printf("%s%13s\n", "Element", "Value");
9.
10.
11.
12.
13. }
for(i = 0; i <= 9; i++)
printf("%7d%13d\n", i, n[i]);
return 0;
Element
Value
0
32
1
27
2
64
3
18
4
95
5
14
6
90
7
70
8
60
9
37
Output
1.
/* Initializza gli elementi dell’ array s con i
2.
numeri pari da 2 a 20 */
3.
#include <stdio.h>
4.
#define SIZE 10
5.
main()
6.
{
7.
int s[SIZE], j;
8.
for (j = 0; j <= SIZE - 1; j++)
9.
/* assegna i valori */
s[j] = 2 + 2 * j;
10. printf("%s%13s\n", "Element", "Value");
11. for (j = 0; j <= SIZE - 1; j++)
12.
13.
14. }
/* stampa i valori */
printf("%7d%13d\n", j, s[j]);
return 0;
Element
Value
0
2
1
4
2
6
3
8
4
10
5
12
6
14
7
16
8
18
9
20
Output
1.
/* Calcola la somma degli elementi di un array */
2.
#include <stdio.h>
3.
#define SIZE 12
4.
main()
5.
{
6.
int a[SIZE] = {1, 3, 5, 4, 7, 2, 99, 16, 45, 67, 89, 45};
7.
int i, total = 0;
8.
9.
10.
for (i = 0; i <= SIZE - 1; i++)
total += a[i];
11.
12.
printf("Total of array element values is %d\n", total);
13.
return 0;
14. }
Total of array element values is 383
Output
1.
/*
Tiro un dado
6000 volte */
2. /* versione con
3.
#include <stdio.h>
4.
#include <stdlib.h>
5.
main()
6.
{
7.
8.
9.
istruzione switch
int face, roll, frequency1 = 0, frequency2 = 0, frequency3 = 0,
frequency4 = 0, frequency5 = 0, frequency6 = 0;
for (roll = 1; roll <= 6000; roll++) {
10.
face = 1 + rand() % 6;
11.
switch (face) {
12.
case 1:
13.
++frequency1;
14.
break;
15.
case 2:
16.
++frequency2;
17.
break;
18.
*/
case 3:
19.
++frequency3;
20.
break;
21.
case 4:
22.
++frequency4;
23.
break;
24.
case 5:
25.
++frequency5;
26.
break;
27.
case 6:
28.
++frequency6;
29.
break;
30.
}
31.
}
32.
printf("%s%13s\n", "Face", "Frequency");
33.
printf("
1%13d\n", frequency1);
34.
printf("
2%13d\n", frequency2);
35.
printf("
3%13d\n", frequency3);
36.
printf("
4%13d\n", frequency4);
37.
printf("
5%13d\n", frequency5);
38.
printf("
6%13d\n", frequency6);
39.
return 0;
40. }
Tiro un dado
1.
/*
2.
#include <stdio.h>
3.
#include <stdlib.h>
4.
#include <time.h>
5.
#define SIZE 7
6.
main()
7.
{
6000 volte – versione con array
8.
int face, roll, frequency[SIZE] = {0};
9.
srand(time(NULL));
10.
for (roll = 1; roll <= 6000; roll++) {
11.
face = rand() % 6 + 1;
12.
++frequency[face];
/* sostituisce 20 linee
13. }
14. printf("%s%17s\n", "Face", "Frequency");
15. for (face = 1; face <= SIZE - 1; face++)
16.
17.
18. }
printf("%4d%17d\n", face, frequency[face]);
return 0;
*/
istruzione switch */
Face
1
2
3
4
5
6
Frequency
1006
1011
983
978
988
1034
Face
1
2
3
4
5
6
Frequency
1008
957
957
1040
1004
1034
Face
1
2
3
4
5
6
Frequency
962
1028
1005
986
1018
1001
Sommario
Output
1 /* Fig. 6.8: fig06_08.c
2
Programma per stampare gli istogrammi */
3 #include <stdio.h>
4 #define SIZE 10
5
6 int main()
7 {
8
int n[ SIZE ] = { 19, 3, 15, 7, 11, 9, 13, 5, 17, 1 };
9
int i, j;
10
11
printf( "%s%13s%17s\n","Element","Value“,"Histogram");
12
13
for ( i = 0; i <= SIZE - 1; i++ ) {
14
printf( "%7d%13d
", i, n[ i ]) ;
15
16
for ( j = 1; j <= n[ i ]; j++ ) /* print una barra */
17
printf( "%c", '*' );
18
19
printf( "\n" );
20
}
21
22
return 0;
23 }
Sommario
Sommario
Element
0
1
2
3
4
5
6
7
8
9
Value
19
3
15
7
11
9
13
5
17
1
Histogram
*******************
***
***************
*******
***********
*********
*************
*****
*****************
*
Output
Array di caratteri
– La stringa "hello" e’ di fatto un array static di
caratteri
– Gli array di caratteri si possono inizializzare usando
delle stringhe
char string1[] = "first";
• La stringa termina col carattere null '\0'
• string1 ha di fatto 6 elementi
char string1[] = { 'f', 'i', 'r', 's', 't', '\0' };
Array di caratteri
– Si puo’ accedere ai caratteri singoli della stringa
• string1[ 3 ] e’ il carattere 's'
– Il nome di un array e’ l’ indirizzo dell’array,
dunque non si deve mettere & in scanf
scanf( "%s", string2 ) ;
• Legge i caratteri finche’ si incontra uno spazio
• Si puo’ scrivere oltre la fine dell’array, attenzione!
1 /* Fig. 6.10: fig06_10.c
2
Trattare gli array di caratteri come stringhe */
3 #include <stdio.h>
4
5 int main()
6 {
7
char string1[ 20 ], string2[] = "string literal";
8
int i;
9
10
printf(" Enter a string: ");
11
scanf( "%s", string1 );
12
printf( "string1 is: %s\nstring2: is %s\n"
13
"string1 with spaces between characters is:\n",
14
string1, string2 );
15
16
for ( i = 0; string1[ i ] != '\0'; i++ )
17
printf( "%c ", string1[ i ] );
18
19
printf( "\n" );
20
return 0;
21 }
Sommario
Sommario
Enter a
string1
string2
string1
H e l l
string: Hello there
is: Hello
is: string literal
with spaces between characters is:
o
Output
/* Gli arrays statici sono inizializzati a zero */
•
#include <stdio.h>
•
void staticArrayInit(void);
•
void automaticArrayInit(void);
•
main()
•
{
•
printf("First call to each function:\n");
•
staticArrayInit();
•
automaticArrayInit();
•
printf("\n\nSecond call to each function:\n");
•
staticArrayInit();
•
automaticArrayInit();
•
return 0;
•
}
•
•
/* funzione per dimostrare l’uso di un array locale statico */
•
void staticArrayInit(void)
•
{
•
static int a[3];
•
int i;
21. printf("\nValues on entering staticArrayInit:\n");
22.
23.
for (i = 0; i <= 2; i++)
printf("array1[%d] = %d
", i, a[i]);
24.
printf("\nValues on exiting staticArrayInit:\n");
25.
for (i = 0; i <= 2; i++)
26.
printf("array1[%d] = %d
", i, a[i] += 5);
27. }
28.
29. /* funzione per dimostrare l’uso di un array locale automatico */
30. void automaticArrayInit(void)
31. {
32.
int a[3] = {1, 2, 3};
33.
int i;
34.
printf("\n\nValues on entering automaticArrayInit:\n");
35.
for (i = 0; i <= 2; i++)
36.
printf("array1[%d] = %d
", i, a[i]);
37.
printf("\nValues on exiting automaticArrayInit:\n");
38.
for (i = 0; i <= 2; i++)
39.
40. }
printf("array1[%d] = %d
", i, a[i] += 5);
Sommario
First call to each function:
Values on
array1[0]
Values on
array1[0]
entering staticArrayInit:
= 0 array1[1] = 0 array1[2] = 0
exiting staticArrayInit:
= 5 array1[1] = 5 array1[2] = 5
Values on
array1[0]
Values on
array1[0]
entering automaticArrayInit:
= 1 array1[1] = 2 array1[2] = 3
exiting automaticArrayInit:
= 6 array1[1] = 7 array1[2] = 8
Second call to each function:
Values on
array1[0]
Values on
array1[0]
entering staticArrayInit:
= 5 array1[1] = 5 array1[2] = 5
exiting staticArrayInit:
= 10 array1[1] = 10 array1[2] = 10
Values on
array1[0]
Values on
array1[0]
entering automaticArrayInit:
= 1 array1[1] = 2 array1[2] = 3
exiting automaticArrayInit:
= 6 array1[1] = 7 array1[2] = 8
Output
Scarica

versione power point