• Non ci sono risultati.

Elementi di Informatica

N/A
N/A
Protected

Academic year: 2021

Condividi "Elementi di Informatica"

Copied!
19
0
0

Testo completo

(1)

1

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>

}

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>

/* altro commento */

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

Esempio:

(2)

3

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

2

31

- 1 -2

31

4 int

long int short int

Tipo

4 2

Dimensione

(byte)

+32767 -32768

-2

31

Valore minimo

2

31

- 1 Valore massimo

… riepilogando ...

(3)

5

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) /

Linguaggio C

float

precisione singola Tipo

4

Dimensione (byte)

+3.2⋅⋅10±±38 -3.2⋅⋅10±±38

Valore minimo

Valore massimo

(4)

7

Esistono due notazioni per scrivere 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 charsono racchiusi tra apici, es.:

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

• caratteri non stampabili 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

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 è 1 (o un valore diverso da 0).

Gli operatori logici sono:

NOT !

OR ||

AND &&

Linguaggio C

(6)

11

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 parele chiavi del linguaggio

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

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

(7)

13

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

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

(8)

15

Operatori di incremento e decremento

operatore di incremento ++ incrementa di 1 la variabile a è cui applicato operatore di decremento -- decrementa di 1 la variabile a cui è applicato Es.

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

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

Forma prefissa e postfissa

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

a-- la variabile è decrementata dopo essere utilizzata

Linguaggio C

Es.

y=a++ equivale alle istruzioni y=a; seguita da a=a+1;

se a=3 dopo l’esecuzione di y=a++ si ha: y=3 a=4 y=++a equivale alle istruzioni a=a+1; seguita da y=a

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

Posto a=4 ed i=6

k = a++ * i; equivale a: k = a * i; a = a + 1; ovvero k= 24; a = 5;

k = ++a * i; equivale a: a = a + 1; k = a * i; ovvero a = 5; k = 30;

Linguaggio C

(9)

17

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>

Linguaggio C

Operazioni di ingresso:

scanf (<formato>, <argomenti>);

<formato> : stringa indicante il formato in cui saranno inseriti i valori

< argomenti>: 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

Es:

scanf("%d", &x)

legge il valore di x con formato intero

Linguaggio C

(10)

19

Operazioni di uscita

printf (<formato>, <argomenti>);

<formato> : stringa che deve essere visualizzata, comprensiva dei riferimenti ai tipi di dati contenuti nelle variabili

<argomenti>:variabili contenenti i dati da visualizzare Alcuni formati:

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

%o : interi ottale %e : float esponenziale %s : stringa Alcuni caratteri per il controllo della stampa

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

\t tabulazione

\’’ doppio apice 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

Linguaggio C

…. Osservazioni ….

Operazioni di uscita Esempio:

…. si vuole visualizzare il messaggio:

Imponibile = XXXX Al IVA = YYY Importo IVA = ZZZZ

dove XXXX , YYY , ZZZZ sono 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)

(11)

21

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:

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;

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

(12)

23

C - Strutture di controllo

Selezione

if (<condizione>) <istruzione>;

se <condizione> è vera è eseguita <istruzione> (è 1 sola istruzione)

altra forma:

if (<condizione>) {

<istruzioni>;

}

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

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

………

if (i<100) {

a = b - i;

printf(”%f”, a);

} ………

C - Strutture di controllo

Esempio :

Selezione

(13)

25

C - Strutture di controllo

Selezione

if (<condizione>) <istruzione1>;

else <istruzione2>;

se <condizione> è vera è eseguita <istruzione1> (è 1 sola istruzione) altrimenti, se <condizione> è falsa, è eseguita <istruzione2>

if (<condizione>) {

<istruzioni1>;

} else

{

<istruzioni2>;

}

se <condizione> è vera sono eseguite le <istruzioni1> altrimenti se,

<condizione> è falsa, sono eseguite le <istruzioni2>

C - Strutture di controllo

Esempio : Selezione

………

if (numero > 1000) {

a = b * numero;

printf(”%f”, a);

} else

c = b - numero;

………

(14)

27

#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);

} else

printf(“Errore: base o altezza = <0 \n”);

}

Un semplice programma esempio

switch (<espressione>) {

case c1:

S1;

break;

case c2:

S2;

break;

case cN:

Sn;

break;

default: Sdefault; break;

}

Selezione

semantica

Valuta <espressione>

se ha valore c1 esegui S1; esci dalla struttura switch (break);

se ha valore c2 esegui S2; esci dalla struttura switch (break);

se ha valore cN esegui Sn; esci dalla struttura switch (break);

altrimenti (se il valore di espressione è diverso da c1 ,..., cN ) esegui Sdefault; esci dalla struttura switch (break);

…. (è opzionale)

N.B. :break provoca l’uscita immediata dalla struttura switch Selezione a più vie:

(15)

29

#include<stdio.h>

main ( )

/* questo programma stampa da 1 a 3 stelle o un ! */

{

scanf("%d", &num);

switch (num) {

case 1: printf("*\n"); break;

case 2: printf("**\n"); break;

case 3: printf("***\n"); break;

default: printf("!\n"); break;

} }

Selezione: switch

Esempio: stampa da 1 a 3 stelle in base al numero (compreso tra 1 e 3) immesso , altrimenti un !

C - Strutture di controllo

while (<condizione>)

<istruzione>;

while (<condizione>) {

<istruzioni>;

}

do

<istruzione>;

while <condizione>;

do {

<istruzioni>;

}

while <condizione>;

Cicli iterativi

<Istruzione/i> sarà eseguito tante volte fintantoché <condizione> risulta

vera

(16)

31

#include <stdio.h>

main () {

int Num;

printf( "immetti un numero \n”);

scanf(“%d” , &Num);

while (Num<=100) Num=Num+10;

printf ( ”Numero= %d \n”, Num);

}

Esempio Ciclo while

#include <stdio.h>

main () {

int Num;

printf( "immetti un numero \n”);

scanf(“%d” , &Num);

do

Num=Num+10;

while (Num <=100);

printf ( ”Numero= %d \n”, Num);

}

Esempio Ciclo do … while

(17)

33

C - Strutture di controllo

Ciclo ripetitivo (a conteggio)

for (<espressione1>; <condizione>; <espressione2>)

<istruzione>;

for (<espressione1>; <condizione>; <espressione2>) {

<istruzioni>;

}

<espressione1>: è l’espressione usata per inizializzare la variabile di controllo del ciclo

<condizione>: è l’espressione logica per verificare la terminazione del ciclo

<espressione2>: è l’espressione usata per determinare il passo di incremento della variabile di controllo

Es:

for (i=1; i<100; i++) printf(“%d “, i);

#include <stdio.h>

main () {

int Num;

printf( "immetti un numero \n”);

scanf(“%d” , &Num);

for (i=1;i<=10;i++)

printf ( “%d \n”, Num*i);

}

Esempio Ciclo for

(18)

35

Operazioni di ingresso:

scanf (<formato>, <argomenti>);

<formato> : stringa indicante il formato in cui saranno inseriti i valori

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

supponiamo di avere il seguente codice:

scanf("%c", &B);

…………

do

{printf ("immetti un carattere della sequenza \n");

scanf("%c", &C);

………

}

while (C!='0');

… possiamo avere qualche problema ….

…. Osservazioni ….

… In esecuzione …

immetti un carattere della sequenza immetti un carattere della sequenza

…. il problema è dovuto al trattamento del <return> ….

…. modo per risolverlo ….

scanf("%c", &B);

…………

do

{printf ("immetti un carattere della sequenza \n");

scanf(”\n%c", &C);

………

}

while (C!='0');

…. Osservazioni ….

(19)

37

#include <stdio.h>

main () {

// trova e conta carattere dato in input in sequenza caratteri int Volte;

char C, Cerca;

do

{ printf("immetti il carettere da cercare \n");

scanf("%c", &Cerca);

}

while (Cerca=='0');

Volte=0;

do

{ printf ( "immetti un carattere della sequenza \n");

scanf("\n%c", &C);

if (C==Cerca) Volte=Volte+1;

}

while (C!='0');

printf ("Carattere %c presente %d volte \n", Cerca, Volte);

}

Esempio

Riferimenti

Documenti correlati

[r]

Una funzione si dice discontinua se esiste almeno un punto del suo dominio dove la funzione non ` e continua.. Tipiche funzioni discontinue sono le funzioni che presentano dei

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

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