Introduzione al C Unità 1 - Introduzione - S. Salza, C. Ciccotelli, D. Bloisi, S. Peluso, A. Pennisi - Dipartimento di Ingegneria ...

Pagina creata da Manuel Riva
 
CONTINUA A LEGGERE
Introduzione al C Unità 1 - Introduzione - S. Salza, C. Ciccotelli, D. Bloisi, S. Peluso, A. Pennisi - Dipartimento di Ingegneria ...
Corso di Fondamenti di Informatica
Ingegneria delle Comunicazioni – BCOR
Ingegneria Elettronica – BELR

           Introduzione al C

           Unità 1 - Introduzione

            S. Salza, C. Ciccotelli, D. Bloisi, S. Peluso, A. Pennisi
Introduzione al C Unità 1 - Introduzione - S. Salza, C. Ciccotelli, D. Bloisi, S. Peluso, A. Pennisi - Dipartimento di Ingegneria ...
Obiettivi del corso (parte II)

 • Concetti di algoritmo e programma

 • Risolvere problemi in modo algoritmico

 • Tradurre un algoritmo in programma

 • Sviluppare programmi in linguaggio C

      Unità 1 - Introduzione   2017/2018    Pagina 2
Sommario – Unità 1: Introduzione

• Linguaggi macchina
• Linguaggi ad alto livello
• Traduzione ed esecuzione dei programmi
• Dal problema al programma
• Procedure ed algoritmi
• Paradigmi di programmazione
• Il linguaggio C
• Ambiente di sviluppo ed esecuzione dei programmi
• Sviluppo di un primo programma C
• Funzioni

      Unità 1 - Introduzione    2017/2018            Pagina 3
L’architettura di Von Neumann

  L’hardware dei nostri calcolatori è tuttora basato sulla
  cosiddetta architettura di Von Neumann

    Unità 1 - Introduzione       2017/2018             Pagina 4
L’architettura di Von Neumann (2)

• La macchina esegue una sequenza di istruzioni
• Le istruzioni vengono lette dalla memoria
• Ciascuna istruzione esegue una specifica azione su dati
  che si trovano in memoria
• Ciascuna istruzione è una sequenza di bit che, in una
  opportuna codifica, specificano:
   a. L’azione che deve essere effettuata
   b. Dove si trovano i dati su cui essa deve essere
      effettuata
   c. Dove mettere il risultato

      Unità 1 - Introduzione    2017/2018           Pagina 5
Programma

• Un programma specifica una procedura sistematica, per
  risolvere un determinato problema
• Una procedura è una sequenza di passi elementari il cui
  esito porta alla soluzione del problema
• Un programma è una sequenza di istruzioni
• Un programma viene scritto con riferimento ad una
  determinata piattaforma di elaborazione, usando le
  istruzioni che essa può eseguire direttamente
• Un programma può essere eseguito più volte su diverse
  istanze del problema, cioè su dati diversi

      Unità 1 - Introduzione    2017/2018           Pagina 6
Esempio: somma di due numeri
• Problema: calcolare la somma di due numeri
• Procedura:
   1. Leggi il primo numero e mettilo in memoria all’indirizzo n
   2. Leggi il secondo numero e mettilo in memoria all’indirizzo m
   3. Carica nella ALU (Arithmetic Logic Unit) il contenuto dell’indirizzo n
   4. Sommagli il contenuto dell’indirizzo m
   5. Sposta il contenuto della ALU in memoria all’indirizzo k
   6. Stampa il contenuto dell’indirizzo k
• Programma: ad ogni passo della procedura corrisponde un’istruzione
  del programma

        Ma è necessario che i passi siano a livello delle operazioni
           elementari che la macchina può eseguire direttamente

        Unità 1 - Introduzione           2017/2018                Pagina 7
Linguaggio macchina
• Programmare direttamente un sistema di elaborazione è
  possibile ma poco pratico:
   − Le istruzioni effettuano operazioni molto semplici
   − Occorrono moltissime istruzioni anche per procedure
     che risolvono problemi molto semplici
   − Le istruzioni codificate in binario sono difficili da
     scrivere e da leggere
• Chi programmava i calcolatori agli inizi degli anni ‘60
  doveva fare così: non aveva scelta!
• La produttività (tempo necessario a scrivere e mettere a
  punto i programmi ) era bassissima

      Unità 1 - Introduzione     2017/2018             Pagina 8
Linguaggi di programmazione

• Soluzione del problema: definire una macchina virtuale
  (cioè che uno vorrebbe avere ma non ha) che sia molto
  più potente della macchina reale
• Alla macchina virtuale corrisponde un linguaggio di
  programmazione molto più espressivo e più leggibile:
    − Istruzioni più potenti: effettuato operazioni più
      complesse
    − Procedure più semplici: sono necessari meno passi
    − Programmi più compatti e leggibili: più facili da
      sviluppare e da mettere a punto

      Unità 1 - Introduzione   2017/2018            Pagina 9
Traduzione dei programmi

         Problema: visto che la macchina virtuale non
          esiste, allora chi esegue questi programmi?

• Traduzione dei programmi:
    − Si realizza un traduttore
    − Il traduttore è un programma esso stesso
    − Input: il programma scritto per la macchina virtuale
    − Output: il programma eseguibile dalla macchina reale
• Ma almeno il traduttore dovrà essere eseguibile sulla
  macchina reale!
• Vuol dire che (alla peggio) si scriverà il traduttore, una
  tantum, in linguaggio macchina
      Unità 1 - Introduzione      2017/2018             Pagina 10
Traduzione dei programmi (2)

          INPUT                                               OUTPUT

                                TRADUTTORE

 Programma Sorgente:                                      Programma Oggetto:
 scritto nel linguaggio                                   scritto nel linguaggio
 della macchina virtuale                                  della macchina reale
                                 Eseguibile sulla
                                 macchina reale

       Unità 1 - Introduzione                 2017/2018                    Pagina 11
Tipologie di linguaggi
• LINGUAGGI MACCHINA
  − Le istruzioni sono sequenze di bit
  − Linguaggi diversi per piattaforme diverse (Pentium, ARM, Sparc)
  Es. 01001010111000100100101011100010 (istruzione a 32 bit)

• LINGUAGGI ASSEMBLATIVI
  − Istruzioni binarie codificate in forma più leggibile
  − Corrispondenza uno a uno con le istruzioni macchina
  Es. ADD alfa, beta; (istruzione per la somma di due interi)

• LINGUAGGI AD ALTO LIVELLO
  − Più evocativi e ‘simili’ al linguaggio naturale
  Es. if (i>0) i=i+1; else printf("Errore");

      Unità 1 - Introduzione        2017/2018             Pagina 12
Portabilità dei programmi
   Un programma è portabile se può essere eseguito su una
  piattaforma diversa da quella per la quale è stato sviluppato

• Programmi scritti in linguaggio macchina ed assemblativo
  non sono portabili per definizione
• Programmi scritti in linguaggi ad alto livello nascono per
  essere portabili:
   − I linguaggi ad alto livello non sono legati ad una specifica
     piattaforma
   − Per eseguirli su una certa piattaforma basta disporre del
     traduttore per quella piattaforma

      Unità 1 - Introduzione        2017/2018              Pagina 13
Sintassi e semantica
• In un linguaggio distinguiamo due aspetti fondamentali
• SINTASSI
   − Insieme di regole che specificano come scrivere un
     programma formalmente corretto
   − Ma, come in italiano, posso scrivere un testo
     formalmente corretto, ma senza alcun significato ….
• SEMANTICA
   − Regole per attribuire un significato alle istruzioni ed
     alla loro composizione, cioè ai programmi
   − Analogamente in italiano assegna un significato alle
     parole ed una logica ai costrutti

      Unità 1 - Introduzione     2017/2018            Pagina 14
Dati e operazioni
• Un linguaggio di programmazione deve consentire di
  descrivere due aspetti fondamentali del processo di
  elaborazione
• DATI
   − Quali sono e come sono organizzate le informazioni sulle
     quali il programma opera
   − Deve consentire di rappresentare le informazioni nel
     dominio di interesse: es. numeri, stringhe di caratteri ecc.
• OPERAZIONI
   − Manipolazioni delle informazioni rappresentate
   − Devono consentire di coprire le esigenze del dominio in
     cui si vuole utilizzare il linguaggio

      Unità 1 - Introduzione       2017/2018            Pagina 15
Dal problema al programma

• Problema
   − La specifica del problema definisce univocamente quello
     che voglio
   − Non mi dice come posso ottenerlo
• Procedura risolutiva
   − Descrive, verbalmente o con qualche formalismo, i passi
     che devo effettuare per arrivare alla soluzione
• Programma
   − Sequenza di istruzioni che codifica la procedura risolutiva
     in un certo linguaggio

       Unità 1 - Introduzione      2017/2018            Pagina 16
Algoritmo

Un algoritmo è una formalizzazione della procedura risolutiva

  Procedura sistematica seguendo la quale arriviamo alla
  soluzione di un problema, ovvero insieme di passi che,
  eseguiti nell’ordine, permettono di calcolare i risultati a
  partire dalle informazioni che vengono date in ingresso.

Informazioni in                   Sequenza
   ingresso                    ordinata di passi     Risultati

    INPUT                       ALGORITMO            OUTPUT

      Unità 1 - Introduzione             2017/2018       Pagina 17
Esempio: Massimo Comun Divisore
• Problema
   − Calcolare il massimo comun divisore di due interi m e n, cioè il più
     grande intero che sia divisore di entrambi
   − Specifica cosa voglio, ma non mi indica come fare per trovarlo
• Algoritmo
   −   Poni MCD=1; sia m < n.
   −   Ripeti per tutti gli interi 1< k m, nell’ordine, il seguente passo
   −   Se k è divisore sia di n che m allora MCD=k altrimenti continua
   −   Al termine MCD ha il valore del massimo comun divisore di m e n.
• Programma
   − Codifica in un linguaggio di programmazione, ad esempio C, della procedura
     di cui sopra

 N.B. L’algoritmo proposto non è l’unico, e nemmeno il più efficiente..

          Unità 1 - Introduzione               2017/2018                     Pagina 18
Paradigmi di programmazione
I linguaggi di programmazione si ispirano a diversi paradigmi, cioè a
diverse filosofie secondo cui gli algoritmi sono codificati
• Imperativo
    − Enfasi sulle operazioni, intese come azioni e comandi e istruzioni che
      cambiano lo stato dell’elaborazione
    − Gli oggetti sono funzionali all’elaborazione
• Funzionale
    − Enfasi sulle operazioni, intese come funzioni che calcolano risultati
    − Gli oggetti sono funzionali all’elaborazione
• Orientato agli oggetti
    − Enfasi sugli oggetti che complessivamente rappresentano il dominio di
      interesse
    − Operazioni e funzioni sono definite con riferimento agli oggetti

       Unità 1 - Introduzione             2017/2018                Pagina 19
Il linguaggio C
• C è un linguaggio di programmazione ad alto livello che
  supporta i paradigmi imperativo e funzionale
• Nato agli inizi degli anni ‘70 con l’obiettivo precipuo di riscrivere
  il sistema operativo UNIX (ormai non più gestibile in linguaggio
  macchina)
• Gli autori Ken Thompson e Dennis Ritchie lo chiamarono C
  perché era il terzo tentativo: il precedente si chiamava B ….
• Come linguaggio nativo di UNIX (il primo sistema operativo
  open source) si diffuse rapidamente nel mondo universitario, e
  di lì nelle nuove imprese che andavano nascendo
• E’ forse oggi il linguaggio di programmazione più diffuso
• Subisce un lungo processo di standardizzazione che si
  concretizza nello standard ISO/IEC 9899-1990 e successivi
       Unità 1 - Introduzione         2017/2018               Pagina 20
Perché studiamo il C ?
• E’ molto vicino alla struttura del calcolatore e ne permette,
  quando voglio, l’accesso anche a basso livello
• Consente un eccellente controllo a basso livello:
   − Controllo diretto degli indirizzi
   − Gestione efficiente di stringhe
• Offre anche strutture di controllo ad alto livello, che consentono
  anche la codifica di algoritmi molto complessi
• Punto di partenza per altri linguaggi molto diffusi: C++ e Java
• Permette di sviluppare programmi molto efficienti
    Il trend attuale è di iniziare, l’apprendimento con un linguaggio
       imperativo (come il C), rimandando ad una fase successiva
   l’apprendimento dei linguaggi orientati agli oggetti (C++ e Java)

       Unità 1 - Introduzione          2017/2018                Pagina 21
L’ambiente di sviluppo
Cosa ci occorre per scrivere ed eseguire un programma C?
• Carta e penna (?)
   Ma ormai molti di noi scrivono direttamente al PC!
• Un Editor di testo
   − Permette di scrivere il programma e salvarlo come file
   − Può offrire altre funzioni (editor diretto dalla sintassi)
• Un Compilatore C
   − Traduttore da C a linguaggio macchina
   − Genera un programma direttamente eseguibile sul nostro PC
   − Offre anche funzioni accessorie, come la segnalazione di
     errori sintattici (ma non di quelli semantici!)

      Unità 1 - Introduzione      2017/2018           Pagina 22
L’ambiente consigliato
• Editor di testo: Notapad++ (Windows e Mac)
   − Editor guidato dalla sintassi (colorazione ecc.)
   − Oltre al C supporta molti altri formati
   − Direttamente scaricabile
   http://notepad-plus-plus.org/
• Compilatore: gcc
   − Disponibile su diverse piattaforme (Windows, Linux, Mac)
   − Istruzioni per l’installazione sul sito del corso

     Si tratta di software open source, non ci sono oneri di licenza.
       Distribuzione libera,qualità eccellente, diffusione altissima

       Unità 1 - Introduzione            2017/2018                 Pagina 23
Il nostro primo programma C

 #include 

 int main() {
   printf("Il mio primo programma C.");
   return 0;
 }

 •   Per essere semplice è semplice!
 •   Ma qualcuno vuole seriamente sostenere che è leggibile?
 •   Certo, a prima vista, non è evidente quello che fa?
 •   E poi, che stile esoterico: ma era proprio necessario?

       Unità 1 - Introduzione     2017/2018            Pagina 24
Cosa significa?
• Il programma è costituito da direttive e istruzioni
• Le direttive sono ordini rivolti al compilatore
• Alle istruzioni corrispondono azioni che si chiede di effettuare in
  fase di esecuzione, e strutture che ne precisano l’ordine e le
  modalità di esecuzione
1. #include 
− È una direttiva che chiede al compilatore di includere una serie di
  definizioni relative alle operazioni predefinite di I/O
2. int main() {...}
− È la definizione della funzione main che racchiude il corpo
  principale del programma, contenuto tra i due simboli { e }
− Ogni programma C deve contenere una e una sola funzione main

        Unità 1 - Introduzione          2017/2018              Pagina 25
Cosa significa? (continua)
3. printf("Il mio primo programma C.");
− È un’istruzione che stampa su video la stringa racchiusa tra apici
− Più precisamente printf è una funzione predefinita, di quelle
  incluse a seguito della direttiva #include 
4. return 0;
− È un’istruzione che termina l’esecuzione della funzione main e
  restituisce il valore 0 (per dire che tutto è andato bene)

  •   La cosa non vi è chiara? Niente paura: è tutto normale!
  •   Non c’è, purtroppo, un iter del tutto lineare per iniziare a lavorare in C
  •   L’alternativa (noiosa) è spiegare tutto prima di far succedere qualcosa
  •   Occorre un po’ di pazienza: le cose si chiariranno presto.

         Unità 1 - Introduzione              2017/2018                  Pagina 26
Sviluppare ed eseguire il programma
1. SCRITTURA
− Si scrive il programma usando un editor
− Il programma viene salvato sul computer in un file
2. COMPILAZIONE
− Il file contenente il programma viene consegnato al
  compilatore
− Il compilatore, se non rileva errori sintattici, genera un file
  eseguibile contenente la traduzione
− Altrimenti segnala gli errori e termina
3. ESECUZIONE
− Il file eseguibile viene mandato in esecuzione
− Anche più volte, senza doverlo ricompilare

      Unità 1 - Introduzione         2017/2018               Pagina 27
Scrittura del programma

Per chiarire che si tratta di un programma C, salviamo con un
nome di file primo.c dove:
  − primo è il nome che vogliamo dare al nostro programma
  − c è l’estensione di file che tradizionalmente indica i
   programmi C

  • La scrittura di un programma può essere effettuata con
    qualsiasi programma che consenta la scrittura di un testo
     Es. Edit, Notepad, Vim, Notepad++, Emacs,...
  • Attenzione però che il formato di salvataggio sia quello di
    testo non formattato (ad esempio un file docx non va bene!)

      Unità 1 - Introduzione        2017/2018              Pagina 28
In Notapad++

    Unità 1 - Introduzione   2017/2018   Pagina 29
Compilazione del programma
• In Windows ’interazione con il compilatore gcc avviene dando il
  comando direttamente, cioè non tramite l’interfaccia grafica
• I comandi vengono passati nella finestra ‘command prompt’
1. Cambiare la directory corrente con quella che contiene il
   programma, nel mio caso:
         C:\Users\Utente\Desktop\ProgrammiC
2. Mandare in esecuzione il compilatore:
         gcc –o first primo.c                                         Come risultato della
                                                                      compilazione viene creato,
Manda in esecuzione gcc                        Nome del programma
                                                                      nella directory corrente,
                          Nome da assegnare    da compilare           il file first.exe
                          al file eseguibile

           Unità 1 - Introduzione                         2017/2018                    Pagina 30
Esecuzione del programma
• Se non ci sono errori il compilatore genera un file eseguibile:
 − Viene salvato nella directory corrente, col nome che si è
   specificato e l’estensione .exe
 − Nel nostro caso first.exe in C:\...\Desktop\ProgrammiC
• Per mandare il programma in esecuzione basta passare il nome del
  file eseguibile come comando nella command prompt
 − Non è necessario specificare l’estensione
 − Nel caso in esempio: first o first.exe
• Il risultato di ciascuna esecuzione sarà la visualizzazione nella
  command prompt della stringa:
  Il mio primo programma C.

        Unità 1 - Introduzione         2017/2018               Pagina 31
Compilazione ed esecuzione

    Unità 1 - Introduzione   2017/2018   Pagina 32
E se ci sono errori?

   INIZIO
                                                                SI

                              SCRITTURA                   ERRORI
                                  E       COMPILAZIONE   SINTATTICI
                               MODIFICA                      ?

                              SI                                NO

            NO                 ERRORI
                              SEMANTICI    ESECUZIONE
                                 ?

   FINE

     Unità 1 - Introduzione                2017/2018          Pagina 33
Errori
Questo programma contiene diversi errori, di diversi tipi:
#include 
                                                      Manca il ;
int main () {
   printf("I miei primi errori in C...\n")
   Printf("...e non saranno gli ultm!!!\n");
   return 0;                         C’è un errore di ortografia
} Maiuscola al posto di minuscola
Tipi di errori:
 • Sintattici: riguardano la correttezza formale
 • Semantici: riguardano la correttezza sostanziale

        Unità 1 - Introduzione     2017/2018             Pagina 34
Errori sintattici
• Legati alla violazione delle regole del linguaggio
#include 
                                                 Manca il ;
int main () {
   printf("I miei primi errori in C...\n")
   Printf("...e non saranno gli ultm!!!\n");
   return 0;
} Maiuscola al posto di minuscola
• Questi errori sono individuati dal compilatore
• Non sempre però le segnalazioni sono chiare:
 >gcc -o errori errori.c
 errori.c: In function 'main':
 errori.c:18:4: error: expected ';' before 'Printf'
 >
       Unità 1 - Introduzione      2017/2018           Pagina 35
Errori semantici
• Il programma non fa quello che vorrei che facesse
• P. es. nel caso di errori.c viene stampata una stringa
  contenente errori di ortografia (non è quello che vorrei):
    >gcc -o errori errori.c
    >errori
    I miei primi errori in C...
    ...e non saranno gli ultm!!!
    >
• Il compilatore non segnala questi errori (e non può farlo!)
• Lui che può saperne di quello che vorrei stampare?

             Gli errori semantici possono essere individuati solo
             eseguendo il programma e analizzando i risultati

       Unità 1 - Introduzione            2017/2018                  Pagina 36
Programma corretto

 #include 

 int main () {
   printf("I miei primi errori in C...\n");
   printf("...e non saranno gli
 ultimi!!!\n");
   return 0;
 }

    Unità 1 - Introduzione   2017/2018   Pagina 37
Funzioni
• L’organizzazione dei programmi C e fortemente basata sul
  concetto di funzione
• Gestire la complessità di un programma decomponendolo in
  moduli:
    − Approccio divide et impera
    − Definire funzioni, cioè moduli corrispondenti a parti della
      procedura che svolgono compiti precisi
    − Costruire il programma utilizzando questi moduli
• Due tipi di funzioni:
    − Funzioni di libreria: già definite da altri e raccolte in libreria
    − Funzioni definite dal programmatore: la loro definizione è
      parte del programma

        Unità 1 - Introduzione          2017/2018               Pagina 38
Parametri e valore di una funzione
• Le funzioni prevedono normalmente parametri sui quali si basa
  l’elaborazione effettuata dalla funzione
• Devono essere passati ogni volta che la funzione è invocata
• I parametri permettono di usare una funzione per effettuare più
  volte la stessa elaborazione su dati diversi
• In C una funzione ha (quasi) sempre un valore, che viene
  restituito come risultato del calcolo della funzione
• Se la funzione non restituisce un valore di dice che il suo valore
  è void
ESEMPIO: sin(x)
   • x è un valore reale che viene passato alla funzione come parametro
   •   la funzione calcola un valore reale
   •   in C sin è una funzione di libreria predefinita

        Unità 1 - Introduzione            2017/2018            Pagina 39
Definizione e invocazione
• Occorre distinguere chiaramente tra:
• DEFINIZIONE DI UNA FUNZIONE
   − Parte del programma in cui viene definito cosa la funzione fa
   − Non è esplicita per le funzioni di libreria
   − Una funzione deve essere dichiarata prima di essere usata
• INVOCAZIONE DI UNA FUNZIONE
    − Parte di un programma in cui viene richiesta l’esecuzione
      della funzione
    − Sintassi: nomeFunzione(Parametri)
    − Semantica: la funzione esegue le operazioni specificate nella
      sua definizione sulle informazioni passate come parametri

       Unità 1 - Introduzione       2017/2018             Pagina 40
Esempio
#include 
#include 

int main() {
   printf("Questo programma C esegue dei calcoli ");
   printf("usando funzioni matematiche               predefinite..\n");
   printf("la radice quadrata di 169: %f", sqrt(169) );
}
   • Viene invocata la funzione di libreria sqrt che calcola la radice
     quadrata del numero che gli viene passato come parametro
   • La libreria math di cui fa parte sqrt è indicata nella direttiva al
     compilatore
   • Nell’esempio sqrt(169)calcola la radice di 169
   • Il risultato è passato come valore e usato dalla printf
   • Anche printf è una funzione di libreria: per poterla usare devo
     chiedere al compilatore di includere la libreria stdio

       Unità 1 - Introduzione         2017/2018               Pagina 41
La funzione main
• Un programma C deve sempre contenere una funzione main
• La funzione main ha valore void, cioè non restituisce valore
• La definizione di altre funzioni segue quella della funzione main
• L’esecuzione del programma consiste nell’esecuzione della
  funzione main, la quale, eventualmente, invoca altre funzioni
  provocandone l’esecuzione
 PROBLEMA
  − Il compilatore, per poter tradurre il programma, deve conoscere
    le definizioni delle funzioni
  − Quando trova le invocazioni deve almeno conoscere: numero
    e tipo dei parametri e tipo del valore della funzione
  − Ma le definizioni vengono dopo il main …..

       Unità 1 - Introduzione       2017/2018              Pagina 42
Prototipi di funzione
• Per risolvere il problema, in C prevede la dichiarazione dei
  prototipi di funzione
• Un prototipo di funzione è una dichiarazione sintetica che
  specifica:
    − Il nome della funzione
    − Il tipo del risultato
    − Il numero ed il tipo dei parametri
• La dichiarazione dei prototipi precede la definizione della
  funzione main
ESEMPIO: double sqrt(double)
   • La funzione sqrt restituisce un valore reale in doppia precisione
   • Ha un parametro anch’esso reale in doppia precisione (tipo double)

        Unità 1 - Introduzione         2017/2018               Pagina 43
Parametri
• I parametri di una funzione sono i valori passati dal modulo
  chiamante alla funzione per poter svolgere i calcoli
• In generale, i parametri passati come argomenti possono essere
  espressioni complesse che possono contenere, a loro volta,
  invocazioni di altre funzioni
ESEMPIO
   • la funzione double sqrt(double)deve essere invocata passando
     un valore di cui vogliamo calcolare la radice quadrata
   • la funzione double pow(double,double)calcola la potenza e i
     parametri sono base ed esponente
   • La chiamata sqrt(pow(5,2)+pow(12,2))calcola la radice
     quadrata di 52+122 e restituisce un valore reale in doppia precisione,
     nella fattispecie 13

       Unità 1 - Introduzione           2017/2018                 Pagina 44
Funzioni definite in math.h

    Unità 1 - Introduzione   2017/2018   Pagina 45
La funzione printf
• Visualizza (stampa) a video una sequenza di dati formattati
• Fa parte della libreria stdio.h e ha la forma:
    printf (stringa di controllo del formato, altri argomenti )
• La stringa di controllo del formato descrive il formato dell’output
• Gli altri argomenti specificano i dati che si intende visualizzare
• Restituisce come valore il numero di caratteri visualizzati
• La stringa di controllo del formato è composta da una serie di
  specifiche di conversione che indicano:
   − Il tipo del dato che si vuole stampare
   − L’ampiezza del campo in cui deve essere stampato
   − La suddivisione all’interno del campo
• Altri caratteri nella stringa vengono stampati direttamente

        Unità 1 - Introduzione       2017/2018              Pagina 46
Specifiche di conversione
• Alcune specifiche di conversione di uso frequente sono:
       %c        singolo carattere
       %d        intero in rappresentazione decimale
       %o        intero in rappresentazione ottale
       %x        intero in rappresentazione esadecimale
       %u        intero in rappresentazione decimale senza segno
       %f        reale in notazione virgola fissa
       %s        stringa
       %e        reale in notazione scientifica
Tra % e la lettera si può inserire un segno meno che indica
giustificazione a sinistra, un numero intero che dà l'ampiezza del
campo e può essere seguito da un punto e da un altro intero che dà il
numero di cifre o il numero di caratteri per una stringa.

        Unità 1 - Introduzione           2017/2018             Pagina 47
Esempio di printf
#include 

      int main()
      {
           printf("%d^ volta con il C\n", 1);
           printf("%.4f\n", 123.987654);
           return 0;
      }

• Stampa la stringa:
      1^ volta con il C
      123.9877
N.B. Il carattere speciale \n provoca l’andata a capo

       Unità 1 - Introduzione        2017/2018          Pagina 48
Escape sequence
Sono sequenze di caratteri, inizianti per \ che non sono
visualizzati sullo schermo, ma producono altri effetti

       \n            newline, va a capo
       \t            tabulazione
       \r            posiziona il cursore all’inizio della riga corrente
       \a            emette un suono
       \t            tabulazione
       \\            stampa il carattere \
       \'            stampa il carattere '
       \"            stampa il carattere “

Lista completa sul libro (o su Wikipedia)

       Unità 1 - Introduzione              2017/2018             Pagina 49
Stampa di apici e virgolette …
#include 

int    main()
{
       printf("l\'apostrofo non e\' \"facile\"");
       printf(" da stampare\n");
       return 0;
}

Visualizza
l'apostrofo non e' "facile" da stampare

      Attenzione alle “smart quotes” introdotte da molti editor!
            Evitare il copia e incolla (di testi formattati)

      Unità 1 - Introduzione         2017/2018                Pagina 50
Esercizi
Esercizio 1.1
• Provare a scrivere, compilare ed eseguire tutti gli esempi visti
  finora. Introdurre piccole variazioni su tema, ricompilare e
  controllare l’effetto.
Esercizio 1.2
• Scrivere un programma C che calcoli il valore 826 e lo visualizzi
  su video, preceduto dalla frase 82 elevato alla sesta è .
Esercizio 1.3
• Scrivere un programma che calcoli la radice quadrata di 2, e
  visualizzi il risultato con 3 cifre decimali.

       Unità 1 - Introduzione        2017/2018             Pagina 51
Esercizio 1.2 (soluzione)
Esercizio 1.2 – Scrivere un programma C che calcoli il valore 866
e lo visulaizzi su video, preceduto dalla frase 86 elevato alla
sesta è .
    #include 
    #include 
   int                  main()
   {
                        printf("86 elevato alla sesta e\' ");
                        printf("%f\n", pow(82.0, 6.0));
                        return 0;
   }
Output:
86 elevato alla sesta e' 304006671424.000000
          Unità 1 - Introduzione        2017/2018         Pagina 52
Esercizio 1.3 (soluzione)
Esercizio 1.3 – Scrivere un programma che calcoli la radice
quadrata di 2, e visualizzi il risultato con 3 cifre decimali.
  #include 
  #include 

  int       main()
  {
            printf("%.3f\n", sqrt(2.0));
            return 0;
  }

  Output:
  1.414

        Unità 1 - Introduzione       2017/2018              Pagina 53
Problemi pratici: tastiera italiana
 Come si scrive la graffa aperta ( { ) ?
 Alt + 123
 oppure
 Alt Gr + Shift + è
 oppure
 Fn + Alt + 123 (per i portatili)

 Come si scrive la graffa chiusa ( } ) ?
 Alt + 125
 oppure
 Alt Gr + Shift + +
 oppure
 Fn + Alt + 125 (per i portatili)

      Unità 1 - Introduzione       2017/2018   Pagina 54
Escape sequences in C

    Unità 1 - Introduzione   2017/2018   Pagina 55
Riferimenti per il linguaggio e le librerie
• Una buona documentazione on-line sulle librerie del C ( e non
  solo) si può trovare ad esempio sul sito:
       http://code-reference.com/c
• Altri indirizzi interessanti sono:
       http://www.cplusplus.com/reference/
       http://en.cppreference.com/w/c
• E poi, cercare con Google ….

       Unità 1 - Introduzione          2017/2018         Pagina 56
Puoi anche leggere