IL LINGUAGGIO C
• Imperativo ad alto livello (ma poco astratto).
• Strutturato, con alcune eccezioni (es. goto).
• Tipizzato – ogni oggetto ha un tipo.
• Elementare – poche parole chiave (32 nel standard).
• Case-sensitive – Variabile ≠ variabile.
• Portabile – codice compilabile su molte architetture se conforme allo standard.
Struttura Base di un Programma C
• #include <stdio.h> – include la libreria standard I/O.
• int main(void) – punto di ingresso del programma.
• Le parentesi graffe {} delimitano il blocco principale.
• Le dichiarazioni di variabili appaiono prima dell’uso.
I DATI⟹ sono individuati da nome (identificatore), rappresentazione (tipo), modalità di accesso
(variabile, costante).
• Per il calcolatore: insieme di bit memorizzato in memoria centrale
• Per l’utente: quantità associata a un certo significato
LE VARIABILI
Dichiarazione di una variabile: Locazioni di memoria destinate alla memorizzazione di dati il cui
valore è modificabile
<tipo> <variabile> ;
<variabile>: identificatore che indica il nome della variabile.
Le variabili appena definite sono non inizializzate (hanno valore ignoto), il loro valore poi può
cambiare.
I dati possono essere semplici (singoli valori) o scalari (insiemi di più valori semplici). 12
IL TIPO INT⟹ valori interi, positivi o negativi. Espresso su 16 bit o 32 bit
#include <limits.h>
IL TIPO FLOAT⟹ valori reali frazionari o esterni all’intervallo degli int. Espressi su 32 bit
#include <float.h>
Direttive di compilazione: un programma in C prima di essere compilato viene elaborato da un
preprocessore. I comandi destinati al preprocessore sono chiamati direttive.
Es. #include <stdio.h>
#DEFINE⟹ usato per dichiarare costanti
#INCLUDE⟹ specifica quali librerie usare
PRINTF⟹ stampa ⟹
Testo libero (compresi spazi) viene stampato letteralmente
⟹
Simboli \n va a capo
⟹
Simboli %d stampa un int
⟹
Simboli %f stampa un float
Printf(“Immetti il numero: ”) ;
scantf(“%d”, &N) ;
printf(“Numero immesso: %d\n”, N) ;
Scanf guida l’utente nell’immissione dei dati 13
SELEZIONE E OPERATORI BOOLEANI
ISTRUZIONI DI SCELTA⟹ avviene mediante l’istruzione if-else. Le condizioni di scelta possono
essere semplici o elaborate e possono essere combinate tra di loro.
La struttura if-else consente di eseguire il blocco A se la condizione C da valutare è vera (V),
oppure il blocco B se la condizione C è falsa (F).
La condizione C può essere semplice o complessa. I blocchi A e B possono contenere una singola
istruzione o più istruzioni, racchiuse tra parentesi graffe.
Caso particolare: IF (manca la condizione else)
La porzione vera deve esserci sempre, quella falsa se non c’è si può trascurare⟹ si omette la
clausola else.
ERRORI FREQUENTI:
! è errato mettere ; dopo la condizione if (o if-else) perché causa un blocco di codice.
Es. if (a > 0)
a = -a; 14
! è errato fidarsi della sola indentazione:
NO: SI:
if ( a > 0 ) if ( a > 0 )
printf(“neg”) ; {
a = -a ; printf(“neg”) ;
}
(se no avviene sempre il cambio di segno) a = -a ;
:
LE CONDIZIONI C è generalmente basata su un’operazione di confronto.
La condizione C è generalmente basata su un'operazione di confronto tra due espressioni, variabili
o costanti.
Categoria Operazione Sintassi C Esempio Significato
Uguaglianza Uguale == a == b a è uguale a b
Diverso != a != b a è diverso da b
Ordine Maggiore > a > b a è maggiore di b
Minore < a < b a è minore di b
Maggiore o a è maggiore o
>= a >= b
uguale uguale a b
Minore o a è minore o
<= a <= b
uguale uguale a b
ERRORE FREQUENTE: Confondere l’operatore di assegnazione (=) con l’operatore di confronto
(==) . Il primo assegna un valore alla variabile, è un’operazione di scrittura, distruttiva. Il secondo si
chiede se a sx il valore è uguale a dx, è un’operazione di lettura.
Esercizio: Si scriva un programma in linguaggio C che legga due numeri da tastiera, detti A e B, e
determini le seguenti informazioni, stampandole a video:
- determini se B è un numero positivo o negativo
- determini se A è un numero pari o dispari
- calcoli il valore di A+B
- determini quale scelta dei segni nell’espressione (±A) + (±B) porta al risultato massimo, e
quale è questo valore massimo.
Leggi A e B: 15
1. Controlla il segno di B
2. Controllo la parità di A
3. Controlla A e B e determina il risultato massimo
Bisogna determinare quale scelta dei segni nell’espressione (+-A) + (+-B) porta al valore massimo.
Si possono calcolare le 4 combinazione e scegliere il massimo (strategia 1) o riscrivere
algebricamente l’espressione (strategia 2).
Strategia 2: la massima somma che si può ottenere è quando A e B sono positivi, quindi basta
calcolare la somma dei valori assoluti. 16
GLI OPERATORI BOOLEANI
Spesso è necessario prendere decisioni basate sui valori di più condizioni semplici (es: "x è
compreso tra a e b?"). Per fare ciò si usano gli operatori booleani.
Gli operatori booleani permettono di combinare condizioni semplici (X, Y) che restituiscono un
valore booleano (vero/falso):
Quando si usano più operatori in una singola espressione, la valutazione avviene secondo la
seguente priorità (dalla più alta alla più bassa):
• Operatori di Confronto (<, ==, !=, >, >=, <=)
• Negazione NOT (!)
• Congiunzione AND (&&)
• Disgiunzione OR (||)
È sempre conveniente abbondare con le parentesi tonde () per migliorare la leggibilità e forzare
l'ordine di valutazione desiderato, rendendo l'espressione indipendente dalle regole di precedenza.
ERRORI COMUNI: 17
SCELTE ANNIDATE
Le istruzioni di scelta possono essere annidate: è possibile inserire un intero blocco di scelta (if, if-
else) all'interno del blocco vero o del blocco falso di un'altra istruzione di scelta.
• La scelta interna (C2) viene valutata solo ed esclusivamente
se la condizione esterna (C1) ha portato all'esecuzione del
ramo che la contiene.
• L'intero blocco di scelta più interno (dalla sua condizione al
ricongiungimento) deve essere completamente contenuto
all’interno di uno dei rami del blocco più esterno. 18
ESEMPIO: L’EQUAZIONE DI PRIMO GRADO 19
SWITCH E CICLI
1. L’ISTRUZIONE SWITCH: meccanismo di controllo del flusso che offre un'alternativa più
compatta e leggibile rispetto a una lunga catena di istruzioni if-else/ if. Viene utilizzata quando è
necessario compiere una sequenza di scelte in base al valore di una singola variabile o
espressione. 20
2. L’ISTRUZIONE BREAK⟹ porta l’esecuzione del programma fino al termine del costrutto switch.
In assenza di break l’esecuzione prosegue attraverso il caso successivo.
3. FLUSSO DI ESECUZIONE CICLICO⟹ permette di ripetere alcune parti del programma più
volte, la ripetizione solitamente è controllata da una condizione booleana.
Istruzioni:
- Eseguibili⟹ fanno parte del programma, corrispondono alle istruzioni del sorgente C
- Eseguite⟹ istruzioni effettivamente eseguite durante un’esecuzione del programma.
FLUSSI DI ESECUZIONE WHILE
DO-WHILE
ANATOMIA DI UN CICLO 21
CICLO CON ITERAZIONI NOTE (numero di ripetizioni)
CICLO CON ITERAZIONI IGNOTE 22
ISTRUZIONI DI RIPETIZIONE IN C
1. ISTRUZIONE WHILE
Comportamento:
- Valuta la Condizione C.
- Se C è vera, esegue il blocco di istruzioni B (Corpo).
- Al termine di B, torna al punto 1 per rivalutare C.
- Se C è falsa, salta il ciclo e prosegue.
Annidamento dei Cicli:
È possibile includere un'istruzione while all'interno del corpo di un altro while (o for). Per ogni
singola iterazione del ciclo più esterno, si eseguiranno tutte le iterazioni previste per il ciclo più
interno.
CONTATORI: variabili intere inizializzate prima del ciclo che sono incrementate/decrementate ogni
volta che si riscontra una certa condizione o che si ripete il ciclo.
2. ISTRUZIONE FOR⟹ valuta una variabile di controllo che deve essere aggiornata. 23
LA CODIFICA
INFORMAZIONE: trasmissione e ricezione di messaggi relativi a notizie o nozioni ritenute utili.
IL BIT (BInary digiT) ⟹ unità di misura dell’informazione
Corrisponde alla quantità di informazione fornita dalla scelta fra due sole alternative (considerate
egualmente probabili). Può assumere due valori e corrisponde quindi a una cifra binaria.
Es. Semaforo: Rosso 1 0 0, Giallo 0 1 0, Verde 0 0 1
Si possono anche associare ad ogni lettera e a ogni simbolo una sequenza univoca di bit.
8
Con 8 bit si può rappresentare la scelta fra 256 alternative diverse⟹ 2 =256.
BYTE: un gruppo di 8 bit corrisponde a 1 byte. Una stringa di caratteri è rappresentata da una
successione di byte.
Usando un numero di cifre finito si può rappresentare solo una quantità finita di numeri.
Esempio per i numeri naturali
POTENZE DI 2 24
RAPPRESENTAZIONE DELLE INFORMAZIONI NON NUMERICHE
LO STANDARD ASCII (American Standard Code for Information Interchange)
7
- 7 bit, 2 = 128 simboli diversi
- 7 bit memorizzati e trasmessi in un byte (quello in più può essere usato per rilevare
eventuali errori di trasmissione)
- I primi 32 non hanno una rappresentazione visiva, sono per esempio i tasti del computer
- Cifre e lettere sono messe in sequenza, il maiuscolo ha la precedenza sul minuscolo
- Problema: mancano tanti simboli (accenti, altri alfabeti)
⟹ passano poi da 7 a 8 bit aggiungendo 128 simboli
RAPPRESENTAZIONE RASTER (immagini)
⟹ immagine costituita da una griglia di punti (=pixel)
Risoluzione: numero di pixel usati per rappresentare l’immagine⟹ si misura in punti/pollice (dpi)
La qualità di un’immagine aumenta con il numero di pixel che la compongono, però aumenta
anche l’occupazione in byte⟹ si adotta la COMPRESSIONE (butta via informazioni non
necessarie).
COMPRESSIONE:
1. LOSSLESS (senza perdite)⟹ comprimo senza perdere informazioni, ma non riduce di tanto
l’informazione. Il fattore di compressione è 2.
Es. PNG e ZIP
2. LOSSY (con perdite)⟹ parte dell’informazione viene persa, il documento originale non può
essere ricostruito fedelmente.
Es. JPEG e MP3
RAPPRESENTAZIONE VE
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
-
Appunti Elementi di informatica e programmazione
-
Appunti di elementi di informatica e programmazione, Programmazione C
-
Appunti completi teoria di Elementi di informatica e programmazione
-
Appunti Informatica