Il linguaggio C nasce nel 1972 nei laboratori Bell Laboratories AT&T americani, dagli autori Dennis e Ritchie. Come visto nelle scorse lezioni gli autori citati sono quelli che erano coinvolti nella implementazione sistema operativo UNIX.
Importante inoltre ricordare due date legate a tale linguaggio:
1986: Nascita del C++ sviluppato da Stroustrup.
1999: Standardizzazione del linguaggio C con la diffusione dell’ANSI C.
Problema: La somma di 2 numeri
Si vuole introdurre all’utilizzo alla programmazione il confronto di due linguaggi di programmazione il Pascal, generalmente utilizzato per le sue doti di “linguaggio didattico”, ed il Linguaggio C, uno dei principali linguaggi di sviluppo.
Il confronto è fatto al fine di mettere in luce similarità e differenze.
In Pascal un programma ha inizio con:
Begin Somma
…
End Somma
In C:
un programma è un insieme di funzioni. La funzione main( )
è quella che presente il programma e l’inizio/fine, ovvero il corpo del programma è identificato da apertura e chiusura di parentesi graffe:
{ /* INIZIO */
...
} /* FINE */
In Pascal i commenti sono racchiusi tra parentesi graffe:
{ dichiarazione delle variabili }
Mentre la dichiarazione delle variabili avvine con istanze del tipo:
var: a,b,c: reali
In C i commenti sono racchiusi da i delimitatori /* … */ e possono occupare anche più linee:
/* DICHIARAZIONE DELLE VARIABILI */
La dichiarazione delle variabili avviene con una istanza del tipo:
float a, b, A;
I tipi di dati base sono:
In C:
La fine di una istruzione è segnalata con il simbolo ‘;’
L’assegnazione si denota con il simbolo ‘=’
Due o più istruzioni possono trovarsi sulla stessa linea
a=5.; b=7.;
La variabile A è diversa da a. Ovvero c’è differenza tra lettere maiuscole e lettere minuscole, il linguaggio è case sensitive.
printf
:
Le operazioni di output possono essere eseguite mediante l’utilizzo della funzione printf
printf ("SOMMA = %f \n ", A);
il primo argomento delle funzione printf è dato dalla stringa racchiusa tra ” ”
“SOMMA = %f \n”
Dove sono presenti:
Il secondo argomento della funzione è dato da:
“A” che indica la variabile o l’espressione da stampare.
Printf formati di conversione:
specifica – argomento
%d – intero
%f - reale
%e - esponenziale (mantissa + esponente)
%c – carattere
%s - stringa di caratteri
Caratteri particolari (validi anche per altre funzioni):
New line (lf) ‘\n’
Carriage return (cr) ‘\r’
Backspace (bs) ‘\b’
Horizontal tab (tab) ‘\t’
Backslash (\) ‘\\
In C prima di richiamare un programma:
è necessario fornire una direttiva al preprocessore, nell’esempio, le operazioni di output possono
#include <stdio.h>
che ha come scopo quello di inserire delle funzioni di libreria per I/O. Nel nostro primo programma abbiamo visto printf
In generale l’istruzione (prima della funzione main()
):
#include "nomefile.h"
è una direttiva al preprocessore e consente di “inserire” in quel punto il contenuto del file nomefile.h
Questo dipo di file prende il nome di header file e può contenere:
Il preprocessore C è un programma che viene invocato dal compilatore ed effettua una elaborazione preliminare del codice sorgente.
Il preprocessore modifica il codice sorgente seguendone le specifiche direttive
# include
# DEFINE
# ….
Dopo questa prima elaborazione, il sorgente modificato viene successivamente passato al compilatore vero e proprio per la fase di traduzione in linguaggio oggetto ( .o ) e successivamente in linguaggio macchina (linking e generazione dell’eseguibile .exe, .bin, …).
Problema: Conversione da gradi Fharanait a Celsius
Si vuole sviluppare in programma per la conversione della scala di misura di due diversi standard di rilevazione della temperatura (Celsius/Fahrenheit).
L’obiettivo è quello di introdurre alle prime strutture di controllo. Nelle esempio mostreremo una struttura di iterazione, ovvero il ciclo for
.
Il costrutto for.
Le istruzioni che fanno parte del ciclo for sono racchiuse tra parentesi {…} (inizio e fine del for)
for(fahr=0; fahr<=300; fahr=fahr+20)
{
istruzioni
}
In particolare:
Le condizioni devono essere separate da ‘;’ e racchiuse in parentesi tonde.
Problema: Conversione da gradi Fharanait a Celsius
Si vuole sviluppare in programma per la conversione tra due diverse scale di misura della temperatura.
L’obiettivo è quello di intridurre alle prime strutture di controllo. Nelle esempio mostreremo una struttura di iterazione, ovvero il ciclo while.
Il costrutto while
Le istruzioni che fanno parte del ciclo while sono racchiuse tra parentesi {…}
(inizio e fine del while)
while (fahr <= 300)
{
istruzioni
}
fahr<=300 condizione di controllo del while
(se è vera le istruzioni del ciclo sono eseguite, altrimenti il ciclo termina).
Deve essere sempre racchiusa in parentesi tonde.
Problema: Conversione da gradi Fahrenheit a Celsius
Mostreremo un codice che risulta essere un variante di quelli già proposti.
Nota:
Le istruzioni
# define LOWER 0
# define UPPER 300
# define STEP 20
sono direttive al preprocessore e consentono di “definire” costanti simboliche (nomi simbolici). Bisogna osservare che le costanti simboliche non sono variabili.
Problema: Trovare il massimo tra due numeri
Si vuole sviluppare in programma per il confronto tra due numeri reali. Nelle esempio mostreremo l’utilizzo delle funzione scanf
per leggere un dato dallo standard input
Nell’esempio abbiamo riportato il costrutto condizionale:
if (a > b )
{ istruzioni }
else
{ istruzioni }
Le istruzioni che fanno parte del costrutto if-else
sono racchiuse tra parentesi {…}
a > b è la condizione di controllo dell’ if-else.
Se essa è vera, sono eseguite le istruzioni della parte if, altrimenti quelle della parte else, inoltre deve essere sempre racchiusa in parentesi tonde.
Array.
In C è possibile fare uso di variabili strutturate, ovvero di collezioni di variabili di un certo tipo di base. Tale collezione viene detta array. L’array monodimensionale o bidimensionale è in analogia al concetto matematico di vettore o di matrice.
Una dichiarazione del tipo:
float b[8];
rappresenta un array monodimensionale (vettore) che contiene 8 elementi di tipo reale.
Mentre:
float a[8][8];
Rappresenta un array bidimensionale (matrice) di 8 x 8 elementi di tipo reale.
N.B. In C gli indici di un array partono per default da 0.
Problema: Somma di due vettori
Si vuole sviluppare in programma per il confronto la somma di due vettore. Nel programma si utilizza il concetto di array monodimensionale.
1. Prolusione
2. Sistemi Operativi – parte prima
3. Sistemi Operativi – parte seconda
6. Il linguaggio C – parte prima
8. Il linguaggio C – funzioni e puntatori
10. Il linguaggio C – parte terza
11. La documentazione del software
12. Dati strutturati
13. Esercizi sui dati strutturati
14. Approfondimenti di C, Stringhe e file
15. Esercizi su stringhe e file
16. La ricorsione
17. Il linguaggio c++ parte prima
18. Il linguaggio C++ - parte seconda
19. Strutture dati di tipo astratto