Il linguaggio C. Notate che...

Documenti analoghi
Il linguaggio C. Notate che...

Laboratorio di Informatica Ingegneria Clinica Lezione 9/11/2011. Prof. Raffaele Nicolussi

Introduzione alla programmazione. Alice Pavarani

Tipi definiti dall'utente

Precisazione sui tipi in ANSi C

Dati due punti sul piano calcolare la loro distanza

Tipi definiti dall'utente

Introduzione al linguaggio C Primi programmi

Variabili e Funzioni. Informatica 1 / 19

#include <stdio.h> /* l esecuzione comincia dalla funzione main */ int main()

Il corpo di tutte le funzioni deve essere contenuto tra parentesi graffe

Struttura dei programmi e Variabili

Introduzione al linguaggio C

Corso di Fondamenti di Informatica Il sistema dei tipi in C++

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Linguaggio C - sezione dichiarativa: costanti e variabili

Laboratorio di Informatica I

Corso di Fondamenti di Programmazione canale E-O. Strutture. Strutture. Definizione di strutture (2) Definizione di strutture (1)

Tipi elementari. Stefano Ferrari. Università degli Studi di Milano Programmazione. anno accademico

Introduzione al linguaggio C Puntatori

Tipi di dato in C. Ogni variabile in C ha associato un tipo, questo permette di:

Introduzione al linguaggio C Funzioni

Il sistema C è formato dal linguaggio C, dal preprocessore, dal compilatore, dalle librerie e da altri strumenti di supporto.

Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1

1

Sintassi: Per la dichiarazione di variabili dei tipi fondamentali:

Primi programmi in C

Lezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit

Char. Unità 2. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi

Introduzione alla programmazione in linguaggio C

Tipi di dato in C. Ogni variabile in C ha associato un tipo, questo permette di:

Lezione 5: Introduzione alla programmazione in C

Tipi di dato. Le variabili in C. Problema: dato in input un carattere, se esso è una lettera minuscola, trasformarla in maiuscola.

Lezione 6 Introduzione al C++ Mauro Piccolo

Perché il linguaggio C?

Introduzione al C. Lezione 1 Elementi. Rossano Venturini. Pagina web del corso

Le variabili nel linguaggio C

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

Struttura di un programma C++

Dichiarazioni e tipi predefiniti nel linguaggio C

Il linguaggio C. Puntatori e dintorni

Char. Parte 2. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Compendio sottoinsieme del C++ a comune col C. (Libreria standard, Input/Output, Costanti, Dichiarazioni e typedef, Memoria Dinamica)

Introduzione al linguaggio C Dati aggregati

I Fondamenti del Linguaggio

direttive del preprocessore simboli speciali parole chiave identificatori costanti

Tipi e Valori. Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna

Linguaggio C. Tipi predefiniti. Università degli Studi di Brescia. Prof. Massimiliano Giacomin. Prof. M. Giacomin

Stringhe in C. Luca Abeni. Informatica Luca Abeni 1 / 10

Identificatori. Fondamenti di Informatica e laboratorio Intro C

parte dichiarativa globale: dichiarazioni di costanti dichiarazioni di tipi dichiarazioni di variabili prototipi di funzioni/procedure

Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

Unità Didattica 1 Linguaggio C. Fondamenti. Struttura di un programma.

Tipi di dati strutturati e Linguaggio C. Record o strutture Il costruttore struct in C

Fondamenti di C++ Input/Output di base

Lezione 1. Ing. Colazzo Sebastiano

L AMBIENTE CODE BLOCKS E L IO

Tipi di dato semplici

Variabili, tipi primitivi e construtti condizionali

Introduzione alle operazioni di I/O con formato e tipi primitivi

Ingresso ed Uscita in C. Informatica 1 / 15

Appunti sul linguaggio C

Char e bool. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Laboratorio di programmazione

Primi passi col linguaggio C

Stringhe in C. Nicu Sebe. Informatica Nicu Sebe 1 / 14

Informatica 2 modulo C Massimo Callisto De Donato

Tipi di dato primitivi

Indice generale. Prefazione...xv. Introduzione al linguaggio C...1. Capitolo 2 Variabili, costanti, letterali e tipi...31

Linguaggi di programmazione

Perché il linguaggio C?

Ambienti di Programmazione per il Software di Base

C: panoramica. Violetta Lonati

Laboratorio di informatica Ingegneria meccanica

Il linguaggio C. Istruzioni, funzioni, dati strutturati

Il potere espressivo di un linguaggio è caratterizzato da: PROGRAMMA = DATI + CONTROLLO

La sintassi del C APPENDICE H

LIBRERIE STANDARD in C. LIBRERIE STANDARD in C

Tipi user-defined. parte dichiarativa globale:

parte dichiarativa globale: dichiarazioni di costanti dichiarazioni di tipi dichiarazioni di variabili prototipi di funzioni/procedure

Variabili. Tipi di dati di base. Variabili. Variabili

Tipi di dato semplici

Lezione IX Gestione dinamica della memoria

Corso di programmazione in C

Aritmetica dei puntatori

Esercizi. La funzione swapint() primo tentativo

Esercitazioni di Fondamenti di Informatica - Lez. 5 30/10/2018

L AMBIENTE CODE BLOCKS E L IO

LINGUAGGI DI PROGRAMMAZIONE!

Esercitazione 11. Liste semplici

Corso Programmazione

Il linguaggio C. Caratteristiche generali

Sunto della scorsa lezione Il linguaggio C. Un Programma con Errori. Il preprocessore. Linguaggi di Programmazione I.

Prof. Pagani Corrado INTRODUZIONE AL LINGUAGGIO C

Laboratorio di Informatica I

Tipi di dato, Alessandra Giordani Lunedì 7 maggio 2011

Transcript:

Il linguaggio C Notate che... 1

Il C è un linguaggio a blocchi int main (void) { blocco } 2

Il C è un linguaggio a blocchi (2) Non è possibile mischiare dichiarazioni e comandi! int main (void) { } Dichiarazione di variabili locali Comandi 3

Variabili non inizializzate Le variabili non inizializzate non producono nessun errore!!!! int main (void) { /* ed esempio. */ int min, max, out; min = max * out; } Controllate sempre di aver inizializzato le variabili prima del loro uso! 4

Il linguaggio C Tipi di dato, costanti, operatori 5

I tipi di dato primitivi Interi : short, int, long 2,4,8,16 byte (dipende dalla implementazione) segnaposto %d rappresentazione decimale %x, %o rappresentazione esadecimale o ottale costanti intere : 1, -2, 4565 La funzione predefinita sizeof( ) fornisce la lunghezza in byte di un qualsiasi tipo o variabile C es. sizeof(int) 6

I tipi di dato primitivi (2) Caratteri : char, 1 byte, cod. ASCII, segnaposto %c costanti carattere : `a`, `b`, `c` i caratteri sono visti da C come interi un po speciali : è possibile operare sui caratteri con le normali operazioni su interi es: char c = `a`; c++; putchar(c); /*???? */ 7

I tipi di dato primitivi (3) Reali : float, double, long double 4,8,16 byte rappresentazione in virgola mobile segnaposto : stampa (es. printf ( )) %f, %lf lettura (es. scanf( )) %f (float), %lf (double), %Lf (long double) 8

I tipi di dato primitivi (4) Libreria matematica (libm) fornisce tutte le più comuni operazioni matematiche per operare sui reali es. sqrt( ) per utilizzarla includere il file #include <math.h> compilare con gcc -lm effettua il link esplicito della libreria 9

I tipi di dato primitivi (5) Non esistono i tipi byte e bool!!! Le stringhe sono rappresentate come array di caratteri signed/unsigned modificatore per i tipi interi e caratteri permette di scegliere fra la rappresentazione di soli interi positivi (es. 0,255 su un byte) o quella in complemento a due (es. -128,+127) es. unsigned int, signed char 10

I tipi di dato primitivi (6) limits.h contiene macro che definiscono i massimi ed i minimi numeri rappresentabili per tutti i tipi es. INT_MIN, INT_MAX per utilizzarli includere il file limits.h 11

I tipi di dato primitivi (7) Conversioni fra tipi diversi : sono automatiche in C posso scrivere espressioni con operandi di tipo diverso int a = 0; float b, r = 3.1; b = a + r; di solito viene convertito tutto nel tipo più accurato (le regole a p.115 nel testo KP) conversioni esplicite r = (float) a / b 12

I valori booleani Rappresentazione dei valori booleani in C : non esiste il tipo bool! sono rappresentati con int 0 rappresenta FALSO, qualsiasi valore!= 0 rappresenta VERO es. 456 viene interpretato come VERO es. if (1) printf( VERO ); è un condizionale con condizione sempre vera, che quindi stampa sempre VERO sullo schermo 13

Gli operatori booleani && (and), (or),! (not) valore : 0 se sono falsi e 1 se sono veri sono rappresentati con int operatori bit a bit : & (and), (or), ^ (xor), << (lshift), >> (rshift), ~ (complemento) es. 1 << 3 // maschera con 1 in terza posizione a & ~ (1 << 3 ) // azzera il terzo bit 14

Gli array Aggregati di variabili dello stesso tipo : dichiarazione (array statici): int a[4]; 0 1 2 3 posizione 1 3 7 8 valore gli indici partono da 0 a[1] non viene effettuato nessun controllo sugli indici nell accesso : se cerco di accedere a a[15]il compilatore non dà errore ed in fase di esecuzione il risultato dipende dal contenuto della memoria adiacente ad a 15

Le stringhe Sono array di caratteri terminati da \0 dichiarazione : char parola[8]= mango ; permette di memorizzare una qualsiasi parola di al più 7 caratteri (l ottavo serve per il terminatore) è inizializzata con la parola mango string.h fornisce tutte le più comuni funzioni per manipolare stringhe 16

Le strutture (record) Aggregati di variabili di tipo diverso dichiarazione di una nuova struttura: struct studente { } ; char nome[40]; char cognome[40]; double voto; dichiarazione di variabili di tipo struttura : struct studente x; struct studente classe[140]; 17

Le strutture (record) (2) Ridenominazione tipi : typedef tipo nome; es : typedef int Intero; Intero nome[40]; es : typedef char stringa40[41]; stringa40 nome; 18

Le strutture (record) (3) Ridenominazione tipi : typedef struct { char nome[40]; char cognome[40]; double voto; } studente ; così si può eliminare struct dalle dichiarazioni studente x; studente classe[140]; 19

Le strutture (record) (4) Ridenominazione tipi : typedef struct studente { char nome[40]; char cognome[40]; double voto; } studente ; Opzionale (serve per i tipi ricorsivi) così si può eliminare struct dalle dichiarazioni studente x; studente classe[140]; 20

Le strutture (record) (5) Accesso ai campi : tramite l operatore punto (.) es : studente x; studente classe[140]; classe[i].nome = x.nome; 21

I tipi enumerati Rappresentano insiemi finiti: giorni: lunedi, martedi, mesi: gennaio, febbraio, bool: true, false Associano un identificatore (costante) ad ogni elemento dell insieme Sono rappresentati con degli interi... ma il compilatore controlla che le funzioni siano chiamate con il tipo giusto (type checking) 22

Esempio: I tipi enumerati (2) enum giorni {lun,mar,mer,gio,ven,sab,dom}; enum giorni x; /* dichiarazione */ x = lun; Si può evitare di ripetere enum con un typedef I valori interi assegnati partono da 0 : lun == 0, mar == 1, mer == 2, 23

Esempio: I tipi enumerati (3) typedef enum {true = 1, false = 0} bool; bool trovato; /* dichiarazione */ trovato = false; Si possono scegliere i valori interi assegnati ad ogni elemento 24

I tipi union Nei tipi union più valori di tipi diversi condividono la stessa zona di memoria noti anche come record con varianti Esempio: union numero { }; int intero; long double reale; struct complex complesso; solo uno dei tre viene memorizzato ogni volta 25

I tipi union (2) union numero { int intero; /* 4 byte */ long double reale; /* 8 byte */ struct complex complesso; /* 16 byte */ }; union numero n; in memoria... &n 16 byte 26

I tipi union (3) union numero { int intero; /* 4 byte */ long double reale; /* 8 byte */ struct complex complesso; /* 16 byte */ }; union numero n; /* specifico come interpretare n */ n.intero = 5; 0 0 0 5 &n Parte significativa 27

Uso tipico: I tipi union (4) in una struct che contenga (oltre alla union) un campo tipo del valore typedef enum {INT, REAL, COMPLEX} numtyp; struct numero { numtyp tipo; union {/* union anonima */ int intero; long double reale; struct complex complesso; } }; 28

Uso tipico: (cont.) I tipi union (5) struct numero x ; switch (x.tipo) { case INT :. x.intero =...; case REAL:. x.reale =...; case COMPLEX:. x.complesso =...;.. 29

Il linguaggio C Funzioni 30

Funzioni C Le funzioni C sono l unico modo per strutturare i programmi e non si possono annidare Non esistono le procedure Non esistono i metodi Dichiarazione di funzioni : descrive il prototipo della funzione ovvero: nome della funzione, il tipo del valore restituito ed il tipo di tutti gli argomenti utilizzati 31

Funzioni C (2) Dichiarazione di funzioni : es: prototipo della funzione di somma di due interi int somma (int, int); oppure int somma (int x, int y); x, y sono inutili, ma vengono convenzionalmente specificati per documentazione 32

Funzioni C (3) Definizione di funzioni : la definizione di una funzione è divisa fra : una intestazione (head) che fornisce il prototipo della funzione ai nomi per i parametri formali, ed un corpo (body) che specifica le azioni da compiere es: int somma (int x, int y) { return (x + y); } intestazione 33

Funzioni C (4) Definizione di funzioni : la definizione di una funzione è divisa fra una intestazione (head) che fornisce il prototipo della funzione ai nomi per i parametri formali, ed un corpo (body) che specifica le azioni da compiere es: int somma (int x, int y) { return (x + y); } corpo 34

Funzioni C (5) La dichiarazione o la definizione di una funzione deve sempre precedere il suo uso! Tipica struttura di un programma C (unico file): #direttive al preprocessore dichiarazioni di variabili globali (es. int k;) dichiarazione di funzioni (prototipi) (es. int somma (int x, int y);) int main ( ) { } definizione di funzioni (es. int somma (int x, int y) { }) 35

Scope delle variabili: Funzioni C (6) Il corpo di una funzione contiene le variabili locali sono allocate sullo stack sono accessibili solo a quella funzione perdono il valore fra un invocazione e l altra 36

Funzioni C (7) Scope delle variabili (cont.) : Le variabili globali sono variabili dichiarate al di fuori delle funzioni sono accessibili all interno di tutte le funzioni sono allocate nell area dati e vengono deallocate solo alla terminazione del programma Le globali sono sconsigliate a meno di casi motivati! devono essere sempre adeguatamente documentate 37

Funzioni C (8) Scope delle variabili (cont.) : Le variabili statiche locali (static) sono accessibili all interno della funzione che le dichiara mantengono il valore fra una invocazione e l altra Tutti i parametri sono passati per valore una copia viene messa sullo stack all atto della chiamata 38

Esempio di funzione #include <stdio.h> int max (int a, int b); /* dichiarazione */ int main (void){ printf( Il massimo è %d \n, max(10,2)); return 0; } int max (int a, int b) { return (a < b)? b : a ; /* definizione */ } 39

Esempio di funzione (2) /* un esempio di var globale */ #include <stdio.h> int max (int a, int b); /* dichiarazione */ int k = 0; /* var globale */ int main (void){ printf( Il massimo è %d \n, max(10,2)); printf( Il valore di k è %d \n, k); return 0; } int max (int a, int b) { k = k + 1; /* side effect */ return (a < b)? b : a ; /* definizione */ } 40

Esempio di funzione (3) /* un esempio di var statica */ #include <stdio.h> int max (int a, int b); /* dichiarazione */ int main (void){ printf( Il massimo è %d \n, max(10,2)); /* k non è più accessibile fuori da max */ return 0; } int max (int a, int b) { static int k = 0; k++; return (a < b)? b : a ; /* definizione */ } 41