Linguaggio C
Abbiamo un problema nel mondo reale e per risolverlo scriviamo un algoritmo che diamo in pasto ad un calcolatore.
Questo algoritmo lo salviamo in un file, con estensione .c.
Diamo il file ad un compilatore, che sarebbe un programma già esistente, già scritto.
Il compilatore produce un file scritto in linguaggio macchina, solo 0 e 1, che il calcolatore comprende e può eseguire.
I due passaggi di compilatore e esecuzione sono automatici, noi non li vediamo. Perché avvengano dobbiamo dare dei comandi da terminale:
- Per compilare: gcc nome.c -o nome, ovvero dico al compilatore prendi nome.c traducilo in linguaggio macchina e metti il risultato in nome.
- Per eseguire: ./nome.
Linguaggi di programmazione
Esistono molti linguaggi di programmazione.
- Linguaggi di basso livello = vicini al linguaggio macchina.
- Linguaggi di alto livello = vicini al linguaggio umano.
Il linguaggio C è ad alto livello, non usa 0 e 1 ma parole, anche se devono rispettare una sintassi.
Col tempo sono nate diverse versioni del C.
Il linguaggio C è:
- Imperativo, perché formato da comandi che dicono al compilatore cosa deve fare.
- Dichiarativo perché ogni volta che usiamo variabili dobbiamo prima averle dichiarate.
- Strutturato: ben strutturato, ovvero diviso in varie parti.
- Case sensitive, scrivere una parola con minuscola o maiuscola è una cosa diversa.
Macchina astratta C
Macchina astratta C, uguale al calcolatore che avevamo immaginato.
Avrà una CPU, che svolge operazioni, una memoria, formata da varie celle in cui vengono allocate le variabili, ci sono standard input e standard output.
Tutti questi elementi sono collegati con un bus.
int main (){return 0;}
Subito dopo int main devo dichiarare le variabili, nella forma:
nome_tipo nome_variabile;
nome_tipo definisce la classe dei valori ammissibili e le operazioni ammissibili.
Quando dichiaro una variabile, nella memoria si crea uno spazio di dimensione che dipende dal tipo di dato.
Tipi di dati predefiniti
Esistono alcuni tipi di dati predefiniti:
- Char usato per i caratteri, rappresentati con 8 bit come fossero dei numeri, per farlo si usa la tabella ASCII che associa un numero\ .\
- Es: char c1;
- Oppure char c1, c2, c3;
Esempio di assegnamento:
int usato per gli interi con segno, insieme Z.
Questi saranno rappresentati con notazione 2C2, complemento a 2, usando 32 bit.
Es: int num1, num2;
float usato per rappresentare numeri reali, si usa la virgola mobile con standard IEEE 754 con precisione singola. Usa quindi 32 bit.
double usato sempre per i reali, ma usa IEEE 754 doppia precisione e quindi 64 bit e ha la seguente sintassi:
scanf(stringa_di_controllo, lista_delle_variabili_da_leggere);
La stringa di controllo contiene dei caratteri che sono relativi al formato delle variabili, sono caratteri predefiniti. Essi sono contenuti tra doppi apici.
Il carattere è:
Esempio: voglio leggere un intero e un float.
Mentre la lista delle variabili indica dove devono essere messi i valori che vengono letti. Tali valori devono essere preceduti da &.
La & ha un significato per caso. Ogni cella di memoria è caratterizzata da un indirizzo, per risalire a questo indirizzo si usa.
Libreria stdio.h e direttive
Le operazioni di lettura e scrittura sono implementate in dei programmi, che si di una libreria chiamata stdio.h riferimento alla libreria sopra indicata.
Lo faccio scrivendo:
#include <stdio.h>
Questa cosa si scrive prima del main, ovvero sempre nella parte dichiarativa globale posso dichiarare una costante, usando la sintassi:
#define NOME_COSTANTE valore_costante
In tutto il programma PI avrà quel valore.
Ogni volta che ho un valore costante nel programma, è opportuno creare una costante.
:printf(stringa di controllo, lista variabili);
La stringa di controllo è sempre la stessa, ovvero %d, %f, %c.
Per andare a capo \n.
Per dare un tab \t appaiano nella stampa.\
Struttura del programma
In conclusione dovremo avere:
- Una parte dichiarativa globale, con le direttive, ad esempio con le librerie, ci dovrà sempre essere #include <stdio.h> senza ;.
- Altre librerie se servono e costanti se ci sono.
- Parola chiave int (main){ return 0; }
- Parte dichiarativa locale: dove dichiariamo le variabili che dobbiamo usare nel programma.
- Parte esecutiva: contiene tutte le istruzioni che fanno parte del nostro programma.
Appunti su assegnamento e calcoli
Problema leggere l'il calcolarne di del stamparla valore cerchio raggio area e: un ., inizio È-É stamparne i double predefiniti int float chantipi esiste Tra ordinei <<<un : tipo nell' altrimentipiù Quando assegnamento ordine faccio destra non assegnare a posso un un ,, perdo informazioni delle . |81 15.782 float fn ;, & "' °int iMunn MUU 2, muli 7una ,1 7nulle ;=2 8 ;nun =15.7In ;= (numi ( problema82 c') ) è ad float DXsxiutero + a; + unun non assegno :→= )( ) ( decimale perdo DXfloatfn ad sxintero parte a la + a :+assegno;Menez unun→= informazione assegnamento tra tipi verificare diversi si può nel perché di perdita fare attento stare devo una, |(81 15/7 O7.21 intero risultato interi tra num nulla + ;mene somma= →→ " + °/ 2 7nunez divisione 1512 resto quoziente intera num e; ==, &ra
-
Appunti di introduzione di Basi di dati
-
Introduzione al Restauro
-
Esame universitario di Introduzione alla programmazione
-
Introduzione semiotica e Saussure