1 / 23

Dichiarazioni e tipi predefiniti nel linguaggio C

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

betrys
Download Presentation

Dichiarazioni e tipi predefiniti nel linguaggio C

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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:consttipo nome = espressione; • Più costanti:consttipo nome1 = espressione1, nome2 = espressione2,…, nomen = espressionen; • Esempioconst int x = 24, y = 55; • A cosa servono? .

  7. Caratteri Nome Significato Occupazione* e Range • Operazioni consentite: • assegnamento (=) • relazionali (==, !=, <, >, <=, >=) • logici (&&, ||, !) • operazioni aritmetiche (+, -, *, /(intera), %) ??? • Costante esplicita: char pluto; pluto = 'a'; • 'a' è detta literal o costante esplicita. char carattere ASCII 8 bit tabella ASCII * Valore indicativo

  8. Naturali 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] unsigned short intnaturale “corto” 16 bit [0, 65535] unsigned int naturale 16 bit [0, 65535] unsigned long intnaturale “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 unsignedint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, +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

  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 = 10.321f; • 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) 5.0 / 2  5.0 / 2.0  2.5 • double 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).

  14. Primi esempi in “quasi C” Una versione semplificata del linguaggio C

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

  16. Somma /* Non è proprio C… */main() { unsignedintoperando1, 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() { constfloat 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! #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…

  20. x Area cerchio e quadrato #include <stdio.h> voidmain() { constfloatPI = 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); } .

  21. Cast implicito #include <stdio.h> voidmain() { intx = 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); } .

  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> voidmain() { char carattere; printf ("Inserisci un carattere minuscolo: "); scanf ("%c", &carattere); carattere = carattere - 32; printf ("Carattere maiuscolo: %c\n", carattere); } .

More Related