Concetti base della programmazione
Commenti e inclusione delle librerie
/*...*/ Inserisce commenti
#include Inclusione delle librerie
Variabili e assegnamento
Assegna un valore ad una variabile.
operatore di = Quando la variabile è a sinistra, si usa il suo indirizzo per assegnamento
modificare il suo valore; quando è a destra si usa il valore
Funzioni matematiche
pow(a,b) A elevato alla b Si trova nella libreria math.h
Visualizzazione e caratteri di escape
Visualizza una sequenza di caratteri
Il carattere ‘\’ (backslash) si premette ai “caratteri di escape”
- \n Nuova linea
- \t Tabulazione
- \b Torna indietro di un carattere
- \\ Stampa il carattere \
- \" Stampa il carattere "
printf("..."); istruzione di stampa
Acquisizione dati
Acquisisce un dato in ingresso dall’utente e lo alloca all’indirizzo della locazione di memoria corrispondente alla variabile.
Interrompere l'esecuzione
Interrompe il flusso d’esecuzione
Return 0 Indica a termine di una funzione che il programma è terminato correttamente
Formati di input e output
- %d int Intero decimale
- %ld long Lungo (32 bit)
- %hd short Corto (16 bit)
- %c char Carattere ASCII (1 byte)
- %s Stringa
- %f (4 byte) Numeri con la virgola
- %e Numeri con la virgola in forma esponenziale
- %lf double Lungo (8 byte)
Gestione input dal terminale
scanf("...", &...); input
Utilizzato dopo la scanf per eliminare i caratteri fflush(stdin) in coda che fanno terminare il programma (\n)
Casting e costanti
Se n e m sono int ma voglio la divisione in float
Cast esplicito x = (float) m/n senza variare il tipo delle variabili che rimangono int
const Const tipo nome = valore
Definire costante Define #define nome valore
Undef #undef nome
Cicli di controllo
do-while Esegue una volta il ciclo e poi verifica la condizione
do {
istr 1
...
istr N
} while (condizione);
While Verifica prima la condizione e poi entra nel ciclo
while (condizione) {
istr 1
...
istr N
}
For Ciclo for
for (inizio; condizione; incremento) {
istr 1
...
istr N
}
Switch-case
switch (variabile) {
case v :
istr 1;
break;
...
case v :
istr N;
break;
default:
istr U;
break;
}
Break; Consente di uscire dal corpo di un ciclo o da uno switch
Interrompe l’iterazione corrente di un ciclo e dà inizio all’iterazione successiva dopo aver eseguito l’incremento
Continue;
Array
Gruppo di celle consecutive con elementi dello stesso tipo. Il primo elemento ha indice 0
Per eccedere ad un elemento nomearray [posizione] e riempirlo nomearray [posizione] = valore
Per creare un array tipo nomearray [numeroelementi];
tipo nomearray [numeroelementi] e riempirlo = {elem1, .., elemN};
Riempimento e copia di un array
for (i = 0; i < numeroelementi; i++) {
o riempirlo da terminale
printf("Scrivi un intero: ");
scanf("%d", &nomearray[i]);
}
int array1[dimensione], array2[dimensione], i;
Ricopiare array1 in array2
for (i = 0; i < dimensione; i++) {
array2[i] = array1[i];
}
Ricerca e ordinamento
Ricerca di un elemento
int dato, risultato = -1, n;
int array[size];
for (n = 0; n < size; n++) {
if (array[n] == dato) {
risultato = n;
break;
}
}
Ordinare un array con bubblesort
for (j = 0; j < size - 1; j++) {
for (i = 0; i < size - 1; i++) {
if (vet[i] > vet[i+1]) {
aux = vet[i];
vet[i] = vet[i+1];
vet[i+1] = aux;
}
}
}
Stringhe
Array di caratteri che termina con \0. Le funzioni sono contenute nella libreria string.h
Inizializzazione
char nomestringa[] = "parola";
char nomestringa = {'p', 'a', 'r', 'o', 'l', 'a', '\0'};
strcpy(nomestringa, "parola");
Manipolazione delle stringhe
Copia stringa1 in stringa2 strcpy (stringa2, stringa1);
Copia n caratteri di stringa1 in stringa2 strncpy (stringa2, stringa1, n);
Stringa Lunghezza x = strlen(nomestringa);
Riempire stringa da terminale scanf("%s", nomestringa);
Confrontare due stringhe
Se restituisce 0 sono uguali
Se restituisce un numero < 0 stringa1 è più corta
Se restituisce un numero > 0 stringa1 è più lunga
strcmp (stringa1, stringa2);
Consente di concatenare stringa2 a stringa1 strcat (stringa1, stringa2);
Matrici
Array a più dimensioni. Le righe orizzontali sono chiamate righe, mentre quelle verticali sono le colonne
for(i = 0; i < DIM; i++) {
for(j = 0; j < DIM; j++) {
printf("Dammi elemento (%d,%d)\n",i,j);
scanf("%d", &M[i][j]);
}
}
for(i = 0; i < DIM; i++) {
for(j = 0; j < DIM; j++) {
printf("%4d", M[i][j]);
}
printf("\n");
}
Struct
Memorizza aggregazioni di dati di diversa natura. Ogni dato è chiamato campo
char strcpy(nome.campo, "stringa");
Assegnamento ai campi int nome.campo = numero;
char scanf("%s", nome.campo);
int scanf("%d", &nome.campo);
Confrontare e creare nuove struct
Struct Assegnare una struct ad un’altra identica struct1 = struct2;
if (strcmp(nome.campochar, nome.campochar2) == 0 && nome.campoint == nome.campoint2))
typedef struct {
tipo campo1;
tipo campo2;
...
} nomestruct;
Puntatori
Variabili che hanno come valore l’indirizzo di un’altra variabile
%p printf("indirizzo di x: %p", &x);
Typedef tipo * tiporef;
tiporef p = &x;
Dichiarazione int * p;
p = &x;
Si impone che il puntatore p punti alla stessa variabile a cui punta q
p = q;
Si assegna il valore della variabile puntata da q al valore della variabile puntata da p
*p = *q;
if (p == NULL) Test di nullità
if (!p) Test di non nullità
if (p != NULL) Test di non nullità
if (p)
p→primocampo Nelle struct o (*p).primocampo
Array e puntatori
Un array v è una costante di tipo puntatore che punta all’indirizzo della prima cella
v = &v[0]
v[i] è equivalente a *(v + i)
Negli array Se p e q puntano a due diversi elementi di uno stesso array, la differenza p – q dà la distanza nell’array tra gli elementi puntati
Funzioni
Una funzione è una sequenza di comandi che ha un nome, può essere invocata, può ricevere dei parametri che ne influenzano l’esecuzione e produce.