CORSO DI LAUREA IN SCIENZE E TECNOLOGIE INFORMATICHE CESENA CORSO DI PROGRAMMAZIONE A.A. 2013-14 Dispensa 3 Labratri Dtt. Mirk Ravaili e-mail: mirk.ravaili@unib.it http://www.prgrammazine.inf
Crs di Prgrammazine A.A. 2013-14 Dispensa 3 3.2 Output frmattat: printf() Per visualizzare un numer, ccrre utilizzare le funzini per l utput frmattat. La funzine printf() accetta un numer variabile di argmenti, cme minim un. Il prim e unic argment richiest è la stringa di frmat, che indica cme frmattare l utput. Gli argmenti pzinali sn variabili ed espressini di cui visualizzare i valri Ad esempi: L istruzine printf( Cia a tutti! ); visualizza il messaggi: Cia a tutti sull scherm. In quest cas è utilizzat un unic argment: la stringa di frmat che cntiene la stringa letterale da visualizzare sull scherm L istruzine printf( %d,i); visualizza il valre della variabile intera i. La stringa di frmat cntiene sltant l indicatre %d, che indica di mstrare un singl inter decimale. Il secnd argment è il nme della variabile L istruzine printf( %d più %d uguale %d,a, b, a+b); visualizza (suppnend che le variabili a e b cntengan rispettivamente 2 e 3) 2 più 3 uguale 5 sull scherm. In quest cas vi sn quattr argmenti: una stringa di frmat cntenente il test letterale e indicatri di frmat, due variabili ed un espressine di cui visualizzare i valri. La stringa di frmat di printf() può cntenere quant segue: Zer, un più cmandi di cnversine che indican cme visualizzare un valre dell elenc degli argmenti. Un cmand di cnversine è cstituit da % seguit da un più caratteri I caratteri che nn fann parte di un cmand di cnversine sn visualizzati csì cme sn. Di seguit sn descritti i cmpnenti del cmand di cnversine. Quelli tra parentesi sn pzinali: %[mdificatre][campminim][precisine][mdificatrelunghezza]specificacnversine dve: mdificatre può essere una cmbinazine (in qualsiasi rdine) dei seguenti simbli (tra parentesi i simbli): (-) il risultat della cnversine e' allineat a sinistra all' intern del camp definit da campminim, il default e' l' allineament a destra (+) specifica che il segn davanti al numer verrà sempre stampat. Il risultat di cnversini di tipi cn segn inizia cn + (se psitivi) - (se negativi); il default e' che il segn (-) appare sl davanti ai negativi (spazi) inserisce un spazi davanti al valre se il prim carattere nn e' un segn (#) frmat alternativ (cn piccle variazini) per la maggir parte delle specifiche di cnversine Se il carattere di cnversine e' (ttale) e se il valre da cnvertire e' divers da zer, il prim carattere stampat e' 0. Se il carattere di cnversine e' x X (esadecimale) e se il valre da cnvertire nn e' null, i primi caratteri stampati sarann 0x 0X a secnda che la direttiva sia x X. 0 (zer) il camp viene riempit cn zeri invece che cn spazi (il default) campminim: se il valre cnvertit ha men caratteri del camp quest viene riempit da spazi, il valre di campminim pu' essere un inter *. In quest' ultim cas il valre deve essere un inter inserit nella lista degli argmenti della printf, subit prima dell' espressine interessata da quest frmat. Pagina 2 di 9
Crs di Prgrammazine A.A. 2013-14 Dispensa 3 precisine: un valre nella frma.n (cn n inter ppure * se viene lett nella lista degli argmenti) dve n e' il : minim numer di cifre per le specifiche i,d,,u,x,x minim numer di cifre dp il punt decimale per le specifiche a,a,e,e,f,f massim numer di cifre significative per le specifiche g,g mdificatrelunghezza: dichiara che la successiva specifica di cnversine deve essere applicata a un stttip inter particlare mdificatre. La lettera h seguita da un dei caratteri di cnversine d, i, u,, x X indica che l'argment e' un shrt int un unsigned shrt int. Il mdificatre l (elle) cn gli stessi caratteri di cnversine, indica che l'argment e' un lng int un unsigned lng int. Il mdificatre L seguit da un dei caratteri di cnversine e, E, f, g G indica che l'argment e' un lng duble il successiv specificatre (i d) si applica ad una espressine signed unsigned char signed unsigned shrt int signed unsigned lng int signed unsigned lng lng int specificacnversine: è l unic bbligatri (a parte %) Stt sn elencati i caratteri di cnversine ed il lr significat: d, i Visualizza un inter cn segn in ntazine decimale u x, X c e, E f s Visualizza un inter senza segn di ntazine decimale Visualizza un inter in ntazine ttale senza segn Visualizza un inter in ntazine esadecimale senza segn. Si utilizza x minuscl per l utput minuscl e X maiuscl per l utput maiuscl Visualizza un singl carattere (indicat dal cdice ASCII) Visualizza un flat un duble in ntazine scientifica ( ad esempi 123.45 è visualizzat cme 1.234500e+002) sei cifre sn visualizzate a destra del punt decimale a men che nn sia specificata un altra precisine cn l indicatre f. si utilizzan e E per l utput minuscl maiuscl Visualizza un flat un duble in ntazine decimale (ad esempi 123.45 è visualizzat cme 123.450000). Sei cifre sn visualizzate a destra. Visualizza una stringa % Visualizza il carattere % La funzine printf() restituisce un valre che individua il numer di caratteri stampati, se il valre è negativ segnala un errre. 3.3 Le Istruzini Un istruzine è un cmand cmplet che indica al cmputer di eseguire un particlare cmpit. In generale in C le istruzini vengn scritte una per gni riga anche se alcune pssn ccupare anche più righe. Tutte le istruzini in C (eccett le direttive #define, #include...) devn terminare cn un punt e virgla (;). Pagina 3 di 9
Crs di Prgrammazine A.A. 2013-14 Dispensa 3 3.3.1 Spazi bianchi e istruzini Cn spazi bianchi ci si riferisce ai veri e prpri spazi, ai caratteri di tabulazine e alle righe vute presenti nel cdice srgente. Il cmpilatre C nn cnsidera gli spazi bianchi e quand legge un istruzine dal cdice srgente cerca il carattere terminatre (il punt e virgla) ignrand tutti gli spazi bianchi presenti. Quindi l istruzine: y=4+3; è equivalente a quella seguente: y = 4 + 3; che a sua vlta è equivalente a: y = 4 + 3; In quest md viene lasciata al prgrammatre la scelta sulla mdalità di frmattazine del prpri cdice. Cmunque nn è cnsigliat utilizzare una frmattazine cme nell ultim esempi: le istruzini dvrebber essere intrdtte una per riga seguend un schema standard per la spaziatura delle variabili e degli peratri. Guardare i vari esempi inseriti nelle dispense i srgenti in allegat per rendersi cnt di cme pter frmattare il prpri cdice. Il C ignra gli spazi bianchi eccett quand questi si trvan all intern di cstanti stringa letterali: infatti in quest cas gli spazi vengn cnsiderati cme parti delle stringhe (quindi cme caratteri della stringa). Una stringa è una sequenza di caratteri e in particlare le cstanti stringhe letterali sn stringhe racchiuse tra dppi apici che vengn interpretate dal cmpilatre in maniera asslutamente letterale, spazi cmpresi. Quindi per esempi l istruzine (anche se slitamente nn usata): printf( Frza Cesena! ); è crretta, mentre quella che segue genera un errre in fase di cmpilazine: printf( Frza Cesena ); Per andare a cap in un istruzine, quand ci trviam in crrispndenza di una cstante stringa letterale ccrre utilizzare il carattere barra inversa (\) prima dell interruzine. La frma crretta per l esempi spra riprtat quindi sarà: printf( Frza\ Cesena ); 3.3.2 Istruzini nulle Se si inserisce un punt e virgla da sl su una riga si ttiene istruzine nulla ciè un istruzine che nn esegue alcuna perazine. 3.3.3 Istruzini cmpste Un istruzine cmpsta, slitamente chiamata blcc, è un grupp di due più istruzini C racchiuse tra parentesi graffe. Ad esempi la przine di cdice che segue è un blcc: { printf( Frza Cesena! ); Pagina 4 di 9
Crs di Prgrammazine A.A. 2013-14 Dispensa 3 } printf( Devi vincere ); In C i blcchi pssn essere utilizzati in qualsiasi punt in cui sia pssibile utilizzare un istruzine singla. Le parentesi graffe pssn essere psizinate in qualsiasi punt ad esempi: {printf( Frza Cesena! ); printf( Devi vincere );} cmunque si cnsiglia di psizinare le graffe su righe diverse, mettend csì in evidenza l inizi e la fine del blcc. In quest md, ltre che rendere il cdice più leggibile, è pssibile accrgersi se ne è stata dimenticata qualcuna. 3.4 Le Espressini In C un espressine è una qualsiasi csa che deve essere valutata cme un valre numeric. Le espressini in C pssn avere qualsiasi livell di cmplessità. 3.4.1 Espressini Semplici Le espressini più semplici cnsistn di un unic ggett, ad esempi una variabile, una cstante letterale simblica. Le cstanti letterali vengn valutate secnd il lr valre, le cstanti simbliche invece cn il valre assegnat lr dalla direttiva #define, le variabili vengn valutate cn il valre assegnate lr dal prgramma. Espressine TASSO Descrizine Una cstante simblica 28 Una cstante letterale stipendi Una variabile 3.678 Una cstante letterale 3.4.2 Espressini Cmplesse Le espressini cmplesse cnsistn di più espressini semplici cmbinate tra di lr attravers degli peratri. Per esempi: 3 + 9 è un espressine frmata dalle due cstanti letterali 3 e 9 e dall peratre smma +. L espressine 3 + 9 viene valutata cme 10. Si pssn scrivere anche espressini mlt più cmplesse: 3.78 + 56 stipendi * mesi / girni Quand un espressine cntiene più peratri, cme nell esempi spra riprtat, il risultat dipende dalla precedenza degli peratri. Cnsideriam la seguente espressine: y = b + 17; in quest cas nell istruzine viene calclat il valre dell espressine b + 17 e viene assegnat il risultat alla variabile y. A sua vlta l istruzine y = b + 17 è un altra espressine che ha il valre nella variabile a sinistra dell uguale, quindi è pssibile anche la scrittura: k = y = b + 17; Pagina 5 di 9
Crs di Prgrammazine A.A. 2013-14 Dispensa 3 in quest cas il risultat viene assegnat sia a y che a k, in particlare prima viene valutata l espressine b + 17, il su valre assegnat alla variabile y, ed in fine il valre di y assegnat alla variabile k. Quindi alla fine dell espressine k e y avrann l stess valre. In C sn pssibili anche espressini di quest tip: k = 8 + (y = 3 + 4); in quest cas dp l esecuzine dell istruzine la variabile y avrà il valre 7, mentre la variabile x il valre 15. In quest cas però le parentesi sn essenziali per la crretta cmpilazine dell istruzine. 3.5 Gli Operatri Un peratre è un simbl che indica al linguaggi di eseguire un perazine, un azine su un più perandi. In C tutti gli peratri sn visti cme delle espressini. 3.5.1 Operatre di Assegnament L peratre di assegnament è il simbl uguale (=). Il su significat e utilizz all intern di un prgramma è divers dal su cnsuet utilizz in matematica. Scrivend: y = k; NON significa che y è uguale a k ma invece assegna il valre di k a y. In un istruzine di assegnament la parte a destra del segn uguale può essere una qualsiasi espressine, mentre la parte di sinistra deve essere il nme di una variabile, quindi la sintassi risulta la seguente: variabile = espressine; Quand l istruzine viene eseguita prima viene valutata l espressine pi il risultat viene assegnat alla variabile. Quindi per esempi: y = 8 + 9; prima viene calclata la smma di 8 + 9 pi il risultat viene assegnat alla variabile y. Alla fine dell istruzine avrem che y avrà il valre 17. Cnsiderand invece: y = 11; k = y + 7; prima viene assegnat a y il valre 11 pi, nell istruzine successiva, viene calclat y + 7 e il risultat assegnat a k. Quindi alla fine delle 2 righe di cdice spra riprtate avrem che y sarà uguale a 11 e k a 18. 3.5.2 Operatri matematici Gli peratri matematici effettuan perazini aritmetiche e si dividn in due categrie: peratri unari e peratri binari. Gli peratri matematici binari peran su due perandi. Questi peratri che cmprendn anche le principali perazini aritmetiche sn elencati nella tabella sttstante: Operatre Simbl Azine Esempi Addizine + Smma i due perandi x + y Sttrazine - Sttrae il secnd perand dal prim x - y Mltiplicazine * Mltiplica i due perandi x * y Pagina 6 di 9
Crs di Prgrammazine A.A. 2013-14 Dispensa 3 Divisine / Divide il prim perand per il secnd x / y Rest (mdul) % Frnisce il rest della divisine del prim perand per il secnd x % y Alcuni esempi di utilizz: /* Prim esempi di utilizz degli peratri matematici */ #include <stdi.h> int main() { int a, b, ris; a = 10; b = 5; ris = a b; printf( risultat di %d-%d=%d\n,a,b,ris); a = 7; b = 3; ris = a * b; printf( risultat di %d*%d=%d\n,a,b,ris); a = 21; b = 7; ris = a / b; printf( risultat di %d/%d=%d\n,a,b,ris); a = 21; b = 10; ris = a / b; printf( risultat di %d/%d=%d\n,a,b,ris); a = 13; b = 5; ris = a % b; printf( risultat di %d %% %d=%d\n,a,b,ris); } return 0; Gli peratri matematici unari hann quest nme in quant richiedn un unic perand. Il C dispne di due peratri unari: increment e decrement e pssn essere utilizzati sl cn le variabili e mai cn le cstanti. Il lr scp è quell di aggiungere sttrarre un unità dall perand specificat. Operatre Simbl Azine Esempi Incrementa ++ Incrementa l perand di una unità y++ ++y Decrementa -- Decrementa l perand di una unità y-- --y Ad esempi le istruzini: ++x; --y; equivalgn a: x = x + 1; Pagina 7 di 9
Crs di Prgrammazine A.A. 2013-14 Dispensa 3 y = y y; Gli peratri pssn essere pstfissi prefissi. Queste due sintassi nn sn equivalenti, ma differiscn per quant riguarda il mment in cui viene effettuata l perazine: Gli peratri prefissi mdifican il prpri perand prima che ne venga utilizzat il valre Gli peratri pstfissi mdifican il prpri perand dp avere utilizzat il valre Vediam un esempi: x = 7; y = x++; Dp l esecuzine di queste due istruzini x vale 8 e y vale 7. Prima il valre di x è stat assegnat a y e sl allra x è stat incrementat. Se cnsideriam invece le seguenti istruzini: x = 7; y = ++x; Dp l esecuzine di queste due istruzini x vale 8 e y vale 8. L peratre = è l peratre di assegnament e nn un peratre di cnfrnt. Eventuali successive mdifiche al valre di x nn hann effett su y. Cnsideriam un esempi: #include <stdi.h> int main() { int a, b; a = 7; b = 7; } return 0; Il risultat del prgramma: 7 6 6 5 5 4 4 3 3 2 La precedenza degli peratri segue il seguente rdine: incrementi e decrementi unari mltiplicazini, divisini e resti smme e sttrazini Se un espressine cntiene più di un peratre cn l stess valre di precedenza le relative perazini vengn eseguite da sinistra a destra. E pssibile mdificare la precedenza attravers l utilizz di parentesi tnde. Ad esempi: Pagina 8 di 9
Crs di Prgrammazine A.A. 2013-14 Dispensa 3 y = 4 + 2 * 3; Dp l istruzine y vale 10. Prima viene eseguit 2*3 al risultat viene aggiunt 4 e il risultat assegnat a y. Cnsideriam: y = 12 % 5 * 2; L peratre % (mdul) e * (mltiplicazine) hann la stessa precedenza quindi le istruzini vengn eseguite da sinistra a destra: prima viene calclat 12%5 che viene 2 che mltiplicat per 2 fa 4 quindi alla fine a y viene assegnat il valre 4. Se utilizziam le parentesi: y = 12 % (5 * 2); Prima viene eseguita la stt espressine individuata dalle parentesi: 5*2 pi il calcl del mdul. Quindi alla fine dell istruzine a y viene assegnat il valre 2. Pagina 9 di 9