Storia del linguaggio C Informatica (A-K) 7. Linguaggio C - 1 Corso di Laurea in Ingegneria Civile & Ambientale A.A. 2011-2012 2 Semestre Prof. Giovanni Pascoschi Linguaggio C 1972, nato come evoluzione di due linguaggi BCPL e B Linguaggi senza nozione di tipo di dati Dennis Ritchie (Bell Laboratories) Linguaggio di sviluppo di Unix Indipendente dall Hardware Portabilità 1989: standard approvato 1990: pubblicato standard ANSI e ISO ANSI/ISO 9899: 1990 a cura di Pascoschi Giovanni 2 Un primo esempio in C Un primo esempio in C OUTPUT Commento /* Programma di Esempio */ int main( ) { printf( Hello,World!\n ); return 0; } Hello, World! /* Programma di Esempio */ int main( ) { printf( Hello,World!\n ); return 0; } File header libreria funzioni I/O a cura di Pascoschi Giovanni 3 a cura di Pascoschi Giovanni 4
Un primo esempio in C La libreria di run-time /* Programma di Esempio */ int main( ) { printf( Hello,World!\n ); return 0; } Inizio del programma principale Operazione di output I nomi dei file header terminano, per convenzione, con l estensione.h (ad es., stdio.h è il file header dello standard I/O) Per includere un file header in un programma, occorre inserire nel codice sorgente l istruzione #include <nomefile.h> Fine del programma principale Ritorna 0 al sistema operativo Esempio: Per utilizzare printf(), che permette di visualizzare dati su terminale, è necessario inserire nel sorgente la linea di codice a cura di Pascoschi Giovanni 5 a cura di Pascoschi Giovanni 6 I commenti #1 I commenti #2 Un commento è un testo che viene incluso in un file sorgente per spiegare il significato del codice I commenti sono ignorati dal compilatore I commenti sono un elemento fondamentale nello sviluppo del software: il linguaggio C consente di inserire commenti racchiudendo il testo tra i simboli /* e */ Non sono ammessi commenti innestati Un commento può occupare più linee Affinché i commenti non interrompano il flusso di un programma occorre dedicare ai commenti intere linee di codice o collocarli sulla destra del codice, quando condensabili in un unica riga Cosa deve essere commentato? Tutto ciò che non è ovvio: Espressioni complesse, strutture dati e scopo delle funzioni Eventuali modifiche apportate al programma, per poterne tenere traccia a cura di Pascoschi Giovanni 7 a cura di Pascoschi Giovanni 8
I commenti #3 Commenti in C Tuttavia, commenti con scarso contenuto informativo possono rendere un programma difficile da leggere Un esempio di stile di documentazione scadente Singola riga /* Programma di Esempio */ Multi riga /* Programma per il calcolo dell integrale definito della funzione cos(x) */ j=j+1; /* incrementa j */ Inoltre, commenti molto lunghi non compensano codice illeggibile o stilisticamente imperfetto a cura di Pascoschi Giovanni 9 a cura di Pascoschi Giovanni 10 Un secondo esempio in C Un secondo esempio in C int main() { int a = 8; int b = 4; int c = 3; double tot = a * 0.01 + b * 0.10 + c * 0.25; /* valore totale */ printf( Valore Totale =, tot, "\n ); return 0; } OUTPUT Valore Totale = 1.230000 a cura di Pascoschi Giovanni 11 a cura di Pascoschi Giovanni 12
Variabili in C Variabili in C Le variabili sono spazi di memoria, identificati da un nome, che possono conservare valori di un determinato tipo Ciascuna variabile deve essere definita indicandone tipo e nome Nella definizione di una variabile, e possibile assegnarle un valore iniziale.. int a = 8; int b = 4; int c = 3; double tot = a * 0.01 + b * 0.10 + c * 0.25;.... int a = 8, b = 4, c = 3; double tot = a * 0.01 + b * 0.10 + c * 0.25;.. Memoria a 8 b 4 c 3 tot 1.230000 a cura di Pascoschi Giovanni 13 a cura di Pascoschi Giovanni 14 Variabili in C Variabili e costanti Identificatore: sequenza di lettere, numeri e simbolo di sottolineatura _ Deve iniziare con una lettera (p.e. non va bene 2perim ) Non puo essere una parola o simbolo riservato del linguaggio (p.e. non va bene for ) Non puo contenere spazi Es. Nomi validi : pippo, pluto, ciao5, salve_a_tutti E bene scegliere nomi che descrivano adeguatamente il contenuto della variabile Case sensitive : maiuscole e minuscole vengono considerate diverse (p.e. Pippo e pippo sono due variabili diverse) Un nome non deve coincidere con una parola riservata, né con il nome di una funzione di libreria auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if static while Le parole chiave del linguaggio C a cura di Pascoschi Giovanni 15 a cura di Pascoschi Giovanni 16
Tipi di variabili numeriche in C Tipi di variabili : stringhe in C Tipi base Tipo predefinito char signed char unsigned char signed short int signed int signed long int unsigned short int unsigned int unsigned long int float double long double Denominazioni alternative signed short, short signed, int long int, signed long, long unsigned short unsigned unsigned long char int float double caratteri interi reali reali in precisione doppia Qualificatori short condizionano lo spazio allocato per le variabili long signed condizionano i valori assumibili dalle variabili unsigned /* Esempio in C */ char nome[10]; nome = Bari ; a cura di Pascoschi Giovanni 17 a cura di Pascoschi Giovanni 18 Costanti in C La direttiva #define Una costante è una espressione che ha un valore prefissato : Numeri interi, Numeri in virgola mobile, Caratteri, Stringhe Esempi: # define A 24 # define PIGRECO 3.14 La direttiva #define consente di associare un nome ad una costante Esempio: #define NIENTE 0 associa il nome NIENTE alla costante 0 Per evitare confusione fra nomi di costanti e nomi di variabili, è pratica comune usare solo lettere maiuscole per le costanti e solo minuscole per le variabili L associazione di nomi alle costanti permette di utilizzare un nome descrittivo per oggetti altrimenti non autoreferenziali di semplificare la modifica del software: cambiare il valore ad una costante equivale a cambiarne la sola definizione e non tutte le occorrenze a cura di Pascoschi Giovanni 19 a cura di Pascoschi Giovanni 20
Operatori built-in in C Operatori built-in in C Operatori built-in = Assegnamento + Somma - Sottrazione * Moltiplicazione / Divisione % Modulo (solo per tipo int ) == Relazione di uguaglianza!= Relazione di diversità < Relazione minore di > Relazione maggiore di <= Relazione minore o uguale a >= Relazione maggiore o uguale a Operatori aritmetici Operatori relazionali Altri operatori di assegnamento Operatore Esempio Istruzione equivalente ++ conta++; conta = conta + 1; -- conta--; conta = conta - 1; += x+=y; x = x + y; -= x-=y; x = x -y; *= x*=y; x = x * y; /= x/=y; x = x / y; %= x%=y; x = x % y; a cura di Pascoschi Giovanni 21 a cura di Pascoschi Giovanni 22 Operatori built-in in C Operatori built-in in C Esempi operatori di assegnamento Operatori logici built-in i = 5; x = 3; y = x + i++; i = 5; x = 3; y = x + ++i; i = 5; x = 3; y = x + (++i); && AND logico su due variabili OR logico su due variabili! NOT logico su una variabile & AND logico bit a bit OR logico bit a bit ^ XOR bit a bit ~ complemento a uno dell operatore >> shift a destra di un certo numero di bit << shift a sinistra di un certo numero di bit Operatori logici Operatori logici bit a bit a cura di Pascoschi Giovanni 23 a cura di Pascoschi Giovanni 24
Operatori built-in in C Operatori built-in in C Esempi utilizzo operatori logici: (a>b) && (c==3) per a=4, b=5, c=3? (a==5) (a==7) per a=5?!(a>4) per a=3? F V V Espressione (decim.) Valore in bit prima della valutazione Valore in bit dopo la valutazione Valore decimale dopo la valutazione x = 11 00001011 11 x = x & 3 00001011 00000011 3 x = x 12 00000011 00001111 15 x = x ^ 10 00001111 00000101 5 x = ~x 00000101 11111010 250 x = x >> 3 11111010 00011111 31 x = x <<2 00011111 01111100 124 a cura di Pascoschi Giovanni 25 a cura di Pascoschi Giovanni 26 Istruzioni ingresso/uscita in C La funzione scanf() Esempi di input scanf( %d, &raggio); scanf( %f %f, &a, &b); La funzione scanf() legge dati introdotti da tastiera scanf() può ricevere un numero qualunque di parametri preceduti da una stringa di formato I parametri di scanf() devono essere preceduti dall operatore indirizzo & Esempio: scanf( %d,&num); richiede al sistema di leggere un intero da terminale e di memorizzare il valore nella variabile num a cura di Pascoschi Giovanni 27 a cura di Pascoschi Giovanni 28
La funzione printf() #1 La funzione printf() può avere un numero variabile di argomenti Il primo argomento è un parametro speciale, detto stringa di formato, che specifica il numero di argomenti che contengono i dati da stampare e le modalità di formattazione dei dati La stringa di formato è racchiusa fra doppi apici e può contenere testo e specificatori di formato sequenze speciali di caratteri che iniziano con il simbolo di percentuale (%) ed indicano le modalità di scrittura di un singolo dato Esempio: nell istruzione printf( Il valore di num è %d,num); Il valore di num è %d è la stringa di formato %d è lo specificatore di formato per gli interi decimali num è la variabile intera decimale da stampare La funzione printf() #2 Esistono altri specificatori per altri tipi di dati: %c dato di tipo carattere %f dato di tipo floating point %s dato di tipo stringa La stringa di formato può contenere un numero qualunque di specificatori di formato, ma il loro numero deve coincidere con il numero dei dati da stampare, passati come argomenti printf( Stampa tre valori: %d %d %d,num1,num2,num3); a cura di Pascoschi Giovanni 29 a cura di Pascoschi Giovanni 30 La funzione printf() #3 Istruzioni ingresso/uscita in C I dati da stampare possono essere espressioni printf( Il quadrato di %d è %d\n,num,num num); Il simbolo speciale \n èuna sequenza di escape Quando le sequenze di escape sono inviate ad un dispositivo di uscita sono interpretate come segnali che controllano il formato della visualizzazione \n forza il sistema ad effettuare un ritorno a capo (newline) Sequenza di Descrizione Terminologia escape inglese \n A capo riga New line \t Tabulazione Tab \r Ritorno a capo Carriage return della stessa riga \ Doppi apici Double quote \\ Barra contraria Backslash \? Punto di domanda Question mark \ Apice singolo Single quote \a Segnalazione Bell acustica \f Salto pagina Form feed a cura di Pascoschi Giovanni 31 a cura di Pascoschi Giovanni 32
Funzioni matematiche in C Funzioni matematiche in C Operazioni più complesse, e.g., la radice quadrata, il logaritmo vengano realizzare tramite funzioni predefinite C Esempio: double x; scanf( %f, x); printf( %f, sqrt(x)); Sintassi nome_funzione(espr1,,esprn) Calcola il valore della funzione nome_funzione con argomenti/parametri espr1,,esprn Si dice che la funzione restituisce (return) il valore calcolato Per invocare le funzioni matematiche bisogna includere il file di intestazione <math.h> #include <math.h> int main() { int x; double radice; printf( Inserire un numero \n ); scanf( %d, &x); radice = sqrt(x); printf( Radice quadrata= %f, radice, "\n ); return 0; } a cura di Pascoschi Giovanni 33 a cura di Pascoschi Giovanni 34 Funzioni matematiche principali in C Considerazioni finali Funzione sqrt(x) pow(x,y) sin(x) cos(x) tan(x) exp(x) log(x) log10(x) ceil(x) floor(x) fabs(x) Descrizione radice quadrata di x x y sin x cos x tan x e x logaritmo naturale log e (x) logaritmo naturale log 10 (x) il piu piccolo numero intero >=x il piu grande numero intero di <=x valore assoluto di x Gli esempi hanno permesso di introdurre alcuni dei concetti di base del linguaggio C: Ogni programma C contiene il programma principale main() I blocchi di codice sono delimitati da parentesi graffe Le istruzioni sono terminate dal punto e virgola Le variabili Devono essere dichiarate Hanno un tipo in base ai dati che dovranno contenere Inoltre, il linguaggio C permette di Leggere e scrivere dati Svolgere operazioni aritmetiche a cura di Pascoschi Giovanni 35 a cura di Pascoschi Giovanni 36
Riepilogo della lezione Fine della lezione Introduzione al linguaggio C Tipi di dati predefiniti del C Variabili, costanti, stringhe in C Operatori aritmetici, di relazione e logici Operatori di assegnamento Istruzioni predefinite I/O Introduzione alle funzioni matematiche Domande? a cura di Pascoschi Giovanni 37 a cura di Pascoschi Giovanni 38 Esercizi Realizzare il diagramma a blocchi, la pseudocodifica e il programma in linguaggio C dei seguenti esercizi Esercizio 1: Dati due numeri interi, visualizzare la somma e la moltiplicazione tra essi Esercizio 2: Dati due numeri reali (base e altezza), visualizzare il perimetro e l area del triangolo rettangolo Esercizio 3: Dato il raggio r in input, visualizzare il perimetro e l area del cerchio e la superficie e il volume della sfera con raggio r a cura di Pascoschi Giovanni 39