1 / 98

Corso di Algoritmi e Strutture Dati

Corso di Algoritmi e Strutture Dati. APPUNTI SUL LINGUAGGIO C Introduzione al C Lezione I. Ing. Roberto De Virgilio. e-mail:. rde79@yahoo.com. sito Web:. http://mais.dia.uniroma3.it/rodevirg. Perché scriviamo programmi. Abbiamo un problema da risolvere

dimaia
Télécharger la présentation

Corso di Algoritmi e Strutture Dati

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C Introduzione al C Lezione I

  2. Ing. Roberto De Virgilio e-mail: rde79@yahoo.com sito Web: http://mais.dia.uniroma3.it/rodevirg

  3. Perché scriviamo programmi Abbiamo un problema da risolvere Dobbiamo progettare una soluzione: progettiamo un algoritmo Vogliamo far eseguire tale algoritmo dal nostro elaboratore: scriviamo un programma

  4. Linguaggi macchina, assembley e di alto livello • Linguaggi macchina: lingua naturale di un particolare computer, esso consiste di sequenze di numeri (1 o 0) e dipende dalla macchina 0000111101 1111110001 0011001111 • Linguaggi assembly: abbreviazioni simili all’inglese, per rappresentare le operazioni elementari del computer LOAD N ADD X • Linguaggi ad alto livello: singole istruzioni contenenti notazioni matematiche utilizzate comunemente x = n + 2;

  5. Il linguaggio C • Il C fu progettato ed implementato da Dennis Ritchie ed è un linguaggio imperativo ad alto livello, sviluppato nei laboratori della AT&T Bell Laboratories, adatto per lo sviluppo dei sistemi operativi. • Benché implementato su un sistema operativo UNIX, questo linguaggio non fu scritto per un particolare sistema operativo ma può essere utilizzato sotto sistemi operativi diversi come UNIX, DOS, OS, POWER PC, ecc • Sistema operativo? • Linguaggio imperativo?

  6. Sistema operativo • è un programma di controllo che svolge operazioni fondamentali al funzionamento dell’elaboratore • risiede in una memoria interna permanente e interpreta i comandi di utente che richiedono diversi servizi (es. la visualizzazione, la stampa o la copiatura di un file, il raggruppamento logico dei file in una directory o l'esecuzione di un programma). • si occupa di gestire tutte le periferiche del nostro pc, tutti i processi, e tutti i dati di input/output.

  7. Paradigmi di programmazione Esistono diversi approcci alla programmazione, chiamati paradigmi di programmazione: Programmazione imperativa: un programma specifica le azioni che devono essere eseguite in sequenza per calcolare i risultati a partire dai dati in ingresso. Programmazione orientata agli oggetti : un programma modella una realtà di interesse come una collezione di oggetti software che cooperano

  8. Programma Java Oggetto Software Oggetto Software Classe Principale Oggetto Software Oggetto Software

  9. Il linguaggio C Il C è un linguaggio di programmazione di tipo imperativo un programma è una lista di istruzioni, di imperi che il calcolatore deve eseguire. Versione standard del C: ANSI/ISO 9899

  10. Le librerie in C • I programmi scritti in C consistono in moduli chiamati funzioni; esiste una ricca collezione di funzioni già esistenti chiamata libreria standard del C. • Obiettivo riusabilità del software: approccio di costruzione a blocchi per creare programmi; inutile ricostruire funzioni già esistenti, ma riusare ciò che già esiste fondendolo con ciò che viene costruito ex-novo. • Obiettivo efficienza: utilizzare le funzioni della libreria ANSI potrà migliorare l’efficienza del programma. • Obiettivo portabilità: utilizzare le funzioni ANSI invece di scrivere le proprie versioni.

  11. Il linguaggio C • Il C è un tipico linguaggio di programmazione strutturata: scrittura di programmi chiari, dalla correttezza dimostrabile e semplici da modificare. • Il linguaggio C permette di scrivere programmi molto compatti • Il linguaggio C permette di accedere e gestire direttamente le risorse hardware dell’elaboratore (in maniera indipendente dall’architettura)

  12. Il Preprocessore esegue il codice Fase 2 Preprocessore Disk Compilatore crea il codice oggetto Fase 3 Compilatore Disk Collega il codice oggetto alle librerie Fase 4 Linker Disk Carica in memoria il programma Memoria Primaria Fase 5 Loader Esegue una istruzione alla volta Memoria Primaria Fase 6 CPU Programma creato con l’editor L’ambiente C Fase 1 Editor Disk

  13. Un semplice programma C /* Programma che stampa un saluto */ #include <stdio.h> main(){ printf(“Hello World!\n”); }

  14. Un semplice programma C /* Programma che stampa un saluto */ #include <stdio.h> main(){ printf(“Hello World!\n”); } L’istruzione è chiamata “direttiva di compilazione” e serve ad includere informazioni relative a una libreria predefinita del C che contiene le funzioni di input/output.

  15. Un semplice programma C /* Programma che stampa un saluto */ #include <stdio.h> main(){ printf(“Hello World!\n”); } La parola main() identifica il programma principale e rappresenta il punto di ingresso del programma all’inizio della sua esecuzione

  16. Un semplice programma C /* Programma che stampa un saluto */ #include <stdio.h> main(){ printf(“Hello World!\n”); } Si possono specificare commenti racchiudendoli tra i simboli /* e */ Ogni istruzione è conclusa dal simbolo <<;>> Le parentesi graffe delimitano un blocco

  17. Un semplice programma C /* Programma che stampa un saluto */ #include <stdio.h> main(){ printf(“Hello World!\n”); } Per la stampa su video printf e tra apici la stringa costante Esistono sequenze nelle stringhe che indicano caratteri speciali: per esempio \n indica il carattere di new line che quando viene incontrato sposta il carattere successivo alla riga seguente

  18. Tipo di opzione Descrizione \n Ritorno a capo \t Tabulazione orizzontale \b Tabulazione verticale \a Torna indietro di uno spazio \f Salto pagina Caratteri speciali

  19. Variabili in C • /* Programma per il calcolo del fattoriale */ • #include <stdio.h> • main(){ • int n,fat; • printf(“Calcolo del fattoriale di:”); • scanf(“%d”,&n); • fat = 1; • while (n>1) { • fat = fat * n; • n = n-1; • } • printf(“Risultato = %d\n”,fat); • }

  20. Variabili in C /* Programma per il calcolo del fattoriale */ #include <stdio.h> main(){ int n,fat; printf(“Calcolo del fattoriale di:”); scanf(“%d”,&n); fat = 1; Una variabile viene dichiarata scrivendo il tipo seguito dal nome della variabile. Una variabile può essere inizializzata all’atto della sua dichiarazione (int a=1).

  21. Tipi di dichiarazione Rappresentazione Char Carattere (es. 'à) Int Numero intero (es. 3) Short Numero intero corto Long Numero intero lungo Float Numero reale "corto" (es 14.4) Double Numero reale "lungo" Tipi di dato elementari In C non esiste il tipo boolean: Si usa la convenzione che lo zero rappresenta il valore falso e l’uno il valore vero (tutti i valori diversi da zero rappresentano il vero)

  22. Input/Output /* Programma per il calcolo del fattoriale */ #include <stdio.h> main(){ int n,fat; printf(“Calcolo del fattoriale di:”); scanf(“%d”,&n); fat = 1; La lettura e la stampa di variabili richiede spesso la specifica del loro formato: le istruzioni printf, scanf hanno in genere più argomenti.

  23. Argomenti di printf e scanf printf ( "<stringa>" , <elenco argomenti> ); scanf ( "<stringa>" , <elenco argomenti> );

  24. La lettura e la stampa di variabili richiede spesso la specifica del loro formato: le istruzioni printf, scanf hanno in genere più argomenti. Input/Output /* Programma per il calcolo del fattoriale */ #include <stdio.h> main(){ int n,fat; printf(“Calcolo del fattoriale di:”); scanf(“%d”,&n); fat = 1; ---- printf(“Risultato = %d\n”,fat);

  25. Argomenti di printf e scanf • Il primo è una stringa di caratteri (da stampare per la printf) nella quale ogni % indica il punto in cui vanno sostituiti, nell’ordine, gli argomenti che seguono; • Il carattere che segue il simbolo % indica il tipo dell’argomento (d indica un valore intero); • Gli altri argomenti specificano le variabili di input/output (quelle di input sono precedute dal simbolo speciale &).

  26. scanf ( “ %d ” , &n ); Assegna alla variabile n l’argomento inserito Tipo di argomento da inserire Stampa nel punto indicato il valore contenuto dalla variabile fat Tipo di argomento da stampare printf ( “ Risultato = %d \n ” , fat );

  27. Sintassi da utilizzare Descrizione %d Dati di tipo int %lf %l %f Dati di tipo double Dati di tipo long Dati di tipo float %c Dati di tipo char %s Dati di tipo stringhe Argomenti di printf e scanf

  28. Assegnazione in C /* Programma per il calcolo del fattoriale */ #include <stdio.h> main(){ int n,fat; printf(“Calcolo del fattoriale di:”); scanf(“%d”,&n); fat = 1; L’istruzione di assegnazione si indica con il simbolo =

  29. Blocchi in C • while (n>1) { • fat = fat * n; • n = n-1; • } • printf(“Risultato = %d\n”,fat); • } Un’istruzione composta è delimitata da un blocco

  30. Operazioni con gli int (interi) Descrizione delle operazioni * moltiplicazione 4*5=20. Moltiplica i numeri inseriti + addizione 2+10=12 Somma i numeri inseriti - sottrazione 3-2=1 Sottrae i numeri inseriti / divisione 5/4=1 Divide e il risultato è senza resto % divisione con modulo 10%7=3 Divide e come risultato abbiamo il resto Operatori ed espressioni in C

  31. Operazioni con i double (reali) Tipo di espressione Descrizione delle operazioni Descrizione x++ Incremento della variabile x di 1 * moltiplicazione 4.5*2.0=9.0 Moltiplica i numeri inseriti y-- Decremento della variabile y di 1 + addizione 2.0+10.2=12.2 Somma i numeri inseriti a+=b e a*=b a=a+b e a=a*b - sottrazione 3.0-2.1=0.9 Sottrae i numeri inseriti / divisione 3.0/2.0=1.5 Operatori ed espressioni in C

  32. Operatori relazionali Descrizione x == y Testa se il valore di x è uguale a y x > y Testa se x è maggiore di y x >= y Testa se x è maggiore uguale di y x < y Testa se x è minore di y x <= y Testa se x è minore uguale di y x != y Testa se x è diverso da y Operatori ed espressioni in C

  33. Operatori logici Operatore condizionale Descrizione Descrizione && AND <op1>?<op2>:<op3> Vale <op2> se <op1> è vero altrimenti <op3> Es. (a>b)?a:b calcola il massimo tra a e b || OR ! NOT Operatori ed espressioni in C

  34. Istruzioni di controllo condizionali • Istruzione condizionale if if ( <espr> ) <istr1> else<istr2> Se <espr> è vera viene eseguito <istr1> altrimenti verrà eseguito <istr2> Es. if(a>b) printf(“il maggiore è %d”, a); else printf(“il maggiore è %d”, b);

  35. Istruzioni di controllo condizionali • Istruzione condizionale switch switch ( <espr> ) { case <costante1> : <istr1> [break;] case <costante2> : <istr2> [break;] …. default : <istr>; } Se <espr> vale <costante n> vera viene eseguito <istr n>; in tutti gli altri casi (caso di default) verrà eseguito <istr>. Per convenzione dopo l’istruzione che si vuole eseguire si usa il comando break per uscire dall’istruzione condizionale.

  36. Istruzioni di controllo condizionali Es. Vogliamo impostare il numero di giorni n di cui è fatto ogni mese: switch ( mese ) { case 2: n=28; break; case 4 : case 6: case 9 : case 11: n=30; break; default : n=31; }

  37. Istruzioni di controllo iterative • Istruzione while while ( <espr> ) <istr> oppure do<istr> while ( <espr> ) Fino a che <espr> è vera viene eseguito <istr>. Prima valuta espr e poi esegue istr Prima esegue istr poi valuta espr

  38. do { fat *= i; i--; } while ( i>1 ); while ( i>1 ) { fat *= i; i--; } Istruzioni di controllo iterative Es. Calcoliamo il fattoriale di un numero i:

  39. Istruzioni di controllo iterative • Istruzione for for ( <espr_init>; <espr_test>; <espr_incr> ) <istr> corrisponde a: <espr_init> while ( <espr_test> ) { <istr> <espr_incr>; } Es.for ( i=n; i>1; i-- ) fat *= i;

  40. Costanti simboliche in C #define<nome> <valore> Si definiscono facendo uso della direttiva define che va messa nell’intestazione del programma. Es. #define PIGRECO 3.14 #define N 100 #define TRUE 1 #define FALSE 0 main() { …. }

  41. Esempio di programma C Lettura ed analisi del problema: deduzione dei dati di input Costruzione di un procedimento risolutivo: algoritmo Traduzione delle istruzioni dell’algoritmo in linguaggio C

  42. Esempio di programma C Lettura ed analisi del problema: deduzione dei dati di input “Scrivere un programma C che calcoli le quattro operazioni sui numeri interi.” Input: aopb , in cui a e b sono due interi e op è una delle quattro operazioni [+,-,*,/] Oss. La divisione sui numeri interi emette anche il resto

  43. Esempio di programma C Costruzione di un procedimento risolutivo: algoritmo a,b op op = ? + - * / a+b a-b a*b a/b,a%b

  44. Esempio di programma C Traduzione delle istruzioni dell’algoritmo in linguaggio C Un programma C consta di tre parti fondamentali: Intestazione: spazio dedicato agli include per includere librerie Dichiarazioni : funzioni, costanti, … Blocco principale : il main() in cui elencare le istruzioni

  45. Esempio di programma C Traduzione delle istruzioni dell’algoritmo in linguaggio C /* Programma che calcola le quattro operazioni sui numeri interi */ #include <stdio.h> main () { int a,b; char op; printf(“Operazione su interi:”); scanf(“%d %c %d”, &a,&op,&b); printf(“Risultato:\t”);

  46. Esempio di programma C Traduzione delle istruzioni dell’algoritmo in linguaggio C /* Calcolo e stampa */ switch (op) { case ‘+’: printf(“%d”,a+b); break; case ‘-’: printf(“%d”,a-b); break; case ‘*’: printf(“%d”,a*b); break; case ‘/’: printf(“%d con resto di %d”,a/b,a%b); break; default: printf(“Operatore sconosciuto”); } }

  47. /* Programma che calcola le quattro operazioni sui numeri interi */ #include <stdio.h> main () { int a,b; char op; printf(“Operazione su interi:”); scanf(“%d %c %d”, &a,&op,&b); printf(“Risultato:\t”); /* Calcolo e stampa */ switch (op) { case ‘+’: printf(“%d”,a+b); break; case ‘-’: printf(“%d”,a-b); break; case ‘*’: printf(“%d”,a*b); break; case ‘/’: printf(“%d con resto di %d”,a/b,a%b); break; default: printf(“Operatore sconosciuto”); } }

  48. Funzioni in C Una funzione è un blocco di istruzioni, che ha parametri in ingresso (parametri formali) e restituisce un risultato. <tipo><Nome funzione> (lista parametri) { … blocco istruzioni … return<risultato> } Lista parametri: (<tipo> <nome>, <tipo> <nome>, …)

  49. int i,j,k; … i = Fatt(4); scanf(“%d”,&k); j = Fatt(K); Funzioni in C Es. intFatt(int n){ int ris; ris = 1; while (n>=1) { ris = ris*n; n--; } returnris; } Una funzione viene attivata mediante una chiamata nella quale vengono passati i parametri attuali che devono corrispondere in numero, ordine e tipo ai parametri formali.

  50. Funzioni in C • ATTENZIONE: • non è possibile nidificare funzioni; • intFatt(int n){ • intFatt2(int n2){ • non è possibile passare parametri per riferimento; • intFatt(int& n){ • non esistono procedure (solo funzioni) • Fatt(int n){

More Related