Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
1
Dichiarazioni e tipi predefiniti nel linguaggio C
Variabili, costanti, tipi semplici, conversioni di tipo.
2
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!!! Errori di sintassi Errori a run-time Modificate i programmi!!! Cosa succede se cambio/scambio/tolgo/aggiungo istruzioni? … e se volessi che facesse anche quest’altra cosa?
3
Le variabili Nome simbolico Rappresenta un dato in memoria
Occupa una certa quantità di celle di memoria Lettura e scrittura Es.: a = 3; a = b; 3 = a; NO!!! Ha un tipo.
4
I 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 memorizzati Le operazioni permesse sulla variabile e la semantica associata Il C possiede le seguenti categorie (tipi semplici): Caratteri Numeri naturali Numeri interi Numeri in virgola mobile.
5
Dichiarazione variabili
Dichiarazione: tipo nome; Dichiarazione con inizializzazione: tipo nome = espressione; Valore non definito (ovvero, casuale) se non inizializzo Più variabili dello stesso tipo: tipo nome1, nome2,…, nomen; tipo nome1=espr1,nome2=espr2,…,nomen=esprn; Esempio: int x = 24, y, z = 34;
6
Dichiarazione costanti
Assegno un valore permanentemente Dichiarazione: const tipo nome = espressione; Più costanti: const tipo nome1 = espressione1, nome2 = espressione2,…, nomen = espressionen; Esempio const int x = 24, y = 55; A cosa servono?
7
Caratteri Nome Significato Occupazione* e Range
char carattere ASCII 8 bit tabella ASCII * Valore indicativo Operazioni consentite: assegnamento (=) relazionali (==, !=, <, >, <=, >=) logici (&&, ||, !) operazioni aritmetiche (+, -, *, /(intera), %) ??? Costante esplicita: char pluto; pluto = 'a'; 'a' è detta literal o costante esplicita.
8
Naturali e interi Nome Significato Occupazione* e Range
short int intero “corto” 16 bit [-32768, ] int intero 16 bit [-32768, ] long int intero “lungo” 32 bit [-231, 231–1] unsigned short int naturale “corto” 16 bit [0, 65535] unsigned int naturale 16 bit [0, 65535] unsigned long int naturale “lungo” 32 bit [0, 232-1] * Valore indicativo
9
Naturali e interi I valori espressi per Occupazione e Range sono indicativi Lo 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 .
10
Naturali e interi Operazioni consentite:
assegnamento (=) operazioni aritmetiche (+, -, *, /(intera), %) relazionali (==, !=, <, >, <=, >=) logici (&&, ||, !) Costante esplicita (literal): int pippo; pippo = 10;
11
Numeri in virgola mobile
Nome Significato Occupazione* e Range float “singola precisione” 32 bit [-10+38, ] double “doppia precisione” 64 bit [ , ] long double “precisione estesa” 80 bit [ , ] La precisione massima che posso ottenere è circa : float: 10-38 double: long double: Questa precisione si ottiene nell’intorno dello zero. * Valore indicativo
12
Numeri in virgola mobile
I valori espressi per Occupazione e Range sono indicativi Vale 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 = f; double: pippo = 15.0; oppure pippo = 15.0d; Notazione esponenziale: pippo = -10.0E+23;
13
Regole di conversione implicita
Espressioni miste del tipo: x operatore y char, short int se l’espressione è ancora eterogenea: int long unsigned int unsigned long float double long double il risultato dell’espressione sarà uguale a quello del più alto livello gerarchico 5.0 / (23 / 9) / 2 / 2.5 double d1 = 3.4E+100, d2 = 6.8E-100; float f = f; 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).
14
Primi esempi in “quasi C”
Una versione semplificata del linguaggio C
15
Il mio primo programma! Il “punto d’ingresso” del programma I blocchi
/* 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”.
16
Somma Le keyword (parole chiave) predefinite:
/* 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 libreria operando1, operando2, …
17
Area cerchio /* non è proprio C… */ main() { const float PI = 3.1415f;
float raggio, area; scanf (raggio); area = raggio * raggio * PI; printf (area); }
18
Esempi in C: tipi semplici
Variabili, costanti, tipi semplici, specificatori di formato, cast implicito.
19
Il mio primo programma! La printf() è una “funzione di libreria”
#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 cercare la definizione void main() lo vedremo più avanti…
20
Area cerchio e quadrato
#include <stdio.h> void main() { const float PI = f; 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
21
Cast implicito #include <stdio.h> void main() {
int x = 3, y = 4; float k = 4.0, z, w; z = x / k; /* z: */ w = 75.0 / z; /* w: */ printf ("%f", w); z = x / y; /* z: */ w = 75.0 / z; /* Divisione per zero */ }
22
Alcuni 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.
23
Minuscolo 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); }
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.