Guida linguaggio C++

October 19, 2017 | Author: Carlo Polato | Category: Iteration, Method (Computer Programming), Control Flow, Variable (Computer Science), Computer Program
Share Embed Donate


Short Description

semplice guida alla programmazione nel linguaggio di programmazione c++...

Description

Dispense su:

Linguaggio di programmazione C a cura di Angela Scaringella e Sofia Bochicchio

1

Prefazione Questa dispensa costituisce il testo di riferimento, in aggiunta agli argomenti trattati nel libro di testo, per la preparazione all’esame di base di Informatica, sia per gli studenti di Sociologia Nuovo Ordinamento, sia per gli studenti di Goru, sia per gli studenti di Sociologia Vecchio Ordinamento. Si tratta di una introduzione elementare al linguaggio C che riporta le lezioni e le esercitazioni tenute durante il corso. E’ destinata soprattutto agli studenti che non hanno potuto frequentare il corso e permette di acquisire gli elementi iniziali della programmazione che sono richiesti per sostenere l’esame.

Introduzione I linguaggi di programmazione sono alla base dell’Informatica, perché consentono di generare il software, sia quello di base (sistemi operativi), sia quello applicativo utilizzato nei vari aspetti dell’elaborazione di dati, come ad esempio operazioni eseguite da un programma, sequenze di passi eseguiti da una macchina per l’automazione di processi produttivi, controlli e protocolli di telecomunicazione, le interfacce utente, raccolta di dati da Internet, ecc. I linguaggi di programmazione occupano una posizione intermedia tra il linguaggio naturale (tipicamente inglese), comprensibile dalle persone, e quello binario (composto da sequenze delle sole cifre 0 e 1), comprensibili solo dal computer, l'unico linguaggio che pilota direttamente le unità fisiche dell'elaboratore (memoria centrale e cpu). Il linguaggio C, come qualsiasi altro linguaggio di programmazione (confrontare il Cap. 10 del libro di testo), si compone di parole e regole; le prime generate da un dato alfabeto o simboli secondo un metodo prefissato, le seconde costituiscono la portante grammaticale e sintattica del linguaggio che consente di aggregare le parole per formare frasi di senso compiuto, cioè ammissibili. I linguaggi di programmazione sono costituiti da un alfabeto, da una sintassi e da una semantica. La sintassi riguarda l’insieme di regole che devono essere rispettate per scrivere programmi corretti. Il linguaggio dei programmi C è costituito da tutte le stringhe (insiemi di caratteri o simboli) che soddisfano la proprietà di poter essere analizzate da un compilatore C, senza che venga rilevato alcun errore sintattico. La costruzione delle stringhe avviene secondo una metodologia che, in informatica è nota con il nome “Grammatiche formali”. Una grammatica formale (come introdotta da Chomsky) è un sistema che comprende: • variabili terminali, • variabili, • un insieme di regole di produzione e • un insieme di assiomi. La grammatica permette di operare su stringhe di simboli attraverso le regole di produzione che fanno passare da una stringa ad un’altra a partire dagli assiomi. Il linguaggio generato dalla grammatica è l’insieme di stringhe composte solo da variabili terminali che si possono ottenere a partire dagli assiomi operando con le regole di produzione. In seguito, ogni argomento introdotto è supportato da esempi e da esercizi svolti.

2

Relazione tra i linguaggi di programmazione e il concetto di algoritmo Si richiama il concetto di algoritmo e dalla sua rappresentazione mediante i diagrammi di flusso, questo ci permetterà di gettare una buona base sulla logica sottostante ai linguaggi di programmazione (confrontare il Cap. 1 del libro di testo). I computer, conosciuti anche con il nome di elaboratori elettronici o calcolatori o sistemi di elaborazione dati, sono strumenti d’ausilio alla risoluzione di una vasta gamma di problemi (non tutti!!, cfr cap.1, par. 1.4 del libro di testo) ed hanno la caratteristica di svolgere un gran numero di operazioni in maniera rapida e corretta. Questa capacità deriva dal fatto che sono macchine programmabili e cioè che accettano istruzioni e comandi imposti dall’uomo secondo modalità ben precise. I linguaggi di programmazione permettono di tradurre algoritmi interpretabili da un sistema di elaborazione. Un algoritmo scritto in un linguaggio di programmazione viene chiamato programma e il processo di scrittura del programma, a partire dall’algoritmo, viene chiamato codifica. Svolgere un’attività di programmazione (o, brevemente, programmare) significa quindi scrivere programmi che risolvano problemi destinati ad essere eseguiti in maniera automatica su un calcolatore. In generale, è necessario definire il problema nel modo più preciso possibile: tanto più precisa sarà la sua descrizione, tanto più facile risulterà scrivere il programma che lo risolve. E’ necessario quindi specificare in maniera rigorosa i dati noti e i risultati attesi. Esempio: Dato un importo, denominato imponibile, si deve calcolare un secondo importo, denominato lordo, derivante dall’applicazione dell’IVA al 20%. Di seguito è riportata la soluzione: 1. Si esegue la moltiplicazione imponibile*20; 2. La cifra ottenuta al passo 1 si divide per 100; 3. Il risultato cercato è dato dalla somma della cifra ottenuta al passo 2 con il valore imponibile. Dati iniziali: imponibile e aliquota IVA; risultato atteso: importo lordo. Si osservi che, dato un qualsiasi problema, i dati iniziali vengono sempre trasformati (o meglio,elaborati) al fine di produrre il risultato. Inoltre, con l’elencazione dei 3 passi precedenti, abbiamo dato origine ad un algoritmo. Si richiama la definizione di algoritmo: a) E’ una successione finita di azioni, o passi, che determinano la risoluzione di un problema. Si intuisce che, dati due algoritmi che risolvono lo stesso problema, viene preferito quello col minor numero di passi. b) Le azioni specificate devono essere univocamente interpretabili ovvero devono essere comprensibili senza ambiguità da colui che le esegue (solitamente un computer). c) Se la successione di azioni viene ripetuta in momenti diversi ma con gli stessi dati iniziali, allora deve essere restituito sempre lo stesso risultato; si dice che l’algoritmo deve essere non casuale. d) In ogni istante, la prossima azione da intraprendere deve essere univocamente determinabile a partire dall’analisi del valore di particolari dati. Esistono vari modi di rappresentare un algoritmo e precisamente: - in forma discorsiva per punti (elenco di passi); - mediante uno pseudo-linguaggio di programmazione; - in forma grafica (diagramma a blocchi ) utilizzando simboli standard. 3

Esempio_1 : Consideriamo un gioco con un dado: “una volta lanciato un dado, il giocatore vince solo se è uscito un numero n maggiore di 3, altrimenti perde. In caso di vincita verrà pagato un premio di euro 5*n ”. - In termini di algoritmo si ha la seguente successione di passi elementari: 1. Calcola un numero naturale n tra 1 e 6; 2. Se n appartiene all’insieme {1,2,3} allora vai al passo 4; 3. n appartiene all’insieme {4,5,6} ed è stata vinta la somma di euro 5*n; 4. Il gioco è terminato. - In pseudo-codice (simile al linguaggio Pascal) : program Gioco Con Dado: begin {inizio dell’algoritmo} n:=CalcolaUnNumeroNaturaleTra1e6: if n>=4 then {è uscito un numero maggiore di 3} begin premio:=n*5{calcola il premio vinto} end end {fine dell’algoritmo}

- Per la forma grafica dobbiamo introdurre i simboli fondamentali dell’algoritmo. La struttura logica della soluzione di un problema può essere visualizzata mediante un diagramma a blocchi (diagramma di flusso).

Simbolo terminale (Inizio e Fine)

Simbolo di ingresso (Input)

*

Simbolo di annotazione (Commento)

Simbolo di collegamento

4

Simbolo di elaborazione (Processo)

Simbolo di decisione (il computer può decidere solo se vero o falso)

Tornando all’ esempio_1, possiamo così graficamente rappresentare lo sviluppo dell’algoritmo:

Inizio

Estrai n

n >= 4 ?

si

Hai vinto n*5 euro!

n o

Fine gioco

Vediamo subito un altro esempio per chiarire alcuni punti.

5

Esempio_2: “Uno studente immette il suo voto: se il voto è uguale o superiore a 18 lo studente viene promosso, se è minore di 18 viene bocciato”.

Inizio

Leggi voto

voto >=18

Si

Promosso

n o

Bocciato

Fine

Da notare che non abbiamo dovuto specificare, con un altro controllo, se il voto fosse minore di 18. Se volessimo inserire più voti ? Mettiamo il caso che: “uno studente inserisca 3 voti e che voglia trovare la media.” Esempio_3:

6

Inizio

somma=0; voto; voti ins=0;

Leggi voto

si somma= somma + voto

voti_ins = voti_ins + 1

voti_ins < 3?

no

Media = somma / 3

Fine

Questa è la logica lineare da seguire se si vuole sviluppare un algoritmo, ora siamo pronti per introdurre la storia del linguaggio C.

LE BASI DELL’AMBIENTE C Il C e' stato progettato da Dennis Ritchie su UNIX, e discende dal B, ideato nel 1970 da Ken Thompson, e il B a sua volta discende dal BCPL, sviluppato da Martin Richards. Nel 1983 l'Istituto Nazionale Americano per gli Standard (ANSI) ha iniziato una standardizzazione del C, terminata nel 1989 con la definizione dell'ANSI C, che differisce di poco dal C di K&R (Kernigan & Ritchie). In seguito e' stato aggiornato secondo la filosofia della programmazione orientata agli oggetti, in questo caso si parla di C++, e il suffisso dei file solitamente e'.CPP. Il C consente la gestione di bit, byte e indirizzi di memoria, a differenza di altri linguaggi di alto livello come basic e pascal, per questo alle volte e' definito un linguaggio di medio livello, ossia piu' vicino al basso livello, ossia all'assembler. Tra l'altro ha solo 32 parole chiave, ben poche al confronto del basic, che ne ha solitamente piu' di 150. Inoltre il C e' un linguaggio portabile, ossia un listato scritto in ANSI C puo' essere compilato su ogni compilatore standard di ogni sistema operativo. I compilatori C richiedono un listato scritto in formato testo, che si puo' scrivere con un editor qualsiasi o con quello integrato nel compilatore. Il file di testo del programma, che di solito ha come suffisso “.c” e viene chiamato “programma sorgente”, viene compilato, cioè tradotto e 7

trasformato in un nuovo file chiamato “programma oggetto” (o modulo), per distinguerli l’uno dall’altro, il programma trasformato e reso comprensibile solo alla macchina assume un nuovo nome cui bisogna assegnare il suffisso .OBJ. Tutti i sistemi C consistono generalmente di tre parti: l’ambiente, il linguaggio e la libreria standard del C. I programmi scritti in C passano tipicamente attraverso 6 fasi, prima di essere eseguiti. Queste sono: editare, preelaborare, compilare, linkare (collegare), caricare ed eseguire. La prima fase consiste nella scrittura del codice (editing) in un file: questa si esegue con un programma chiamato editor. Il programmatore scrive un programma in C con l’editor e, se necessario, eseguirà delle correzioni. Il programma sarà quindi immagazzinato in un dispositivo di memoria di massa, come un disco. Il nome del file del programma C dovrà terminare con l’estensione .c. Ad esempio il blocco note, il “vi” e l’emacs sono editor largamente utilizzati sui sistemi windows e UNIX. In seguito, il programmatore immetterà il comando di compilazione del programma. Il compilatore tradurrà il programma C nel codice di un linguaggio macchina (detto anche codice oggetto). In un sistema C, prima che incominci la fase di traduzione, sarà eseguito automaticamente il programma preprocessore. Il preprocessore del C obbedisce a comandi speciali, chiamati direttive del preprocessore, con le quali si indica che sul programma dovranno essere eseguite determinate manipolazioni,prima della compilazione vera e propria. Tali manipolazioni consistono generalmente nella inclusione di altri file in quello da compilare,e nella sostituzione di simboli speciali con un testo del programma. La quarta fase è chiamata linking (collegamento). I programmi scritti in C contengono tipicamente dei riferimenti a funzioni definite altrove,per esempi nelle librerie standard o in quelle di un gruppo di programmatori che lavorano su un particolare progetto. Di conseguenza, il codice oggetto prodotto dal compilatore conterrà tipicamente dei “buchi” dovuti a queste parti mancanti. Il linker collega il codice oggetto con quello delle funzioni mancanti per produrre una immagine eseguibile (senza pezzi mancanti). La fase quinta è chiamata caricamento. Prima che possa essere eseguito,un programma dovrà essere caricato nella memoria. Questa operazione sarà eseguita dal loader (caricatore) che prenderà l’immagine eseguibile dal disco e la trasferirà nella memoria. Finalmente, sotto il controllo della sua CPU, il computer eseguirà il programma, una istruzione per volta. Quando si scrive il codice è buona abitudine indentarlo, ovvero, ad ogni istruzione si va a capo e si lascia una tabulazione orizzontale, questo permette al programmatore una più chiara lettura di quello che si sta facendo; per commentare più righe si usano i simboli: /* (Slash asterisco), per aprire il commento, e */ (asterisco slash) per chiudere; // doppio slash per commentare una sola riga. Vediamo subito un programma che visualizzi "Buon giorno!" sullo schermo: #include

/* Include la libreria standard, che non e' altro che un file di testo con delle strutture e macro predefinite. Questi file sono detti Header, infatti terminano con il suffisso .h */

main( )

/* Definiamo la funzione main, che non riceve nessun valore come argomento. Il programma iniziera' l'esecuzione a partire da questa funzione, che deve essere presente in ogni programma */

{

/* Le istruzioni della funzione sono racchiuse tra aperta e chiusa parentesi graffa */ 8

printf(“Buon giorno!\n”);

/* Chiamiamo la funzione di libreria printf che si occupa di ,visualizzare sullo schermo. Da notare che \n indica il newLine, ossia serve per andare a capo. Fondamentale: ogni istruzione termina con ; punto e virgola/ /* chiudiamo la funzione principale main( ) */

}

In questo programma si notano già degli accorgimenti fondamentali. Innanzitutto la funzione main(), è la funzione principale, viene eseguita per prima ed è sempre presente in ogni programma. Inoltre si nota che gli argomenti da passare alle funzioni vanno messi tra le parentesi ( ) che si trovano dopo il nome della funzione stessa. Nel caso di main( ), non viene messo alcun argomento, infatti non richiede argomenti. La parentesi graffa aperta { apre il corpo di ogni funzione , la parentesi graffa chiusa } la chiude. La porzione di programma racchiusa in esse è anche detta blocco. Quando si chiama la funzione printf( ) della libreria immettiamo come argomento il testo da stampare tra “ ” (doppi apici ), come vuole la sua sintassi. All'interno della stringa di caratteri abbiamo la sequenza di escape \n, che equivale al carattere newline, posiziona il cursore all’inizio della riga successiva. Sono disponibili altri caratteri non editabili, ad esempio \t , tabulazione orizzontale, muove il cursore alla tabulazione successiva; \r, ritorno carrello, posiziona il cursore all’inizio della riga corrente; \a, allarme, fa suonare il cicalino del sistema; \\ backslash,visualizza un carattere backslash in una istruzione printf; \’, apice singolo; \” virgolette.

Dichiarazione di variabili Gli elementi di base di un programma sono le variabili e le costanti. In C le variabili devono essere dichiarate prima di essere usate e all’inizio del programma. Si possono definire molti tipi di variabili numeriche, ad esempio con int si indicano variabili che possono contenere solo numeri interi, con float variabili che possono contenere numeri con la virgola. Ecco una tabella riassuntiva dei tipi di dati definibili: Tipo

Lungh.

unsigned char char unsigned int short int int unsigned long long float double long double

8 bits 8 bits 16 bits 16 bits 16 bits 32 bits 32 bits 32 bits 64 bits 80 bits

Range (valori minimi e massimi) 0 fino 255 -128 "" 127 0 "" 65,535 -32,768 "" 32,767 -32,768 "" 32,767 0 "" 4,294,967,295 -2,147,483,648 "" 2,147,483,647 3.4 * (10**-38) "" 3.4 * (10**+38) 1.7 * (10**-308) "" 1.7 * (10**+308) 3.4 * (10**-4932) "" 1.1 * (10**+4932)

9

Come si vede i tipi interi (char, int, long) possono essere unsigned, ossia solo positivi, in questo modo contengono il doppio di valori positivi, risparmiandosi di supportare quelli negativi. I tipi a virgola mobile, ossia float, double e long double, sono comunque signed. Se si va fuori del raggio di azione di una variabile, ad esempio se si aggiunge 100 ad una variabile int che vale gia' 32700, il risultato e' -32736! Questo per l'aritmetica in complemento a 2, che per semplificare fa ricominciare dal numero più basso quando si supera quello più alto, dato che non e' segnalato alcun errore e il risultato erroneo può essere usato, attenzione a non far eccedere mai i tipi! Per dichiarare una variabile basta scrivere il tipo seguito dal nome che decidiamo per la variabile stessa, ad esempio: int numero; float numero;

/*nel caso in cui volessi inserire un numero intero */ /*nel caso in cui volessi inserire un numero con la virgola */

Nel primo caso abbiamo dichiarato una variabile di tipo intero e di nome numero. Da notare che abbiamo terminato la dichiarazione con un ;. Il nome da dare alla variabile e' a piacere, le uniche limitazioni sono: non può iniziare con un numero, ne con simboli come &,/,!,... , non si possono dare come nomi le parole chiave di comandi del C, come if, else, int, float... Il C è case sensitive, ovvero, le lettere maiuscole e quelle minuscole sono differenti in C, per cui NUMERO e' diverso da Numero o da NumeRO. Le parole chiave come printf() devono essere scritte in minuscolo, e solitamente anche le variabili sono scritte con caratteri minuscoli, nonostante si possano usare anche caratteri maiuscoli. La regola quindi sarebbe di scrivere le variabili a lettere minuscole, e se si vuole si può usare il carattere “_”. Per esempio, si può fare: int numero_1; int prova1_prova; Come assegnare un valore ad una variabile: numero = 1000; abbiamo introdotto l'operatore di assegnamento “ = ”, che assegna il valore ad una variabile. In questo caso abbiamo dato a numero il valore 1000. Da notare che scrivere: numero = 500+500; numero = (250+250)+500; è equivalente, infatti si può mettere anche un’espressione, che sarà risolta in fase di precompilazione, dato che si assegna sempre 1000. A questo punto ci manca di sapere come stampare il valore di una variabile a video con la funzione printf( ). Abbiamo già visto che per stampare un testo normale basta includerlo tra “ ” ,virgolette. Per inserire una variabile nella stringa occorre aggiungere un %d nel punto che ci interessa, e mettere il nome della variabile dopo la chiusura delle “ ”, in questo modo: printf (“Il valore di Numero e' %d.”,numero);

10

Al momento della stampa il %d sarà sostituito dal valore della variabile numero. Da notare la virgola che separa i doppi apici “ ” dalla variabile. La specifica di conversione %d è usata in una stringa di controllo del formato di una funzione printf per indicare che sarà visualizzato un intero, mentre in una stringa di controllo del formato di una funzione scanf per indicare che sarà immesso un intero. La funzione scanf della libreria standard stdio.h è utilizzata per leggere i dati della tastiera. Andiamo ora a semplificare le cose con un esempio: #include main() { int num1; //dichiarazioni variabili int num2; int somma; num1=5; //inizializzazione num2=0; somma=0; printf(“Inserisci un numero:\n”); //prompt scanf(“%d”, &num2); /* legge un intero, il valore digitato sarà immesso nella posizione di memoria alla quale il nome num2 è stato assegnato */ somma=num1+num2; //assegnamento dell’addizione alla somma printf(“La somma del numero inserito da tastiera e del numero dato dal computer è : %d”,somma); //visualizza la somma return ; /* indica che il programma è terminato con successo */ } L’istruzione scanf (“%d”,&num2); utilizza scanf per ottenere un valore dall’utente. La funzione scanf prende i dati in ingresso dallo standard input che è di solito la tastiera. Questa scanf ha due argomenti: “%d” e &num2. Il primo argomento, la stringa di controllo del formato, indica il tipo di dato che dovrà essere immesso dall’utente. La specifica di conversione %d indica che il dato dovrà essere un intero ( d sta per intero decimale). Il secondo argomento incomincia con una E commerciale &, detta in C operatore di indirizzo, seguita dal nome della variabile. La E commerciale, o ampersand, quando è combinata con il nome della variabile , indica alla scanf la locazione di memoria in cui è immagazzinata la variabile num2. Il computer quindi immagazzinerà il valore della variabile num2 in quella locazione. Ogni qualvolta un valore è sistemato in una posizione di memoria, esso si sostituisce al valore contenuto in precedenza in quella locazione. Dato che questa informazione precedente sarà distrutta, il processo di scrittura in una locazione di memoria è detto scrittura distruttiva. Così come abbiamo visto per la variabile somma, prima inizializzata a 0 e poi sostituita dal valore dato dalla somma di num1 e num2. Quando il valore sarà letto da una locazione di memoria, il valore in quella locazione sarà preservato, questo processo è detto lettura non distruttiva. Per semplicità, immaginate la locazione della memoria come un cassettone, ad ogni cassetto (la dimensione dipende dal tipo della variabile) corrisponde un nome, all’interno troveremo il nostro valore. E’ buona abitudine inizializzare a 0 la variabile (come se volessimo ripulire il cassetto) per evitare risultati poco probabili durante l’esecuzione. 11

L’istruzione return 0; restituisce il valore 0 all’ambiente del sistema operativo in cui il programma è stato eseguito. In questa tabella sono riportate le specifiche di conversione per printf e scanf: Specifiche di conversione per printf per scanf

Tipi di dato long double double float unsigned long int long int unsigned int int short char

%Lf %f %f %lu %ld %u %d %hd %c

%Lf %lf %f %lu %ld %u %d %hd %c

L’aritmetica del C Gli operatori aritmetici sono: Operazione

Operatore

Parentesi Moltiplicazione Divisione Modulo

() * / %

Addizione Sottrazione

+ -

Ordine di valutazione (priorità) Sono valutate per prime Sono valutate per seconde Sono valutate per seconde Resto di una divisione intera. Sono valutate per seconde Sono valutate per ultime Sono valutate per ultime

Gli operatori di uguaglianza e relazionali: Operatori di uguaglianza == !=

uguale diverso (not uguale)

Operatori relazionali > < >= = 80 visualizza "b", altrimenti se il voto è >= 70 visualizza "c", altrimenti visualizza "d".” #include void main(void) { int voto; printf("Inserisci voto: "); scanf("%d",&voto); if(voto>=90) printf("\n a");

/* if appeso */ /* costruzione annidata */

else if (voto>=80) printf("\n b");

/* avendo una sola istruzione non ha bisogno delle parentesi graffe*/

else if(voto>=70) printf("\n c"); else printf("\n d"); }

19

Esempio_8 (while/if/else): “ Inserisci un numero e vedere se è un numero primo.” #include void main (void) { int num, i=2, div=0; // posso dichiarare ed inizializzare più variabili insieme printf("Inserisci un numero:\n"); scanf("%d",&num); while(i 20 visualizzare "errore" #include void main(void) { int lato,contatore1,contatore2; printf("Inserisci il lato del quadrato: "); scanf("%d",&lato); if((lato>=1) && (lato=4)

/* struttura di controllo. Tra parentesi c’è la condizione da rispettare. if, simbolo di decisione: se il numero che io utente ho inserito è > o = 4 la lettura del codice seguìta all’interno del blocco istruzioni e salta la else */

{ printf(“Hai vinto %d*5 euro”,numero); /*In questo caso abbiamo una sola istruzione*/ } else

/* Altrimenti, implica quindi che il numero è < di 4, salta la if e seguìta la lettura dell’else */

{ printf(“Non hai vinto!”); }

27

}

printf(“Fine gioco!”); /*A fine programma visualizzerà la scritta: Fine gioco! */ return ; // Fine programma

I VETTORI Un vettore è un gruppo di posizioni (o locazioni) di memoria correlate dal fatto che tutte hanno lo stesso nome e tipo di dato.Il primo elemento di ogni vettore è l’elemento zero. I vettori sono entità statiche, giacchè manterranno le proprie dimensioni durante l’esecuzione del programma. Il numero di posizione contenuto all’interno delle parentesi quadre è più formalmente noto come indice. Un indice deve essere un intero o un’espressione intera. DICHIARAZIONE DEI VETTORI int vett[10]; questa riga di istruzioni specifica il tipo elementare di ogni elemento della struttura dati di tipo vettore e il numero richiesto per la grandezza del vettore in modo tale che il computer possa riservare l’appropriata quantità di memoria. Invece la sequente riga di istruzioni: int vett[ ]={2,4,7,4,8}; creerà un vettore di tipo int di nome vett di 5 elementi. int vett[SIZE]; Nella dichiarazione posso utilizzare la costante simbolica SIZE , direttiva del preprocessore #define. Una costante simbolica è un identificatore che sarà sostituito con il testo di sostituzione dal preprocessore C, prima che il programma sia compilato.Utilizzare le costanti simboliche per specificare le dimensioni dei vettori renderà i programmi più scalabili. Una costante simbolica non è una variabile, il compilatore non le riserva nessuno spazio di memoria. int vett[5]={1,2,3,4,5,6}; provocherà un errore di sintassi. INIZIALIZZARE A ZERO GLI ELEMENTI DI UN VETTORE Tre modi: int v[10]={0,0,0,0,0,0,0,0,0,0}; int v[10]={0}; for(i=0;i
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF