Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
uiopasdfghjklzxcvbnmqwertyuiopasd
fghjklzxcvbnmqwertyuiopasdfghjklzx
cvbnmqwertyuiopasdfghjklzxcvbnmq
C – La Guida
wertyuiopasdfghjklzxcvbnmqwertyui
Costanti,Variabili,Operatori,Parole Chiave.
opasdfghjklzxcvbnmqwertyuiopasdfg
03/08/2007
T4n|n0 Ru|3z
hjklzxcvbnmqwertyuiopasdfghjklzxc
vbnmqwertyuiopasdfghjklzxcvbnmq
wertyuiopasdfghjklzxcvbnmqwertyui
opasdfghjklzxcvbnmqwertyuiopasdfg
hjklzxcvbnmqwertyuiopasdfghjklzxc
vbnmqwertyuiopasdfghjklzxcvbnmq
wertyuiopasdfghjklzxcvbnmqwertyui
opasdfghjklzxcvbnmqwertyuiopasdfg
hjklzxcvbnmrtyuiopasdfghjklzxcvbn
mqwertyuiopasdfghjklzxcvbnmqwert
yuiopasdfghjklzxcvbnmqwertyuiopas
C – La Guida
Costanti,Variabili,Operatori,Parole Chiave.
T4n|n0 Ru|3z
Note dell’autore
Questa guida è completamente gratuita e tratterà la programmazione C. L’autore non ha nulla in contrario
alla divulgazione o modifica della suddetta a patto che siano lasciati i riferimenti e i copyright di autore e
web site. Ho scritto questa guida per pura passione verso la programmazione e l’informatica in generale.
Ho preso spunto dalle slide del mio corso di C. Per qualsiasi domanda,dubbio,precisazione o correzione
potete contattarmi tramite il mio web site www.allf0ryou.altervista.org . Buona lettura.
Paradigmi di Programmazione
• Paradigma Funzionale
o Programma = ( insieme di ) funzioni
o Scheme,Lisp,ML…
• Paradigma Imperativo
o Programma = sequenza di istruzioni
o Pascal,C,Java..
o
Quindi,la domanda sorge spontanea… quando è utile utilizzare una funzione ? Quando un problema ha una
repricabilità.
Introduzione al C
Breve Storia del C
Linguaggio general purpose che fu progettato da Dennis Ritchie ( Bell laboratories ) nel 1972 su elaboratore
PDP11. Inizialmente era utilizzato per la programmazione del sistema operativo UNIX mentre in
seguito,dagli anni 80 in poi,fu utilizzato anche nelle scuole e nelle università per la didattica ( C tradizionale
). Alla fine degli anni 80,nacque l’ANSI C o C standard che supera alcuni limiti del C tradizionale. Col
tempo,la standardizzazione ha reso il C indipendente dal processore ( hardware ). Esistevano infatti alcune
sottili differenze tra le diverse implementazioni del C. Questo portava a problemi di incompatibilità e fu
creato un comitato che doveva dare una definizione non ambigua e indipendente dalla macchina. Fu
creato ne 1989 uno standard,che fu aggiornato nel 1999. Dunque,perché ANSI C ( d’ora in poi solo C ) ??
La risposta è semplice,rispetto ad altri linguaggi ( come il pascal ) il C ha meno parole chiave ma è più
potente per la presenza di strutture di controllo e tipi di dati più adeguati. Non dimentichiamoci che è un
linguaggio nativo di UNIX,che come tutti sappiamo è un sistema operativo interattivo molto utilizzato su
server,mainframe e workstation. Ha operatori che consentono di accedere alla macchina a livelli di bit,e che
sono in grado in modo pulito,elengante e compatto di realizzare operazioni complesse. Molti programmi
per la gestione di base di dati e per applicazioni grafiche sono scritti in C e soprattutto,è modulare ed è alla
base di C++ e Java.
Il linguaggio C,pur ponendosi al di sopra dei linguaggi orientati alla macchina,rimane un passo al di sotto
della maggior parte dei linguaggi orientati ai problemi. E’ sufficientemente vicino al computer per
C – La Guida
Costanti,Variabili,Operatori,Parole Chiave.
T4n|n0 Ru|3z
• Dimensioni compatte
poche regole sintattiche ed è possibile scrivere un compilatore C che opera con solo 256KB di
memoria.
• Ridotto numero di comandi
non include molte delle funzioni normalmente definite all'interno di altri linguaggi (funzioni di input
e output interne, particolari operatori aritmetici o funzioni per la gestione delle stringhe), ma è
dotato di un ricco insieme di funzioni di libreria.
• Velocità
elevata efficienza del codice C prodotto dalla maggior parte dei compilatori.
• Scarsi vincoli di tipo
a differenza del Pascal, che è un linguaggio fortemente orientato ai tipi, la gestione dei tipi di dati
del linguaggio C è molto poco vincolante.
• Un linguaggio strutturato
include tutte le strutture di controllo possedute da un linguaggio moderno.
• Supporto della programmazione modulare
compilazione e link separati.
• Facile interfacciabilità con routine scritte in linguaggio Assembler
• Manipolazione dei bit
include un numeroso gruppo di operatori per la manipolazione dei bit.
• Variabili puntatore
offre non solo la possibilità di implementare i puntatori ma anche quella di eseguire operazioni
aritmetiche su di essi.
• Strutture flessibili
tutti gli array sono monodimensionali. Tutte le elaborazioni multidimensionali sono costruite
a partire da combinazioni di array monodimensionali.
• Uso efficiente della memoria
la mancanza di funzioni interne evita al programma di includere il supporto per funzioni non
utilizzate da una determinata applicazione.
• Trasportabilità
è possibile convertire con facilità un programma che funziona su un computer o su un sistema
operativo in modo da poterlo utilizzare su un altro computer o un altro sistema operativo.
• Librerie di funzioni
sono disponibili numerose librerie di funzioni per tutti i più diffusi compilatori C.
• Mancanza di rigore nella gestione dei tipi
per esempio è possibile assegnare un intero a una variabile di tipo carattere o viceversa. Questo
significa che la corretta gestione delle variabili è a carico del programmatore.
• Mancanza di verifiche al momento dell'esecuzione
ad esempio il sistema runtime non avviserà se l'applicazione fa accessi oltre i limiti di un array.
C – La Guida
Costanti,Variabili,Operatori,Parole Chiave.
T4n|n0 Ru|3z
Un semplice programma in C
1 /* Stampa una riga di testo ver. 1*/
2 #include <stdio.h>
3 int main(void)
4{
5 printf("Welcome to C!\n");
6 return 0;
7}
Commentiamo il programma
• Il testo racchiuso tra /* e */ è ignorato dal
• compilatore
• In blu le parole chiave
• #include <stdio.h>Sono direttive per il preprocessore: carica il contenuto di un certo file <stdio.h>
che consente operazioni di input/output
• int main(void) I programmi C contengono uno o più funzioni, esattamente una di queste deve essere
main. La parentesi è usata per indicare una funzione
• int significa che il main “restituisce” un valore intero
• void significa che il main non prende input
• Le parentesi graffe { } indicano un blocco. I corpi di tutte le funzioni devono essere contenuti in
parentesi graffe.
• printf("Welcome to C!\n"); La funzione printf() è inclusa nella libreria stdio.h e istruisce il computer
ad eseguire la stampa della stringa di caratteri all’interno delle virgolette. L’intera linea è detta una
istruzione (statement). Tutte le istruzioni devono terminare con un punto e virgola.
• \ Carattere di escape (fuga) e toglie l’usuale significato al carattere che lo segue
• \n è una sequenza di escape, ed indica il carattere di newline
• return 0: Un modo di uscire da una funzione in questo caso, significa che il programma termina
normalmente
• } Parentesi graffe chiuse indica che la fine del main è stata raggiunta
Lo stesso programma,può essere scritto anche su una riga o due o tre,il con non conosce differenze di
spaziature
/* Stampa una riga di testo ver. 1.1 */
#include <stdio.h> int main(void)
{printf("Welcome to C!\n");return 0;}
E’ buona norma di programmazione inserire commenti quando si scrive un programma, indentare ( far
rientrare ) il corpo della funzione di un livello e mettere una sola istruzione per linea. Queste non sono
regole da rispettare ma solo suggerimenti per scrivere un programma chiaro e leggibile.
C – La Guida
Costanti,Variabili,Operatori,Parole Chiave.
T4n|n0 Ru|3z
Le parole Chiave
Alcune parole sono dette parole chiave e non possono essere utilizzati dai programmatori come nomi di
variabili. Rispetto ad altri linguaggi,il C possiede un numero ridotto di parole chiave,come mostra la tabella
seguente.
Uso di Printf
/* Stampa a video il valore di una variabile*/
#include <stdio.h>
int main(void)
{
int i; /* dichiarazione */
i = 3; /* inizializzazione */
printf(”Il valore della variabile è %d\n”, i); /* stampa */
return 0;
}
• Espressione
– Combinazione di costanti, variabili, operatori e chiamate a funzione
• tot=n1+n2;
• user=GetLine();
• tot=GetInteger()+1;
• Assegnamento
– Operatore di Assegnamento =
• Associatività: da destra a sinistra
– tot=138;
– tot=n1+n2;
Variabili e Memoria
C – La Guida
Costanti,Variabili,Operatori,Parole Chiave.
T4n|n0 Ru|3z
La funzione Scanf
Inserisci un intero:-33
Il valore inserito è -33
Operatori e Precedenza
• Operatori
– Caratteri speciali a cui è assegnato un particolare significato:
• + addizione
• - sottrazione
• * moltiplicazione
• / divisione
• % modulo (a%b equivale al resto di a/b)
• Operatori di Incremento e Decremento: ++ e - -
++i e i++ equivalgono a i=i+1
C – La Guida
Costanti,Variabili,Operatori,Parole Chiave.
T4n|n0 Ru|3z
L’uotput non è corretto,in quanto e = 0 … provate per credere ;) La differenza tra ++e ed e++ è la seguente :
• ++e = prima “ incrementa e “ e poi lo assegna alla variabile
• E++ = prima assegna il valore alla variabile e poi lo incrementa
La seconda parte termina qui. Nel prossimo capitolo parleremo di librerie e Operatori Relazionali. Alla
prossima allora, saluti da T4n|n0 Ru|3z.
www.allf0ryou.altervista.org