Politecnico di Milano Dichiarazioni e tipi predefiniti nel linguaggio C Variabili, costanti, tipi...

23
Politecnico Politecnico di Milano di Milano Dichiarazioni e tipi predefiniti Dichiarazioni e tipi predefiniti nel linguaggio C nel linguaggio C Variabili, costanti, tipi semplici, Variabili, costanti, tipi semplici, conversioni di tipo. conversioni di tipo.

Transcript of Politecnico di Milano Dichiarazioni e tipi predefiniti nel linguaggio C Variabili, costanti, tipi...

Page 1: Politecnico di Milano Dichiarazioni e tipi predefiniti nel linguaggio C Variabili, costanti, tipi semplici, conversioni di tipo.

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.

- - 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.

- - 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.

- - 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.

- - 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.

- - 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.

- - 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.

- - 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.

- - 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.

- - 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.

- - 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.

- - 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.

- - 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.

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.

- - 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.

- - 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.

- - 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.

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.

- - 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.

- - 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.

- - 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.

- - 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.

- - 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);

} .