Anteprima
Vedrai una selezione di 18 pagine su 85
Laboratorio fondamenti di informatica (Programmazione C) Pag. 1 Laboratorio fondamenti di informatica (Programmazione C) Pag. 2
Anteprima di 18 pagg. su 85.
Scarica il documento per vederlo tutto.
Laboratorio fondamenti di informatica (Programmazione C) Pag. 6
Anteprima di 18 pagg. su 85.
Scarica il documento per vederlo tutto.
Laboratorio fondamenti di informatica (Programmazione C) Pag. 11
Anteprima di 18 pagg. su 85.
Scarica il documento per vederlo tutto.
Laboratorio fondamenti di informatica (Programmazione C) Pag. 16
Anteprima di 18 pagg. su 85.
Scarica il documento per vederlo tutto.
Laboratorio fondamenti di informatica (Programmazione C) Pag. 21
Anteprima di 18 pagg. su 85.
Scarica il documento per vederlo tutto.
Laboratorio fondamenti di informatica (Programmazione C) Pag. 26
Anteprima di 18 pagg. su 85.
Scarica il documento per vederlo tutto.
Laboratorio fondamenti di informatica (Programmazione C) Pag. 31
Anteprima di 18 pagg. su 85.
Scarica il documento per vederlo tutto.
Laboratorio fondamenti di informatica (Programmazione C) Pag. 36
Anteprima di 18 pagg. su 85.
Scarica il documento per vederlo tutto.
Laboratorio fondamenti di informatica (Programmazione C) Pag. 41
Anteprima di 18 pagg. su 85.
Scarica il documento per vederlo tutto.
Laboratorio fondamenti di informatica (Programmazione C) Pag. 46
Anteprima di 18 pagg. su 85.
Scarica il documento per vederlo tutto.
Laboratorio fondamenti di informatica (Programmazione C) Pag. 51
Anteprima di 18 pagg. su 85.
Scarica il documento per vederlo tutto.
Laboratorio fondamenti di informatica (Programmazione C) Pag. 56
Anteprima di 18 pagg. su 85.
Scarica il documento per vederlo tutto.
Laboratorio fondamenti di informatica (Programmazione C) Pag. 61
Anteprima di 18 pagg. su 85.
Scarica il documento per vederlo tutto.
Laboratorio fondamenti di informatica (Programmazione C) Pag. 66
Anteprima di 18 pagg. su 85.
Scarica il documento per vederlo tutto.
Laboratorio fondamenti di informatica (Programmazione C) Pag. 71
Anteprima di 18 pagg. su 85.
Scarica il documento per vederlo tutto.
Laboratorio fondamenti di informatica (Programmazione C) Pag. 76
Anteprima di 18 pagg. su 85.
Scarica il documento per vederlo tutto.
Laboratorio fondamenti di informatica (Programmazione C) Pag. 81
1 su 85
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

GLI OPERATORI DI CONFRONTO TIPI INTERI

uguale == esempio: espr1 == espr2 → vale 1 se espr1 è uguale a espr2, altrimenti 0

diverso != esempio: espr1 != espr2 → vale 1 se espr1 è diverso da espr2, altrimenti 0

• nel caso di tipi diversi valgono le regole di promozione del casting

• il risultato dell'espressione è un valore intero: 1 se il confronto risulta vero e 0 se il confronto è falso

un'operazione che

OPERATORE CAST: ( ) Sintasi (tipo) espr → converte il tipo di espr in tipo ed e'

converte il valore di un'espressione in un valore di tipo diverso

esempio:

int a=11, b=2;

double r = a/(double)b; → il cast qui fa che l'operazione verra svolta tra numeri in virgola

mobile siccome ho il double invece che tra interi

uguagle e diverso esempi:

if (conteggio == 10) { /* istruzioni */ } → il blocco di istruzioni viene eseguito se il valore della variabile conteggio vale 10

if (conteggio != 100) { /* istruzioni */ }→

il blocco di istruzioni viene eseguito se il valore della variabile conteggio è diverso da

100

int value = index == 10; → assegnare i valori 1 oppure 0 alla variabile value, in base al valore di index, uguale o diverso da 10

il confronto ha priorità maggiore dell'assegnamento, perciò viene valutato prima

NOTE: > >= < <=

Disugauglianza

> >=

espr1 > espr2 espr1 >= espr2 → ritorna 1 nel caso in cui espr1 sia maggiore (maggiore uguale) di espr2, altrimenti 0

< <=

espr1 < espr2 espr1 <= espr2 → ritorna 1 nel caso in cui espr1 sia minore (minore uguale) di espr2, altrimenti 0

Esempi:

int bollente = temp_acqua >= 100; → alla variabile bollente viene assegnato il valore 0 o 1 a seconda che, rispettivamente, il

valore della variabile temp_acqua sia minore oppure maggiore/uguale di

100 Confronto tra valori in virgola mobile

• gli operatori di uguaglianza e diversità andrebbero evitati quando sono coinvolti valori in virgola mobile

• in particolare se tali valori costituiscono il risultato di una espressione o di una chiamata a funzione, piuttosto

che costanti scritte esplicitamente nel programma

Gli operatori logici (1=VERO, 0=FALSO)

gli operatori logici sono analoghi agli operatori di confronto il risultato dell'espressione è 1 o 0 per indicare

rispettivamente i risultati "vero" e "falso", il loro uso più comune è nella composizione di più confronti

AND LOGICO &&

esper1 && esper2 → il risultato vale 1 solo se entrambi gli operandi sono veri (cioè diversi da 0), altrimenti il

risultato è 0 se falsi

gli operandi esper1 e esper2 possono essere tipi numerici o puntatori, vengono valutati come veri o falsi senza

convertirli a rappresentazione intera (cioè, 0.5 è considerato vero)

Proprieta' del AND logico:

è commutativa, per cui il risultato numerico non cambia invertendo i due operandi

la valutazione di una espressione con AND logico avviene sempre da sinistra a destra QUINDI se il primo

operando è falso, il secondo operando non viene mai valutato

alcuni esempi sono i seguenti:

0 && 0 -> 0

1 && 0 -> 0

5 && 1 -> 1

2 && 8 -> 1

0 && 9 -> 0

l'operatore AND può essere utilizzato per verificare se un valore è contenuto in un intervallo:

((x >= a) && (x <= b)) → L’espressione vale 1 se x è in [a, b] e 0 altrimenti

OR LOGICO ||

espr1 || espr2 → il risultato vale 1 se almeno uno degli operandi è vero (cioè diverso da zero), altrimenti il

risultato è zero

i tipi degli operandi di || sono tipi numerici o puntatori, secondo le stesse regole appena descritte per l'operatore

&&, anche || ha un ordine di valutazione imposto da sinistra a destra , se il primo operando è vero il secondo

operando non viene valutato, in quanto il risultato dell'intera espressione è già determinato (cioè è vero)

alcuni esempi numerici sono i seguenti:

0 || 0 -> 0

1 || 0 -> 1

5 || 1 -> 1

2 || 8 -> 1

0 || 9 -> 1

if ((mese < 1) || (mese > 12)) { → INTERVALLO VALORI VALIDI>1 OPPURE <12

printf("Numero del mese non valido.\n"); SE IL VALORE E' <1 OR >12 CIOE'VALORE NON VALIDO VIENE STAMPATO NUMERO

DEL MESE NON VALIDO

/* ... gestione della condizione ... */

}

il costrutto if si occupa di verificare se il numero del mese memorizzato nella variabile mese appartiene

all'intervallo di valori validi

in caso il valore non sia contenuto nell'intervallo corretto viene eseguito il corpo del costrutto che contiene le

istruzioni per la gestione della condizione

int a = 3, b = 0;

if (a || b++){ → se a e' vera oppure b++ eseguo istruzione qui ho a (primo espressione vera) quindi non guarda

neanche b++

/* eseguo istruzioni */

}

a è una espressione vera (in quanto a vale 3 CIOE' diverso da 0), b e' falsa siccome =0

l'espressione b++ non verrà valutata

il valore di b rimarrà inalterato

NEGAZIONE LOGICA !

!espr negazione logica dell'espressione espr

l'operatore ! nega l'operando (espr) alla sua destra, restituendone il valore logico invertito

l'operando(espr) è di tipo numerico o un puntatore e viene valutato come per && e ||

se l'operando è falso (cioè 0) il risultato sara' invertito quindi 1

se l'operando è vero (diverso da zero) il risultato sara' invertito quindi 0

Operazioni sui tipi

( )

(tipo) espr → converte il tipo di espr in tipo (si chiama operazione di cast)

sizeof

sizeof espr oppure sizeof(tipo ad esempio tipo int) → ritorna la dimensione in byte di espr o tipo ad

esempio tipo int

l'operatore sizeof ha risultato intero cioe' restituisce la dimensione del tipo o dell'espressione specificato

alla sua destra,

come in sizeof(int)

Operatori di controllo(di solito si usano i cicli e non questi operatori!!!

? :

espr1 ? espr2 : espr3→ se espr1 è vera, valuta espr2 come risultato dell'operazione, altrimenti valuta espr3

L'espressione condizionale

le istruzioni che seguono assegnano il massimo e il minimo di due valori a e b alle due variabili max e min

rispettivamente, utilizzando l'operatore ternario per il confronto e la selezione del valore da assegnare:

max = (a > b) ? a : b;

min = (a < b) ? a : b;

lo stesso risultato può essere ottenuto utilizzando il costrutto condizionale if (che e' meglio da usare)

,

espr1 , espr2 →valuta l'espressione espr1 ignorandone il risultato, poi valuta l'espressione espr2 il cui risultato

è usato come risultato complessivo cioe' (il risultato dell'espressione complessiva è dato dal risultato

della valutazione della sola espr2)

esempi:

a = ( espr1 , espr2 ) ; → che ha il significato di assegnare ad a il valore risultante dal calcolo di espr2 dopo aver

comunque valutato espr1

a = ( b = 0 , 10 * 40 ) ; → valuta b=0 assegnando quindi 0 a b, e poi calcola il risultato dell'espressione 10*40 e lo assegna

alla variabile a LETTURA DATI

Funzioni per la lettura fgets e scanf

due funzioni di lettura: fgets(sempre con atoi o atof) e scanf

• fgets legge una sequenza di caratteri e li memorizza in una stringa. (qualsiasi cosa letta da tastiera e' una

stringa anche se sono numeri)

• atoi converte una stringa in intero • atof converte una stringa in virgola

mobile

esempio: la stringa "125" viene convertita nel valore intero 125

• scanf legge da tastiera dei caratteri e li converte nel formato specificato

Lettura con fgets:

la funzione fgets richiede di specificare

• il vettore in cui memorizzare i caratteri letti,

• la sua dimensione (operatore sizeof che restituisce la dimensione in byte

del suo operando)

• la periferica di input (tastiera) → stdin

sintasi:

char s[80];→la variabile s viene utilizzata per contenere una stringa inserita dall'utente

fgets(s, sizeof(s), stdin);

NOTE: la variabile s[80] viene utilizzata per contenere una stringa inserita dall'utente il numero tra parentesi quadre indica

il numero massimo di caratteri che possono essere contenuti nella stringa, che può essere di 79 caratteri, ovvero uno in meno

di quanto dichiarato

Funzioni di conversione: atoi e atof

atoi: viene usata per trasformare una stringa in un numero intero • per utilizzarla occorre includere il file

di intestazione stdlib.h (#include <stdlib.h> se non scrivo questo non saro' in grado di usare atoi)

esempio

"24" → 24

int a = atoi("24"); // cosi avro' che a= 24

allora la funzione atoi converte in intero tutti i caratteri che appaiono dall'inizio della stringa fino al primo

carattere che non è una cifra, oppure fino alla fine della stringa e se non ci sono caratteri da convertire, restituisce

0

esempi di conversione:

a = atoi("1"); // a = 1

b = atoi("uno"); // b = 0 perche' non ci sono dei caratteri da convertire

c = atoi("44 gatti"); // c = 44 perche' gatti non e' una cifra

atof: serve per convertire stringhe in numeri in virgola mobile la logica di funzionamento è identica a

quella di atoi

esempi di conversione:

double a, b, c, d, e; .

. .

a = atof("3 14"); // a = 3 14 da notare che il seperatore per i numeri in virgola mobile e'

.

b = atof("314e-2"); // b = 3 14

. .

c = atof(" 00314e+3"); // c = 3 14

d = atof("3,14"); // d = 3 (attenzione alla virgola che non e' un seperatore e non e' una cifra)

e = atof("pigreco"); // e = 0 perche' non ci sono caratteri da convertire perche' la lettera p non e' cifra

esempio codice: Lettura con fgets

commento il codice:

• la variabile s serve per memorizzare l’input da tastiera come sequenza di caratteri a

• il contenuto della stringa viene poi convertito in numero attraverso la atoi che viene assegnato uno ad e l'altro

b

a

• in entrambi i casi il valore letto da fgets viene memorizzato nella variabile s

• con la seconda chiamata a fgets il valore precedentemente contenuto in s viene perduto, ma questo non è un

problema, perche' la variabile a contiene il valore

Funzioni per la lettura: scanf

la funzione scanf richiede il formato del dato da acquisire e l’indirizzo della variabile in cui memorizzarlo, si usa &

per indicare indrizzio

%d oppure %i : fromato per tipi interi

%ld: formato per long int

%lld: formato per long long int

%f : formati per float/double

%c: formato per caratteri

%s: formqto per stringhe

s

Dettagli
Publisher
A.A. 2022-2023
85 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher Luluuu611 di informazioni apprese con la frequenza delle lezioni di Fondamenti di informatica e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Pavia o del prof Larizza Cristiana.