Dichiarazioni e tipi predefiniti nel linguaggio C

Preview:

DESCRIPTION

Dichiarazioni e tipi predefiniti nel linguaggio C. Variabili, costanti, tipi semplici, conversioni di tipo. Premessa. Programmi provati sul compilatore Borland C++ 1.0 Altri compilatori: lievi differenze Istruzioni per l’uso: Cercate di capire gli algoritmi Provate i programmi!!! - PowerPoint PPT Presentation

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

} .

Recommended