Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C

Documenti analoghi
Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C

Dall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Variabili e tipi di dato

Introduzione alla programmazione in C

LINGUAGGI DI PROGRAMMAZIONE

Arduino: Programmazione

Alcune regole di base per scrivere un programma in linguaggio C

Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it

Esercizi di programmazione in C

Richiesta pagina PHP (es: index.php)

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main

Linguaggio C. Fondamenti. Struttura di un programma.

Funzioni in C. Violetta Lonati

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

La selezione binaria

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti

Appunti del corso di Informatica 1 (IN110 Fondamenti) 2 Algoritmi e diagrammi di flusso

Tipi di dato-prima parte

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

Introduzione al Linguaggio C

Concetto di Funzione e Procedura METODI in Java

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

GESTIONE INFORMATICA DEI DATI AZIENDALI

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Algoritmo. I dati su cui opera un'istruzione sono forniti all'algoritmo dall'esterno oppure sono il risultato di istruzioni eseguite precedentemente.

Codifica: dal diagramma a blocchi al linguaggio C++

Algoritmi di Ricerca. Esempi di programmi Java

Esercitazione Informatica I AA Nicola Paoletti

Progetto Lauree Scientifiche Liceo Classico L.Ariosto, Ferrara Dipartimento di Matematica Università di Ferrara 24 Gennaio 2012

Gian Luca Marcialis studio degli algoritmi programma linguaggi LINGUAGGIO C

Lezione 8. La macchina universale

Le variabili. Olga Scotti

Cos è una stringa (1) Stringhe. Leggere e scrivere stringhe (1) Cos è una stringa (2) DD Cap. 8 pp KP Cap. 6 pp

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO V Indice

Algebra Booleana ed Espressioni Booleane

Allocazione dinamica della memoria - riepilogo

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

Gestione dei File in C

Università degli Studi di Cassino Corso di Fondamenti di Informatica Puntatori. Anno Accademico 2010/2011 Francesco Tortorella

Corso di Informatica

Fondamenti di Informatica e Laboratorio T-AB Ingengeria dell Automazione a.a. 2008/2009. Lab 02 Tipi semplici in C

Descrizione di un algoritmo

FONDAMENTI di INFORMATICA L. Mezzalira

Linguaggio C - Funzioni

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 18 31/03/2014

3. La sintassi di Java

Matematica - SMID : Programmazione Febbraio 2009 FOGLIO RISPOSTE

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Laboratorio di Informatica

Matlab: Strutture di Controllo. Informatica B

INFORMATICA 1 L. Mezzalira

Caratteri e stringhe Esercizi risolti

void funzioneprova() { int x=2; cout<<"dentro la funzione x="<<x<<endl; }

JAVASCRIPT. Tale file è associato alla pagina web mediante il tag <script> inserito nella sezione <head> con la seguente sintassi:

Tipi elementari, costanti. Tipi di dati. VALORI: un insieme dei valori del tipo OPERAZIONI: per operare su tali valori. Tipi. intero reale carattere

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015

Programmazione in Java (I modulo) Lezione 3: Prime nozioni

Appunti di Informatica 1. Gianluca Rossi

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione

Testi di Esercizi e Quesiti 1

APPUNTI DI MATEMATICA ALGEBRA \ INSIEMISTICA \ TEORIA DEGLI INSIEMI (1)

4 3 4 = 4 x x x 10 0 aaa

MATLAB. Caratteristiche. Dati. Esempio di programma MATLAB. a = [1 2 3; 4 5 6; 7 8 9]; b = [1 2 3] ; c = a*b; c

I puntatori e l allocazione dinamica di memoria

APPUNTI SUL LINGUAGGIO DI PROGRAMMAZIONE PASCAL

puntatori Lab. Calc. AA 2007/08 1

Header. Unità 9. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi

Introduzione allo Scilab Parte 1: numeri, variabili ed operatori elementari

ALGEBRA DELLE PROPOSIZIONI

Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Secondo Compitino 17 Dicembre 2005

3. Programmazione strutturata (testo di riferimento: Bellini-Guidi)

INFORMATICA - I puntatori Roberta Gerboni

DAL DIAGRAMMA AL CODICE

+ / operatori di confronto (espressioni logiche/predicati) / = > < Pseudo codice. Pseudo codice

INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI

Appunti del corso di Informatica 1 (IN1 Fondamenti) 2 Introduzione alla programmazione

Verifica che una grammatica sia Context Free nel GrammaReader

Informatica. Rappresentazione dei numeri Numerazione binaria

Esercitazione 3. Corso di Fondamenti di Informatica

Introduzione al linguaggio C Gli array

PROVA INTRACORSO TRACCIA A Pagina 1 di 6

Obiettivi d esame PHP Developer Fundamentals on MySQL Environment

Libreria standard Java possiede un enorme libreria di classi standard organizzata in vari package che raccolgono le classi secondo un organizzazione

La struttura dati ad albero binario

Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati

Appunti di Sistemi Elettronici

FORMULE: Operatori matematici

Linguaggio C - Stringhe

Introduzione al MATLAB c Parte 2

Appunti del corso di Informatica 1 (IN110 Fondamenti) 4 Linguaggi di programmazione

Gli algoritmi: definizioni e proprietà

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

Fondamenti di Informatica - 9Cfu Corso di Laurea in Ingegneria Informatica (ord. 270)

Logica e codifica binaria dell informazione

10 - Programmare con gli Array

Excel. A cura di Luigi Labonia. luigi.lab@libero.it

Fondamenti di Informatica Ingegneria Clinica Lezione 19/10/2009. Prof. Raffaele Nicolussi

Introduzione a Visual Basic Lezione 1 Concetti base e istruzioni condizionali

Transcript:

Università di Roma Tre Facoltà di Scienze M.F.N. Corso di Laurea in Matematica Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Marco Liverani (liverani@mat.uniroma3.it) Sommario Struttura di un programma Direttive del precompilatore, inclusione degli header Dichiarazione di variabili Operatori aritmetici, logici e di confronto Definizione di funzioni Passaggio di parametri alle funzioni Struttura condizionale Strutture iterative Compilazione a.a. 2009/2010 M. Liverani - Appunti di Informatica 1 (IN110) - Introduzione al linguaggio C 2 M. Liverani - Appunti di Informatica 1 (IN110) - Introduzione al linguaggio C 1

Struttura di un programma C 1 Un programma C è costituito da Inclusione di librerie Definizione di costanti e variabili globali Definizione di funzioni La funzione main Esempio: #include <stdlib.h> #define PI 3.1415 float media(int a, int b, int c) { int main(void) { Direttive per il precompilatore Definizione di funzioni Definizione della funzione main a.a. 2009/2010 M. Liverani - Appunti di Informatica 1 (IN110) - Introduzione al linguaggio C 3 Struttura di un programma C 2 In C le parentesi graffe delimitano blocchi di istruzioni che fanno parte di un medesimo contesto (es.: il corpo di una funzione, le istruzioni da eseguire all interno di un ciclo, ). Ogni istruzione in C termina con un punto e virgola ;. Esistono però numerose eccezioni. Il C è case sensitive: il compilatore è sensibile alla differenza fra lettere maiuscole e minuscole; quasi tutte le parole chiave del linguaggio sono scritte con caratteri minuscoli. Ogni programma C contiene una funzione main da cui ha inizio l esecuzione del programma stesso. I commenti sono delimitati dai simboli /* e */. a.a. 2009/2010 M. Liverani - Appunti di Informatica 1 (IN110) - Introduzione al linguaggio C 4 M. Liverani - Appunti di Informatica 1 (IN110) - Introduzione al linguaggio C 2

Direttive del precompilatore 1 Il linguaggio C è molto povero: è costituito da poche istruzioni. È però arricchito da numerose librerie in cui vengono definite funzioni che è possibile utilizzare nei programmi. Per usare tali funzioni prima di iniziare la compilazione del programma il precompilatore deve caricare le librerie. Per indicare quali librerie devono essere caricate si utilizza la direttiva #include: Es.: #include <stdio.h> carica la libreria STandarD Input Output. Es.: #include <math.h> carica la libreria delle funzioni matematiche. Nei file *.h vengono definiti i prototipi delle funzioni (il nome, i parametri ed il valore restituito dalle funzioni). a.a. 2009/2010 M. Liverani - Appunti di Informatica 1 (IN110) - Introduzione al linguaggio C 5 Direttive del precompilatore 2 Mediante la direttiva del precompilatore #define è possibile definire dei simboli che assumeranno il valore di costanti all interno del programma. Il precompilatore (quindi prima che venga avviata la traduzione del programma in linguaggio macchina da parte del compilatore) sostituisce ogni occorrenza dei simboli definiti con i rispettivi valori. Es.: #define MAX 100 definisce la costante MAX=100 #define PI 3.1415 definisce la costante PI=3.1415 a.a. 2009/2010 M. Liverani - Appunti di Informatica 1 (IN110) - Introduzione al linguaggio C 6 M. Liverani - Appunti di Informatica 1 (IN110) - Introduzione al linguaggio C 3

Tipi di dato In C sono a disposizione del programmatore numerosi tipi di dato elementare con cui definire variabili e funzioni. Ad esempio: Numeri interi Numeri razionali Caratteri int unsigned long short float double char Interi relativi Interi senza segno Interi lunghi Interi corti Numeri floating point in singola precisione Numeri in doppia precisione Caratteri alfanumerici La parola chiave void indica il tipo nullo, ovvero l insieme vuoto. a.a. 2009/2010 M. Liverani - Appunti di Informatica 1 (IN110) - Introduzione al linguaggio C 7 Dichiarazione di variabili 1 Dichiarando una variabile si comunica al compilatore il tipo di dato che intendiamo associare ad una variabile. Questo è fondamentale per consentire alla macchina di allocare la giusta quantità di memoria e di trattare correttamente la rappresentazione binaria del dato memorizzato (una stessa sequenza di bit può rappresentare informazioni completamente diverse a seconda della convenzione che si adotta per interpretarla). Una variabile dichiarata in una certa funzione è locale a quella funzione: non può essere utilizzata direttamente fuori dalla funzione in cui è stata definita e viene distrutta non al termine dell esecuzione della funzione. È possibile (ma è sconsigliato farne largo uso) dichiarare delle variabili globali, definite fuori da ogni funzione e quindi visibili in modo diretto da ogni funzione all interno di uno stesso programma. a.a. 2009/2010 M. Liverani - Appunti di Informatica 1 (IN110) - Introduzione al linguaggio C 8 M. Liverani - Appunti di Informatica 1 (IN110) - Introduzione al linguaggio C 4

Dichiarazione di variabili 2 La dichiarazione di una variabile avviene riportando il tipo di dato, seguito dall elenco delle variabili separate da virgole. Es.: int a, b, c; I nomi delle variabili sono case sensitive. Sono costituiti da lettere dell alfabeto, numeri ed il simbolo _ (underscore). Devono iniziare con una lettera dell alfabeto o il simbolo underscore; es.: pippo, q7, _lim, max_elem. Per dichiarare una variabile puntatore in grado di indirizzare una variabile di un determinato tipo, bisogna premettere il simbolo * prima della variabile. Es.: int *a; a è una variabile puntatore ad un intero a.a. 2009/2010 M. Liverani - Appunti di Informatica 1 (IN110) - Introduzione al linguaggio C 9 Operatori 1 Operatori aritmetici: + somma, sottrazione, * prodotto, / divisione, % modulo (resto della divisione intera). Operatore di assegnazione (in forma estesa): = (es.: a=b*c;, x=-27.4; ). Operatori aritmetici di assegnazione (in forma compatta): ++, -- (es.: x--; decrementa di una unità il valore di x, è equivalente a x=x-1;, ma è più efficiente), +=, =, *=, /= (es.: x += 7; è equivalente a x = x+7; ). a.a. 2009/2010 M. Liverani - Appunti di Informatica 1 (IN110) - Introduzione al linguaggio C 10 M. Liverani - Appunti di Informatica 1 (IN110) - Introduzione al linguaggio C 5

Operatori 2 Operatori logici di confronto: == (es.: a == b è vero se a e b hanno lo stesso valore, falso altrimenti), < (minore) <= (minore o uguale), > (maggiore), >= (maggiore o uguale),!= (diverso). Operatori booleani: L operatore booleano unario not è rappresentato dal simbolo!. L operatore and è rappresentato da && e l operatore or è rappresentato da. Le espressioni logiche vengono valutate da sinistra verso destra e la valutazione di una espressione si interrompe non appena è possibile stabilirne con certezza il valore. a.a. 2009/2010 M. Liverani - Appunti di Informatica 1 (IN110) - Introduzione al linguaggio C 11 Funzioni di libreria per l Input/Output 1 Nelle librerie standard del C (rese disponibili grazie all inclusione degli header mediante la direttiva #include) contengono numerose funzioni per le operazioni di I/O. La funzione printf() consente di eseguire delle stampe in output (tipicamente sul display del terminale). printf( formato, espressione, espressione, ); stampa sul terminale le espressioni in accordo con la formattazione espressa dalla stringa di formato. La stringa \n indica che il cursore deve andare a capo (new line); %d indica che in quella posizione andrà visualizzato il valore di una certa espressione numerica in formato decimale. Esempi: printf( ciao\n ); printf( A = %d \n, a); printf( %2d + %2d = %3d \n, a, b, a+b); a.a. 2009/2010 M. Liverani - Appunti di Informatica 1 (IN110) - Introduzione al linguaggio C 12 M. Liverani - Appunti di Informatica 1 (IN110) - Introduzione al linguaggio C 6

Funzioni di libreria per l Input/Output 2 La funzione scanf() consente di acquisire in input delle informazioni dall esterno, memorizzandole in variabili definite opportunamente nel programma. scanf( formato, ind. di memoria, ind. di memoria, ); legge in input una riga dal terminale e memorizza i valori immessi dall utente (separati da spazi o da caratteri di fine riga) nelle variabili il cui tipo è descritto nella stringa di formato ed il cui indirizzo di memoria è indicato nell elenco successivo. La stringa di formato è costituita da sequenze % separate da spazi (es.: %d per i numeri in notazione decimale, %c per i caratteri, %s per le stringhe, ). Esempi: scanf( %d, &n); scanf( %d %d %d, &a, &b, &c); scanf( %d %s, &numero, nome); a.a. 2009/2010 M. Liverani - Appunti di Informatica 1 (IN110) - Introduzione al linguaggio C 13 Definizione di funzioni 1 Un programma C è composto da numerose piccole funzioni che costituiscono l implementazione di sottoprogrammi. Ogni funzione è definita specificando: il nome della funzione; il dominio della funzione, ossia i parametri che accetta come argomento; il codominio della funzione, ossia l insieme in cui restituisce dei valori; il corpo della funzione che descrive le operazioni effettuate dalla funzione stessa. a.a. 2009/2010 M. Liverani - Appunti di Informatica 1 (IN110) - Introduzione al linguaggio C 14 M. Liverani - Appunti di Informatica 1 (IN110) - Introduzione al linguaggio C 7

Definizione di funzioni 2 Esempio: funzione per il calcolo del massimo fra due numeri floating point. Implementazione in C: float max(float a, float b) { float m; if (a>b) m=a; else m=b; return(m); La funzione max, in termini formali può essere definita come max: Q Q Q se con Q abbiamo indicato l insieme dei numeri razionali, ossia, impropriamente, il tipo di dato float. a.a. 2009/2010 M. Liverani - Appunti di Informatica 1 (IN110) - Introduzione al linguaggio C 15 Definizione di funzioni 3 Fra i vari tipi di dato void indica il tipo nullo: viene utilizzato per specificare che il dominio o il codominio di una funzione sono vuoti. Es.: una funzione priva di argomento che non restituisce alcun valore void saluta(void){ printf( Ciao!\n ); return; Se la funzione non restituisce valori, l istruzione return è priva di argomento e le parentesi tonde possono essere omesse. Attenzione: stampare in output qualcosa non equivale a restituire un valore; leggere in input un dato non equivale a ricevere un parametro come argomento. a.a. 2009/2010 M. Liverani - Appunti di Informatica 1 (IN110) - Introduzione al linguaggio C 16 M. Liverani - Appunti di Informatica 1 (IN110) - Introduzione al linguaggio C 8

Passaggio di parametri 1 Il passaggio di parametri ad una funzione avviene sempre solo per valore. Esempio: int max(int a, int b) { int main(void) { if (a>b) int x, int y; return(a); else z = max(x,y); return(b); È possibile passare esplicitamente il valore di un puntatore in modo da fornire ad una funzione l indirizzo di memoria di una variabile definita in un altra funzione. a.a. 2009/2010 M. Liverani - Appunti di Informatica 1 (IN110) - Introduzione al linguaggio C 17 Passaggio di parametri 2 L operatore & applicato ad una variabile restituisce l indirizzo di memoria in cui tale variabile è allocata. L operatore * applicato ad un puntatore (un indirizzo di memoria) restituisce il valore memorizzato in tale locazione. Se da una funzione f 1 passo l indirizzo di memoria di una variabile locale ad una funzione f 2, allora f 2 sarà in grado di modificare il valore di tale variabile. Esempio: int a, *b, c; int a, c; b = &a; equivale a c = *b; c = a; a.a. 2009/2010 M. Liverani - Appunti di Informatica 1 (IN110) - Introduzione al linguaggio C 18 M. Liverani - Appunti di Informatica 1 (IN110) - Introduzione al linguaggio C 9

Passaggio di parametri 3 Esempio: funzione per stampare il massimo fra due numeri interi. void stampa_max(int a, int b) { if (a>b) printf( il massimo e %d.\n, a); else printf( il massimo e %d.\n, b); return(); int main(void) { int x, y; stampa_max(x, y); Non è necessario passare l indirizzo di x e y: la funzione stampa_max dovrà solo stampare il valore massimo, senza modificarlo. È sufficiente quindi passare a stampa_max i valori di x e di y. a.a. 2009/2010 M. Liverani - Appunti di Informatica 1 (IN110) - Introduzione al linguaggio C 19 Passaggio di parametri 4 Esempio: funzione per scambiare il valore di due variabili. Dopo aver definito due variabili in una funzione (es.: main) voglio invocare un altra funzione che scambi i valori delle due variabili locali. void scambia(int *a, int *b) { int c; c = *a; *a = *b; *b = c; return(); int main(void) { int x, y; scambia(&x, &y); È necessario passare a scambia l indirizzo in cui x e y sono state allocate. La funzione scambia infatti dovrà accedere ad una porzione di memoria allocata da main e modificarne il contenuto. a.a. 2009/2010 M. Liverani - Appunti di Informatica 1 (IN110) - Introduzione al linguaggio C 20 M. Liverani - Appunti di Informatica 1 (IN110) - Introduzione al linguaggio C 10

Struttura condizionale Il C agevola l uso della programmazione strutturata. Le tre strutture previste (sequenziale, condizionale ed iterativa) sono implementate in modo semplice mediante delle strutture di controllo. La struttura condizionale è implementata dall istruzione if (condizione) { else { Se la condizione (costituita da un espressione booleana) risulta vera allora viene eseguito il primo blocco di istruzioni, altrimenti il blocco che segue la parola chiave else. In ogni caso il programma prosegue poi l esecuzione con le istruzioni successive al blocco if else a.a. 2009/2010 M. Liverani - Appunti di Informatica 1 (IN110) - Introduzione al linguaggio C 21 Struttura iterativa (while) Esistono in C tre istruzioni differenti per implementare la struttura iterativa. La prima è l istruzione while: while(condizione) { Le istruzioni del blocco vengono ripetute fintanto che la condizione (espressione booleana) risulta essere vera. Se la condizione è falsa prima ancora di iniziare il ciclo, non viene eseguita neanche una iterazione. a.a. 2009/2010 M. Liverani - Appunti di Informatica 1 (IN110) - Introduzione al linguaggio C 22 M. Liverani - Appunti di Informatica 1 (IN110) - Introduzione al linguaggio C 11

Struttura iterativa (do while) La seconda è l istruzione do while In questo caso la condizione viene verificata alla fine del ciclo: il ciclo viene ripetuto fintanto che la condizione risulta vera. Quando diventa falsa il ciclo viene interrotto. Il blocco di istruzioni viene quindi eseguito sempre almeno una volta, anche se la condizione dovesse essere falsa a priori. do { while(condizione); a.a. 2009/2010 M. Liverani - Appunti di Informatica 1 (IN110) - Introduzione al linguaggio C 23 Struttura iterativa (for ) La terza struttura di controllo per implementare la struttura iterativa è l istruzione for Questa istruzione è molto comoda (e naturale) quando l esecuzione del ciclo è controllata da una variabile (un contatore, ad esempio) il cui valore varia da un certo valore iniziale ad uno finale, subendo un incremento (o un decremento) ad ogni iterazione del ciclo. for (assegnaz. iniziale; condiz. finale; incremento) { Il ciclo viene iterato fintanto che la condizione risulta essere vera; l istruzione di incremento viene eseguita al termine di ogni iterazione, prima di verificare la condizione finale. Esempio: for (i=0; i<n; i++) { a.a. 2009/2010 M. Liverani - Appunti di Informatica 1 (IN110) - Introduzione al linguaggio C 24 M. Liverani - Appunti di Informatica 1 (IN110) - Introduzione al linguaggio C 12

Compilazione in ambiente UNIX Il compilatore C viene invocato con il comando cc (C Compiler). L opzione -o serve per specificare il nome del file eseguibile di output. L opzione -l serve per specificare i nomi di librerie aggiuntive da linkare al programma. Es.: compila il file sorgente prova.c generando il file eseguibile prova : cc prova.c -o prova Es.: compila i due sorgenti primo.c e secondo.c generando il file eseguibile pippo e visualizzando tutti i messaggi di warning : cc primo.c secondo.c -Wall -o pippo Es.: compila primo.c e secondo.c collegando anche la libreria matematica (il sorgente contiene la direttiva #include <math.h> ) e produce in output il file eseguibile pippo : cc primo.c secondo.c -o pippo -lm a.a. 2009/2010 M. Liverani - Appunti di Informatica 1 (IN110) - Introduzione al linguaggio C 25 M. Liverani - Appunti di Informatica 1 (IN110) - Introduzione al linguaggio C 13