LP1 Lezione 1: Il linguaggio C Costanti, Variabili, Parole Chiave, Operatori Maurizio Tucci [email protected] 1 Introduzione al C • Breve Storia del C – Linguaggio general purpose progettato da Dennis Ritchie (Bell Laboratories) nel 1972 su elaboratore PDP11 – Inizialmente fu utilizzato per la programmazione del sistema operativo UNIX – Negli anni ’80 fu utilizzato anche nelle scuole e nelle università per la didattica (C tradizionale) – Alla fine degli anni ’80 nasce ANSI C o C standard che supera alcuni limiti del C tradizionale – La standardizzazione ha reso il C indipendente dal processore (hardware) 2 Introduzione al C • La Standardizzazione – Esistevano molte sottili differenze tra le diverse implementazioni del C. Ciò dava problemi di incompatibilità – Fu creato un comitato che si preoccupò di fornire una definizione “non ambigua e indipendente dalla macchina” – Fu creato uno Standard nel 1989, aggiornato nel 1999 3 Introduzione al C • Perché ANSI C (d’ora in poi solo C)? – Rispetto ad altri linguaggi (ad esempio il Pascal) ha meno parole chiave ma è più potente per la presenza di strutture di controllo e tipi di dati più adeguati – _ il linguaggio nativo di UNIX, un sistema operativo interattivo molto utilizzato su server, mainframe e workstation – Molti programmi per la gestione di basi di dati e per applicazioni grafiche sono scritti in C – Ha operatori che consentono di accedere alla macchina a livello di bit, e che sono in grado in modo pulito, elegante e compatto di realizzare operazioni complesse – _ modulare ed è alla base di C++ 4 Introduzione al C La libreria standard del C • I programmi C consistono di pezzi/moduli detti funzioni • Un programmatore può creare le sue proprie funzioni - Vantaggio: il programmatore sa esattamente come lavora - Svantaggio: si spreca tempo • I programmatori spesso usano le funzioni di libreria del C. Usano queste come building blocks. Se esiste una funzione precostituita, è generalmente meglio usarla che scrivere la propria • Le funzioni di libreria sono scritte attentamente, sono efficienti e portabili 5 Semplici Programmi in C • • 3 4 5 6 7 /* Stampa una riga di testo ver. 1*/ #include <stdio.h> int main(void) { printf("Welcome to C!\n"); return 0; } Welcome to C! Commenti Il testo racchiuso tra /* e */ è ignorato dal computer 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 6 Semplici Programmi in C (cont.) Commenti 1 • 3 4 5 6 • /* Stampa una riga di testo ver. 1 */ #include <stdio.h> int main(void) { printf("Welcome to C!\n"); return 0; } 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 ed esegue 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. Welcome to C! \ Carattere di escape (fuga): 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 7 Semplici Programmi in C (cont.) #include <stdio.h> int main(void){printf("Welcome to C!\n");return 0;} Welcome to C! Alcuni Suggerimenti su come scrivere un programma – Inserire i commenti – Indentare (far rientrare) il corpo della funzione di un livello (3 spazi) – Mettere una sola istruzione per ogni linea 8 Le Parole Chiave Alcune parole sono dette parole chiave e non possono essere utilizzate dal programmatore come nomi di variabili. Rispetto ad altri linguaggi il C possiede un numero ridotto di parole chiave. 9 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; } • int i; • Variabile: Dichiarazione di variabile contenitore in cui un valore può essere memorizzato Il valore della variabile è 3 10 Uso di Printf (cont) • int significa che la variabile può avere i valori interi (-1, 3, 0,47) • i • Identificatori: consistono di lettere, numeri (non possono iniziare con un numero), e underscore ‘_’, sono case sensitive, max 31 caratteri in ANSI C Le dichiarazioni appaiono prima degli statement eseguibili, altrimenti si ha un errore di sintassi (in fase di compilazione) • nome di variabile (identificatore) • printf(”Il valore della variabile è %d\n”, i); • Questa printf prende due argomenti (separati da virgola) Nel primo argomento appare la specifica di formattazione: %d indica che dovrà essere stampato un valore di tipo intero decimale, quindi indica il tipo della variabile che segue.Nel secondo appare il nome della variabile 11 Esempi su Printf /*Stampa una riga di testo vers. 2 */ #include <stdio.h> int main() { printf("Welcome to C!\n"); return 0; } /* Stampa una riga di testo vers. 3*/ #include <stdio.h> main() { printf("Welcome to C!\n"); } Welcome to C! Welcome to C! 12 Esempi su Printf (cont.) /* Stampa una riga di testo vers. 4*/ #include <stdio.h> int main(void) { printf("Welcome "); printf("to C!\n"); return 0; } /* Stampa tre righe di testo vers. 1*/ #include <stdio.h> main() { printf("Welcome \nto \nC!\n" ); } Welcome to C! Welcome To C! 13 Esercizio Scrivere un programma C che stampi a video il testo organizzato nel modo seguente: Tabella ” ’ ” ’ \ a /* Stampa tabella */ #include <stdio.h> int main(void) { printf(“Tabella \n\”\t\’\t\\\n\”\t\’\ta\n”); return 0; } 14 Dichiarazioni, Espressioni e Assegnamento • Oggetti manipolati da un programma – Costanti • Interi (tipicamente [-231, 231+1]), Reali (floating point), Stringhe – Variabili (devono essere dichiarate prima di essere utilizzate) • Nome (identificatore: No parole chiave) • Tipo • Valore • Utilità della dichiarazione di variabili – Definizione dello spazio di memoria da parte del compilatore – Controllo sulle operazioni appropriate per il tipo indicato 15 Dichiarazioni, Espressioni e Assegnamento (cont.) • 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 16 Variabili e Memoria 17 Variabili e Memoria: La funzione scanf /* Prendere in input un valore e stamparlo a video */ #include <stdio.h> int main(void) { int i; /* dichiarazione */ printf(”Inserisci un intero:"); /* prompt */ scanf(”%d”, &i); /* legge un intero */ printf(”Il valore inserito è %d\n”, i); /*stampa */ return 0; } Inserisci un intero:-33 Il valore inserito è -33 18 Variabili e Memoria: La funzione scanf (cont) • scanf("%d", &i); Ottiene un valore dall’utente • scanf usa l’input standard (di solito la tastiera) Questa scanf ha due argomenti %d la specifica di conversione indica che il dato dovrebbe essere un intero decimale, &i indica la locazione in memoria per memorizzare la variabile • & (ampersand) può confondere all’inizio - per ora ricordate solo di inserirlo con il nome della variabile nel comando scanf • L’utente risponde a scanf digitando il numero, quindi premendo il tasto enter (return) 19 Memoria: Lettura e Scrittura /* lettura e scrittura di variabili */ #include <stdio.h> int main(void) { int i, j, sum; i = 3; printf(”Inserisci un intero:"); scanf(”%d”, &j); sum = i + j; printf(”i = %d\tj = %d\tsomma = %d\n”, i, j, sum); j = i; sum = i +j; printf(”i = %d\tj = %d\tsomma = %d\n”, i, j, sum); return 0; } Inserisci un intero: -5 i=3 j=-5 somma=-2 i=3 j=3 somma=6 20 Memoria: Lettura e Scrittura • La lettura delle variabili non cambia il loro valore • La scrittura è distruttiva: Quando un valore è scritto in una locazione di memoria esso si sostituisce al valore contenuto in precedenza in quella locazione 21 Operatori e Precedenze • Operatori – Caratteri speciali a cui è assegnato un particolare significato: + * / % addizione sottrazione moltiplicazione divisione modulo (a%b equivale al resto di a/b) 22 Operatori e Precedenze (cont.) • Precedenze (priorità) e Associatività – Alcuni operatori aritmetici agiscono prima di altri (es. La moltiplicazione prima dell’addizione) Trova la media delle tre variabili a, b e c NO: a+b+c/3 SI: (a + b + c ) / 3 23 Operatori e Precedenze (cont.) 24