



Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Riassunto degli argomenti di Programmazione 1 del corso di laurea in Informatica
Tipologia: Sintesi del corso
1 / 6
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!




I programmi C richiedono pochissimo codice di contorno, per questo possono essere lunghi anche solo poche righe, per esempio il programma pun.c :
#include <stdio.h>
int main (void)
{
printf (“To C or not to C: this is the question.\n”);
return 0
}
La linea #include <stdio.h> è necessaria per includere le informazioni riguardanti la libreria standard di I/O (input/output) del C. Il codice eseguibile si trova all’interno della sezione main che rappresenta la parte principale del programma. La printf è la funzione della libreria standard I/O adatta a produrre dell’output opportunamente formattato. Il codice \n serve per avvertire la printf di avanzare alla linea successiva dopo la stampa del messaggio. L’istruzione return 0 ; indica che il programma, quando termina, restituisce il valore 0 al sistema operativo.
Per convertire il programma in una forma che il compilatore possa eseguire bisogna che passi attraverso tre fasi:
Per compilare e fare il linking del programma pun.c si deve immettere il seguente comando in un terminale:
cc pun.c
Dopo aver compilato ed eseguito il linking, per default cc rilascia il programma eseguibile in un file chiamato a.out. Il linker cc ha molte opzioni, una di queste, l’opzione -o , ci permette di scegliere il nome del file contenete il programma eseguibile. Per esempio, se vogliamo una versione eseguibile del programma pun.c allora immetteremo il comando:
cc -o pun pun.c
I programmi C più semplici hanno la forma:
direttive
int main(void)
{
istruzioni
}
Dove le parentesi graffe indicano l’inizio e la fine del main. Prima che un programma C venga modificato da un preprocessore, i comandi indirizzati a quest’ultimo vengono chiamati direttive. Per esempio:
#include <stdio.h>
Questa direttiva indica che le informazioni contenute in <stdio.h> devono essere incluse nel programma prima che venga compilato. L’header <stdio.h> contiene informazioni riguardanti la libreria standard di I/O del C. Le direttive iniziano sempre con il carattere # che le distingue dagli altri oggetti presenti in un programma C. Per default le direttive sono lunghe una sola riga e non vi è nessun punto e virgola alla loro fine.
Le funzioni sono blocchi per mezzo dei quali i programmi vengono costruiti. Infatti, un programma C non è altro che una collezione di funzioni, le quali si dividono in due categorie: quelle scritte dal programmatore e le funzioni di libreria, cioè quelle fornite insieme al compilatore. Il termine funzione deriva dalla matematica dove una funzione è una regola per calcolare un valore a partire da uno o più argomenti dati. Il C invece utilizza il termine funzione in modo meno restrittivo. In C una funzione è semplicemente un raggruppamento di una serie di istruzioni al quale è stato assegnato un nome. Alcune funzioni calcolano un valore, altre no. Una funzione che calcola un valore utilizza l’istruzione return per specificar il valore che deve restituire. Sebbene un programma C possa essere composto da molte funzioni, solo la funzione main è obbligatoria. Il main è una funzione che restituisce un codice di stato che viene passato al sistema operativo quando il programma termina. Per esempio nel programma pun.c , la parola int, che si trova immediatamente prima della funzione main , indica che la funzione restituisce un valore intero, mentre la parola void indica che main non ha argomenti. L’istruzione return 0 ; ha due effetti: causa la fine del main ed indica che restituisce il valore 0. Il programma termina ugualmente se non c’è nessuna istruzione return alla fine del main , tuttavia in quel caso molti compilatori produrranno un messaggio di warning.
Un’istruzione è un comando che viene eseguito quando il programma è in funzione, il termine dell’istruzione è indicato del punto e virgola.
In C all’interno dei programmi si possono inserire dei commenti. Il simbolo /* indica l’inizio di un commento e il simbolo */ ne indica la fine.
/* Questo è un commento */
I commenti possono apparire ovunque in un programma, sia su righe separate che sulla stessa riga sul quale si trova altro testo appartenente al programma. Una volta che il compilatore legge il simbolo /* , ignora tutto il resto finché non incontra il simbolo */. Dimenticare di chiudere un commento può far sì che il compilatore ignori parte del programma.
In C i dati vengo memorizzati in variabili. Ogni variabile deve avere un tipo che specifichi la tipologia di dati che dovrà contenere. Una variabile di tipo int (abbreviazione di integer), può memorizzare un numero intero, tuttavia l’intervallo dei possibili valori è limitato. Una variabile di tipo float (abbreviazione di floating- point), può memorizzare numeri più grandi rispetto ad una variabile int , ed inoltre può memorizzare numeri con cifre dopo la virgola, ma i calcoli svolti su questo tipo di variabili sono più lenti ed il valore della variabile è di solito un’approssimazione del numero memorizzato in essa.
Le variabili devono essere dichiarate, cioè descritte, prima di poter essere utilizzate. Per dichiarare una variabile bisogna prima specificarne il tipo e poi il nome. Per esempio
int height;
afferma che height è una variabile di tipo int, indicando in questo modo che può memorizzare un numero intero. Se diverse variabili sono dello stesso tipo, le loro dichiarazioni possono essere combinate. Per il compilatore una dichiarazione completa termina con il punto e virgola.
Si può conferire un valore ad una variabile tramite un assegnamento. Per esempio l’istruzione height=8; assegna il valore 8 ad height, il numero 8 è chiamato costante. Prima che ad una variabile possa essere assegnato un valore, deve essere dichiarata.
Alcune delle variabili vengono automaticamente impostate a zero quando un programma inizia l’esecuzione. Una variabile che non ha un valore di default e alla quale il programma non ha ancora assegnato un valore è
Il codice \n è chiamato sequenza di escape. Le sequenze di escape permettono alle stringhe di contenere dei caratteri che altrimenti causerebbero dei problemi al compilatore, inclusi i caratteri non stampabili e i caratteri che hanno un significato speciale per il compilatore.
Quando queste sequenze di escape appaiono nelle stringhe di formato della printf, rappresentano un’azione che deve essere eseguita durante la stampa. Su molti computer stampare \a provoca un beep udibile, stampare \b fa in modo che il cursore si muova indietro di una posizione, \n fa avanzare il cursore all’inizio della riga successiva, \t sposta il cursore al punto di tabulazione successivo. Alcune sequenze di escape rappresentano dei caratteri, come \” che rappresenta il carattere “ e \ che rappresenta __.
Così come la funzione printf stampa l’output secondo uno specifico formato, la scanf legge l’input secondo un particolare formato, e come la printf può contenere sia caratteri ordinari che specifiche di conversione. La scanf è controllata da una stringa di formato, quando viene chiamata inizia ad elaborare le informazioni presenti nella stringa partendo dalla sinistra. La scanf , quindi legge l’oggetto fermandosi non appena incontra un carattere che non può appartenere all’oggetto stesso. Se l’oggetto è stato letto con successo la scanf prosegue elaborando il resto della stringa di formato. Se un qualsiasi oggetto non viene letto con successo la scanf termina immediatamente senza esaminare la parte rimanente della stringa di formato. Quando la scanf cerca l’inizio di un numero ignora i caratteri che rappresentano degli spazi vuoti, di conseguenza i numeri
possono essere messi sia su una singola riga che sparsi su righe diverse. Quando le viene chiesto di leggere un intero, la scanf per prima cosa va alla ricerca di una cifra, di un segno più o di un segno meno. Successivamente legge le cifre fino a quando non incontra un carattere che non corrisponde a una cifra. Quando le viene chiesto di leggere un numero a virgola mobile, la scanf va alla ricerca di un opzionale segno più o meno, seguito da una serie di cifre contenenti un opzionale punto decimale, seguita da un opzionale esponente.
Quando una stringa di formato incontra uno o più caratteri di spaziatura consecutivi, la scanf legge consecutivamente tali caratteri dall’input fino a quando non raggiunge un carattere non appartenente alla spaziatura, il numero di caratteri di spaziatura nella stringa di formato è irrilevante.
Quando in una stringa di formato la scanf incontra un carattere non corrispondente a spaziatura, lo confronta con il successivo carattere di input. Se i due combaciano, la scanf scarta il carattere di input e continua l’elaborazione della stringa. Se invece i due caratteri non combaciano, la scanf rimette il carattere diverso nell’input e poi si interrompe senza elaborare ulteriormente la stringa di formato o leggere altri caratteri di input.
Sebbene la scanf e la printf siano molto simili, ci sono delle differenze significative tra le due funzioni. Ignorare queste differenze può essere rischioso per la salute del programma. Uno degli errori più comuni è quello di mettere il simbolo & davanti alle variabili in una chiamata alla printf.
Operatori aritmetici
Unario Binario Binario Additivo Moltiplicativo
L’operatore % è l’operatore resto, il valore i % j è il resto che si ottiene dividendo i per j. Gli operatori della tabella, ad eccezione di %, ammettono sia operandi interi che a virgola mobile, inoltre è ammesso persino mischiare i tipi. Quando operandi float vengono mischiati, il risultato sarà float.
Gli operatori / e % necessitano un’attenzione particolare. Quando entrambi gli operandi sono interi, l’operatore / tronca il risultato omettendo la parte frazionaria. L’operatore % richiede operandi interi, se anche solo uno degli operandi non è un intero, allora il programma non verrà compilato. Utilizzare lo 0 come operando destro di uno dei due operatori / e % provoca un comportamento non definito.
Precedenza degli operatori e associatività
Come regola generale, il C ammette in tutte le espressioni l’utilizzo di parentesi per effettuare dei raggruppamenti. Il C utilizza delle regole di precedenza degli operatori per risolvere delle potenziali ambiguità. Gli operatori aritmetici utilizzano il seguente ordine di precedenza.
Precedenza più alta + unario -