blocco funzione - Cremona
Transcript
blocco funzione - Cremona
Turbo C++ Versione 1.01 per DOS prelevabile da: http://community.borland.com/museum/ richiede registrazione gratuita - Elenco delle parole chiave definite dal C ANSI auto const double float int short struct unsigned break continue else for long signed switch void case default enum goto register sizeof typedef volatile char do extern if return static union while Le parole chiave unitamente alla sintassi formano il linguaggio di programmazione… - Struttura generale di un programma C - BLOCCO dichiarazioni globali main ( ) { variabili locali sequenza di istruzioni } f1( ) { variabili locali sequenza di istruzioni } f2 ( ) { variabili locali sequenza di istruzioni } . . . FUNZIONE fN( ) { variabili locali sequenza di istruzioni } Gianluca Attolini - A.A. 2001-2002 laboratorio del corso Fondamenti di Informatica - Politecnico di Milano sede di Cremona pagina 1 - Per poter eseguire un programma C… 1. 2. 3. 4. Editazione del codice sorgente Compilazione del programma Collegamento del programma con le funzioni di libreria Esecuzione del programma (editare) (compilare) (linkare) (eseguire) - Identificatori in un programma C… Sono definiti identificatori i nomi tramite i quali è possibile fare riferimento a: variabili, funzioni, etichette, e altri oggetti definibili dal programmatore. Un identificatore è costituito da più caratteri (di solito il primo deve essere una lettera o al più può essere un under-score il trattino di sottolineatura "_") non può essere una cifra. Affinché gli identificatori siano significativi si devono considerare i primi 6 caratteri per utilizzi esterni al file ed i primi 31 caratteri internamente al file (fare riferimento al manuale del compilatore in uso). Lettere MAIUSCOLE e minuscole vengono considerate distinte. - Tipi di Dati - Nel linguaggio C esistono cinque tipi di dati primari: descrizione carattere intero reale doppia precisione indefinito Tipo char int float double void bit occupati 8 16 32 64 indefinito valori ammissibili da 0 a 255 da -32.768 a 32.767 da 3,4E-38 a 3,4E+38 da 1,7E-308 a 1,7E+308 --- Il linguaggio mette poi a disposizione dei modificatori di tipo che possono modificare i tipi primari tranne void: 1. 2. 3. 4. signed unsigned long short Il linguaggio C permette poi di definire tipi di dati aggregati come: strutture, unioni, campi di bit, tipi enumerativi, tipi definiti dall'utente. 5. VALORI DI VERITA' In C non esiste il tipo di dati che in altri linguaggi è chiamato Boolean. Il linguaggio C utilizza la convenzione che: il valore ZERO rappresenta il valore FALSO, e il valore UNO rappresenta il valore VERO (estendendo i valori NON ZERO rappresentano il VERO, quindi qualsiasi valore DIVERSO DA ZERO rappresenta il VERO). Gianluca Attolini - A.A. 2001-2002 laboratorio del corso Fondamenti di Informatica - Politecnico di Milano sede di Cremona pagina 2 - printf e scanf printf Sends formatted output to stdout Syntax: int printf(const char *format [, argument,.]); Prototype in: stdio.h Remarks: printf formats a variable number of arguments according to the format, sending the output to stdout. Returns the number of bytes output. In the event of error, it returns EOF. Type character d i o u x X f e g E G c character s % n p Input argument Format of output Numeric types signed decimal int. signed decimal int. unsigned octal int. unsigned decimal int. unsigned hexadecimal int (with a, b, c, d, e, f). integer unsigned hexadecimal int (with A, B, C, D, E, F). floating pt signed value of the form [-] dddd.dddd. floating pt signed value of the form [-]d.dddd or e[+/-]ddd. floating pt signed value in either e or f form, based on given value and precision. Trailing zeros and the decimal point are printed if necessary. floating pt Same as e, but with E for exponent. floating pt Same as g, but with E for exponent if e format used. Character types Single character. string ptr Prints characters until a nullterminator is pressed or precision is reached. none The % character is printed. Pointers ptr to int Stores (in the location pointed to by the input argument) a count of the chars written so far. pointer Prints the input argument as a pointer; format depends on which memory model was used. It will be either XXXX:YYYY or YYYY (offset only). integer integer integer integer integer Gianluca Attolini - A.A. 2001-2002 laboratorio del corso Fondamenti di Informatica - Politecnico di Milano sede di Cremona pagina 3 scanf Performs formatted input from stdin Syntax: int scanf(const char *format [, ...]); Prototype in: stdio.h ...scanf type characters The following table lists the ...scanf type characters, the type of input expected by each, and in what format the input ill be stored. The information in this table is based on the assumption that no optional characters, specifiers, or modifiers (*, width, or size) were included in the format specifier. Type character d D o O i I u U x X e, E f g, G s c % n p Expected input Type of argument Numerics Decimal integer Pointer to int (int *arg) Decimal integer Pointer to long (long *arg) Octal integer Pointer to int (int *arg) Octal integer Pointer to long (long *arg) Decimal, octal, or Pointer to int (int *arg) hexadecimal integer Decimal, octal, or Pointer to long (long *arg) hexadecimal integer Unsigned decimal Pointer to unsigned int integer (unsigned int *arg) Unsigned decimal Pointer to unsigned long integer (unsigned long *arg) Hexadecimal integer Pointer to int (int *arg) Hexadecimal integer Pointer to long (long *arg) Floating point Pointer to float (float *arg) Floating point Pointer to float (float *arg) Floating point Pointer to float (float *arg) Characters Character string Pointer to array of characters(char arg[]) Character Pointer to character (char *arg) if a field width W is given along with the c-type character (such as %5c). Pointer to array of W characters(char arg[W]) % character No conversion done; % is stored. Pointers Pointer to int (int *arg). The number of characters read successfully up to %n is stored in this int. Hexadecimal form Pointer to an object (far* or near*)%p YYYY:ZZZZ or conversions default to the pointer size ZZZZ native to the memory model. Gianluca Attolini - A.A. 2001-2002 laboratorio del corso Fondamenti di Informatica - Politecnico di Milano sede di Cremona pagina 4 - riassumendo… - Che cosa ci insegna il nostro primo programma in c… codice sorgente osservazioni la direttiva #include <stdio.h> serve per includere nel programma le informazioni relative alla libreria predefinita del linguaggio c che contiene le funzioni di input/output la funzione main () identifica sempre il programma principale e rappresenta l'inizio dell'esecuzione del programma /* Questo è il classico primo programma.*/ #include <stdio.h> main () { printf("\nCiao Mondo!!!"); } le parentesi graffe { } identificano un blocco nel codice sorgente si possono/devono mettere i commenti racchiudendoli tra i simboli /* */ le stringhe di testo vengono delimitate dalle virgolette " " è possibile mettere nelle stringhe delle sequenze che indicano caratteri speciali ad esempio \n indica il carattere New line che fa si che il testo che lo segue vada a capo ogni istruzione deve essere conclusa con il punto e virgola codice sorgente int numero, fattoriale; ; osservazioni per poter essere usata una variabile deve prima essere dichiarata, scrivendo il tipo seguito dal nome della variabile (o da un elenco di nomi di variabili di quel tipo) tipi di dati primari: int char float double void numero = 400; int numero = 600; l'istruzione di assegnamento si indica con l'uguale = è buona cosa che una variabile prima di essere utilizzata venga inizializzata, ossia le venga assegnato un valore noto. E' possibile farlo anche quando viene dichiarata. Gianluca Attolini - A.A. 2001-2002 laboratorio del corso Fondamenti di Informatica - Politecnico di Milano sede di Cremona pagina 5 - Operatori ed espressioni in C - l'insieme degli operatori del linguaggio permettono di costruire espressioni. Gli operatori all'interno delle espressioni hanno un ordine di precedenza. operatori ARITMETICI * + / % COMPARAZIONE < > <= descrizione moltiplicazione addizione divisione minore resto della divisione maggiore minore o uguale maggiore o uguale sottrazione >= == != LOGICI && || INCREMENTO ++ -- uguale diverso (Fare attenzione un solo = è l'assegnazione) ! AND OR NOT incremento decremento modificano il valore degli oggetti a cui vengono applicati, a secondo l'uso prefisso o postfisso restituiscono il valore prima o dopo la modifica esempio: num++ - restituisce num e poi lo incrementa ++num - incrementa num e lo restituisce incrementato CONDIZIONALE <esp1>?<esp2>:<esp3> restituisce <esp2> se <esp1> è vero altrimenti restituisce <esp3> esempio: (a>b)? a:b restituisce il massimo tra a e b ASSEGNAMENTO il simbolo uguale = in C viene considerato un = operatore e quindi restituisce anch'esso un valore. esempio: a=b; memorizza in a il valore di b e restituisce b l'operatore di assegnamento è associativo a destra esempio: a=b=0; il valore 0 viene assegnato sia ad a che a b a+=b; assegna ad a il valore b sommato ad a Gianluca Attolini - A.A. 2001-2002 laboratorio del corso Fondamenti di Informatica - Politecnico di Milano sede di Cremona pagina 6 - Puntatori Permettono la gestione di strutture dinamiche (create e distrutte dall'utente). Un Puntatore è una variabile che contiene l'indirizzo di memoria di un'altra variabile. In C un puntatore si dichiara anteponendo al nome della variabile il simbolo * operatori descrizione applicato ad una variabile restituisce il puntatore ad essa applicato ad un puntatore restituisce la variabile puntata & * - Istruzioni di Controllo Condizionali Il costrutto if permette la gestione del flusso delle istruzioni. Altro costrutto condizionale è lo switch . Inoltre esiste l'operatore ?, già visto, che a volte è una alternativa ad if sintassi costrutti if <condizione> istruzione; else istruzione; descrizione la clausola else è opzionale se la condizione vale VERO (cioè qualsiasi valore diverso da zero) viene eseguita l'istruzione (o il blocco) corrispondente all'if; nel caso di valore FALSO della condizione, se è presente il ramo else, sarà eseguita l'istruzione (o il blocco) corrispondente all'else if <condizione> istruzione; else if <condizione> istruzione; else if <condizione> istruzione; . . . else istruzione; è una struttura a scala dove vengono valutate le espressioni condizionali dall'alto verso il basso, quando si verifica una condizione viene eseguita l'istruzione corrispondente e viene abbandonata la catena di if se non è presente l'ultimo else, qualora non sia verificata nessuna delle condizioni, non viene eseguita nessuna istruzione della catena Gianluca Attolini - A.A. 2001-2002 laboratorio del corso Fondamenti di Informatica - Politecnico di Milano sede di Cremona pagina 7 sintassi costrutti switch <variabile>{ case costante1: sequenza istruzioni break; case costante2: sequenza istruzioni break; . . . default: sequenza istruzioni } descrizione sebbene il costrutto if else if consenta di realizzare test multipli, a volte risulta poco leggibile l'istruzione migliore per il test multiplo e rappresentata dallo switch con questo costrutto si confronta il valore di una variabile con una lista di costanti che possono essere di tipo int o char quando si verifica una uguaglianza viene eseguito il blocco di istruzioni corrispondenti fino al break la parte default è opzionale, e se è presente viene eseguita nel caso in cui non si verifichi alcuna corrispondenza NOTE 1. i test del costrutto switch possono solo verificare l'uguaglianza, a differenza di quelli verificare condizioni di qualsiasi tipo if che possono 2. non possono esistere due case con lo stesso valore di costante nello stesso costrutto switch, possono invece avere lo stesso valore due case che appartengono a due costrutti switch annidati 3. se nel costrutto switch vengono usate costanti di tipo char queste vengono automaticamente convertite nel corrispondente valore int Gianluca Attolini - A.A. 2001-2002 laboratorio del corso Fondamenti di Informatica - Politecnico di Milano sede di Cremona pagina 8 - Istruzioni di Controllo Iterative I costrutti di loop consentono di eseguire un insieme di istruzioni fino a quando non si verifica una data condizione. sintassi costrutti for( inizializzazione; condizione; incremento ) istruzione; descrizione l'inizializzazione è, nella sua forma più semplice, una istruzione di assegnamento con la quale si determina il valore iniziale della variabile di controllo del loop la condizione è una espressione relazionale usata per valutare la variabile di controllo al fine di determinare il momento dell'uscita dal loop l'esecuzione dell'istruzione prosegue sino a quando la condizione resta VERA, quando diviene FALSA l'esecuzione prosegue con l'istruzione successiva al for nota: istruzione può essere una istruzione vuota, una istruzione singola oppure un blocco l'incremento definisce il modo in cui la variabile di controllo cambia il suo valore ad ogni ripetizione del loop il loop viene eseguito fino a quando la condizione rimane VERA. Quando la condizione diviene FALSA l'esecuzione while(condizione) prosegue dall'istruzione subito dopo il loop istruzione; la condizione può essere una qualsiasi espressione valida in C do{ istruzione; }while (condizione) istruzioni break continue exit a differenza del for e del while il do-while verifica la condizione alla fine del ciclo e non all'inizio!!! descrizione oltre che nello switch può essere messa in qualsiasi loop, e ne forza la terminazione, cioè fa in modo che l'istruzione successiva sia quella subito dopo il loop forza una nuova iterazione del loop a partire dal suo inizio provoca l'immediata terminazione dell'intero programma e ritorno al Sistema Operativo Gianluca Attolini - A.A. 2001-2002 laboratorio del corso Fondamenti di Informatica - Politecnico di Milano sede di Cremona pagina 9 - Direttive del Preprocessore lo standard ANSI ammette delle direttive che sono sempre precedute dal simbolo # La direttiva #define consente di creare delle costanti simboliche che possono poi essere usate nel codice del programma sintassi direttiva #define identificatore stringa descrizione la stringa vine sostituita all'dentificatore ogni volta che viene incontrata nel codice sorgente La direttiva #include chiede al compilatore di includere un determinato file all'interno del codice sorgente sintassi direttiva #include nomefile descrizione il nome del file può essere racchiuso tra parentesi angolari (esempio <stdio.h> ) o tra virgolette (esempio "stdio.h" ) se il nomefile è comprensivo del percorso completo di dove ricercare il file, la ricerca del file si limita al percorso indicato se non si specifica il percorso ed il nomefile è compreso tra doppi apici "" il file viene ricercato nella directory corrente se non si specifica il percorso ed il nomefile è compreso tra parentesi angolari <> il file viene ricercato nelle directory standard Gianluca Attolini - A.A. 2001-2002 laboratorio del corso Fondamenti di Informatica - Politecnico di Milano sede di Cremona pagina 10