![Page 1: Politecnico di Milano Dichiarazioni e tipi predefiniti nel linguaggio C Variabili, costanti, tipi semplici, conversioni di tipo](https://reader035.vdocuments.site/reader035/viewer/2022062312/5542eb59497959361e8c4b1b/html5/thumbnails/1.jpg)
PolitecnicoPolitecnicodi Milanodi Milano
Dichiarazioni e tipi predefiniti Dichiarazioni e tipi predefiniti nel linguaggio Cnel linguaggio C
Variabili, costanti, tipi semplici, conversioni di tipo.Variabili, costanti, tipi semplici, conversioni di tipo.
![Page 2: Politecnico di Milano Dichiarazioni e tipi predefiniti nel linguaggio C Variabili, costanti, tipi semplici, conversioni di tipo](https://reader035.vdocuments.site/reader035/viewer/2022062312/5542eb59497959361e8c4b1b/html5/thumbnails/2.jpg)
- - 22 - -
PremessaPremessa
Programmi provati sul compilatore Borland C++ 1.0Altri compilatori: lievi differenzeIstruzioni per l’uso:
Cercate di capire gli algoritmiProvate i programmi!!!
Errori di sintassiErrori a run-time
Modificate i programmi!!!Modificate i programmi!!!Cosa succede se cambio/scambio/tolgo/aggiungo istruzioni?… e se volessi che facesse anche quest’altra cosa?
![Page 3: Politecnico di Milano Dichiarazioni e tipi predefiniti nel linguaggio C Variabili, costanti, tipi semplici, conversioni di tipo](https://reader035.vdocuments.site/reader035/viewer/2022062312/5542eb59497959361e8c4b1b/html5/thumbnails/3.jpg)
- - 33 - -
Le variabiliLe variabili
Nome simbolicoRappresenta un dato in memoriaOccupa una certa quantità di celle di memoriaLettura e scrittura
Es.:
a = 3;a = b;3 = a; NO!!!
Ha un tipo.
![Page 4: Politecnico di Milano Dichiarazioni e tipi predefiniti nel linguaggio C Variabili, costanti, tipi semplici, conversioni di tipo](https://reader035.vdocuments.site/reader035/viewer/2022062312/5542eb59497959361e8c4b1b/html5/thumbnails/4.jpg)
- - 44 - -
I tipi ed il linguaggio CI tipi ed il linguaggio C
Un tipo influenza:L’interpretazione dei bit (carattere? intero? reale? …)Lo spazio occupato (allocato) in memoria L’intervallo dei valori che possono essere memorizzatiLe operazioni permesse sulla variabile e la semantica associata
Il C possiede le seguenti categorie (tipi semplici):CaratteriNumeri naturaliNumeri interiNumeri in virgola mobile.
![Page 5: Politecnico di Milano Dichiarazioni e tipi predefiniti nel linguaggio C Variabili, costanti, tipi semplici, conversioni di tipo](https://reader035.vdocuments.site/reader035/viewer/2022062312/5542eb59497959361e8c4b1b/html5/thumbnails/5.jpg)
- - 55 - -
Dichiarazione variabiliDichiarazione variabili
Dichiarazione:tipo nome;
Dichiarazione con inizializzazione:tipo nome = espressione;
Valore non definito (ovvero, casuale) se non inizializzoPiù variabili dello stesso tipo:
tipo nome1, nome2,…, nomen;tipo nome1=espr1,nome2=espr2,…,nomen=esprn;
Esempio:
int x = 24, y, z = 34;
![Page 6: Politecnico di Milano Dichiarazioni e tipi predefiniti nel linguaggio C Variabili, costanti, tipi semplici, conversioni di tipo](https://reader035.vdocuments.site/reader035/viewer/2022062312/5542eb59497959361e8c4b1b/html5/thumbnails/6.jpg)
- - 66 - -
Dichiarazione costantiDichiarazione costanti
Assegno un valore permanentementeDichiarazione:
const tipo nome = espressione;
Più costanti:const tipo nome1 = espressione1,
nome2 = espressione2,…, nomen = espressionen;
Esempio
const int x = 24, y = 55;
A cosa servono? .
![Page 7: Politecnico di Milano Dichiarazioni e tipi predefiniti nel linguaggio C Variabili, costanti, tipi semplici, conversioni di tipo](https://reader035.vdocuments.site/reader035/viewer/2022062312/5542eb59497959361e8c4b1b/html5/thumbnails/7.jpg)
- - 77 - -
CaratteriCaratteri
Nome Significato Occupazione* e Range
char carattere ASCII 8 bit tabella ASCII
* Valore indicativoOperazioni consentite:
assegnamento (=)relazionali (==, !=, <, >, <=, >=)logici (&&, ||, !)operazioni aritmetiche (+, -, *, /(intera), %) ???
Costante esplicita: char pluto;pluto = 'a';
'a' è detta literal o costante esplicita.
![Page 8: Politecnico di Milano Dichiarazioni e tipi predefiniti nel linguaggio C Variabili, costanti, tipi semplici, conversioni di tipo](https://reader035.vdocuments.site/reader035/viewer/2022062312/5542eb59497959361e8c4b1b/html5/thumbnails/8.jpg)
- - 88 - -
Naturali e interiNaturali e interi
Nome Significato Occupazione* e Range
short int intero “corto” 16 bit [-32768, +32767]
int intero 16 bit [-32768, +32767]
long int intero “lungo” 32 bit [-231, 231–1]
* Valore indicativo
unsigned short intnaturale “corto” 16 bit [0, 65535]
unsigned int naturale 16 bit [0, 65535]
unsigned long intnaturale “lungo” 32 bit [0, 232-1]
![Page 9: Politecnico di Milano Dichiarazioni e tipi predefiniti nel linguaggio C Variabili, costanti, tipi semplici, conversioni di tipo](https://reader035.vdocuments.site/reader035/viewer/2022062312/5542eb59497959361e8c4b1b/html5/thumbnails/9.jpg)
- - 99 - -
Naturali e interiNaturali e interi
I valori espressi per Occupazione e Range sono indicativiLo standard C stabilisce però le seguenti regole:
Occupazione short occupazione int occupazione long
Occupazione unsigned short occupazione unsigned int occupazione unsigned long
Inoltre, vale anche:Occupazione int = occupazione unsigned int .
![Page 10: Politecnico di Milano Dichiarazioni e tipi predefiniti nel linguaggio C Variabili, costanti, tipi semplici, conversioni di tipo](https://reader035.vdocuments.site/reader035/viewer/2022062312/5542eb59497959361e8c4b1b/html5/thumbnails/10.jpg)
- - 1010 - -
Naturali e interiNaturali e interi
Operazioni consentite:assegnamento (=)operazioni aritmetiche (+, -, *, /(intera), %)relazionali (==, !=, <, >, <=, >=)logici (&&, ||, !)
Costante esplicita (literal):int pippo;pippo = 10;
![Page 11: Politecnico di Milano Dichiarazioni e tipi predefiniti nel linguaggio C Variabili, costanti, tipi semplici, conversioni di tipo](https://reader035.vdocuments.site/reader035/viewer/2022062312/5542eb59497959361e8c4b1b/html5/thumbnails/11.jpg)
- - 1111 - -
Numeri in virgola mobileNumeri in virgola mobile
Nome Significato Occupazione* e Range
float “singola precisione” 32 bit [-10+38, +10+38]double “doppia precisione” 64 bit [-10+308, +10+308]
long double “precisione estesa” 80 bit [-10+4932, +10+4932]
La precisione massima che posso ottenere è circa :
float: 10-38 double: 10-308 long double: 10-4932
Questa precisione si ottiene nell’intorno dello zero.* Valore indicativo
![Page 12: Politecnico di Milano Dichiarazioni e tipi predefiniti nel linguaggio C Variabili, costanti, tipi semplici, conversioni di tipo](https://reader035.vdocuments.site/reader035/viewer/2022062312/5542eb59497959361e8c4b1b/html5/thumbnails/12.jpg)
- - 1212 - -
Numeri in virgola mobileNumeri in virgola mobile
I valori espressi per Occupazione e Range sono indicativiVale però:
Occupazione float occupazione double occupazione long double
Operazioni consentite:assegnamento (=)operazioni aritmetiche (+, -, *, /)relazionali (==, !=, <, >, <=, >=)
attenzione: (x/y)*y == x in generale non è vera!
Costante esplicita (literal):float: pippo = 10.321f;double: pippo = 15.0; oppure pippo = 15.0d;Notazione esponenziale: pippo = -10.0E+23;
![Page 13: Politecnico di Milano Dichiarazioni e tipi predefiniti nel linguaggio C Variabili, costanti, tipi semplici, conversioni di tipo](https://reader035.vdocuments.site/reader035/viewer/2022062312/5542eb59497959361e8c4b1b/html5/thumbnails/13.jpg)
- - 1313 - -
Regole di conversione Regole di conversione implicitaimplicita
Espressioni miste del tipo: x operatore ychar, short intse l’espressione è ancora eterogenea:int long unsigned int unsigned long float double long doubleil risultato dell’espressione sarà uguale a quello del più alto livello gerarchico5.0 / (23 / 9) 5.0 / 2 5.0 / 2.0 2.5double d1 = 3.4E+100, d2 = 6.8E-100;float f = 1250.35f;d1= f; la f viene convertita a double f = d2; le cifre frazionarie di d2 sono troncate f = d1; la d1 provoca un overflow
Esiste anche la conversione esplicita (type cast).
![Page 14: Politecnico di Milano Dichiarazioni e tipi predefiniti nel linguaggio C Variabili, costanti, tipi semplici, conversioni di tipo](https://reader035.vdocuments.site/reader035/viewer/2022062312/5542eb59497959361e8c4b1b/html5/thumbnails/14.jpg)
PolitecnicoPolitecnicodi Milanodi Milano
Primi esempi in “quasi C”Primi esempi in “quasi C”
Una versione semplificata del linguaggio CUna versione semplificata del linguaggio C
![Page 15: Politecnico di Milano Dichiarazioni e tipi predefiniti nel linguaggio C Variabili, costanti, tipi semplici, conversioni di tipo](https://reader035.vdocuments.site/reader035/viewer/2022062312/5542eb59497959361e8c4b1b/html5/thumbnails/15.jpg)
- - 1515 - -
Il mio primo programma!Il mio primo programma!
/* Il mio primo programma in “quasi C” */ main(){
printf ("Hello world!!!");printf ("Ovvero: ciao mondo!!!");
}
Il “punto d’ingresso” del programma
I blocchi
L’ordine di esecuzione delle istruzioni
I commenti
La “sintassi colorata”.
![Page 16: Politecnico di Milano Dichiarazioni e tipi predefiniti nel linguaggio C Variabili, costanti, tipi semplici, conversioni di tipo](https://reader035.vdocuments.site/reader035/viewer/2022062312/5542eb59497959361e8c4b1b/html5/thumbnails/16.jpg)
- - 1616 - -
SommaSomma
/* Non è proprio C… */ main(){
unsigned int operando1, operando2, somma;
operando1 = 10;operando2 = 15;somma = operando1 + operando2;printf (somma);
}
Le keyword (parole chiave) predefinite:if, while, else, unsigned, int, … Il vocabolario del C
I comandi definiti usando il linguaggio stesso:printf(), scanf(), … Funzioni di libreriaoperando1, operando2, …
![Page 17: Politecnico di Milano Dichiarazioni e tipi predefiniti nel linguaggio C Variabili, costanti, tipi semplici, conversioni di tipo](https://reader035.vdocuments.site/reader035/viewer/2022062312/5542eb59497959361e8c4b1b/html5/thumbnails/17.jpg)
- - 1717 - -
Area cerchioArea cerchio
/* non è proprio C… */main(){
const float PI = 3.1415f;float raggio, area;
scanf (raggio);area = raggio * raggio * PI;printf (area);
} .
![Page 18: Politecnico di Milano Dichiarazioni e tipi predefiniti nel linguaggio C Variabili, costanti, tipi semplici, conversioni di tipo](https://reader035.vdocuments.site/reader035/viewer/2022062312/5542eb59497959361e8c4b1b/html5/thumbnails/18.jpg)
PolitecnicoPolitecnicodi Milanodi Milano
Esempi in C: tipi sempliciEsempi in C: tipi semplici
Variabili, costanti, tipi semplici, specificatori di formato,Variabili, costanti, tipi semplici, specificatori di formato,cast implicito.cast implicito.
![Page 19: Politecnico di Milano Dichiarazioni e tipi predefiniti nel linguaggio C Variabili, costanti, tipi semplici, conversioni di tipo](https://reader035.vdocuments.site/reader035/viewer/2022062312/5542eb59497959361e8c4b1b/html5/thumbnails/19.jpg)
- - 1919 - -
Il mio primo programma!Il mio primo programma!
#include <stdio.h>
/* Il mio primo programma in C!!! */ void main(){
printf ("Hello world!!!");printf ("Ovvero: ciao mondo!!!");
}
La printf() è una “funzione di libreria”
#include specifica dove andare a cercarela definizione
void main() lo vedremo più avanti…
![Page 20: Politecnico di Milano Dichiarazioni e tipi predefiniti nel linguaggio C Variabili, costanti, tipi semplici, conversioni di tipo](https://reader035.vdocuments.site/reader035/viewer/2022062312/5542eb59497959361e8c4b1b/html5/thumbnails/20.jpg)
- - 2020 - -
Area cerchio e quadratoArea cerchio e quadrato
#include <stdio.h>
void main(){
const float PI = 3.1415f;float x, area;
scanf ("%f", &x);area = x * x * PI;printf ("Area cerchio: %f", area);x = 2 * x; /* cambia “significato” */area = x * x;printf ("Area quadrato: %f", area);
} .
x
![Page 21: Politecnico di Milano Dichiarazioni e tipi predefiniti nel linguaggio C Variabili, costanti, tipi semplici, conversioni di tipo](https://reader035.vdocuments.site/reader035/viewer/2022062312/5542eb59497959361e8c4b1b/html5/thumbnails/21.jpg)
- - 2121 - -
Cast implicitoCast implicito
#include <stdio.h>
void main(){
int x = 3, y = 4;float k = 4.0, z, w;
z = x / k; /* z: 0.75 */w = 75.0 / z; /* w: 100 */ printf ("%f", w);
z = x / y; /* z: 0 */w = 75.0 / z; /* Divisione per zero */printf ("%f", w);
} .
![Page 22: Politecnico di Milano Dichiarazioni e tipi predefiniti nel linguaggio C Variabili, costanti, tipi semplici, conversioni di tipo](https://reader035.vdocuments.site/reader035/viewer/2022062312/5542eb59497959361e8c4b1b/html5/thumbnails/22.jpg)
- - 2222 - -
Alcuni specificatori di formatoAlcuni specificatori di formato
Per la scanf() e la printf():"%u" indica un unsigned int
"%lu" indica un unsigned long int
"%d" indica un int
"%ld" indica un long int
"%c" indica un char
"%f" indica un float.
![Page 23: Politecnico di Milano Dichiarazioni e tipi predefiniti nel linguaggio C Variabili, costanti, tipi semplici, conversioni di tipo](https://reader035.vdocuments.site/reader035/viewer/2022062312/5542eb59497959361e8c4b1b/html5/thumbnails/23.jpg)
- - 2323 - -
Minuscolo Minuscolo maiuscolo maiuscolo
#include <stdio.h>
void main(){
char carattere;
printf ("Inserisci un carattere minuscolo: ");scanf ("%c", &carattere);carattere = carattere - 32;printf ("Carattere maiuscolo: %c\n", carattere);
} .