Linguaggio C: Variabili e assegnamento e semplici “comandi...
Transcript of Linguaggio C: Variabili e assegnamento e semplici “comandi...
Elementi di Informatica e Programmazione – Università di Brescia 1Prof. M. Giacomin
Linguaggio C:Variabili e assegnamento
e semplici “comandi” di I/O
Università degli Studi di Brescia
Prof. Massimiliano Giacomin
Elementi di Informatica e Programmazione – Università di Brescia 2Prof. M. Giacomin
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
return 0;
}
È troppo presto per spiegare il significato di queste istruzioni...
Un programma “quasi vuoto”
QUI SCRIVEREMOIL PROGRAMMA
Elementi di Informatica e Programmazione – Università di Brescia 3Prof. M. Giacomin
#include<stdio.h>#include <stdlib.h>
int main(int argc, char *argv[]){int x;int y,z;
x=4;y=5;z=x+y;x=x+1;x=x+y+z;
printf("Ciao mondo\n");printf(“Il valore di x è %d\n”, x);
return 0;}
Esempio di programma C
Istruzioni
Dichiarazione dellevariabili usate nelprogramma
- Eseguite in sequenza- Terminate da ;
(assunzione iniziale)
Elementi di Informatica e Programmazione – Università di Brescia 4Prof. M. Giacomin
Variabili: concetti generali• Una variabile rappresenta uno �spazio� per contenere un valore
NomeValore
TIPO
010101111001100111010111100111110111000000011001110101110001110101100111100110010101000111011000101001111001100101011111100000000101010010011001
LINGUAGGIO C
IMPLEMENTAZ.Indirizzo
(Indirizzo)
Elementi di Informatica e Programmazione – Università di Brescia 5Prof. M. Giacomin
Note al lucido precedente
• Caratteristiche “statiche” delle variabili (dal punto di vista del C)
> nome: identifica univocamente la variabile> tipo: identifica i valori che la variabile può assumere
e gli operatori che su di essi possono essere applicati
[P.es. esistono variabili per memorizzare valori numericiinteri, valori numerici reali, dati di una persona, … ]
> indirizzo: trattato in fase più avanzata del corso
• Dal punto di vista dell’implementazione, uno spazio in memoriacon valori esclusivamente binari (che il C interpreta in base al tipo)
Elementi di Informatica e Programmazione – Università di Brescia 6Prof. M. Giacomin
Sul tipo di una variabile
Es. una variabile di tipo �int�x
spazio di memoria per contenere un valore intero
operatori disponibili:=, +, -, *, ecc. ecc.
Es. una variabile di tipo �studente�
matricolanomecognomenum_esami
spazio di memoria per
st1operatori disponibili:
=, .
Per ora consideriamo solo variabili di tipo int (intere)
int
studente
Elementi di Informatica e Programmazione – Università di Brescia 7Prof. M. Giacomin
Dichiarazione di variabili
int x;Tipo della variabile
Nome della variabile
• Una dichiarazione può anche dichiarare più variabili dello stesso tipo:
int y, z;
• Prima di essere usata, una variabile deve essere dichiarata
<tipo> <identificatore1>, <identificatore2>, … ;
SINTASSI GENERALE
<tipo> <identificatore>;
Elementi di Informatica e Programmazione – Università di Brescia 8Prof. M. Giacomin
IDENTIFICATORI
• Nomi usati per identificare le variabili, le funzioni, le macro…
• Sono sequenze di lettere, cifre e “underscore” tali che:- iniziano con una lettera o l’underscore- non sono �keyword� (parole riservate del linguaggio C)
• Gli identificatori sono case-sensitive
Esempi
int un_albero, albero1; // OKint 1albero; // ERRATOint un-albero; // ERRATO (- non è underscore) int Abete, abete; // CORRETTO (due variabili)
// ma non raccomandabile…int int; // ERRATO (keyword)
Elementi di Informatica e Programmazione – Università di Brescia 9Prof. M. Giacomin
Assegnamento di variabili• Il valore di una variabile può essere impostato mediante
l’operatore di assegnamento =
• Sintassi:<identificatore> = <espressione>;
- variabile- costante- costruita a partire da variabili e/o costanti mediante operatori. Esempio: x + (3*y)
• Significato dell’operatore di assegnamento:> prima l’espressione viene valutata (viene calcolato un valore)> poi il valore viene assegnato alla variabile a sinistra
Elementi di Informatica e Programmazione – Università di Brescia 10Prof. M. Giacomin
1511
x
0
y
5
z
#include<stdio.h>#include <stdlib.h>
int main(int argc, char *argv[]){int x;int y,z;
x=4;y=5;z=x+y;x=x+1;x=x+y+z;
printf("Ciao mondo\n");printf(“Il valore di x è %d\n”, x);
return 0;}
Elementi di Informatica e Programmazione – Università di Brescia 11Prof. M. Giacomin
#include<stdio.h>#include <stdlib.h>
int main(int argc, char *argv[]){int x;int y,z;
x=4;y=5;z=x+y;x=x+1;x=x+y+z;
printf("Ciao mondo\n");printf(“Il valore di x è %d\n”, x);
return 0;}
1511
x
0
y
5
z
4
Elementi di Informatica e Programmazione – Università di Brescia 12Prof. M. Giacomin
#include<stdio.h>#include <stdlib.h>
int main(int argc, char *argv[]){int x;int y,z;
x=4;y=5;z=x+y;x=x+1;x=x+y+z;
printf("Ciao mondo\n");printf(“Il valore di x è %d\n”, x);
return 0;}
4
x
0
y
5
z
5
Elementi di Informatica e Programmazione – Università di Brescia 13Prof. M. Giacomin
#include<stdio.h>#include <stdlib.h>
int main(int argc, char *argv[]){int x;int y,z;
x=4;y=5;z=x+y;x=x+1;x=x+y+z;
printf("Ciao mondo\n");printf(“Il valore di x è %d\n”, x);
return 0;}
4
x
5
y
5
z
9
Elementi di Informatica e Programmazione – Università di Brescia 14Prof. M. Giacomin
#include<stdio.h>#include <stdlib.h>
int main(int argc, char *argv[]){int x;int y, z;
x=4;y=5;z=x+y;x=x+1;x=x+y+z;
printf("Ciao mondo\n");printf(“Il valore di x è %d\n”, x);
return 0;}
4
x
5
y
9
z
5
Elementi di Informatica e Programmazione – Università di Brescia 15Prof. M. Giacomin
#include<stdio.h>#include <stdlib.h>
int main(int argc, char *argv[]){int x;int y, z;
x=4;y=5;z=x+y;x=x+1;x=x+y+z;
printf("Ciao mondo\n");printf(“Il valore di x è %d\n”, x);
return 0;}
5
x
5
y
9
z
19
Elementi di Informatica e Programmazione – Università di Brescia 16Prof. M. Giacomin
Operatori aritmetici per valori interi
• Operatori binari:+ addizione* moltiplicazione- sottrazione/ divisione (intera!)% resto (della divisione intera)
• Operatore unario: segno negativo -
Elementi di Informatica e Programmazione – Università di Brescia 17Prof. M. Giacomin
Inizializzazione di variabili
• Nella definizione le variabili possono essere inizializzate conun valore, assegnato loro contestualmente alla creazione
int x=3, y, z=5;
• Osservazione utile per il futuro: inizializzazione ≠ assegnamento!
int x=3; //definizione con inizializzazione
int x; // definizionex=3; // assegnamento
Es. 1
Es. 2
Elementi di Informatica e Programmazione – Università di Brescia 18Prof. M. Giacomin
Perché il C impone di dichiarare le variabili prima di usarle?
#include<stdio.h>#include<stdlib.h>
int main(int argc, char *argv[]){int somma;int x, y;
…somme=x+y;…
}
Supponiamo che scrivasomme al posto di somma
In questo caso il compilatore �se ne accorge�,perché somme non è stata dichiarata!
Elementi di Informatica e Programmazione – Università di Brescia 19Prof. M. Giacomin
Input/Output
#include<stdio.h>#include <stdlib.h>
int main(int argc, char *argv[]){……x=x+y+z;
printf("Ciao mondo\n");printf(“Il valore di x è %d\n”, x);
return 0;}
Torniamo al programma di esempio…
Ciao mondoIl valore di x è 19
Elementi di Informatica e Programmazione – Università di Brescia 20Prof. M. Giacomin
Funzione di stampa printf
printf(stringa di formato, valori da stampare);tra doppi apici lista di espressioni (variabili / costanti / composte)
separate dalla virgola
Effetto:
• stampa la stringa di formato, che contiene caratteri comuni
e specifiche di conversione che iniziano con il simbolo % (es: %d)
• i caratteri comuni vengono stampati normalmente
• ad ogni specifica di conversione corrisponde un’espressione
nella lista degli elementi da stampare: una specifica di conversione
provoca la stampa del corrispondente valore, dopo averlo
“convertito” nel formato di stampa specificato dalla specifica
di conversione stessa (es: %d per il formato decimale degli interi)
Elementi di Informatica e Programmazione – Università di Brescia 21Prof. M. Giacomin
Una sequenza speciale
\n rappresenta il carattere di �a capo�
Esempio 1printf(�fuori�);
printf(�gioco\n�); Stampa �fuorigioco� e va a capo
Esempio 2
int gbarca=2;
int gmilan=2;
printf(�Gran risultato:\nBarcellona %d Milan %d�,gbarca,gmilan);
Stampa �Gran risultato:Barcellona 2 Milan 2�
Elementi di Informatica e Programmazione – Università di Brescia 22Prof. M. Giacomin
Funzione di acquisizione dati scanf
• La funzione scanf legge caratteri dalla tastiera e li interpretasecondo il formato specificato dalle specifiche di conversione(p.es. con %d si aspetta un intero decimale)
• Ciascun valore così ottenuto è immagazzinato nella corrispondentevariabile della lista
• Gli argomenti della lista indicano in realtà indirizzi di memoria incui memorizzare i valori acquisiti (per questo si usa &)
scanf(stringa di formato, elementi da acquisire);tra doppi apici
contiene specifichedi conversione
lista di variabili separate dalla virgola, ciascunapreceduta dal simbolo &
Es. scanf(�%d�, &variabile);
Elementi di Informatica e Programmazione – Università di Brescia 23Prof. M. Giacomin
#include<stdio.h>#include <stdlib.h>
int main(int argc, char *argv[]){int num;int successivo;
printf("Inserisci un numero\n");scanf("%d",&num);successivo=num+1;printf(”Successivo a %d uguale a %d\n",num,successivo);
return 0;}
Esempio
Elementi di Informatica e Programmazione – Università di Brescia 24Prof. M. Giacomin
QUELLO CHE A VOLTE NON E’ CHIARO!!!
• Le diverse istruzioni del C hanno compiti ben distinti, senza
mescolamenti di compiti diversi che limiterebbero la flessibilità:
- l’assegnamento modifica i valori delle variabili
(e NON STAMPA NULLA)
- scanf acquisisce valori dall’esterno memorizzandoli nelle
variabili (e NON STAMPA NULLA)
- printf stampa (a video, ma non solo)
• Schema base per acquisire dati, elaborarli e stampare un risultato:
- acquisire i dati dall’utente e memorizzarli in una o più variabili
mediante la funzione scanfNB: scanf NON PUO’ STAMPARE MESSAGGI
(p.es. “Inserisci un numero intero”): usare printf- elaborare i valori nelle variabili (istruzioni di assegnamento)
- stampare il risultato (o i risultati) con la printf
Elementi di Informatica e Programmazione – Università di Brescia 25Prof. M. Giacomin
Commenti in C• Si possono inserire commenti per spiegare alcuni dettagli del
codice: ovviamente è necessario che vengano �marcati� affinchéil compilatore li possa ignorare
• Tutto ciò che è tra /* e */ (anche su più righe) è un commento:/* questo èun commento */
• Quasi tutti i compilatori ammettono anche i commenti nella formaprintf(�Ciao\n�); //anche questo è un commento
tutto ciò che segue // è un commento fino alla fine della riga (in questo caso quindi il commento non è su più righe)