Introduzione al linguaggio C Corso di Sistemi Operativi Laurea in Informatica

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Introduzione al linguaggio C Corso di Sistemi Operativi Laurea in Informatica"

Transcript

1 Introduzione al linguaggio C Corso di Sistemi Operativi Laurea in Informatica prof. ing. Corrado Santoro A.A

2 La storia del C Nasce negli anni '70 ai Bell Laboratories Nello stesso periodo, ai Bell Lab nasce anche Unix Il linguaggio è creato da Dennis Ritchie come evoluzione del linguaggio B di Ken Thompson, autore di Unix L'obiettivo era avere un linguaggio potente quanto l'assembly ma di alto livello e indipendente dalla piattaforma Il C si rivelò così potente che anche Unix venne riscritto in questo linguaggio Oggi, il C è standardizzato dall'ansi (ANSI-C) L'ANSI-C è dunque un'evoluzione del progetto originale di Kernighan & Ritchie, il quale è denominato appunto C K&R Corrado Santoro, Informatica, Introduzione al linguaggio C 2

3 C e Java a confronto Molto simili dal punto di vista sintattico Java è infatti derivato dal C++, versione OO del C Le dichiarazioni, i tipi di dato base e i costrutti del linguaggio sono praticamente identici Il C è imperativo (come Java) Il C non è object-oriented Il C permette un elevato controllo della macchina Il programma compilato ha prestazioni notevoli (sicuramente migliori di quelle di Java) Corrado Santoro, Informatica, Introduzione al linguaggio C 3

4 C e Java a confronto In C, il programmatore ha accesso diretto alla macchina Non esiste la virtual machine che disaccoppia il programma dalla macchina reale In C, la gestione della memoria è interamente demandata al programmatore Non c'è un garbage collector che rimuove la roba non più utilizzata, occorre rilasciare la memoria manualmente In C è presente il concetto di puntatore che permette l'accesso diretto alla memoria Derivato dal PASCAL, ma reso molto più flessibile Tutto questo comporta elevata flessibilità ma un rischio più elevato (risp. a Java) di scrivere codice non funzionante Corrado Santoro, Informatica, Introduzione al linguaggio C 4

5 C vs. Java: costrutti base Operatori aritmetici int i = i+1; i++; i--; i *= 2; +, -, *, /, %, Operatori relazionali e logici <, >, <=, >=, ==,!=, &&,,!, &,, ^, ~ Strutture di controllo if ( ) else while ( ) do while ( ); for(i=1; i <= 100; i++) switch ( ) case 1: continue; break; Corrado Santoro, Informatica, Introduzione al linguaggio C 5

6 Struttura di un sorgente C #include <stdio.h> #include <stdlib.h> int data; char string[30]; char * p; void func1 (int z) int func2 (void) Inclusione delle dichiarazioni delle funzioni di libreria Dichiarazione delle variabili globali Dichiarazione e implementazione delle funzioni int main (int argc, char * argv[]) Dichiarazione e implementazione dell main Corrado Santoro, Informatica, Introduzione al linguaggio C 6

7 Struttura di un programma C #include <stdio.h> #include <stdlib.h> my_main.c int main (int argc, char * argv[]) #include <stdio.h> #include <stdlib.h> void func1 (int z) int func2 (void) my_func.c Compiler Compiler Object files my_main.o my_func.o Librerie libc.a Linker myprog Executable Corrado Santoro, Informatica, Introduzione al linguaggio C 7

8 Hello world #include <stdio.h> hello.c int main (int argc, char * argv[]) printf( Hello world\n ); return 0; $ cc hello.c -o hello $./hello Hello world $ Corrado Santoro, Informatica, Introduzione al linguaggio C 8

9 Tipi di Dato: caratteri Carattere (1 byte), default con segno char c; [ ] signed char c; [ ] unsigned char c; [0..255] char x; x = 'a'; x = 193; x = 0x97; // singoli apici: espressione del carattere // intero: espressione tramite codice ASCII // intero in esadecimale: codice ASCII Corrado Santoro, Informatica, Introduzione al linguaggio C 9

10 Tipi di Dato: interi Intero (compiler-dependent, 16-, 32- o 64- bit), default con segno int c; signed int c; unsigned int c; int x; x = 43213; x = 0xfc00; Corrado Santoro, Informatica, Introduzione al linguaggio C 10

11 Tipi di Dato: interi Intero corto (16 bit), default con segno short s; [ ] signed short s; [ ] unsigned short s; [ ] Intero lungo (32 bit), default con segno long l; [ ] signed long l; [ ] unsigned long l; [ ] Intero lunghissimo (64 bit) long long l; Corrado Santoro, Informatica, Introduzione al linguaggio C 11

12 Hello world riveduto #include <stdio.h> hello.c int main (int argc, char * argv[]) int i; char c; for (i = 0; i < 10; i++) c = 'A' + i; printf( Hello world: %d, %c\n, i, c); return 0; Hello world: 0, A Hello world: 1, B Hello world: 2, C Hello world: 9, J Corrado Santoro, Informatica, Introduzione al linguaggio C 12

13 Hello world riveduto #include <stdio.h> hello.c int main (int argc, char * argv[]) int i; Dichiarazione variabile locale for (i = 0; i < 10; i++) del blocco for char c; c = 'A' + i; printf( Hello world: %d, %c\n, i, c); return 0; Hello world: 0, A Hello world: 1, B Hello world: 2, C Hello world: 9, J Corrado Santoro, Informatica, Introduzione al linguaggio C 13

14 Hello world riveduto #include <stdio.h> hello.c int main (int argc, char * argv[]) int i; NON VALIDA! Le for (i = 0; i < 10; i++) dichiarazioni di variabili char c; non posso essere precedute c = 'A' + i; da pezzi di codice! int j; j = i * ; printf( Hello world: %d, %c\n, i, c); return 0; Corrado Santoro, Informatica, Introduzione al linguaggio C 14

15 Hello world riveduto #include <stdio.h> hello.c int main (int argc, char * argv[]) int i; for (i = 0; i < 10; i++) char c; int j; Dichiarazione valida c = 'A' + i; j = i * ; printf( Hello world: %d, %c\n, i, c); return 0; Corrado Santoro, Informatica, Introduzione al linguaggio C 15

16 Funzioni Una funzione C è dichiarata nel seguente modo: TIPO_DI_RITORNO NOME_FUNZ(TIPO1 VAR1, TIPO2 VAR2, ); Es: void my_func (int param1); Tutte le funzioni sono pubbliche e non esistono i concetti di protected o private presenti nella programmazione OO E' importante l'ordine in cui le funzioni appaiono nel programma In genere la dichiarazione di una funzione deve precedere il suo utilizzo Se accade il contrario, la funzione viene considerata con Valore di ritorno di tipo int Tipi dei parametri uguali ai tipi dei valori passati durante l'invocazione Corrado Santoro, Informatica, Introduzione al linguaggio C 16

17 Funzioni: Esempio #include <stdio.h> hello.c void say_hello(int value) char c; c = 'A' + value; printf( Hello world: %d, %c\n, value, c); int main (int argc, char * argv[]) int i; for (i = 0; i < 10; i++) say_hello(i); return 0; La funzione say_hello è dichiarata e implementata prima di essere utilizzata Corrado Santoro, Informatica, Introduzione al linguaggio C 17

18 Funzioni: Altro esempio #include <stdio.h> hello.c int main (int argc, char * argv[]) int i; for (i = 0; i < 10; i++) say_hello(i); return 0; void say_hello(float value) char c; c = 'A' + (int)value; printf( Hello world: %f, %c\n, value, c); Il compilatore incontra la funzione say_hello prima della sua dichiarazione e implementazione: la funzione verrà considerata come int say_hello(int) Corrado Santoro, Informatica, Introduzione al linguaggio C 18

19 Funzioni: prototipi #include <stdio.h> void say_hello(int); int main (int argc, char * argv[]) int i; for (i = 0; i < 10; i++) say_hello(i); return 0; hello.c Quando occorre inserire l'implementazione di una funzione dopo il suo utilizzo è opportuno inserire prima la dichiarazione (prototipo) della funzione stessa. void say_hello(int value) char c; c = 'A' + value; printf( Hello world: %d, %c\n, value, c); Corrado Santoro, Informatica, Introduzione al linguaggio C 19

20 Funzioni e moduli Cosa accade se say_hello è definita e implementata in un file (modulo) esterno rispetto al sorgente che la vuole usare? Allora: Supposto che say_hello sia implementata in un sorgente my_func.c Occorre scrivere un header file my_func.h in cui riportare il prototipo delle funzioni di my_func.c Occorre includere nel sorgente che vuole usare le funzioni di my_func il file my_func.h in modo da acquisire i prototipi delle funzioni Occorre compilare i vari sorgenti e linkarli tutti insieme Corrado Santoro, Informatica, Introduzione al linguaggio C 20

21 Moduli: esempio #include my_func.h hello.c int main (int argc, char * argv[]) int i; for (i = 0; i < 10; i++) say_hello(i); return 0; my_func.h /* * Header file for * my_func.c */ void say_hello(int); #include <stdio.h> #include my_func.h void say_hello(int value) char c; c = 'A' + value; printf( Hello world: %d, %c\n, value, c); my_func.c Corrado Santoro, Informatica, Introduzione al linguaggio C 21

22 #include my_func.h Moduli: esempio hello.c int main (int argc, char * argv[]) int i; for (i = 0; i < 10; i++) say_hello(i); $ return 0; $ cc hello.c my_func.c -o hello $ cc -c hello.c $ cc -c my_func.c $ cc hello.o my_func.o -o hello $ #include <stdio.h> #include my_func.h my_func.h /* * Header file for * my_func.c */ void say_hello(int); void say_hello(int value) char c; c = 'A' + value; printf( Hello world: %d, %c\n, value, c); my_func.c Corrado Santoro, Informatica, Introduzione al linguaggio C 22

23 Altri tipi di dato Numeri in virgola mobile: float f; double d; f = 2.345; f = 2e-3; d = -1.2e37; Enumerazioni enum LUNEDI, MARTEDI, MERCOLEDI, ; enum LUNEDI = 1, MARTEDI, MERCOLEDI, ; Corrado Santoro, Informatica, Introduzione al linguaggio C 23

24 Uno sguardo alle lib di I/O La libreria stdio (standard I/O) contiene tutte le funzioni per l'input/output su console Le funzioni principali sono: int printf(char * fmt, ); Permette di stampare valori sullo schermo, formattandone opportunamente l'output int scanf(char * fmt, ); Permette di accettare valori da tastiera, secondo i tipi definiti nel formato indicato Corrado Santoro, Informatica, Introduzione al linguaggio C 24

25 printf Il primo parametro è una stringa in cui è presente il testo che va stampato a video Se occorre stampare variabili Esse vanno indicate come parametri aggiuntivi della printf Nel primo parametro, delle opportune sequenze contrassegnate con il carattere '%' indicano dove stampare le variabili e in che formato #include <stdio.h> int main (int argc, char * argv[]) int i = 10; printf( Il valore della variabile 'i' è %d\n, i); return 0; Corrado Santoro, Informatica, Introduzione al linguaggio C 25

26 printf Il primo parametro è una stringa in cui è presente il testo che va stampato a video Se occorre stampare variabili Esse vanno indicate come parametri aggiuntivi della printf Nel primo parametro, delle opportune sequenze contrassegnate con il carattere '%' indicano dove stampare le variabili e in che formato #include <stdio.h> #include <math.h> int main (int argc, char * argv[]) int i = 10; printf( La radice quadrata di %d è %f\n, i, sqrt(i)); return 0; Corrado Santoro, Informatica, Introduzione al linguaggio C 26

27 printf: principali formati %d intero con segno (in base 10) %u intero senza segno (in base 10) %x intero con segno (in base 16) %ld intero lungo (in base 10) %lu intero lungo senza segno (in base 10) %lx intero lungo (in base 16) %c carattere %s stringa %f numero in virgola mobile (float) %lf numero in virgola mobile (double) Corrado Santoro, Informatica, Introduzione al linguaggio C 27

28 printf: formati estesi E' possibile indicare, nel formato, il numero di caratteri da utilizzare (padding) e l'allineamento a destra o sinistra int i = 15234; printf ( %10d, i); Stampa il valore di i in uno spazio di 10 caratteri allineato a destra int i = 15234; printf ( %-10d, i); Stampa il valore di i in uno spazio di 10 caratteri allineato a sinistra float v = ; printf ( %7.2f, v); Stampa il valore di v in uno spazio totale di 7 caratteri, con 2 cifre dopo la virgola, allineato a destra Corrado Santoro, Informatica, Introduzione al linguaggio C 28

29 Array Un array (statico) in C si dichiara come in Java: TIPO NOMEVAR [ DIMENSIONI ]; int my_array[10]; char a_char_array[25]; Un array non è un oggetto, ma una sequenza di int, char, etc. La lunghezza non è pertanto nota a runtime Non è possibile usare costrutti del tipo my_array.length Non esiste un controllo di boundary a runtime E' tecnicamente possibile accedere oltre l'array Es: my_array[20] = 1; Questo provoca (in genere) un fault di memoria Corrado Santoro, Informatica, Introduzione al linguaggio C 29

30 Array #include <stdio.h> array.c int main (int argc, char * argv[]) int array[20]; int i; /* riempio l'array */ for (i = 0; i < 20; i++) array[i] = ((i * 20) + 5) % 16; /* stampo il contenuto dell'array */ for (i = 0; i < 20; i++) printf( Element %d is %d\n, i, array[i]); return 0; Corrado Santoro, Informatica, Introduzione al linguaggio C 30

31 Puntatori Un puntatore rappresenta una locazione di memoria che contiene un certo dato Un variabile di tipo puntatore contiene (può contenere) un numero che rappresenta la locazione di memoria dove è possibile reperire il dato Il puntatore è indicato, nella dichiarazione, dalla presenza del carattere '*' int i; // variabile intera int * p; // puntatore ad un dato di tipo intero Corrado Santoro, Informatica, Introduzione al linguaggio C 31

32 Puntatori: esempio int i; i = 10; 108 int * pi; pi = &i; i = & = operatore indirizzo di &i = 104 pi = 104 pi = 104 i = Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata Corrado Santoro, Informatica, Introduzione al linguaggio C 32

33 Accesso tramite puntatori int i; i = 10; int * pi; pi = &i; La scrittura: *pi posta all interno di un codice C, significa accesso all informazione contenuta nella locazione di memoria puntata da pi pi = 104 i = pi = 104 punta alla locazione 104 la loc. 104 contiene la variabile i il cui valore è 10 *pi = 10; Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata Corrado Santoro, Informatica, Introduzione al linguaggio C 33

34 Accesso tramite puntatori: esempio #include <stdio.h> pi = 104 int main(int argc, char *argv[]) int i = 10; i = 10 int * pi = &i; printf ( Il valore di i è %d\n, i); printf ( tramite pi è %d\n, *pi); *pi = *pi + 20; // incremento di 20 printf ( Il nuovo valore di i è %d\n, i); printf ( tramite pi è %d\n, *pi); Il valore di i è 10 tramite pi è 10 Il nuovo valore di i è 30 tramite pi è 30 Tipo (pi) = int * Tipo (*pi) = int Corrado Santoro, Informatica, Introduzione al linguaggio C 34

35 Puntatori e passaggio per riferimento #include <stdio.h> void f(int * z, int k) *z = *z + k; k *= 2; // shortcut per k = k * 2 z = 104 k = 30 V a ria b ili lo c a li d i f int main(int argc, char *argv[]) int i = 10; int j = 30; printf( i = %d, j = %d\n, i, j); f(&i, j); printf( i = %d, j = %d\n, i, j); i = 10, j = 30 i = 40, j = i = 10 j = V a ria b ili lo c a li d i m a in Corrado Santoro, Informatica, Introduzione al linguaggio C 35

36 Puntatori e passaggio per riferimento #include <stdio.h> void f(int * z, int k) *z = *z + k; k *= 2; // shortcut per k = k * 2 z = 104 k = 60 V a ria b ili lo c a li d i f int main(int argc, char *argv[]) int i = 10; int j = 30; printf( i = %d, j = %d\n, i, j); f(&i, j); printf( i = %d, j = %d\n, i, j); i = 10, j = 30 i = 40, j = i = 40 j = V a ria b ili lo c a li d i m a in Corrado Santoro, Informatica, Introduzione al linguaggio C 36

37 Passaggio per riferimento e scanf La funzione scanf serve per acquisire dati da tastiera Il primo parametro è una stringa in cui è sono indicati i tipi da acquisire da tastiera (tramite il carattere %) I parametri successivi sono i riferimenti alle variabili su cui inserire i valori letti da tastiera #include <stdio.h> int main (int argc, char * argv[]) int i; float v; printf( Inserisci un intero: ); scanf( %d, &i); printf( Inserisci un float: ); scanf( %f, &v); return 0; Corrado Santoro, Informatica, Introduzione al linguaggio C 37

38 Vettori e puntatori #include <stdio.h> int main(int argc, char *argv[]) int v[3]; int *pi; v[0] = 2; v[1] = 4; v[2] = 5; printf ( v[0] = %d\n, v[0]); printf ( *v = %d\n, *v); pi = v; printf ( *pi = %d\n, pi[0]); pi = 104 v [2] = 5 v [1] = 4 v [0] = v[0] = 2 *v = 2 pi[0] = 2 *pi = 2 Tipo (v[x]) = int Tipo (v) = int * Corrado Santoro, Informatica, Introduzione al linguaggio C 38

39 Aritmetica dei puntatori Sia data una variabile v puntatore ad un tipo T (T *), le seguenti scritture sono equivalenti (con x intero): v[x] *(v + x) Esempio: int v[3]; int *pi; pi = v; v[0] = 2; *(v + 1) = 4; *(pi + 2) = 5; Le operazioni sui puntatori sono quindi tipizzate Dal punto di vista numerico si ha v + x * sizeof(t) pi = 104 v [2] = 5 v [1] = 4 v [0] = Corrado Santoro, Informatica, Introduzione al linguaggio C 39

40 #include <stdio.h> #include <string.h> Stringhe Una stringa in C è un array di caratteri terminato dal carattere ASCII 0 (NUL) int main(int argc, char *argv[]) char str[8]; char * p; strcpy (str, Ciao ); printf ( str = %s\n, str); p = str; printf ( p = %s, *p = %c\n, p, *p); p = 104 str [7] = 0 str [6] = 0 str [5] = 0 str [4] = 0 str [3] = o 116 str [2] = a 112 str [1] = i 108 str [0] = C 104 NON VALIDA: str = Ciao 100 Strcpy = string copy int strcpy (char * dest, char * src); Corrado Santoro, Informatica, Introduzione al linguaggio C 40

41 Stringhe #include <stdio.h> int main(int argc, char *argv[]) char * str = Ciao ; printf ( str = %s\n, str); p = o a i C str = Corrado Santoro, Informatica, Introduzione al linguaggio C 41

42 Funzioni sulle stringhe Header file string.h int strcpy (char * dest, char * src); int strncpy (char * dest, char * src, int n); int strcmp (char * dest, char * src); int strncmp (char * dest, char * src, int n); Header file stdlib.h int atoi(char * s); long atol(char * s); float atof(char * s); Corrado Santoro, Informatica, Introduzione al linguaggio C 42

43 Puntatori non inizializzati Inserimento di un intero: int main(int argc, char * argv[]) int * pi; scanf( %d, pi); printf ( %d\n, *pi);?? pi Il programma va in crash perché la scanf tenta di riferire la zona puntata da pi, ma quest ultimo non è inizializzato! Corrado Santoro, Informatica, Introduzione al linguaggio C 43

44 Allocazione statica e dinamica #include <stdio.h> int main(int argc, char *argv[]) int i[3]; i [2] i [1] i [0] La dimensione del vettore è specificata nel sorgente ed è quindi nota a compile time Il vettore è allocato in memoria staticamente A volte non è possibile stabilire a priori le dimensioni di un vettore, le quali saranno note a run time (durante l esecuzione del programma). E quindi necessario disporre di un meccanismo che permetta di creare dinamicamente un vettore delle dimensioni volute. Corrado Santoro Santoro, Laboratorio Informatica, di Introduzione Informatica al Lezione linguaggio 2 CCdS Ing. Informatica Universita di Catania 44

45 Allocazione dinamica void * malloc (int size); Permette di allocare (riservare) una zona di memoria, delle dimensioni specificate, restituendone l indirizzo (puntatore) void free (void * p); Permette di liberare una zona di memoria precedentemente allocata. Ogni zona allocata deve essere liberata esplicitamente. IN C NON ESISTE IL GARBAGE COLLECTOR! Allocazione di un vettore di interi di dimensione n int * i; i = (int *) malloc (n * sizeof (int) ); Conversione di tipo da void * a int * Numero di elementi Dimensione di ogni elemento i [n-1] i [2] i [1] i [0] i = Corrado Santoro, Informatica, Introduzione al linguaggio C 45

46 Bubblesort con allocazione dinamica #include <stdio.h> #include <stdlib.h> int main(int argc, char * argv[]) int * array; int n, i; printf ( Inserisci il numero di elementi ); scanf ( %d, &n); array = (int *) malloc (n * sizeof (int)); if (array == NULL) printf ( Impossibile allocare la memoria richiesta\n ); exit (1); for (i = 0;i < n;i++) printf ( Inserisci l elemento %d, i); scanf ( %d, &array [i]); bsort (array, n); for (i = 0;i < n;i++) printf ( elemento %d = %d\n, i, array [i]); Corrado Santoro, Informatica, Introduzione al linguaggio C 46

47 Bubblesort con allocazione dinamica void bsort (int * x, int n) int i,j; int swap; for (i = 0;i < n;i++) for (j = 0;j < n-1;j++) if (x[j] > x[j+1]) swap = x[j]; x[j] = x[j+1]; x[j+1] = swap; Corrado Santoro, Informatica, Introduzione al linguaggio C 47

48 Strutture In C è possibile creare dati strutturati, cioè variabili composte da un insieme di tipi primitivi e/o altre strutture Esempio, rappresentazione del dato studente composto da nome e numero di matricola: struct studente char nome[30]; int matricola; stud1; struct studente stud2; Accesso al singolo elemento della struttura: notazione puntata stud1.matricola = 12345; strcpy(stud2.nome, Corrado Santoro ); Corrado Santoro, Informatica, Introduzione al linguaggio C 48

49 Strutture e puntatori struct studente char nome[30]; int matricola; stud1; struct studente * p; p = &stud1 Tipo (p) = struct studente * Tipo (*p) = struct studente (*p).nome p->nome (*p).matricola p->matricola p = 104 stud1.matricola stud1.nome [2] stud1.nome [1] stud1.nome [0] Corrado Santoro, Informatica, Introduzione al linguaggio C 49

50 Esempio: bsort con strutture #include <stdio.h> #include <stdlib.h> struct studente char nome [30]; int matricola; ; int main(int argc, char * argv[]) struct studente * array; int n, i; printf ( Inserisci il numero di studenti ); scanf ( %d, &n); array = (struct studente *) malloc (n * sizeof (struct studente)); if (array == NULL) printf ( Impossibile allocare la memoria richiesta\n ); exit (1); Corrado Santoro, Informatica, Introduzione al linguaggio C 50

51 Esempio: bsort con strutture for (i = 0;i < n;i++) printf ( Inserisci l elemento %d\n, i); printf ( Nome ); scanf ( %s, array [i].nome); printf ( Matricola ); scanf ( %d, &array [i].matricola); bsort (array, n); for (i = 0;i < n;i++) printf ( elemento %d = %s, %d\n, i, array [i].nome, array [i].matricola); void bsort (struct studente * x, int n) int i,j; struct studente swap; for (i = 0;i < n;i++) for (j = 0;j < n-1;j++) if (x[j].matricola > x[j+1].matricola) swap = x[j]; x[j] = x[j+1]; x[j+1] = swap; Corrado Santoro, Informatica, Introduzione al linguaggio C 51

52 Definizione di nuovi tipi La keyword typedef permette di definire un nuovo tipo a partire da quelli già presenti typedef VECCHIO_TIPO NUOVO_TIPO; Es: definizione di un intero senza segno typedef unsigned int u_int; u_int my_uint_variable; Es: definizione di un tipo associato alla struttura studente : typedef struct char nome[30]; int matricola; t_studente; t_studente elem1; t_studente * p_elem; Corrado Santoro, Informatica, Introduzione al linguaggio C 52

53 Il mistero di argc e argv int main(int argc, char * argv[]) int main(int argc, char ** argv) I parametri argc e argv della funzione main sono gli argomenti forniti da riga di comando quando si avvia il programma Esempio: myprogram 1234 test hello Gli argomenti sono delle stringhe argv è un array di puntatori a carattere (quindi un array di stringhe) argc è il numero di argomenti passati (dimensione dell'array) Corrado Santoro, Informatica, Introduzione al linguaggio C 53

54 Visualizzazione degli argomenti #include <stdio.h> #include <stdlib.h> int main(int argc, char * argv[]) int i; printf ( Numero di argomenti %d\n, argc); for (i = 0;i < argc;i++) printf( Argomento %d: %s\n, i, argv[i]); $ cc myprogram.c -o myprogram $./myprogram 1234 test hello Numero di argomenti 4 Argomento 0:./myprogram Argomento 1: 1234 Argomento 2: test Argomento 3: hello $ Corrado Santoro, Informatica, Introduzione al linguaggio C 54

55 That's all folks! DOMANDE?? Corrado Santoro, Informatica, Introduzione al linguaggio C 55

Puntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata

Puntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata Puntatori int i = 10; int * pi = &i; pi i = 10 116 int * pi = pi contiene un informazione che mi permette di accedere ( puntare ) ad una variabile intera Un puntatore contiene un numero che indica la locazione

Dettagli

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

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I Lezione 4 Elementi lessicali e espressioni logiche Matricole 2-3 Elementi lessicali il linguaggio C ha un suo vocabolario di base i cui elementi sono detti token esistono 6 tipi di token: parole chiave

Dettagli

JAVA. import java.util.*; #include <stdio.h> public static class test { int variable; private int variable; int main (int argc, char *argv[]) {

JAVA. import java.util.*; #include <stdio.h> public static class test { int variable; private int variable; int main (int argc, char *argv[]) { JAVA C import javautil*; public static class test { private int variable; public void main (String[] args) { variable = 0; Systemoutprintln( Variable is: + variable); #include int variable; int

Dettagli

PROGRAMMA = ALGORITMO

PROGRAMMA = ALGORITMO Corso di Laurea Scienze Prof. San. Tec., Area Tecnico-Assistenziale SISTEMI DI ELABORAZIONE DELLE INFORMAZIONI Anno Accademico 2005-2006 Prof. Fausto Passariello Corso Integrato Metodologia della Ricerca

Dettagli

Dichiarazioni e tipi predefiniti nel linguaggio C

Dichiarazioni e tipi predefiniti nel linguaggio C Politecnico di Milano 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:

Dettagli

Lezione 8: Stringhe ed array multidimensionali

Lezione 8: Stringhe ed array multidimensionali Lezione 8: Stringhe ed array multidimensionali Vittorio Scarano Corso di Laurea in Informatica Università degli Studi di Salerno Struttura della lezione AVVISO: la lezione di laboratorio di 28/5 non si

Dettagli

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

#include <stdio.h> /* l esecuzione comincia dalla funzione main */ int main() Primi passi Il mio primo programma #include /* l esecuzione comincia dalla funzione main */ int main() { printf( Hello World!\n" ); return 0; /* il programma termina con successo */ } /* fine

Dettagli

Dati due punti sul piano calcolare la loro distanza

Dati due punti sul piano calcolare la loro distanza Introduzione al C Primo esempio in C Dati due punti sul piano calcolare la loro distanza Soluzione: la distanza fra due punti si calcola secondo il teorema di Pitagora, con la formula: y Distanza = (lato12

Dettagli

Introduzione alla programmazione. Alice Pavarani

Introduzione alla programmazione. Alice Pavarani Introduzione alla programmazione Alice Pavarani Il linguaggio C Creato da Dennis Ritchie nel 1972 presso i Bell Laboratories Linguaggio di programmazione procedurale, strutturato Linguaggio ad alto livello

Dettagli

Strutture Dati Dinamiche

Strutture Dati Dinamiche Strutture Dati Dinamiche Motivazioni Le variabili considerate fino a questo punto devono essere dichiarate staticamente, ossia la loro esistenza, il loro nome e la loro dimensione devono essere previsti

Dettagli

C: panoramica. Violetta Lonati

C: panoramica. Violetta Lonati C: panoramica Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010 Violetta Lonati

Dettagli

Laboratorio di Informatica I

Laboratorio di Informatica I Struttura della lezione Lezione : Elementi lessicali del C Vittorio Scarano Corso di Laurea in Informatica Elementi lessicali e token Costanti Identificatori Operatori operatori di incremento/decremento

Dettagli

L'Allocazione Dinamica della Memoria nel linguaggio C

L'Allocazione Dinamica della Memoria nel linguaggio C L'Allocazione Dinamica della Memoria nel linguaggio C Prof. Rio Chierego riochierego@libero.it http://www.riochierego.it/informatica.htm Sommario Questo documento tratta l'allocazione dinamica della memoria

Dettagli

Struct, enum, Puntatori e Array dinamici

Struct, enum, Puntatori e Array dinamici Struct, enum, Puntatori e Array dinamici Tratti dal corso del Dr. Francesco Fabozzi Corso di Informatica Tipi di dato in C Abbiamo esaminato diversi tipi di dato che il C mette a disposizione dell utente

Dettagli

Corso di Informatica A.A

Corso di Informatica A.A Corso di Informatica A.A. 2009-2010 Lezione 11 Corso di Informatica 2009-2010 Lezione 11 1 Utilizzo dei puntatori Funzioni Perche i Puntatori? I puntatori hanno tre importanti applicazioni: 1. Passaggio

Dettagli

Il linguaggio C. Puntatori e dintorni

Il linguaggio C. Puntatori e dintorni Il linguaggio C Puntatori e dintorni 1 Puntatori : idea di base In C è possibile conoscere e denotare l indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50;

Dettagli

Lezione 5: Introduzione alla programmazione in C

Lezione 5: Introduzione alla programmazione in C Lezione 5: Introduzione alla programmazione in C Laboratorio di Elementi di Architettura e Sistemi Operativi 4 Aprile 2012 Introduzione al C C vs. Java Java: linguaggio ad oggetti C: linguaggio procedurale

Dettagli

Titolo presentazione INFORMATICA. sottotitolo A.A Milano, XX mese 20XX Laboratorio n 6 Ing. Gian Enrico Conti Dott.

Titolo presentazione INFORMATICA. sottotitolo A.A Milano, XX mese 20XX Laboratorio n 6 Ing. Gian Enrico Conti Dott. Titolo presentazione INFORMATICA A sottotitolo A.A. 2017-18 Milano, XX mese 20XX Laboratorio n 6 Ing. Gian Enrico Conti Dott. Michele Zanella Info Logistiche (cont d) Calendario laboratori Data Orario

Dettagli

Primi passi col linguaggio C

Primi passi col linguaggio C Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Come introdurre un linguaggio di programmazione? Obiettivi: Introduciamo una macchina astratta

Dettagli

Il linguaggio C. Notate che...

Il linguaggio C. Notate che... 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

Dettagli

Introduzione al linguaggio C Puntatori

Introduzione al linguaggio C Puntatori Introduzione al linguaggio C Puntatori Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica 19 ottobre 2017

Dettagli

Variabili e Funzioni. Informatica 1 / 19

Variabili e Funzioni. Informatica 1 / 19 Variabili e Funzioni Informatica 1 / 19 Programmi C e Un programma C e composto da funzioni e variabili Variabile: memorizza valori appartenenti ad un insieme di definizione (dipendente dal tipo) Funzione:

Dettagli

Allocazione dinamica della memoria

Allocazione dinamica della memoria Allocazione dinamica della memoria Allocazione statica: limiti Per quanto sappiamo finora, in C le variabili sono sempre dichiarate staticamente la loro esistenza deve essere prevista e dichiarata a priori

Dettagli

Unità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo.

Unità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo. Unità Didattica 4 Linguaggio C Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo. 1 Vettori Struttura astratta: Insieme di elementi dello stesso tipo, ciascuno individuato da un indice;

Dettagli

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

Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1 Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1 Cosa è il C++ E un linguaggio di programmazione derivato dal C Può essere usato per modificare il SO Unix e i suoi derivati (Linux)

Dettagli

1

1 Manuali di C Linguaggio C B. W. Kernigan, D. M. Ritchie Jackson La guida completa al C H. Schildt McGraw-Hill Fondamenti di Informatica 1 Linguaggio C Creato nei primi anni 70 per sviluppare il S.O. Unix

Dettagli

C O P Y R I G H T ( C ) W W W. F O N D A M E N T I. I N F O

C O P Y R I G H T ( C ) W W W. F O N D A M E N T I. I N F O Il linguaggio C C O P Y R I G H T ( C ) 2 0 0 8 W W W. F O N D A M E N T I. I N F O P E R M I S S I O N I S G R A N T E D T O C O P Y, D I S T R I B U T E A N D / O R M O D I F Y T H I S D O C U M E N

Dettagli

Introduzione alla programmazione in linguaggio C

Introduzione alla programmazione in linguaggio C Introduzione alla programmazione in linguaggio C Il primo programma in C commento Header della libreria Funzione principale Ogni istruzione in C va terminata con un ; Corso di Informatica AA. 2007-2008

Dettagli

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

Compendio sottoinsieme del C++ a comune col C. (Libreria standard, Input/Output, Costanti, Dichiarazioni e typedef, Memoria Dinamica) Compendio sottoinsieme del C++ a comune col C (Libreria standard, Input/Output, Costanti, Dichiarazioni e typedef, Memoria Dinamica) Librerie 1/2 Il solo insieme di istruzioni di un linguaggio di programmazione

Dettagli

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

Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore. Linguaggio C Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore. 1 Funzioni Generalizzazione del concetto di funzione algebrica: legge che associa a valori delle variabili

Dettagli

I/O da tastiera + Alessandra Giordani Lunedì 2 maggio

I/O da tastiera + Alessandra Giordani Lunedì 2 maggio I/O da tastiera + costrutti while e if Alessandra Giordani agiordani@disi.unitn.it Lunedì 2 maggio 2011 http://disi.unitn.it/~agiordani/ Ripasso funzione printf() Usata per stampare il contenuto di una

Dettagli

Input/Output. Lettura e scrittura Caratteri e Stringhe: Terminale e file. Input/output. caratteri stringhe formattato ascii binari

Input/Output. Lettura e scrittura Caratteri e Stringhe: Terminale e file. Input/output. caratteri stringhe formattato ascii binari Input/Output Lettura e scrittura Caratteri e Stringhe: Terminale e file Input/output console file caratteri stringhe formattato ascii binari Linguaggio ANSI C Input/Output - 1 La libreria standard del

Dettagli

Corso di Fondamenti di Informatica. Puntatori e Allocazione Dinamica

Corso di Fondamenti di Informatica. Puntatori e Allocazione Dinamica Corso di Fondamenti di Informatica Puntatori e Allocazione Dinamica I puntatori (Richiamo) Il C++ prevede puntatori a dati di qualsiasi natura, semplici o strutturati e puntatori a funzione. In particolare

Dettagli

Variabili dinamiche. Obiettivi: Presentare le variabili dinamiche, allocate e deallocate nell area HEAP, e le funzioni malloc e free

Variabili dinamiche. Obiettivi: Presentare le variabili dinamiche, allocate e deallocate nell area HEAP, e le funzioni malloc e free Variabili dinamiche Obiettivi: Presentare le variabili dinamiche, allocate e deallocate nell area HEAP, e le funzioni malloc e free 1 Tipi di variabili in C In C è possibile classificare le variabili in

Dettagli

Lezione 11: Liste a Puntatori e Input/Output

Lezione 11: Liste a Puntatori e Input/Output Lezione 11: Liste a Puntatori e Input/Output Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università degli Studi di Salerno Struttura della lezione Richiamo: strutture (struct)

Dettagli

Uso avanzato dei puntatori Allocazione dinamica della memoria

Uso avanzato dei puntatori Allocazione dinamica della memoria Uso avanzato dei puntatori Allocazione dinamica della memoria Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica

Dettagli

Gestione dinamica della memoria

Gestione dinamica della memoria Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 Gestione dinamica della memoria Pietro Di Lena - pietro.dilena@unibo.it A pessimistic programmer sees the array as half empty.

Dettagli

Esercitazione 11. Liste semplici

Esercitazione 11. Liste semplici Esercitazione 11 Liste semplici Liste semplici (o lineari) Una lista semplice (o lineare) è una successione di elementi omogenei che occupano in memoria una posizione qualsiasi. Ciascun elemento contiene

Dettagli

Ogni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo.

Ogni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo. Ogni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo. int a = 5; a 5 α=&a Esistono in C particolari variabili dette puntatori che possono

Dettagli

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

Tipi e Valori. Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna Tipi e Valori Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/ Tipi e Valori 2 / 26 Ringraziamenti prof. Mirko Viroli, Università

Dettagli

Introduzione al linguaggio C Primi programmi

Introduzione al linguaggio C Primi programmi Introduzione al linguaggio C Primi programmi Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica

Dettagli

Linguaggio C - sezione dichiarativa: costanti e variabili

Linguaggio C - sezione dichiarativa: costanti e variabili Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C - sezione dichiarativa: costanti e variabili La presente

Dettagli

Laboratorio di linguaggi

Laboratorio di linguaggi lezioni: lunedi 9-11, aula A al corso Laboratorio di linguaggi laboratorio in tre turni: martedi 11-13 () giovedi 9-11 () venerdi 11-13 (Andrea Grosso) laboratorio: iscriversi all esame Corso A LABORATORIO

Dettagli

LIBRERIE STANDARD in C. LIBRERIE STANDARD in C

LIBRERIE STANDARD in C. LIBRERIE STANDARD in C LIBRERIE STANDARD in C La libreria standard del C è in realtà un insieme di librerie Per usare una libreria, non occorre inserirla esplicitamente nel progetto: ogni ambiente di sviluppo sa già dove cercarle

Dettagli

I Fondamenti del Linguaggio

I Fondamenti del Linguaggio Linguaggio C I Fondamenti del Linguaggio Linguaggio di Programmazione Linguaggio formale per la descrizione di programmi per calcolatori Sintassi vicina al linguaggio umano Se non ci fossero, bisognerebbe

Dettagli

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

Tipi di dati strutturati e Linguaggio C. Record o strutture Il costruttore struct in C Tipi di dati strutturati e Linguaggio C Record o strutture Il costruttore struct in C Dati strutturati Record Un record o struttura è una struttura dati ottenuta aggregando elementi di tipo diverso che

Dettagli

Ingresso ed Uscita in C. Informatica 1 / 15

Ingresso ed Uscita in C. Informatica 1 / 15 Ingresso ed Uscita in C Informatica 1 / 15 Input e Output in C Linguaggio C: progettato per essere semplice e con poche istruzioni Non esistono istruzioni di ingresso / uscita (I/O)!!! Ingresso ed uscita

Dettagli

Allocazione dinamica della memoria

Allocazione dinamica della memoria Allocazione dinamica della memoria Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Violetta Lonati

Dettagli

Linguaggio C. Vettori, Puntatori e Funzioni Stringhe. Università degli Studi di Brescia. Prof. Massimiliano Giacomin

Linguaggio C. Vettori, Puntatori e Funzioni Stringhe. Università degli Studi di Brescia. Prof. Massimiliano Giacomin Linguaggio C Vettori, Puntatori e Funzioni Stringhe Università degli Studi di Brescia Prof. Massimiliano Giacomin SCHEMA DELLA LEZIONE RELAZIONE TRA VETTORI E PUNTATORI (e le stringhe letterali come caso

Dettagli

Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente. per variabili di tipo array, in cui dover

Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente. per variabili di tipo array, in cui dover ALLOCAZIONE STATICA: LIMITI Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente la loro esistenza deve essere prevista e dichiarata a priori Questo può rappresentare un problema

Dettagli

LIBRERIE STANDARD in C Le librerie standard

LIBRERIE STANDARD in C Le librerie standard LIBRERIE STANDARD in C La libreria standard del C è in realtà un insieme di librerie Per usare una libreria, non occorre inserirla esplicitamente nel progetto: ogni ambiente di sviluppo sa già dove cercarle

Dettagli

Allocazione Dinamica. Allocazione Statica. malloc() La funzione malloc()

Allocazione Dinamica. Allocazione Statica. malloc() La funzione malloc() Allocazione Statica Finora abbiamo visto che le variabili sono sempre definite staticamente. Questo è un limite perché la loro esistenza deve essere prevista e dichiarata a priori. In particolare per variabili

Dettagli

Alfabeto ed elementi lessicali del linguaggio C

Alfabeto ed elementi lessicali del linguaggio C Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 Alfabeto ed elementi lessicali del linguaggio C Pietro Di Lena - pietro.dilena@unibo.it s t a t i c s h o r t l e g s ; i n

Dettagli

ELEMENTI DI INFORMATICA. Linguaggio C

ELEMENTI DI INFORMATICA. Linguaggio C Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica ELEMENTI DI INFORMATICA http://agile.diee.unica.it A.A. 2015/2016 Ing. Marco Ortu Diee, secondo piano Tel. 070-6755774 mail:

Dettagli

Introduzione al C. Lez. 1 Elementi. Rossano Venturini

Introduzione al C. Lez. 1 Elementi. Rossano Venturini Introduzione al C Lez. 1 Elementi Rossano Venturini rossano@di.unipi.it Pagine del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start http://algoritmica.spox.spoj.pl/alglab2013 Lezioni

Dettagli

! Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente

! Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente ! Per quanto sappiamo finora, in C le variabili sono sempre definite staticamente!!la loro esistenza deve essere prevista e dichiarata a priori! Questo può rappresentare un problema soprattutto per variabili

Dettagli

Gestione dei file. File di testo e binari

Gestione dei file. File di testo e binari Gestione dei file Un file e definito come un oggetto, presente nel file system, costituito da una sequenza continua di bytes Un file, per poter essere utilizzato, deve essere aperto Successivamente e possibile

Dettagli

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

Lezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit Lezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università degli Studi di Salerno Struttura della lezione

Dettagli

Linguaggio C: Stringhe Valeria Cardellini

Linguaggio C: Stringhe Valeria Cardellini Linguaggio C: Stringhe Valeria Cardellini Corso di Calcolatori Elettronici A.A. 2018/19 Università degli Studi di Roma Tor Vergata Dipartimento di Ingegneria Civile e Ingegneria Informatica Argomenti q

Dettagli

Fondamenti di Informatica T-1 modulo 2

Fondamenti di Informatica T-1 modulo 2 Fondamenti di Informatica T-1 modulo 2 Contenuti Parametri passati a linea di comando 2 Overview Il risultato del processo di compilazione/linking è un file eseguibile (un programma) Abbiamo visto almeno

Dettagli

Introduzione al C. Lezione 4 Allocazione dinamica della memoria. Rossano Venturini. Pagina web del corso

Introduzione al C. Lezione 4 Allocazione dinamica della memoria. Rossano Venturini. Pagina web del corso Introduzione al C Lezione 4 Allocazione dinamica della memoria Rossano Venturini rossano@di.unipi.it Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Lezioni di ripasso

Dettagli

Università degli Studi di Ferrara

Università degli Studi di Ferrara Università degli Studi di Ferrara Corso di Laurea in Matematica - A.A. 2017-2018 Programmazione Lezione 4 il Linguaggio C Docente: Michele Ferrari - michele.ferrari@unife.it Nelle lezioni precedenti Problemi

Dettagli

Linguaggi di programmazione

Linguaggi di programmazione Linguaggi di programmazione C LINGUAGGI DI PROGRAMMAZIONE Il potere espressivo di un linguaggio è caratterizzato da: quali tipi di dati consente di rappresentare (direttamente o tramite definizione dell

Dettagli

Il blocco che costituisce il corpo di una funzione/procedura può contenere dichiarazioni di variabili. Esempio:

Il blocco che costituisce il corpo di una funzione/procedura può contenere dichiarazioni di variabili. Esempio: Variabili locali Il blocco che costituisce il corpo di una funzione/procedura può contenere dichiarazioni di variabili. void leggivettore(int v[], int dim) int i; /* i E UNA VARIABILE LOCALE */ for (i

Dettagli

Unità Didattica 5 Linguaggio C. Stringhe. Accesso a file ASCII. Strutture.

Unità Didattica 5 Linguaggio C. Stringhe. Accesso a file ASCII. Strutture. Unità Didattica 5 Linguaggio C Stringhe. Accesso a file ASCII. Strutture. 1 Stringhe Una stringa è una sequenza di caratteri (es: ciao, sd!n29dnqa ); In C non esiste una variabile di tipo stringa; Una

Dettagli

Caratteri e stringhe

Caratteri e stringhe Caratteri e stringhe Caratteri Dato che un computer può memorizzare esclusivamente sequenze di bit, per memorizzare un carattere (e quindi testi) è necessario stabilire una convenzione che associa a un

Dettagli

Il linguaggio C. Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1

Il linguaggio C. Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1 Il linguaggio C I linguaggi di programmazione ad alto livello sono linguaggi formali ( sintassi e semantica formalmente definite) però sono compatti e comprensibili. Le tipologie di linguaggi sono: procedurali

Dettagli

Il linguaggio C Il linguaggio C. Caratteristiche del C. Caratteristiche del C. Linguaggi di Programmazione I. Ferdinando Cicalese

Il linguaggio C Il linguaggio C. Caratteristiche del C. Caratteristiche del C. Linguaggi di Programmazione I. Ferdinando Cicalese 03-10-2003 Il linguaggio C Linguaggio general-purpose Il linguaggio C Creato nel 1972 nei Bell Labs da Dennis Ritchie su PDP11 Usato per il Sistema Operativo Unix da Ken Thompson Negli anni 80 nasce ANSI

Dettagli

Fondamenti di Informatica 2

Fondamenti di Informatica 2 Fondamenti di Informatica 2 della prova scritta del 6 Aprile 2006 Esercizio 1 (4 punti) Date le seguenti variabili int A[] = 2,3,7,-2,5,8,-4; int N = 7; int x = -1; Scrivere la porzione di codice che inserisce

Dettagli

Struttura dei programmi e Variabili

Struttura dei programmi e Variabili Linguaggio C Struttura dei programmi e Variabili 1 La struttura generale dei programmi! Struttura del programma: Direttive Funzioni Dichiarazioni Istruzioni Di assegnamento direttive Di ingresso e uscita

Dettagli

puntatori Lab. Calc. AA 2006/07 1

puntatori Lab. Calc. AA 2006/07 1 puntatori Lab. Calc. AA 2006/07 1 Attributi di un oggetto nome o identificatore; tipo; valore (o valori); indirizzo; Lab. Calc. AA 2006/07 2 Indirizzo Consideriamo la dichiarazione con inizializzazione:

Dettagli

Linguaggio C: introduzione

Linguaggio C: introduzione Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C: introduzione La presente dispensa e da utilizzarsi

Dettagli

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

Tipi e Valori. Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna Tipi e Valori Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/ Linguaggio C - Tipi e Valori 2 Ringraziamenti prof. Mirko Viroli,

Dettagli

Il linguaggio C Gestione della memoria

Il linguaggio C Gestione della memoria Il linguaggio C Gestione della memoria Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/ Linguaggio C - Gestione della memoria

Dettagli

Lezione integrativa: Dal C++ al C

Lezione integrativa: Dal C++ al C Lezione integrativa: Dal C++ al C Mario Sabbatelli smario@ce.unipr.it Palazzina 3 - int. 5792 www.ce.unipr.it/people/smario Contenuto della lezione Nel corso si utilizza l'ansi C Storia e standard panoramica

Dettagli

Passaggio dei parametri Per valore Il valore viene copiato dall environment esterno all environment della funzione o procedura Cambiamenti dei paramet

Passaggio dei parametri Per valore Il valore viene copiato dall environment esterno all environment della funzione o procedura Cambiamenti dei paramet Per valore Il valore viene copiato dall environment esterno all environment della funzione o procedura Cambiamenti dei parametri così passati non si riflettono sull environment esterno Per riferimento

Dettagli

Allocazione dinamica della memoria

Allocazione dinamica della memoria Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Tipi di memoria dati Nella macchina astratta C esistono tre tipi di memoria per allocare

Dettagli

Consideriamo un vettore allocato dinamicamente

Consideriamo un vettore allocato dinamicamente Libreria per per la la gestione/manipolazione dei dei vettori Consideriamo un vettore allocato dinamicamente int * v; v = (int *) malloc (n * sizeof (int) ); Conversione di tipo da void * a int * Numero

Dettagli

Passaggio dei parametri

Passaggio dei parametri Passaggio dei parametri Per valore Il valore viene copiato dall environment esterno all environment della funzione o procedura Cambiamenti dei parametri così passati non si riflettono sull environment

Dettagli

Esercitazioni di Fondamenti di Informatica - Lez. 8 27/11/2018

Esercitazioni di Fondamenti di Informatica - Lez. 8 27/11/2018 Esercitazioni di Fondamenti di Informatica - Lez. 8 27/11/2018 Esercizi sull allocazione dinamica della memoria in C Il codice di questi esercizi é contenuto nella cartella parte1 1. Implementare una lista

Dettagli

Struttura dei programmi C

Struttura dei programmi C Programmi C Struttura dei Programmi C Dichiarazione delle variabili Operazioni di Ingresso/Uscita Fondamenti di Informatica 1 Struttura dei programmi C Un programma C deve contenere, nell'ordine: una parte

Dettagli

Introduzione al C. Lez. 1 Elementi. Rossano Venturini

Introduzione al C. Lez. 1 Elementi. Rossano Venturini Introduzione al C Lez. 1 Elementi Rossano Venturini rossano.venturini@isti.cnr.it URL del corso http://www.cli.di.unipi.it/doku/doku.php/informatica/all-b/start Lezioni - Lunedì 16-18 Aula M - Martedì

Dettagli

I puntatori. DD Cap.7 pp KP Cap.6 pp

I puntatori. DD Cap.7 pp KP Cap.6 pp I puntatori DD Cap.7 pp.245-280 KP Cap.6 pp.219-235 Cos è un puntatore Un puntatore è una variabile che assume come valore un indirizzo di memoria. Il nome di una variabile fa quindi riferimento ad un

Dettagli

Puntatori e array. Violetta Lonati

Puntatori e array. Violetta Lonati Puntatori e array Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Violetta Lonati Puntatori e array

Dettagli

Complementi. - Ridefinizione di tipo - - Costrutto switch - - Programmazione su più file - - Parametri della funzione main - Funzione system -

Complementi. - Ridefinizione di tipo - - Costrutto switch - - Programmazione su più file - - Parametri della funzione main - Funzione system - Complementi - Ridefinizione di tipo - - Costrutto switch - - Programmazione su più file - - Parametri della funzione main - Funzione system - Università degli Studi di Brescia Prof. Massimiliano Giacomin

Dettagli

Introduzione al C. Lez. 1 Elementi

Introduzione al C. Lez. 1 Elementi Introduzione al C Lez. 1 Elementi Introduzione al C Strumento che adotteremo in queste esercitazioni per implementare e testare gli algoritmi visti a lezione Configurazione minimale suggerita: Editing

Dettagli

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

Linguaggio C. Tipi predefiniti. Università degli Studi di Brescia. Prof. Massimiliano Giacomin. Prof. M. Giacomin Linguaggio C Tipi predefiniti Università degli Studi di Brescia Prof. Massimiliano Giacomin Elementi di Informatica e Programmazione Università di Brescia 1 Il concetto di tipo (reprise) Nome che indica

Dettagli

Lezione IX Gestione dinamica della memoria

Lezione IX Gestione dinamica della memoria Programmazione e Laboratorio di Programmazione Lezione IX Gestione dinamica della memoria Programmazione e Laboratorio di Programmazione: Gestione dinamica della memoria 1 Operatore sizeof() Buffer: una

Dettagli

Prof. Pagani Corrado INTRODUZIONE AL LINGUAGGIO C

Prof. Pagani Corrado INTRODUZIONE AL LINGUAGGIO C Prof. Pagani Corrado INTRODUZIONE AL LINGUAGGIO C IL LINGUAGGIO C Nel 1972 Dennis Ritchie nei Bell Laboratories progettò il linguaggio C Il linguaggio possiede tutti i costrutti di controllo dei linguaggi

Dettagli

Il linguaggio C Strutture

Il linguaggio C Strutture Il linguaggio C Strutture Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/ Linguaggio C -- Strutture 2 Ringraziamenti Questi

Dettagli

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione

Dettagli

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - Programma

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - Programma Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione

Dettagli