Upload
celino-esposito
View
225
Download
4
Embed Size (px)
Citation preview
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.
- - 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?
- - 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.
- - 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.
- - 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;
- - 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? .
- - 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.
- - 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]
- - 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 .
- - 1010 - -
Naturali e interiNaturali e interi
Operazioni consentite:assegnamento (=)operazioni aritmetiche (+, -, *, /(intera), %)relazionali (==, !=, <, >, <=, >=)logici (&&, ||, !)
Costante esplicita (literal):int pippo;pippo = 10;
- - 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
- - 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;
- - 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).
PolitecnicoPolitecnicodi Milanodi Milano
Primi esempi in “quasi C”Primi esempi in “quasi C”
Una versione semplificata del linguaggio CUna versione semplificata del linguaggio C
- - 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”.
- - 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, …
- - 1717 - -
Area cerchioArea cerchio
/* non è proprio C… */main(){
const float PI = 3.1415f;float raggio, area;
scanf (raggio);area = raggio * raggio * PI;printf (area);
} .
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.
- - 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…
- - 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
- - 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);
} .
- - 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.
- - 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);
} .