Anteprima
Vedrai una selezione di 3 pagine su 8
Array Pag. 1 Array Pag. 2
Anteprima di 3 pagg. su 8.
Scarica il documento per vederlo tutto.
Array Pag. 6
1 su 8
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

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,
visto che si tratta di un array, non vi è bisogno di utilizzare il carattere & posto prima della locazione di memoria della variabile, poiché si tratta appunto di una stringa. 3.4 Invio in uscita di un array di caratteri. Un'array di caratteri che rappresenta una stringa può essere inviato in uscita con printf e il specificatore %s. printf("%s\n", string2); 4. Array locali statici e array automatici. Applicando lo specificatore static alla definizione di un array locale in modo che quest'ultimo non debba essere creato e inizializzato ogni volta che la funzione è chiamata e che non venga distrutto ogni volta che si esce dalla funzione nel programma. Gli array che sono static sono inizializzati una volta per tutte all'avvio del programma. Se non inizializzato esplicitamente un array static, gli elementi di quel array vengono automaticamente inizializzati a zero. 4.1 Passare gli array alle funzioni. Per passare come argomento un array a una funzione, è sufficiente specificare il nome dell'array senza utilizzare il carattere &. Esempio: void funzione(int array[]);<pre><code>int hourlyTemperatures[HOURS_IN_A_DAY];</code></pre> La chiamata della funzione per modificare l'array sarà: <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, bisogna

Usare 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] = %
Dettagli
Publisher
A.A. 2021-2022
8 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher iamgiuls_ di informazioni apprese con la frequenza delle lezioni di Programmazione e laboratorio e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Palermo o del prof Lo Bosco Giosuè.