C Tour de Force:

  • #define
  • passi del compilatore: preprocessore -> compilatore -> assembler -> linker
  • espressioni in C: assegnamento come espressione, pre-incremento / post-incremento (o decremento), (vedere su libro anche espressione condizionale e confrontare con il comando if).
  • espressioni booleane, tipo bool, include stdbool.h, operatori logici: && (and) || (or), ! (not).
  • comandi condizionali: switch, if, else pendente, iterazioni: while, do ..while, for.
  • iterazioni: uso del break, uso del continue.

Esempio: numeri primi:
[cpp]
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <math.h>
int main(void)
{
int p = 0;
// leggo p dall’input
printf("Inserisci un intero: ");
scanf("%d",&p);
bool primo = true;
int d = 0;
// test di primalita’ per p
// p non e’ primo se esiste un divisore, quindi
// cerchiamolo: deve esistere in [2,sqrt(p)]
for (d = 2; d*d <= p; d++) {
if (p % d == 0) {
primo = false; // d e’ un divisore di p
break; // posso terminare subito il ciclo
}
}
if (primo) {
printf("Ok, %d e’ primo\n",p);
} else {
printf("Mi spiace, %d non e’ primo, ",p);
printf("infatti %d e’ un suo fattore\n",d);
}
return 0;
}
[/cpp]
Osservazione: Nel ciclo for, ho scritto come prima espressione d = 2. Notiamo che non è una dichiarazione, cioè non c’è scritto “int d = 2”, le due istruzioni sono diverse, come vedremo in modo più approfondito questo ha a che fare con lo “spazio di visibilità dei nomi”, un concetto importante nei linguaggi di programmazione: se mettevo la dichiarazione dentro il for, allora la variabile d esiste solo dentro il costrutto for.
Quindi all’uscita dal for essa cessa di esistere. Usarla nella printf subito sotto (riga 31) sarebbe sbagliato, ed il compilatore lo segnalerebbe (provate).
La dichiarazione fuori dal for invece, implica che la variabile è visibile fino alla fine del blocco corrispondente (la funzione main).
In generale quando si scrivono for, la pragmatica moderna ci dice che è preferibile limitare al massimo lo spazio di visibilità di una variabile e quindi, se non serve usarla ‘fuori’ dal ciclo, meglio inserire la dichiarazione nel for, ad esempio come in

for(int i=0; i<10; i++)...

Potete studiare il testo fino al capitolo sugli array incluso.