vuoi
o PayPal
tutte le volte che vuoi
Formattazione del testo con tag html
ESEMPIO.…printf(“Inserisci il valore del primo elemento: “);scanf(“%d”, &mio_array[0]);…Il primo elemento di ogni array è l’elemento zero (cioè quello con numero di posizione 0).1.5 Leggere e stampare con for…int mio_array[10];int i;for(i=0; i<10; i++) {printf(“Elemento n. %d: ”, i);scanf(“%d”, &mio_array[i]);}//stamparefor(i=0; i<10; i++)printf(“Elemento n. %d: %d\n”, i, mio_array[i]);return 0;}Nella figura sottostante vi è un array di interi chiamato c contenente 12 elementi; per riferirsiad uno qualunque di questi elementi bisogna fornire il nome dell’array seguito dal numero diposizione dell’elemento racchiuso tra parentesi quadre.2. Operazioni con gli elementi di un array. assegna 1000 all’elemento dell’array c[2]c[2] += 1000; per stampare la somma di tre elementi dell’array c.printf(“%d”, c[0] + c[1] +
c[2]);→ per dividere il valore dell'elemento c[6] per 2 e assegnare il risultato alla variabile x.
3. Array di caratteri.
Gli array possono contenere dati di ogni tipo, come ad esempio caratteri. Gli array di caratteri hanno diverse caratteristiche. Per esempio, un array di caratteri può essere inizializzato usando una stringa letterale.
char string1[] = "first";
La dimensione di un array composto da una stringa dipende quindi dalla lunghezza di quest'ultima, in questo caso la stringa "first" contiene cinque caratteri più un carattere speciale di terminazione di stringa chiamato carattere nullo. Quindi la string1 contiene in realtà sei elementi e la costante che rappresenta il carattere nullo è '\0'; tutte le stringhe in C terminano con questo carattere.
3.1 Inizializzazione array di caratteri.
Gli array di caratteri possono essere inizializzati sia con una stringa che con costanti individuali di tipo
- carattere poste in una lista di valori di inizializzazione.
- char string1[] = { 'f', 'i', 'r', 's', 't', '\0' };
- 3.2 Accesso caratteri di una stringa.
- Dal momento che una stringa è a tutti gli effetti un array di caratteri, possiamo accedere ai suoi caratteri individuali usando la notazione con indice per gli array.
- string1[0] è il carattere 'f' e string1[3] è il carattere 's'.
- 3.3 Inserimento di una stringa in un array di caratteri.
- Possiamo anche inserire una stringa direttamente nell'array dalla tastiera utilizzando scanf e il specificatore di conversione %s.
- char string2[20];
- Crea un array di caratteri che può memorizzare una stringa di massimo 19 caratteri e un carattere nullo di terminazione.
- L'istruzione: scanf("%19s", string2);
- legge una stringa dalla tastiera e la memorizza all'interno dell'array string2. In questo caso,
<pre><code>modifyArray(hourlyTemperatures, HOURS_IN_A_DAY);</code></pre>
Il linguaggio C passa automaticamente gli array alle funzioni per riferimento. Le funzioni chiamate possono modificare i valori degli elementi negli array originali della funzione chiamante. Il nome dell'array ha come valore l'indirizzo del primo elemento dell'array. Quando la funzione chiamata modifica gli elementi dell'array nel suo corpo, essa modifica gli effettivi elementi dell'array nelle loro originarie locazioni di memoria.
Sebbene gli array interi vengano passati per riferimento, i singoli elementi dell'array sono passati per valore esattamente come le variabili. Tali semplici singoli elementi di dati (come i valori int, float e char) sono chiamati scalari.
Per passare un elemento di un array a una funzione, bisognaUsare il nome con indice dell'elemento dell'array come argomento nella chiamata della funzione. Perché una funzione riceva un array attraverso la chiamata di funzione, la lista dei parametri della funzione deve specificare che si dovrà ricevere un array.
5. Ordinamento di array. Ordinare i dati è una delle più importanti applicazioni del calcolo. In questo caso è possibile utilizzare la tecnica del bubble sort così che i valori più piccoli salgono verso la cima dell'array a poco a poco, mentre quelli più grandi scendono.
6. Array multidimensionali. Gli array in C possono avere diversi indici. Un uso comune degli array con diversi indici, definiti in C come array multidimensionali, è quello di rappresentare tabelle di valori che contengono informazioni disposte in righe e colonne. Per identificare un particolare elemento in una tabella, bisogna specificare due indici: il primo identifica la riga dell'elemento e
il secondo la colonna. Gli array che richiedono due indici per identificare un elemento specifico sono definiti array bidimensionali, poiché gli array multidimensionali possono avere più di due indici.
6.1 Illustrare un array con due indici.
Nella figura sottostante vi è un array bidimensionale che contiene tre righe e quattro colonne, per cui è detto array 3 per 4. In generale, un array con m righe ed n colonne è chiamato array m per n.
Ogni elemento nell’array a è identificato da un nome di elemento nella forma a[i][j], dove a è il nome dell’array e i e j sono gli indici che identificano ogni elemento di a. I nomi degli elementi nella riga zero hanno tutti il primo indice uguale a 0 e i nomi degli elementi nella colonna tre hanno tutti il secondo indice uguale a 3.
6.2 Inizializzare un array con due indici.
Un array multidimensionale si può inizializzare quando viene definito, ad esempio un array bidimensionale int b [2][2] si
Può definire e inizializzare in questo modo: int b[2][2] = {{1, 2}, {3, 4}};
I valori sono raggruppati in parentesi graffe per righe, i valori nella prima coppia di parentesi inizializzano la riga 0 e quelli nella seconda inizializzano la riga 1. Così i valori 1 e 2 inizializzano rispettivamente gli elementi b[0][0]
e b[0][1]
.
ATTENZIONE: Se non vi sono abbastanza inizializzatori per una determinata riga, i restanti elementi di quella medesima riga verranno inizializzati a 0. Ad esempio, int b[2][2] = {{1}, {3, 4}};
inizializzano b[0][0]
a 1, b[0][1]
a 0, b[1][0]
a 3 e b[1][1]
a 4.
Per impostare gli elementi in una determinata riga, si può utilizzare un ciclo for
. Ad esempio, per impostare a 0 tutti gli elementi nella riga 2 di un array specifico:
for (colonna = 0; colonna <= 3; ++colonna) {
a[2][colonna] = 0;
}
Questa istruzione pone a 0 tutti gli elementi nella riga 2 di uno specifico array, poiché abbiamo specificato la riga 2 (il primo indice è sempre 2), quindi il ciclo fa iterare la variabile colonna
da 0 a 3.
variare solo il secondo indice (quindi l’indice della colonna).
7. Array di lunghezza variabile.
Negli array definiti fino a questo momento vi era specificata la dimensione al momento dellacompilazione. Nei casi in cui la dimensione di un array non è nota al momento dellacompilazione, C dispone di array di lunghezza variabile (VLA, variable-lenght array) ovveroarray con lunghezze definite in termini di espressioni calcolate al momento dell’esecuzione.
// Fig. 6.23: fig06_23.c // Uso degli array di lunghezza variabile in C #include <stdio.h> // prototipi di funzioni void print1DArray(size_t size, int array[size]); void print2DArray(int row, int col, int array[row][col]); int main(void) { printf("%s", "Enter size of a one-dimensional array: "); int arraySize; // dimensione di un array 1-D scanf("%d", &arraySize); int array[arraySize]; // array 1-D di lunghezza variabile printf("%s", "Enter
number of rows and columns in another 2-D array: "); 18 int row1, col1; // numero di righe e colonne in un array 2-D 19 scanf("%d %d", &row1, &col1); 21 int array2D1[row1][col1]; // array 2-D di lunghezza variabile 22 23 printf("%s", 24 "Enter number of rows and columns in another 2-D array: "); 25 int row2, col2; // numero di righe e colonne in un array 2-D 26 scanf("%d %d", &row2, &col2); 27 28 int array2D2[row2][col2]; // array 2-D di lunghezza variabile 29 30 // test dell'operatore sizeof su VLA 31 printf("\nsizeof(array) yields array size of %d bytes\n", 32 sizeof(array)); 33 34 // assegna dei valori agli elementi del VLA 1-D 35 for (size_t i = 0; i < arraySize; ++i) { 36 array[i] = i * i; 37 } 38 39 // assegna dei valori agli elementi del primo VLA 2-D 40 for (size_t i = 0; i < row1; ++i) { 41 for (size_t j = 0; j < col1; ++j) { 42 array2D1[i][j] = i + j; 43 } 44 } 45 46 // assegna dei valori agli elementi del secondo
VLA 2-D47 for (size_t i = 0; i < row2; ++i) {48 for (size_t j = 0; j < col2; ++j) {49 array2D2[i][j] = i + j;50 }51 }5253 puts("\nOne-dimensional array:");54 print1DArray(arraySize, array); // VLA 1-D come argomento5556 puts("\nFirst two-dimensional array:");57 print2DArray(row1, col1, array2D1); // VLA 2-D come argomento5859 puts("\nSecond two-dimensional array:");60 print2DArray(row2, col2, array2D2); // VLA 2-D come argomento61 }6263 void print1DArray(size_t size, int array[size])64 {65 // stampa i contenuti dell'array66 for (size_t i = 0; i < size; i++) {67 printf("array[%d] = %