Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Programmazione linguaggio C, Dispense di Informatica

La dispensa affronta l'argomento della programmazione base in linguaggio C. In particolare viene mostrato come usare tutti gli strumenti e le tecniche di programmazione per creare un semplice software

Tipologia: Dispense

2021/2022

In vendita dal 26/08/2022

marco-formicola-2
marco-formicola-2 🇮🇹

4 documenti

1 / 9

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Il primo programma .
Il primo programmino in C sarà un programma abbastanza semplice, che
stampa sullo schermo della console "Hello world!" ed esce. Vediamo il
codice:
/* hello.c */
#include <stdio.h>
int main(void) {
printf ("Hello world!\n");
return 0;
}
Una volta scritto questo codice con il nostro editor preferito, salviamolo
come hello.c e compiliamolo con il nostro compilatore. Se usiamo GCC:
gcc -o hello hello.c
Quando lo eseguiamo (ovviamente in modalità console) apparirà la scritta
"Hello world!". Ma vediamo cosa fa nel dettaglio...
Innanzitutto, la prima riga è un commento. I commenti in C iniziano con /*
e finiscono con */, ma la maggior parte dei compilatori riconoscono anche
i commenti in stile C++ (che iniziano con // e finiscono con la fine della
riga). Esempio:
codice
codice /* Questo è un commento in stile C */
codice /* Anche questo è
un commento in stile C */
codice // Questo è un commento in stile C++
All'interno di un commento è possibile scrivere informazioni sul
programma, o commenti su un passaggio di codice eventualmente poco
chiaro.
La prima vera e propria linea di codice è #include <stdio.h>: come ho
accennato nel paragrafo precedente, questa è una direttiva al
preprocessore, ovvero un'istruzione che dice al calcolatore che nel
programma che segue si useranno le funzioni definite nel file stdio.h (i file
header dovreste trovarli nella cartella include del vostro compilatore). Il
file stdio.h contiene le funzioni principali per lo STanDard Input/Output,
ossia le funzioni che permettono, ad esempio, di scrivere messaggi in
pf3
pf4
pf5
pf8
pf9

Anteprima parziale del testo

Scarica Programmazione linguaggio C e più Dispense in PDF di Informatica solo su Docsity!

Il primo programma.

Il primo programmino in C sarà un programma abbastanza semplice, che stampa sullo schermo della console "Hello world!" ed esce. Vediamo il codice: /* hello.c / #include <stdio.h> int main(void) { printf ("Hello world!\n"); return 0; } Una volta scritto questo codice con il nostro editor preferito, salviamolo come hello.c e compiliamolo con il nostro compilatore. Se usiamo GCC: gcc -o hello hello.c Quando lo eseguiamo (ovviamente in modalità console) apparirà la scritta "Hello world!". Ma vediamo cosa fa nel dettaglio... Innanzitutto, la prima riga è un commento. I commenti in C iniziano con / e finiscono con /, ma la maggior parte dei compilatori riconoscono anche i commenti in stile C++ (che iniziano con // e finiscono con la fine della riga). Esempio: codice codice / Questo è un commento in stile C / codice / Anche questo è un commento in stile C */ codice // Questo è un commento in stile C++ All'interno di un commento è possibile scrivere informazioni sul programma, o commenti su un passaggio di codice eventualmente poco chiaro. La prima vera e propria linea di codice è #include <stdio.h>: come ho accennato nel paragrafo precedente, questa è una direttiva al preprocessore, ovvero un'istruzione che dice al calcolatore che nel programma che segue si useranno le funzioni definite nel file stdio.h (i file header dovreste trovarli nella cartella include del vostro compilatore). Il file stdio.h contiene le funzioni principali per lo STanDard Input/Output, ossia le funzioni che permettono, ad esempio, di scrivere messaggi in

modalità testo, di leggere valori dalla tastiera, di manipolare files e buffer... se non includessimo questa istruzione non potremmo usare la funzione printf() più avanti. Il file stdio.h è il file che useremo maggiormente nel corso di questo tutorial. A questo punto inizia il programma vero e proprio: viene eseguito tutto ciò che si trova all'interno della funzione main() (la funzione principale di ogni programma), che inizia con { e finisce con }. Nel paragrafo dedicato alle funzioni vedremo meglio come funziona il main (scusate per il gioco di parole). Intanto anticipo che quell'int situato prima del main() dice al chiamante (in questo caso il sistema operativo stesso) che la funzione main() ritorna un numero intero (e questo spiega la riga return 0). A questo punto chiamiamo la funzione printf(), definita nel file stdio.h. Questa funzione stampa un messaggio sullo standard output (la console sul monitor). Ovviamente, il messaggio è racchiuso fra parentesi tonde e i doppi apici "". La sequenza \n è una escape sequence, che dice al compilatore di andare a capo dopo aver scritto ciò che è contenuto nella printf() (\n sta per "new-line"). Ecco le principali sequenze di escape usate nel C:

  • \n Va a capo (new line)
  • \t Va avanti di una tabulazione (tasto TAB)
  • \b Va indietro di un carattere (tasto BACKSPACE)
  • \a Fa emettere un BEEP allo speaker interno (ALARM)
  • " Stampa i doppi apici ""
  • ' Stampa un apice singolo Piccola nota: tutte le istruzioni del C finiscono con un punto e virgola ; (in molti linguaggi di programmazione ad alto livello è così, Java, Perl, Pascal...). L'istruzione return 0, come ho già detto prima, dice al programma di

Caratteri di testo ASCII 8 Numeri interi piccoli (da -32768 a 32768) 16 Numeri positivi interi piccoli (da 0 a 65536) 16 Numeri interi (da -2147483648 a 2147483648) 32 Numeri interi positivi (da 0 a 4294967296) 32 Numeri interi grandi 32 Numeri a virgola mobile (precisione singola) 32 Numeri a virgola mobile (doppia precisione, notazione 64 scientifica) Esempio: int a; inizializzarla int b = 3; char c = 'q'; carattere q float d = 3.5; // Dichiaro una variabile float d che vale 3.5 a = 2; // Adesso a vale 2 inte=a+b; //evalelasommadiaeb,ossia

Operazioni elementari sulle variabili

È possibile fare con le variabili ogni tipo di operazione matematica elementare: addizione (+), sottrazione (-), moltiplicazione (*), divisione (/), resto della divisione (%). Diamo però un'occhiata a questo codice:

int a = 2; // Variabile int float b = 3.5; // Variabile float int c = a+b; // ERRORE! Quello che ho riportato sopra è un errore molto frequente anche fra i programmatori più esperti, se provo a compilare un codice del genere otterrò un warning (un "avvertimento del compilatore, che però non pregiudica la compilazione vera e propria) o, più spesso, un errore vero e proprio (la compilazione viene arrestata). Non posso effettuare operazioni fra due tipi di variabili diversi fra loro (int questo caso, int e float): per farlo devo ricorrere alla conversione di cast, ovvero specificare esplicitamente al compilatore in che tipo di variabile voglio salvare il risultato. Esempio corretto: int a = 2; float b = 3.5; int c = (int) a+b; questo caso Oppure: // Converto il risultato in int. c vale 5 in // Dichiaro una variabile intera chiamata a senza // Dichiaro una variabile intera b che vale 3 // Dichiaro una variabile char che contiene il int a = 2; float b = 3.5; float c = (float) a+b; // Converto il risultato in float. c vale 5.5 in questo caso A differenza delle variabili "matematiche", in C una scrittura del genere è concessa: int a = a+2; // Aggiorno il valore di a Oppure, in modo più sintetico: int a += 2; La scrittura a += 2 sta per a = a+2 (sono concesse scritture come += -= *= /= %=). La scrittura a++ è invece un incremento della variabile a, ed equivale a a=a+1 (così come la scrittura a-- equivale a a=a-1).

float x = 3.14; printf ("x vale %f",x); dove la scrittura %f dice al compilatore di stampare una variabile di tipo float. Ecco i formati di stringa principali usati per stampare i principali tipi di variabili: Esempio: /* variabili.c */ #include < stdio.h > int main() { int a,b,c; // Dichiaro 3 variabili int a = 3; b = 4; c = a+b; // c vale 7 printf ("c vale %d\n",c); a += 3; b++; c = a-b; // Ora a vale 6 // Ora b vale 5 // Ora c vale - 1 printf ("Ora c vale %d\n",c); return 0; } Il fatto interessante è che possiamo eseguire opeazioni anche sulle variabili char. Le variabili char, infatti, vengono considerate dal programma come codici ASCII, ovvero ogni variabile ha il suo codice numerico (da 0 a 255) che viene convertito in runtime in un carattere (attenzione che in linguaggi come Java queste operazioni non sono concesse, in quanto i caratteri non sono in formato ASCII ma Unicode). Ecco un esempio: char c = 65; // Equivale a scrivere char c = 'A', infatti // 65 è il codice per la lettera A charc+=4; //OraavaleE printf ("a = %c\n",c);

Input da tastiera.

Finora abbiamo preso in esame programmi che eseguono delle istruzioni ed escono. Ma un programma non ha molto senso se non può interagire con l'utente che lo usa. Il C mette a disposizione molte funzioni per l'I/O (Input/Output) da tastiera (quelle che useremo sono definite perlopiù in in stdio.h). Abbiamo già incontrato la printf() per l'output sul monitor, ora facciamo conoscenza con la scanf(), per la lettura di valori dalla tastiera. Ecco la forma della scanf(): scanf ("tipo_da_leggere",&variabile); Ed ecco un piccolo esempio: int a; // Dichiaro una variabile int printf ("Inserisci una variabile intera: "); scanf ("%d",&a); // Dico al programma di leggere il valore immesso Ecco nel frammento di programma di sopra cosa succede: Attraverso la scanf() dico al programma di leggere un valore intero dalla tastiera (già abbiamo visto che la sequenza %d dice al programma che quella che si sta per leggere o scrivere è una variabile intera) e di salvare questo valore all'indirizzo della variabile a (capiremo meglio questo concetto quando parleremo dei puntatori), ossia copio questo valore nella variabile intera a. Ecco un programmino facile facile che somma fra loro due numeri reali: /* somma.c */ #include <stdio.h> double somma(double a, double b); // Prototipo della funzione somma() int main() { double a,b; // Dichiaro 2 variabili double printf ("Inserire il primo numero: "); scanf ("%lf",&a); // Leggo il primo valore double e lo salvo all'indirizzo di a printf ("Inserire il secondo numero: "); scanf ("%lf",&b); // Leggo il secondo valore double e lo salvo all'indirizzo di b printf ("Somma fra %lf e %lf = %lf\n",a,b,somma(a,b)); // Stampo la somma fra a e b return 0; }