• Non ci sono risultati.

Il linguaggio C

N/A
N/A
Protected

Academic year: 2021

Condividi "Il linguaggio C"

Copied!
22
0
0

Testo completo

(1)

1 Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio

Il linguaggio C

- Sviluppato da Ritchie sulla base di due linguaggi di programmazione esistenti: BCPL e B

- Nel 1990 è stato standardizzato da ANSI (American National Standards Institute). Chiamato C89.

- Nel 1999 è stato aggiornato con l'introduzione di alcune caratteristiche innovative. Chiamato C99.

- Usato per sviluppare ed implementare il sistema operativo UNIX

- Il code del linguaggio è indipendente dalla piattaforma hardware (portabilità) - Esistenza di alcuni ‘dialetti’

Alcune parole chiavi del linguaggio C

(2)

3 Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio

Linguaggio C

Tipi definiti dal linguaggio

… per ora solo i tipi atomici INTERO int

costituito da numeri interi compresi tra -2(N-1) a 2(N-1) - 1 dove N è il numero di bit usato per rappresentare un numero intero (valori tipici sono 16 e 32).

Oltre a int si hanno i tipi interi short int e long int per rappresentare numeri interi con un numero di bit minore o maggiore di N (tipicamente short int usati 16 bit mentre per long int 32 bit, 16 o 32 bit per int)

Principali operatori (interni) del tipo somma +

sottrazione - moltiplicazione *

divisione (intera) / (il risultato è un numero intero - con troncamento) resto della divisione %

Linguaggio C

231 - 1 -231

4 int

long int short int

Tipo Tipo

4 2

Dimensione Dimensione

(byte) (byte)

215 - 1 +32767 -215

-32768

-231 Valore Valore minimo minimo

231 - 1 Valore Valore massimo massimo

… riepilogando ...

(3)

5 Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio

Possibile aggiungere il qualificatore unsigned alla definizione di tipo, che consente alla variabile di contenere solamente numeri positivi

+232 - 1 0

4 unsigned int

unsigned long int unsigned short int

Tipo

4 2

Dimensione (byte)

65535 0

0

Valore minimo

+232 - 1 Valore massimo

Linguaggio C

REALE float

costituito dall sottinsieme dei numeri reali rappresentabile dall’elaboratore.

Si hanno anche i tipi double e long double per rappresentazioni in doppia precisione e maggiori.

Principali operatori (interni) del tipo somma +

sottrazione - moltiplicazione * divisione (intera) /

Tipicamente per il tipo float sono usati 4 byte con una precisione di 6 cifre decimali, per il double 8 byte e 10 cifre decimali

Linguaggio C

±1.710+308

±2.210-308 8

double

precisione doppia float

precisione singola Tipo (IEEE 754)

4

Dimensione (byte)

±3.410+38

± 1.17.210-8 Valore minimo

Valore massimo

(4)

7 Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio

Esistono due notazioni per scrivere/visualizzare numeri reali

<parte intera> < punto> <parte decimale>

4.34

notazione esponenziale

<parte intera> <e> o <E> <esponente con segno>

-3E3 rappresenta -310

3

cioè –3000 5e-2 rappresenta 510

-2

cioè 0.05

Linguaggio C

CARATTERE char

costituito dall’insieme dei caratteri di stampa.

In realtà, in C è assunto come tipo carattere il sottinsieme dei numeri interi compresi tra 0 e 255, ovvero dai valori numerici del codice ASCII con cui sono codificati i caratteri.

i valori di tipo char sono racchiusi tra apici, es.:

'A' 'b' ';' '&'

caratteri non stampabili (caratteri speciali per il controllo di dispositivi) vengono indicati con la sequenza (sequenza di escape):

\ <carattere convenzionale>

Es.:

'\n' indica il ritorno a nuova linea (a capo) '\t' tabulazione

'\’’ ' doppio apice

Linguaggio C

(5)

9 Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio

Operazioni su char

Ad ogni carattere corrisponde una rappresentazione numerica univoca I caratteri sono totalmente ordinati

Possibili operazioni:

restituire il carattere che segue/precede;

operazioni di uguaglianza/disuguaglianza;

chiedersi se un carattere è maggiore/minore di un altro

Linguaggio C

LOGICO non esiste in C

E’ assunto in sua vece il tipo intero, assumendo il valore 0 per falso e il valore 1(o più in generale un valore diverso da 0) per vero.

Quindi, se una operazione di relazione non è verificata da come risultato il valore 0; se la relazione è verificata il risultato è un valore diverso da 0 (non necessariamente 1).

Gli operatori logici sono:

NOT ! OR ||

AND &&

Linguaggio C

(6)

11 Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio

Nomi degli identificatori (variabili)‏

devono iniziare con un carattere alfabetico (una lettera, il

carattere ‘_’ è considerato una lettera) seguito da altre lettere o cifre;

non possono contenere il carattere <spazio> né altri caratteri.

E’ fatta distinzione tra maiuscolo e minuscolo, per cui il nome ris è diverso da Ris o RIS (ovvero ris, Ris e RIS sono tre variabili diverse).

I nomi non possono essere uguali a parole chiavi del linguaggio Linguaggio C

Dichiarazione dei Nomi degli identificatori (variabili)‏

Deve essere indicato il tipo di ogni variabile prima di un utilizzo della stessa

<nome tipo> <lista variabili>;

Es.

float area_quadrato, lato_quadrato;

int nro_studenti, ore_lezioni;

char sigla;

double radice_equazione;

Quando viene dichiarata, una variabile può essere inizializzata con un valore

Es. int nro_studenti, ore_lezioni = 20;

Linguaggio C

(7)

13 Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio

Operatori Aritmetici

somma + sottrazione - moltiplicazione * divisione (intera) / resto della divisione % Relazionali

uguaglianza = = diverso !=

maggiore >

minore <

maggiore o uguale >=

minore o uguale <=

Alcune funzioni Aritmetiche

valore assoluto - tipo intero - abs(int n) quoto e resto divisione intera div(int m, int n) Trigonometriche

seno sin(x) coseno cos(x) tangente tan(x)

Esponenziali e logaritmiche e elevato alla x exp(x) log. in base e di x log(x) log. Base 10 di x log10(x) Altre

elevazione a potenza pow(x, y) radice quadrata sqrt(x)

Linguaggio C

Tipi Atomici

int - short int - long int - unsigned float - double - long double char

Struttura di un programma in linguaggio C

Un programma in linguaggio C è tipicamente strutturato nel seguente modo:

[<direttive di inclusione>]

main ( ) {

<sezione dichiarativa>

<corpo del programma>

}

(8)

15 Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio

I commenti in C

• preceduti da // (se il commento è scritto su una sola riga)

• oppure racchiusi tra /* */ (se il commento è scritto su più righe)

// questo è un commento (su una sola linea) [<direttive di inclusione>]

main ( ) {

/* questo è un commento disposto su più linee */

<sezione dichiarativa>

// commento su unica linea <corpo del programma>

}

... Ovviamente i commenti non sono presi in considerazione dal compilatore ...

Esempio:

Operazioni di ingresso e uscita

Un programma C comunica con l’esterno tramite uno o più flussi (stream).

Esistono:

• un flusso standard di ingresso, per le operazioni di ingresso ed associato alla tastiera,

• un flusso standard di uscita, per le operazioni di uscita ed associato al monitor.

Ai flussi sono associate delle funzioni predefinite che si trovano in una specifica libreria di ingresso/uscita chiamata <stdio.h>

La libreria <stdio.h> va indicata nelle direttive di inclusione

Linguaggio C

(9)

17 Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio

Operazioni di uscita

printf(“<formato>‏”‏,‏<argomento1>,..., <argomentoN>);

<formato > : stringa che deve essere visualizzata, comprensiva dei riferimenti ai formati relativi ai tipi delle variabili i cui valori saranno visualizzati

<argomenti> : variabili i cui valori devono essere visualizzati

Alcuni formati:

%d : interi decimale %f : float %c : carattere

%o : interi ottale %e : float esponenziale %s : stringa

Linguaggio C

Operazioni di uscita

Alcuni caratteri per il controllo della stampa

\n indica il ritorno a nuova linea (a capo)

\t tabulazione

\’’ doppio apice

Linguaggio C

Es:

printf (“%d”, x); visualizza il valore di x con formato intero printf (“%d %d %f”, x, y, z);

visualizza i valori di x e y con formato intero, quello di z con formato reale

la corrispondenza tra formato e argomento è in base alla posizione

printf (“ ERRORE !”); visualizza la stringa ERRORE ! Sul video

(10)

19 Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio

….‏Esempi‏….

Operazioni di uscita Esempio:

…. si vuole visualizzare il messaggio:

Imponibile = …. Al IVA = ….. Importo IVA = ……

dove al posto dei …. vanno visualizzati i valori delle 3 variabili IMP, ALIVA, IMPIVA

… l’istruzione avrà il seguente formato:

printf ("Imponibile = %f Al IVA = %d Importo IVA = %f \n”, IMP, ALIVA, IMPIVA);

Ad ogni simbolo di formato sarà sostituito il valore della corrispondente variabile (la corrispondenza è in base all’ordine della posizione)

….‏Esempi….

Operazioni di uscita Esempio:

Se: IMP = 32.4 ALIVA = 22 IMPIVA = 6.48

printf ("Imponibile = %f Al IVA = %d Importo IVA = %f \n”, IMP, ALIVA, IMPIVA);

…. visualizza il seguente messaggio:

Imponibile = 32.4 Al IVA = 22 Importo IVA = 6.48

(11)

21 Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio

Un programma esempio

#include<stdio.h>

main ( )

/* programma esempio uso printf()

calcola il quadrato e la metà di un numero*/

{ int numero = 7;

printf (" Numero = %d", numero);

printf ("\n\n\n");

printf(" Quadrato di %d = %d \n ", numero, numero*numero);

printf (" Un mezzo di %d = %d \n",numero, numero/2);

}

Direttiva di inclusione per la libreria stdio, input/output standard

Un programma esempio

(12)

23 Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio

Operazioni di ingresso:

scanf‏(“<formato1> ... <formatoN>”‏,‏&<argomento1>,..., &<argomentoN>);

“<formato i>‏”‏:‏stringa indicante il formato in cui sarà inserito il valore dell’ argomento i-esimo

&< argomento1>, ..., &<argomentoN>: nomi di variabili, preceduti dal carattere &, cui saranno assegnati i valori inseriti

Alcuni formati:

%d : interi decimale %f : float %c : carattere

%o : interi ottale %e : float esponenziale %s : stringa

Linguaggio C

Esempi:

scanf("%d", &x) legge il valore di x con formato intero scanf(“%f‏%f”,‏&base, &altezza)

legge i valori di base ed altezza con formato reale

Un semplice programma esempio

#include<stdio.h>

main ( )

/* programma esempio scanf(): Legge il valore di un numero e ne calcola il cubo e il triplo*/

{int numero;

printf (" Immettere il valore di un numero intero: ");

scanf("%d", &numero);

printf ("\n\n\n");

printf (" Numero = %d", numero);

printf("Cubo di %d = %d \n", numero, numero*numero*numero);

printf (" Triplo di %d = %d \n",numero, numero*3);

}

Direttiva di inclusione per la libreria stdio, input/output standard

(13)

25 Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio

Operazioni di calcolo e assegnazione

<identificatore> = <espressione>;

<espressione> può essere semplice come una singola costante o può essere una combinazione di variabili, operatori, …

Semantica:

calcola il valore di un’espressione (lato destro, rispetto a segno =) ed assegnalo ad una variabile (lato sinistro)

L’eventuale valore memorizzato precedentemente nella variabile viene sostituito dal nuovo valore

Es.

A = 26;

perimetro_quadrato = lato_quadrato * 4;

Linguaggio C

#include<stdio.h>

main ( )

/* questo programma calcola il doppio di un numero letto in input*/

{

int numero, Doppio;

printf(“immetti numero intero\n”);

scanf (“%d” , &numero);

Doppio = numero * 2;

printf (“Numero=%d doppio=%d\n”, numero, Doppio);

}

LDP

Intestazione

C

Commento

Commento

Sezione dichiarativa

Program primo;

// legge in input il valore di una variabile //di tipo intero e ne visualizza il suo // doppio

INT numero, Doppio;

begin

write‏(‘Immetti numero intero:’);‏

read (“%d” numero);

Doppio = numero * 2;

write‏(‘Numero = ‘, “%d”‏numero,

‘doppio= ‘, “%d”‏Doppio);

end.

Corpo del programma

(14)

27 Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio

#include<stdio.h>

main ( )

/* questo programma calcola l’area di un rettangolo */

{

float base, altezza, area;

printf (“immetti base \n”);

scanf (“%f” , &base);

printf(“immetti altezza \n “);

scanf(“%f” , &altezza);

area = base * altezza;

printf (“Area= %f \n”,area);

}

LDP

Intestazione

C

Commento

Commento

Sezione dichiarativa

Program area_rettangolo;

// calcola l’area di un rettangolo FLOAT base, altezza, area;

begin

write (‘immetti valore della base’);

read (“%f” base);

write (‘immetti valore della altezza ‘);

read (“%f” altezza);

area = base * altezza;

write‏(‘Area= ‘,‏“%f”‏area);

end.

Corpo del programma

Un semplice programma esempio

#include<stdio.h>

main ( )

/* questo programma calcola l’area di un rettangolo */

{

float base, altezza, area;

printf ("immetti base \n");

scanf ("%f" , &base);

printf("immetti altezza \n ");

scanf("%f" , &altezza);

area = base * altezza;

printf ("Area= %f \n",area);

}

Direttiva di inclusione per la libreria stdio, input/output standard

(15)

29 Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio

Operatori di incremento e decremento

Per incrementare di 1 il valore di una variabile, ad es:

a = a + 1;

in C è possibile usare l’ operatore di incremento ++

che incrementa di 1 la variabile a cui è applicato, ovvero:

a++ ; è equivalente alla istruzione a = a + 1;

Analogamente l’operatore di decremento -- decrementa di 1 la variabile a cui è applicato:

a-- ; è equivalente alla istruzione a = a - 1;

Linguaggio C

(16)

31 Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio

Operatori di incremento e decremento Forma prefissa e postfissa

postfissa

a++ la variabile è incrementata dopo essere utilizzata a-- la variabile è decrementata dopo essere utilizzata

prefissa

++a la variabile è incrementata prima di essere utilizzata --a la variabile è decrementata prima di essere utilizzata

Attenzione ! Gli effetti di forma pre- o post- fissa possono essere differenti

Linguaggio C

Le espressioni:

y = a++ ed y = ++a producono risultati diversi per y Esempi:

Linguaggio C

y=a++

equivale alla sequenza di istruzioni y=a;

a=a+1;

se a=3 dopo l’esecuzione di y=a++

si ha: y=3 a=4

y= ++ a

equivale alla sequenza di istruzioni a=a+1;

y=a;

se a=3 dopo l’esecuzione di y=++a si ha: a=4 y=4

(17)

33 Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio

Esempi:

Posto a=4 ed i=6

Linguaggio C

k = ++a * i; equivale a:

a = a + 1;

k = a * i;

ovvero a = 5; k = 30;

k = a++ * i; equivale a:

k = a * i;

a = a + 1;

ovvero: k= 24; a = 5;

#include<stdio.h>

main ( )

/* programma esempio operatore incremento*/

{int numero, y, k, i=6;

printf (" Immettere il valore di un numero intero:" );

scanf("%d", &numero);

printf ("\n\n\n");

// Forma Post-fissa y = numero++ ;

printf (" Postfissa: y=%d - Numero=%d\n", y, numero);

k = numero++ * i;

printf (" Postfissa: k=%d \n", k);

printf (" Postfissa: Numero = %d \n\n", numero);

// Forma Pre-fissa y = ++numero ;

printf (" Prefissa: y=%d - Numero=%d\n", y, numero );

k = ++numero * i;

printf (" Prefissa: k=%d \n", k);

printf (" Prefissa: Numero = %d \n", numero);

}

Esempio

(18)

35 Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio

scanf (“%d”, numero);

numero=4 y=numero++;

y=4

numero = 4+1 = 5 k = numero++ * i;

k = 5 * 6 = 30 numero = 5 + 1 = 6

y=++numero;

numero = 6 + 1 = 7 y= 7

k =++numero * i;

numero = 7 + 1 = 8 k = 8 * 6 = 48

(19)

37 Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio

Altri operatori di assegnazione Forme di assegnazione del tipo

<identificatore> = <identificatore> <op> <espressione>;

Es. x = x - 5 * k;

a = a + p * (r + j);

possono essere scritte nella forma

<identificatore> <op> = <espressione>;

Es. x - = 5 * k;

a + = p * (r + j);

Linguaggio C

C - Strutture di controllo

Sequenza o blocco

{

<istruzioni>

}

{ printf("Immetti un numero intero: ");

scanf("%d", &i);

a = i * 4 + b - c;

printf("%d", a);

} Esempio:

(20)

39 Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio

C - Strutture di controllo

Selezione

if (<condizione>)

<istruzione>;

se <condizione> è vera è eseguita <istruzione>

dove <istruzione> è formata da 1 sola istruzione altra forma:

if (<condizione>) {

<istruzioni>;

}

se <condizione> è vera sono eseguite le <istruzioni>

dove <istruzioni> è più di 1 istruzione

N.B. < condizione> è un’espressione di tipo intero (in C non esiste il tipo logico) ed essa è falsa se ha un valore uguale a zero

………

if (i<100) {

a = b - i;

printf(”%f”, a);

} ………

C - Strutture di controllo

Esempi : Selezione

………

if (a>100)

printf(”%f”, a);

………

(21)

41 Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio

#include<stdio.h>

main ( )

/* questo programma calcola l’area di un rettangolo */

{

float base, altezza, area;

printf ("immetti base \n");

scanf ("%f" , &base);

printf("immetti altezza \n");

scanf("%f" , &altezza);

if ((base > 0) && (altezza > 0)) { area = base * altezza;

printf("Area= %f \n", area);

} }

Un semplice programma esempio

#include<stdio.h>

main ( )

/* questo programma calcola l’area di un rettangolo */

{

float base, altezza, area;

printf ("immetti base \n");

scanf ("%f" , &base);

printf("immetti altezza \n");

scanf("%f" , &altezza);

if ((base > 0) && (altezza > 0)) { area = base * altezza;

printf("Area= %f \n", area);

}

if ((base <= 0) || (altezza <= 0))

printf("Errore: base e/o altezza non maggiori di zero \n");

}

Un semplice programma esempio

(22)

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 43

Programma esempio in C

#include<stdio.h>

main ( )

{ // calcola il volume di un parallelepipedo float LBase, ABase, H, Area_Base, Volume;

printf ("immetti valore della lunghezza di base \n");

scanf ("%f" , &LBase);

printf("immetti valore altezza di base \n");

scanf("%f" , &ABase);

printf("immetti valore altezza parallelepipedo\n");

scanf("%f" , &H);

Area_Base = LBase* ABase;

Volume=Area_Base*H;

printf ("Volume= %f \n",Volume);

}

... Modificare il programma C del calcolo del volume del parallelepipedo per verificare il rispetto delle precondizioni ...

#include<stdio.h>

main ( )

{ // programma per il calcolo del volume di un parallelepipedo float LBase, ABase, H, Area_Base, Volume;

printf ("immetti valore della lunghezza di base \n");

scanf ("%f" , &LBase);

printf("immetti valore altezza di base \n");

scanf("%f" , &ABase);

printf("immetti valore altezza parallelepipedo\n");

scanf("%f" , &H);

if ((LBase>0)&&(ABase>0)&&(H>0)) {Area_Base = LBase* ABase;

Volume=Area_Base*H;

printf ("Volume = %f \n",Volume);

}

if ((LBase<=0)||(ABase<=0)||(H<=0))

printf("\nErrore:almeno una dimensione non maggiore di zero\n");

Programma esempio in C

... il programma C del calcolo del volume del parallelepipedo modificato per verificare il rispetto delle precondizioni ...

Riferimenti

Documenti correlati

PER ADDIZIONE ALGEBRICA ( O SOMMA ALGEBRICA) SI INTENDE L’OPERAZIONE CHE PRENDE IN CONSIDERAZIONE SIA LA SOMMA CHE LA DIFFERENZA. NB: OGNI NUMERO INTERO PUO’ ESSERE

Se la condizione è true, viene eseguita l’istruzione di stampa e il programma prosegue con la prossima istruzione. Se la condizione è false, l’istruzione di stampa è ignorata e

[r]

In realtà, in C è assunto come tipo carattere il sottinsieme dei numeri interi compresi tra 0 e 255, ovvero dai valori numerici del codice ASCII con cui sono codificati i

L’insieme dei numeri naturali è un sottoinsieme di quello dei numeri interi, cioè: C I numeri razionali sono numeri scritti sotto forma di frazione, oppure numeri

Manteniamo la regola che i numeri positivi iniziano con 0 e quelli negativi con 1 e proviamo ad usare il complemento a 1: ogni numero negativo si ottiene dal

Se si sta usando Windows si può ottenere ogni carattere ASCII tenendo premuto il tasto Alt e digitando il codice decimale corrispondente col tastierino numerico (se il

Nelle attività introduttive abbiamo incontrato alcune situazioni nelle quali i numeri naturali non sono più sufficienti. Essi formano l’insieme dei numeri interi relativi