#include <stdio.h> main() { - 1 -

Documenti analoghi
Introduzione alla programmazione. Alice Pavarani

Struttura dei programmi e Variabili

Dati due punti sul piano calcolare la loro distanza

Linguaggio di Riferimento: C

Unità F1. Obiettivi. Il linguaggio C. Il linguaggio C++ Linguaggio C. Pseudolinguaggio. Primi programmi

Linguaggio C: introduzione

Corso sul linguaggio C

L AMBIENTE CODE BLOCKS E L IO

Laboratorio di Programmazione

Introduzione alla programmazione A. Ferrari

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2008/2009. formalizzazione degli algoritmi in linguaggio C

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2009/2010

IL PRIMO PROGRAMMA IN C

Prof. Pagani Corrado INTRODUZIONE AL LINGUAGGIO C

Elementi di informatica

Input/Output di numeri

Lo scopo. Il primo esperimento. Soluzione informale. Le variabili

Il linguaggio C. Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1

Elementi di informatica. Programmare in C

Variabili e input/ Alessandra Giordani Lunedì 18 marzo

Esercitazione 2. Variabili e Tipi Input e Output Assegnamenti Il comando if-else

C O P Y R I G H T ( C ) W W W. F O N D A M E N T I. I N F O

Introduzione al C. Introduzione. Linguaggio ad alto livello. Struttura di un programma C

Il preprocessore. Direttiva define Direttiva include Direttiva if

Università degli Studi di Ferrara

L AMBIENTE CODE BLOCKS E L IO

Fondamenti di Informatica. Ingegneria elettronica

Ingresso ed Uscita in C. Informatica 1 / 15

Linguaggi di Programmazione

Alcune regole di base per scrivere un programma in linguaggio C

Introduzione al linguaggio C

I Fondamenti del Linguaggio

#include <stdio.h> /* l esecuzione comincia dalla funzione main */ int main()

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 5 31/10/2013

Variabili intere, funzioni e input/ Alessandra Giordani Lunedì 19 marzo

Unità Didattica 1 Linguaggio C. Fondamenti. Struttura di un programma.

INPUT/OUTPUT INPUT/OUTPUT

Primi passi col linguaggio C

Cosa serve per cominciare?

Perché il linguaggio C?

Variabili e Istruzioni

Introduzione al linguaggio C Primi programmi

Introduzione al C. Informatica Generale - Introduzione al C Versione 1.0, aa p.1/17

1

La Programmazione. Cos è la programmazione? Concetti preliminari

Introduzione al linguaggio C. Emilio Di Giacomo

Sunto della scorsa lezione Il linguaggio C. Un Programma con Errori. Il preprocessore. Linguaggi di Programmazione I.

Ingresso ed Uscita in C. Luca Abeni

Linguaggio C Informatica Grafica

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 4 24/10/2013

INPUT E OUTPUT DI VALORI NUMERICI

Le direttive del Preprocessore

Informatica B a.a 2005/06 (Meccanici 4 squadra) PhD. Ing. Michele Folgheraiter

Linguaggio C Struttura dei programmi

Perché il linguaggio C?

Informatica. Stefano Lodi. 16 novembre in linguaggio C

Esercizio. Esercizi. semplici. memoria. y 12. Determinare il valore di x e y. #include <stdio.h> main() { int x,y; x=2; y=4; y=3*y; x=y+x;

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Programmazione in C. La struttura del programma Variabili, espressioni, operazioni

Il sistema C è formato dal linguaggio C, dal preprocessore, dal compilatore, dalle librerie e da altri strumenti di supporto.

int main(){ int numero; /* numero di cui voglio calcolare il fattoriale */ int fatt; /* memorizzo il fattoriale di numero */ int somma=0;

Input/Output. Lettura e scrittura Caratteri e Stringhe: Terminale e file. Input/output. caratteri stringhe formattato ascii binari

Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

Introduzione alla programmazione in C

Struttura di un. Struttura dei programmi C

STRUTTURA DI UN PROGRAMMA!

Università degli Studi di Milano

Introduzione alla programmazione in linguaggio C

Introduzione al C. Unità 10 Preprocessore

Introduzione al C. Unità 10 Preprocessore. D. Bloisi, S. Peluso, A. Pennisi, S. Salza

I CARATTERI E LE STRINGHE

Istituto Tecnico Industriale M. M. Milano Polistena. Classe III D a.s. 2015/2016 C++ Guida Base

Struttura dei programmi C

Fondamenti di Informatica

Primi passi Output formattato Le quattro operazioni. Programmazione 1. Lezione 2 Parte 2. Vincenzo Marra.

Dichiarazioni e tipi predefiniti nel linguaggio C

Introduzione al C. InformaticaB. Daniele Loiacono

Introduzione a. Funzioni di Ingresso e Uscita. Compilazione

Informatica (A-K) 7. Linguaggio C - 1

2 Operatori matematici e costrutto if

Nuovi tipi di dato e. Alessandra Giordani Lunedì 26 marzo

La programmazione nel linguaggio C

Introduzione al linguaggio C

Primi programmi in C

Espressione di chiamata di funzione

INPUT/OUTPUT. L'immissione dei dati di un programma e l uscita dei suoi risultati avvengono attraverso operazioni di lettura e scrittura

I/O da tastiera + Alessandra Giordani Lunedì 2 maggio

Transcript:

Un primo esempio di programma Ogni programma C deve contenere una funzione speciale chiamata main che indica il punto in cui inizia l esecuzione del programma. La funzione main è unica all interno di ogni programma C. Eseguire un programma C significa eseguire la funzione main. Il suo comportamento è definito dal corpo della funzione: una serie di istruzioni, racchiuse tra parentesi graffe e separate da un punto e virgola, che vengono eseguite in sequenza, cioè una dopo l altra: in questo semplice esempio, il main richiama la funzione printf per visualizzare la stringa I like C. printf è una funzione predefinita del C contenuta nella libreria standard stdio.h (standard input/output library). Per usare la printf è necessario includere la libreria stdio.h nel proprio programma mediante la direttiva per il precompilatore C include printf( I like C ); // corpo del main Riferimento alle librerie standard Il linguaggio C fornisce un certo numero di librerie standard di corredo al compilatore. Per ogni libreria esiste un file sorgente, chiamato file header, che contiene tutte le informazioni necessarie per poter utilizzare le funzioni della libreria stessa. I nomi dei file header terminano per convenzione con l estensione.h; es. stdio.h, math.h,... Per includere un file header in un programma, occorre inserire nel codice sorgente l istruzione #include <file header.h>. Forma alternativa di inclusione di file header #include file header.h" Variabili e assegnamenti Un esempio più complesso in cui abbiamo bisogno di memorizzare dati parziali e quindi di variabili: in C un qualunque nome di variabile deve - 1 -

essere dichiarato prima di poter essere utilizzato; dichiarare una variabile significa specificarne il nome ed il tipo. Il nome identifica la variabile, il tipo definisce il range di valori che la variabile può assumere ed un insieme di operazioni che possiamo eseguire su di essa. L effetto di una dichiarazione è quello di allocare spazio in memoria per ogni variabile dichiarata. /* Area rettangolo */ int base; int altezza; // dichiarazioni di variabili int area; base = 3; altezza = 7; area = base * altezza; printf( %d\n, area); Variabili e assegnamenti a questo punto è possibile assegnare un valore alle variabili mediante l operatore di assegnamento. La printf ha due parametri: una stringa %d\n ed una variabile area: stampa il valore della variabile nel formato specificato dalla stringa; %d è uno specificatore di formato: definisce il formato di stampa del valore della variabile area (decimale); \n provoca un salto a linea nuova dopo la stampa (sequenze di escape) /* Area rettangolo */ int base; int altezza; int area; base = 3; Mar altezza = 7; area = base * altezza; printf( %d\n, area); // assegnamenti - 2 -

Nome di variabili e funzioni Stringhe di al più 32 simboli, contenenti lettere, numeri e underscore (_ e non -). Il primo carattere non può essere un numero e quindi deve essere una lettera oppure un underscore. Il linguaggio C è case-sensitive, cioè distingue tra maiuscole e minuscole: main è diverso da Main, MAin, main... Le parole chiave del linguaggio (int, if, else,... ) non possono essere usati come identificatori. Si sconsiglia inoltre di utilizzare variabili che iniziano per underscore, usati spesso per variabili di sistema o del compilatore e nomi maiuscoli comunemente usati per le costanti. D Commenti Per rendere evidente la funzionalità espletata dal programma per il calcolo dell area abbiamo usato un commento /* Area rettangolo */. I commenti, preceduti da /* e seguiti da */, possono apparire in qualsiasi parte del programma ed estendersi su più linee. Non possono essere spezzati, /* prima /* seconda parte */ parte */. Tutto ciò che compare all interno di un commento non viene preso in considerazione e non ha alcuna influenza sul funzionamento del programma, ha significato solo per il programmatore ma non per il compilatore. Un modo alternativo per inserire commenti è quello di farli precedere da // ma in questo caso può estendersi su una sola linea // Area rettangolo Commentare adeguatamente un programma significa migliorare sostanzialmente la sua leggibilità e la sua successiva manutenzione. Uso di costanti Uso di costanti simboliche per rappresentare base e altezza. La direttiva define consente di introdurre delle costanti simboliche all interno di un programma C; le costanti simboliche sono dei nomi il cui valore non può essere modificato durante l esecuzione del programma. Vantaggi: una - 3 -

qualche parametrizzazione dell algoritmo. Per calcolare l area di un rettangolo di base 102 e altezza 34 basta modificare i valori delle macro BASE e ALTEZZA. #define BASE 102 #define ALTEZZA 34 // per convenzione le costanti sono sempre in maiuscolo /* Area con costanti */ #define BASE 3 #define ALTEZZA 7 int area; area = BASE*ALTEZZA; printf( Base: %d\n, BASE); printf( Altezza: %d\n, ALTEZZA); printf( Area: %d\n, area); Output formattato Analizziamo in dettaglio il comportamento della funzione printf con parametri stringa ed espressioni, dove: stringa è una sequenza di caratteri racchiusi tra doppi apici e contenente uno o più specificatori di formato (%d (decimale), %f (float),...) e/o sequenze di escape (\n, \t,... ) espressioni è una lista contenente una numero di espressioni (separate da una virgola) pari al numero di specificatori di formato nella stringa; la stringa viene stampata sostituendo ad ogni occorrenza di specificatore di formato il valore della corrispondente espressione nella lista espressioni printf( Base: %d\n, BASE); // Base: 3 printf( Altezza: %d\n, ALTEZZA); // Altezza: 7 printf( Area: %d\n, area); // Area: 21 // otteniamo lo stesso output compattando le tre printf come segue printf( Base: %d\naltezza: %d\narea: %d \n, BASE, ALTEZZA - 4 -

Input di valori da tastiera Il programma per il calcolo dell area ha una qualche utilità solo se diamo la possibilità all utente di inserire i valori delle variabili base e altezza; è possibile assegnare ad una variabile un valore immesso dall utente utilizzando la funzione standard scanf contenuta nella libreria stdio.h: esempio: scanf( %d, &base); in questo caso, l istruzione scanf attende che l utente immetta in input un valore intero (notare l uso dello specificatore %d) seguito da invio e lo assegna alla variabile base %d indica il formato (intero) del valore assegnato alla variabile &base rappresenta l indirizzo di memoria della variabile base. Versione finale /* Calcolo area rettangolo */ int base, altezza, area; printf( Immettere il valore della base: ); scanf( %d, &base); printf( Immettere il valore dell altezza: ); scanf( %d, &altezza); area = base *altezza printf( Area: %d, area); Uso di funzioni predefinite all interno di un programma C Una funzione è costituita da un insieme di istruzioni che realizzano un dato compito: a partire da uno o più valori in input (parametri della funzione) restituiscono un determinato valore in output Esempi: main (definisce il compito del programma), printf (il cui compito è quello di visualizzare una data stringa in un dato formato), etc. Il linguaggio consente al programmatore di definire delle proprie funzioni all interno di un programma C (funzioni definite dall utente). Per il momento ci concentriamo sull uso delle funzioni predefinite (funzioni standard) che il - 5 -

linguaggio mette a disposizione del programmatore e contenute in librerie standard. Non dobbiamo preoccuparci di come queste funzioni svolgono il loro compito, ossia non è necessario sapere come queste funzioni sono state implementate (possiamo pensare a queste funzioni come a delle black-box). Bisogna invece conoscere l interfaccia o propotipo della funzione, forniscono le informazioni necessarie per un corretto uso della funzione stessa prototipo = nome funzione + lista parametri + tipo di ritorno Esempio: la funzione abs, contenuta in math.h, prende in input un intero e restituisce il suo valore senza segno (valore assoluto); il suo prototipo è int abs(int x) Uso di funzioni predefinite /* funzioni predefinite*/ #include <math.h> int a, b, lunghezza; printf( Inserisci il primo estremo: ); scanf( %d, &a); printf( Inserisci il secondo estremo: ); scanf( %d, &b); lunghezza = abs(b-a); printf( A = %d\t, a); printf( B = %d\t, b); printf( Lunghezza = %d\t, lughezza); Struttura di un programma C Predirettive per il compilatore Definizioni di tipi Dichiarazioni di funzioni definite dall utente Dichiarazioni di variabili globali Dichiarazione di variabili locali Corpo del main Definizione delle funzioni definite dall utente - 6 -

Esercizio 1 Codificare un programma che calcoli l espressione y = (x*a) + b;, dove x è uguale a 5, a è uguale ad 18 e b è uguale a 7; x, y, a e b devono essere dichiarate come variabili intere. Si visualizzi infine il valore finale int x, y, a, b; x = 5; a = 18; b = 7; y = (x*a) + b printf( y = %d\n, y); Esercizio 2 Modificare l esempio precedente in maniera tale che il valore di x venga richiesto all utente in fase di esecuzione int x, y, a, b; printf( Immettere il valore di x: ); scanf( %d, &x); a = 18; b = 7; y = (x*a) + b printf( y = %d\n, y); Esercizio 3 Scrivere un programma che calcoli e visualizzi le seguenti espressioni: a = ZERO - abs(x) b = TOP - abs(y) c = a * b dove x e y sono delle variabili intere i cui valori sono immessi dall utente, ZERO e TOP sono delle costanti intere di valore 0 e 1000. Esercizio 4 #include <math.h> #define ZERO 0 #define TOP 1000-7 -

int x, y, a, b, c; printf( Immettere il valore di x: ); scanf( %d, &x); printf( Immettere il valore di y: ); scanf( %d, &y); a = ZERO - abs(x); b = TOP - abs(y); c = (a*b) printf( a = %d\nb = %d\nc = %d\n, a, b, c); Fasi di programmazione Editing (scrittura) del programma: un qualsiasi editor di testi produce il codice sorgente Precompilazione: precompilatore C codice sorgente espanso. Tutte le macro definite tramite la direttiva #include vengono espanse. Assumiamo di aver definito una macro #define COSTANTE 100; tutte le occorrenze di COSTANTE all interno del codice sergente vengono sostituite con 100. Compilazione: compilatore C segnala eventuali errori presenti nel codice sorgente (errori sintattici) o, in caso di programmi sintatticamente corretti, produce in output il codice assembler Assemblaggio (assembler): codice oggetto rilocabile. Il codice assembler viene tradotto in linguaggio macchina (codice oggetto) rilocabile, il codice oggetto non è stato ancora allocato fisicamente sulla macchina ma è predisposto per esserlo. Linking (clinker): durante la fase di compilazione, vengono lasciati in sospeso tutti i riferimenti a funzioni non definite nel programma ma contenute in librerie standard. In questa fase è quindi necessario collegare tali funzioni. La precompilazione, la compilazione, l assemblaggio e il linking vengono effettuati richiamando un comando specifico (spesso con nome del programma). Se non si sono verificati errori, il codice oggetto rilocabile ottenuto viene archiviato su disco. - 8 -

La fase di esecuzione prevede il caricamento in memoria del programma (loader il codice è allocato fisicamente in memoria) e la sua successiva esecuzione. - 9 -