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 entro il 26-04-4 divisione in turni: sito del corso 3 Contenuto al corso al C panoramica sul C semplici programmi in C struttura generale di un programma semplice introduzione ai puntatori introduzione al input/output linguaggio general purpose Panoramica sul C creato nel 72 da Dennis Ritchie nei Bell Labs usato per creare UNIX anni 80: standardizzato (ANSI: American National Standards Institute) la base di altri linguaggi (C++, Java) 2 4
Panoramica sul C un linguaggio piccolo : poche parole chiave di facile apprendimento un linguaggio efficiente (e pulito): operatori potenti e efficienti efficiente aritmetica degli indirizzi un linguaggio abbastanza modulare facile realizzazione di progetti di grandi dimensione meno modulare di Java Semplici programmi Programma che stampa Hello, World!! sul video: /* File: helloworld.c Primo programma in C */ printf("hello, World!!\n"); 5 7 Buona programmazione Compilazione di helloworld.c commentare il codice nomi con significato per i variabili scrivere codice leggibili indentare il codice helloworld.c /* File: helloworld.c Primo programma in C */... stdio.h /* prototipi delle funzioni di stdio */... Compilatore helloworld.o Libreria di Funzioni Standard I/O Linker helloworld.exe helloworld.c: fornito dal programmatore stdio.h: fornito dal ambiente C Libreria di Funzioni Standard I/O: funzioni precompilati, fornito dal ambiente C 6 8
Semplici programmi /* File: summa.c Somma di due numeri floating point */ double x=1.3,y=3.4,sum=x+y; Semplici programmi Programma con funzione che calcola fattoriale: /* File: fact.c Programma con funzione fattoriale */ #define FACT_MAX 50 printf("somma: %1.4f\n",sum); 9 11 un byte indirizzo del byte 208 215 216 223 8 byte per memorizzare x numero a virgola mobile rappresentato qua e 1.3 8 byte per memorizzare y numero a virgola mobile rappresentato qua e 3.4 8 byte per memorizzare sum numero a virgola mobile rappresentato qua e 4.7 // funziona che restituisce il fattoriale int fact(int f) if(f>fact_max) printf(" Too large argument for fact()\n"); return -1; if(f<=1) return 1; return f*fact(f-1); 10 12
ai puntatori int x; x=100; printf(" %d\n", fact(x)); Puntatore: una variabile che contiene un indirizzo int a=5; int *p; p=&a; printf(" Indirizzo di a e %p\n", p); 13 15 Struttura generale di un programma semplice dichiarazioni globali tipo restituito funzione_1(elenco parametri) istruzioni... tipo restituito funzione_n(elenco parametri) istruzioni tipo restituito main(elenco parametri) istruzioni 204 4 byte per memorizzare a numero intero rappresentato qua e 5 4 byte per memorizzare p che e un indirizzo (puntatore) dopo p=&a, l indirizzo memorizzato qua e, cioe "p punta ad a" 14 16
ai puntatori Per dichiarare un puntatore * 4 byte per memorizzare a puntatore ad un intero: puntatore ad un carattere: puntatore ad un numero floating point: Aritmetica (non completa) dei puntatori: se a è un intero, &a è il suo indirizzo se p è un puntatore, *p è il valore puntata da p p1=&a p2=&p1 204 204 numero intero rappresentato qua e 5 4 byte per memorizzare p1 che e un indirizzo di un intero (un puntatore) 4 byte per memorizzare p2 che e un indirizzo di un indirizzo (un puntatore ad un puntatore) 17 19 Puntatore al puntatore Chiamata per valore int a=5,*p1,**p2; p1=&a; p2=&p1; printf(" a: %d\n", *p1); printf(" a: %d\n", **p2); void try_to_change(int x) x=5; int x=10; try_to_change(x); 18 20
4 byte per memorizzare x, la variabile locale del main numero intero rappresentato qua e 10 4 byte per memorizzare x, la variabile locale del main inizializzato con 10, poi la funzione change le assegna 5 600 603 4 byte per memorizzare x, la variabile locale della funziona try_to_change viene inizializzato con 10 quando la funziona e chiamata, poi le viene assegnato 5 ma questo non cambia il valore della variabile x del main 600 603 4 byte per memorizzare x, la variabile locale della funziona change che e un puntatore ad (indirizzo di) un intero viene inizializzato con (indirizzo di x del main) quando la funziona e chiamata tramite questo puntatore il valore della variabile x del main puo essere cambiato 21 23 Chiamata per riferimento al input/output void change(int *x) *x=5; int x=10; change(&x); Per scivere dati: printf(stringa_di_controllo, v1, v2,...); stringa_di_controllo : definisce cosa e come viene scritto v1, v2,... : variabili da stampare Nella stringa del controllo: %d per scrivere un numero intero %f per scrivere un numero floating point %c per scrivere un carattere 22 24
int x=5; double y=2.5; printf(" La somma di %d e %d risulta in %d\n", x,10,x+10); printf(" La somma di %f e %f risulta in %f\n", y,1.2,y+1.2); int x; float y; scanf("%d",&x); scanf("%f",&y); printf(" x: %d, y: %f\n", x, y); 25 27 al input/output Per leggere dati: scanf(stringa_di_controllo, indirizzo); stringa_di_controllo : definisce cosa e come viene scritto indirizzo : indirizzo dove viene letto l input Nella stringa del controllo: %d per leggere un numero intero %f per leggere un numero floating point %c per leggere un carattere 26