• Non ci sono risultati.

La programmazione in linguaggio C

N/A
N/A
Protected

Academic year: 2021

Condividi "La programmazione in linguaggio C"

Copied!
6
0
0

Testo completo

(1)

Fondamenti di Informatica - La programmazione in linguaggio C

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 1

FONDAMENTI DI INFORMATICA

Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI

Facoltà di Ingegneria Università degli Studi di Udine

La programmazione in linguaggio C

Fondamenti di Informatica - La programmazione in linguaggio C

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e dalle disposizioni dei trattati internazionali. Il titolo ed i copyright relativi alle slides (ivi inclusi, ma non limitatamente, ogni immagine, fotografia, animazione, video, audio, musica e testo) sono di proprietà degli autori prof. Pier Luca Montessoro e ing. Davide Pierattoni, Università degli Studi di Udine.

Le slide possono essere riprodotte ed utilizzate liberamente dagli istituti di ricerca, scolastici ed universitari afferenti al Ministero della Pubblica Istruzione e al Ministero dell'Università e Ricerca Scientifica e Tecnologica, per scopi istituzionali, non a fine di lucro. In tal caso non è richiesta alcuna autorizzazione.

Ogni altro utilizzo o riproduzione (ivi incluse, ma non limitatamente, le riproduzioni su supporti magnetici, su reti di calcolatori e stampe) in toto o in parte è vietata, se non esplicitamente autorizzata per iscritto, a priori, da parte degli autori.

L'informazione contenuta in queste slide è ritenuta essere accurata alla data della pubblicazione. Essa è fornita per scopi meramente didattici e non per essere utilizzata in progetti di impianti, prodotti, reti, ecc. In ogni caso essa è soggetta a cambiamenti senza preavviso. Gli autori non assumono alcuna responsabilità per il contenuto di queste slide (ivi incluse, ma non limitatamente, la correttezza, completezza, applicabilità, aggiornamento dell'informazione).

In ogni caso non può essere dichiarata conformità all'informazione contenuta in queste slide.

In ogni caso questa nota di copyright e il suo richiamo in calce ad ogni slide non devono mai essere rimossi e devono essere riportati anche in utilizzi parziali.

Nota di Copyright

Fondamenti di Informatica - La programmazione in linguaggio C

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 3

specifiche

del problema analisi algoritmo

programma sorgente

im ple m entazione

compilazione e linking programma

eseguibile

esecuzione

controllo

dei risultati deb ugg ing e c

orre zion e del p rog ram

ma

Strumenti per la programmazione

Fondamenti di Informatica - La programmazione in linguaggio C

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 4

Strumenti per la programmazione

specifiche

del problema analisi algoritmo

programma sorgente

im ple m entazione

compilazione e linking programma

eseguibile

esecuzione

controllo

dei risultati deb ugg ing e c

orre zion e del p rog ram

ma

In questo corso non è previsto l’utilizzo di sistemi di analisi automatica né di strumenti di CASE (Computer Aided Software Engineering)

Fondamenti di Informatica - La programmazione in linguaggio C

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 5

Strumenti per la programmazione

specifiche

del problema analisi algoritmo

programma sorgente

im ple m entazione

compilazione e linking programma

eseguibile

esecuzione

controllo

dei risultati deb ugg ing e c

orre zion e del p rog ram

ma TEXT EDITOR: programma per scrivere file di testo (ASCII) Esempi: EDIT di MS-DOS, Notepad, Wordpad o Notepad++ di MS-Windows, gedit o emacs di Unix

Fondamenti di Informatica - La programmazione in linguaggio C

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 6

Strumenti per la programmazione

specifiche

del problema analisi algoritmo

programma sorgente

im ple m entazione

compilazione e linking programma

eseguibile

esecuzione

controllo

dei risultati deb ugg ing e c

orre zion e del p rog ram

ma Compilatore C/C++ della GNU

Linguaggio C:

gcc -o foobar.exe foobar.c Linguaggio C++:

g++ -o foobar.exe foobar.cpp

(2)

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 7

Strumenti per la programmazione

specifiche

del problema analisi algoritmo

programma sorgente

im ple m entazione

compilazione e linking programma

eseguibile

esecuzione

controllo

dei risultati deb ugg ing

e c orre zion e del p

rog ram ma

In MS-DOS e in unix per eseguire un programma è sufficiente scriverne il nome sulla linea di comando, seguito da invio:

C:\PROGRAMMI> foobar

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 8

Strumenti per la programmazione

specifiche

del problema analisi algoritmo

programma sorgente

im ple m entazione

compilazione e linking programma

eseguibile

esecuzione

controllo

dei risultati deb ugg ing

e c orre zion e del p

rog ram ma Strumenti di base:

• attenta analisi ragionata del codice

• selezione di casi significativi

• printf (per la stampa dei valori delle variabili)

Strumenti avanzati:

• debugger

Fondamenti di Informatica - La programmazione in linguaggio C

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 9

Utilizzo del compilatore GCC

• Compilazione:

C:\PROGR> gcc -o nome.exe nome.c

• Esecuzione:

C:\PROGR> nome

• Compilazione per il debugger:

C:\PROGR> gcc -g -o nome.exe nome.c

• Esecuzione con debugger grafico:

C:\PROGR> gdb nome C:\PROGR> insight nome C:\PROGR> nemiver prova

(versioni gcc precedenti alla 3) (in ambiente Ubuntu)

Fondamenti di Informatica - La programmazione in linguaggio C

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 10

Principi fondamentali

• “Implementare un algoritmo” significa tradurre una serie di operazioni aritmetico-logiche in procedure eseguibili dal calcolatore

• Tale traduzione è diversa a seconda del linguaggio di programmazione scelto

Un programma C è costituito fondamentalmente da variabili e funzioni

Fondamenti di Informatica - La programmazione in linguaggio C

Variabili e funzioni

• Le variabili memorizzano i valori (o dati) in input e/o in output e quelli usati durante l’esecuzione

• Le funzioni sono sequenze di istruzioni, ossia operazioni da effettuare sui dati

Fondamenti di Informatica - La programmazione in linguaggio C

Esempio: hello.c

#include <stdio.h>

#include <stdlib.h>

/* programma principale */

int main() {

printf ("Hello world!\n");

return EXIT_SUCCESS;

}

/* fine del programma */

(3)

Fondamenti di Informatica - La programmazione in linguaggio C

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 13

Esempio: hello.c

#include <stdio.h>

#include <stdlib.h>

/* programma principale */

int main() {

printf ("Hello world!\n");

return EXIT_SUCCESS;

}

/* fine del programma */

Direttiva al preprocessor:

include il file (del compilatore) stdio.h che serve per l’utilizzo delle funzioni di input/output

Fondamenti di Informatica - La programmazione in linguaggio C

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 14

Esempio: hello.c

#include <stdio.h>

#include <stdlib.h>

/* programma principale */

int main() {

printf ("Hello world!\n");

return EXIT_SUCCESS;

}

/* fine del programma */

Commento: viene ignorato dal compilatore

Fondamenti di Informatica - La programmazione in linguaggio C

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 15

Esempio: hello.c

#include <stdio.h>

#include <stdlib.h>

/* programma principale */

int main() {

printf ("Hello world!\n");

return EXIT_SUCCESS;

}

/* fine del programma */

Funzione main: tutto comincia da qui

Corpo della funzione main

Fondamenti di Informatica - La programmazione in linguaggio C

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 16

Esempio: hello.c

#include <stdio.h>

#include <stdlib.h>

/* programma principale */

int main() {

printf ("Hello world!\n");

return EXIT_SUCCESS;

}

/* fine del programma */

Istruzione per stampare la scritta

"Hello world!" e poi andare a capo Istruzione per terminare la

funzione main (e quindi il programma) restituendo al sistema operativo il valore numerico associato, in stdlib.h, a EXIT_SUCCESS

Fondamenti di Informatica - La programmazione in linguaggio C

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 17

Struttura di un programma

• Ogni funzione è identificata da un nome

• Il programma inizia sempre l’esecuzione a partire da una funzione “speciale”: la funzione main

• Nei programmi C più semplici, tutte le operazioni da fare risiedono nella funzione main

• I programmi complessi prevedono che main invochi altre funzioni, suddividendo le molte istruzioni in blocchi logici più semplici

Fondamenti di Informatica - La programmazione in linguaggio C

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 18

Direttive al preprocessor

• La prima linea del programma:

#include <stdio.h>

è comune a molti programmi C

• Indica al compilatore di includere

automaticamente le funzioni della libreria

standard di input/output stdio.h, come ad

esempio la funzione di stampa su video

printf ()

(4)

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 19

Commenti

• In ogni programma C è utile poter inserire dei commenti, a descrizione di quanto viene eseguito da una o più istruzioni

• La riga di commento:

/* programma principale */

non contiene istruzioni C e quindi non viene processata dal compilatore

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 20

Input e output

• printf () è una funzione di uso generale offerta della libreria standard di input/output

• Nell’esempio, essa stampa sul monitor (lo standard output) semplicemente la sequenza di caratteri: Hello world!

Fondamenti di Informatica - La programmazione in linguaggio C

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 21

Esempio: somma.c

#include <stdio.h>

#include <stdlib.h>

int main() /* somma due numeri interi */

{

int num1, num2, somma;

printf ("inserire num1: ");

scanf ("%d", &num1);

printf ("inserire num2: ");

scanf ("%d", &num2);

somma = num1 + num2;

printf ("num1 + num2 = %d\n", somma);

return EXIT_SUCCESS;

}

Fondamenti di Informatica - La programmazione in linguaggio C

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 22

Esempio: somma.c

#include <stdio.h>

#include <stdlib.h>

int main() /* somma due numeri interi */

{

int num1, num2, somma;

printf ("inserire num1: ");

scanf ("%d", &num1);

printf ("inserire num2: ");

scanf ("%d", &num2);

somma = num1 + num2;

printf ("num1 + num2 = %d\n", somma);

return EXIT_SUCCESS;

}

dichiarazione di variabili intere

Fondamenti di Informatica - La programmazione in linguaggio C

Esempio: somma.c

#include <stdio.h>

#include <stdlib.h>

int main() /* somma due numeri interi */

{

int num1, num2, somma;

printf ("inserire num1: ");

scanf ("%d", &num1);

printf ("inserire num2: ");

scanf ("%d", &num2);

somma = num1 + num2;

printf ("num1 + num2 = %d\n", somma);

return EXIT_SUCCESS;

input di un intero (input formattato)

Fondamenti di Informatica - La programmazione in linguaggio C

Esempio: somma.c

#include <stdio.h>

#include <stdlib.h>

int main() /* somma due numeri interi */

{

int num1, num2, somma;

printf ("inserire num1: ");

scanf ("%d", &num1);

printf ("inserire num2: ");

scanf ("%d", &num2);

somma = num1 + num2;

printf ("num1 + num2 = %d\n", somma);

return EXIT_SUCCESS;

somma e

assegnazione

(5)

Fondamenti di Informatica - La programmazione in linguaggio C

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 25

Esempio: somma.c

#include <stdio.h>

#include <stdlib.h>

int main() /* somma due numeri interi */

{

int num1, num2, somma;

printf ("inserire num1: ");

scanf ("%d", &num1);

printf ("inserire num2: ");

scanf ("%d", &num2);

somma = num1 + num2;

printf ("num1 + num2 = %d\n", somma);

return EXIT_SUCCESS;

}

stampa del risultato (output formattato)

Fondamenti di Informatica - La programmazione in linguaggio C

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 26

Variabili e dichiarazioni

• Per poter essere utilizzate da un’istruzione, tutte le variabili di un programma C devono essere dapprima dichiarate

• Una dichiarazione stabilisce il tipo e il nome di una o più variabili, come ad esempio:

int numero;

• Il tipo di dato determina la natura della variabile, ovvero il modo in cui verrà trattata nelle successive operazioni

Fondamenti di Informatica - La programmazione in linguaggio C

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 27

Variabili ed espressioni

• L’istruzione

numero = numero * 20;

rappresenta di fatto la traduzione di due operazioni logiche distinte

• Dapprima viene valutata l’espressione a destra del segno =

• Il risultato di tale espressione è poi assegnato alla stessa variabile numero, che viene dunque sovrascritta:

numero ← numero * 20;

Fondamenti di Informatica - La programmazione in linguaggio C

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 28

Input e output formattato

• scanf () e printf () consentono di leggere e stampare dati formattati

• La funzione scanf () legge un dato dalla tastiera (lo standard input) e ne scrive il valore in una variabile (o locazione in memoria)

• Esse operano in modo diverso a seconda del tipo dei dati da manipolare (numeri interi, numeri floating point, stringhe di caratteri, singoli byte ecc.)

• L’input/output formattato in C è molto potente!

Fondamenti di Informatica - La programmazione in linguaggio C

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 29

Funzioni e argomenti

• Un metodo per comunicare dati alle funzioni è quello di fornire ad esse una lista di valori, detti argomenti

• Le parentesi che seguono il nome della funzione racchiudono tale lista, come per:

scanf ("%d", &numero);

• Esistono funzioni che non si aspettano argomenti: nell’esempio, main () ha la lista di argomenti vuota

Fondamenti di Informatica - La programmazione in linguaggio C

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 30

Esempio: potenza.c

#include <stdio.h>

#include <stdlib.h>

/* elevamento a potenza con moltiplicazioni successive */

int main() {

int base, esponente, potenza, contatore;

printf ("inserire base: ");

scanf ("%d", &base);

printf ("inserire esponente: ");

scanf ("%d", &esponente);

potenza = 1;

contatore = 0;

while (contatore < esponente) {

potenza = base * potenza;

contatore = contatore + 1;

}

printf ("potenza = %d\n", potenza);

return EXIT_SUCCESS;

}

struttura di controllo:

ciclo while

(6)

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 31

Strutture di controllo

• L’esempio precedente rappresenta una possibile implementazione del calcolo dell’elevamento a potenza (esponente non negativo!)

• Il ciclo while è una struttura di controllo, il cui diagramma di flusso è:

Y N

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 32

Strutture di controllo

• Il costrutto:

while (contatore < esponente) {

potenza = base * potenza;

contatore = contatore + 1;

}

è un semplice ciclo iterativo

• Dapprima viene valutata la condizione contatore < esponente

• Se tale espressione risulta vera, allora il blocco di istruzioni racchiuse tra le parentesi graffe viene eseguito e, alla fine, la condizione viene valutata di nuovo (iterazione)

Fondamenti di Informatica - La programmazione in linguaggio C

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 33

Strutture di controllo

• Il ciclo while viene così ripetuto fino a che (while) la condizione

contatore < esponente è ancora vera

• Nell’esempio, le istruzioni interne al ciclo

vengono eseguite un numero di volti pari al

valore dell’esponente

Riferimenti

Documenti correlati

© 2003 Pier Luca Montessoro (vedere nota di copyright a pag. 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e dalle

© 2001 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e

© 2001 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e

© 2001 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e

© 2001 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e

© 2001 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright