Pez_93

Programmazione
Guida alla programmazione in C

41 risposte in questa discussione

: Programmazione

Guida alla programmazione in C

 

 

Please login or register to see this image.

 

 

Lo scopo di questa guida è insegnare i fondamenti della programmazione in C, uno dei primi linguaggi ad alto livello nato nel 1972.

Ora vi chiederete: perchè iniziare da C, che è uno dei più vecchi linguaggi di programmazione ?

La risposta è semplice: saper programmare in C aiuta molto a dover affrontare i moderni linguaggi ad oggetti come C# e Java; vi troverete già con metà lavoro fatto.

 

IDE per programmare in C

I primi programmi potremo anche scriverli su un blocco note e compilarli da console ma dopo un po' per i programmi più complessi dovremo passare ad un software munito di entrambe le cose ed automatizzato per la programmazione.

A questo scopo consiglio Code::Blocks.

Home page ---> Please login or register to see this link.

Le librerie

Ogni linguaggio di programmazione per poter usare le istruzioni di codice scritte dal programmatore, ha bisogno delle librerie.

Una libreria è un inseme di istruzioni, che al loro interno svolgono altre istruzioni; praticamente nella libreria c'è l'istruzione con le operazioni che deve svolgere mentre il programmatore andrà solo ad usare l'struzione dandogli i valori che servono:

Please login or register to see this code.

In questo modo si aggiunge una libreria di sistema al proprio foglio di codice; da notare che le librerie hanno come estensione .h.

Se invece vogliamo aggiungere una libreria presente nella cartella del file di codice del programma, dobbiamo fare così:

Please login or register to see this code.

Il main

Che cos'è il main ?

Esso si può definire come il principale contenitore del nostro programma; contiene tutte le istruzioni che il nostro programma deve eseguire:

Please login or register to see this code.

Da notare che per terminare il main e dunque il nostro programma dobbiamo inserire al fondo del main l'istruzione return 0.

Le variabili

Iniziamo col dire che le variabili sono dei contenitori di dati ed ognuna di esse ha il suo tipo; quest'ultimo varia in base al dato che biosgna memorizzare.

I tipi di variabile sono:

  • int che rappresenta un numero intero a 2 byte
  • char che rappresenta un carattere a 1 byte
  • short che rappresenta un numero intero "corto" a 2 byte
  • long che rappresenta un numero intero "lungo" a 4 byte
  • float che rappresenta un numero reale a 4 byte
  • double che rappresenta un numero reale "lungo" a 8 byte
Please login or register to see this code.

Ovviamente con le variabili di tipo numerico si possono svolgere le operazioni matematiche:

Please login or register to see this code.

Le variabili di tipo char possono però essere dichiarate anche definendo il numero di caratteri da contenere; in questo caso la variabile prenderà in nome di stringa:

Please login or register to see this code.

Sebbene siano definiti apparentemente 6 posti nella variabile, in verità saranno 7 dato che conta anche il posto numero 0.

Nel linguaggio C però il valore di una variabile con più caratteri non si può assegnare con = ma deve essere fatto con l'istruzione strcpy:

Please login or register to see this code.

Le operazione sulle stringhe, come per esempio il confronto, possono essere usando altre istruzioni come la strcmp ma questi sono apprrofondimenti che vedremo in seguito.

L'istruzione printf

Abbiamo imparato come assegnare dei valori alle variabili ed a farci le operazioni base.

Ora per visualizzare a schermo i valori di tali variabili si usa l'istruzione printf; serve però sapere gli identificatori dei tipi di variabile, dato che sarà da specificare nell'istruzione:

  • %d, %i ---> int(numero decimale)
  • %c ---> char a singolo carattere
  • %s ---> chat con più caratteri
  • %f ---> double e float(numeri reali)
  • %u ---> numero senza segno

Questi sono gli identificatori fondamentali, ce ne sono degli altri ma vengono usati in casi estremamente eccezionali.

Ora vediamo un esempio:

Please login or register to see this code.

L'istruzione printf può essere anche utilizzata per stampare a video una stringa non memorizzata in nessuna variabile:

Please login or register to see this code.

L'istruzione scanf

Ora che abbiamo visto come stampare a video i valori delle variabili, vediamo come inserire dentro le variabili dei valori scritti da tastiera.

L'istruzione in questione da utilizzare è scanf che utilizza gli stessi identificatori della printf.

La scanf ha però un altro dettaglio: per le variabili numeriche e a carattere singolo bisogna specificare l'indirizzo della variabile e non il nome della variabile.

Ciò è possibile con il carattere &; vediamo un esempio:

Please login or register to see this code.

Gli operatori di incremento e decremento

A volte possiamo abbreviare la scrittura delle istruzioni di incremento e decremento dei valori delle variabili.

Si usano due operatori:

  • ++ ---> incrementa di 1 il valore di una variabile numerica; equivale a scrivere var = var + 1
  • -- ---> decrementa di 1 il valore di una variabile numerica; equivale a scrivere var = var - 1

Please login or register to see this code.

I controlli condizionali

A volte dovremo eseguire una serie di istruzioni se determinate condizioni variabili sono verificate o no.

Per fare ciò si utilizzano le istruzioni if ed else, con l'ausilio di quattro operatori di confronto:

  • > ---> Maggiore
  • < ---> Minore
  • >= ---> Maggiore o uguale
  • <= ---> Minore o uguale
Please login or register to see this code.

Se dobbiamo verificare più di una condizione, dobbiamo utilizzare l'struzione else if:

Please login or register to see this code.

Da notare che se dobbiamo eseguire una sola istruzione al verificarsi di una condizione, possiamo anche tralasciare di scrivere le parentesi graffe ( { } ):

Please login or register to see this code.

Esistono poi due caratteri, detti operatori logici, che permettono di verificare due o più condizioni nello stesso controllo:

  • && ---> Le istruzioni del controllo saranno eseguite solo se tutte le condizioni sono verificate
  • || ---> Le istruzioni del controllo saranno eseguite anche solo con una condizione verificata

Please login or register to see this code.

Inoltre possiamo verificare la diversita o l'uguaglianza di due valori tramite altri due operatori di confronto:

  • != ---> Diverso
  • == ---> Uguale

Please login or register to see this code.

Da notare anche che si possono verificare più di una condizione senza usare l'else ma per logica è sempre consigliato usare anche quest'ultimo.

Esiste ancora l'istruzione switch, che permette di gestire solo una variabile, impostando tutti i casi che si vogliono controllare in base al valore della variabile:

Please login or register to see this code.

Come possiamo vedere si usa l'istruzione case seguita dal valore che si vuole confrontare con quello della variabile; se i due valori risultano uguali verranno eseguite le istruzioni del case in questione.

Inoltre l'istruzione default identifica tutti i casi che non corrispondono ai case precedenti e per terminare un case si usa l'istruzione break.

I vettori

Un vettore è come un insieme di variabili, esso ha più posti ed ogni posto è occupato da un valore.

Semplicemente per definire un vettore dobbiamo specificare i posti da usare:

Please login or register to see this code.

Se ci pensate succede la stessa cosa con i char con più caratteri, infatti quest'ultimi sono dei vettori.

Il numero che indica il posto del vettore si chiama indice e permette di accedere a qualsiasi cella di esso:

Please login or register to see this code.

Le matrici

Una matrice è un vettore multidimensionale, ovvero ha due serie di posti e di conseguenza due indici.

Avendo due serie di posti, per trovare il numero totale dei posti basta moltiplicare il numero della prima serie di posti per il numero della seconda serie di posti.

Please login or register to see this code.

In questo esempio la matrice avrà 25 posti.

Da notare che sia nei vettori che nelle matrici la gestione della printf e della scanf è uguale a quella per le normali variabili.

Il ciclo do - while

Quando ci troviamo a dover eseguire una stessa serie di istruzioni per più volte, al posto di riscriverle più volte possiamo usare i cicli, il primo di questi è il do - while.

Fino a quando la condizione espressa nel blocco while risulta vera la serie di istruzioni viene eseguita:

Please login or register to see this code.

In questo caso finchè la variabile a sarà minore di 10 verrà incrementata di 1 ad ogni giro del ciclo.

Da notare che ad ogni giro del ciclo, le istruzioni di esso vengono eseguite una volta.

Inoltre anche se la condizione fosse falsa al primo giro, le istruzioni sarebbero comunque eseguite una volta; il ciclo do - while è infatti detto "post condizionale".

Il ciclo while

Esiste poi il ciclo while che ha la stessa funzionalità del do - while.

Le differenze sono che non è presente l'istruzione do e la condizione viene verificata già all'inizio del primo giro del ciclo:

Please login or register to see this code.

Per cui se già all'inizio del primo giro del ciclo, la condizione fosse falsa, le istruzioni non verrebbero eseguite neanche una volta.

Il ciclo for

Il terzo ciclo è il for; esso viene usato quando si sa quante volte deve essere eseguito il ciclo.

Da questo esempio si può vedere come il ciclo for si usi molto in combinazione con i vettori e le matrici:

Please login or register to see this code.

I sottoprogrammi

A volte ci troviamo nella condizione di dover eseguire una serie di istruzioni per più volte; abbiamo già visto i cicli che permettono di fare questo utilizzando le condizioni.

Se però abbiamo bisogno di fare ciò senza imporre nessuna condizione e quando vogliamo noi, dobbiamo usare un sottoprogramma.

Quest'ultimo è molto utile per tenere il codice del programma ordinato; infatti esso viene scritto fuori dal main e quando ci serve viene richiamato in quest'ultimo.

Inoltre esistono due tipi di sottoprogrammi:

  • int, char, float, double, short, long ---> restituiscono un valore, dunque alla fine di ognuno di essi c'è l'istruzione return; si chiamano funzioni
  • void ---> non restituiscono nessun valore; si chiamano procedure
Please login or register to see this code.

Se avete notato lo stesso main è una funzione, infatti restituisce 0 in modo da terminare il programma.

Il passaggio dei parametri

Prima di tutto, cosa sono i parametri ?

Sono dei valori che vengono forniti ad una funzione o ad una procedura al momento del loro richiamo.

Nel caso della printf per esempio, passiamo una stringa da stampare a video oppure una variabile:

Please login or register to see this code.

Nel caso però in cui vogliamo gestire i parametri di una funzione o procedura fatta da noi, possiamo agire in due modi:

  • Per valore ---> Il valore delle variabili passate al sottoprogramma non vengono modificati, anche se si agisce sulle variabili stesse nel sottoprogramma
  • Per referenza ---> Il valore delle variabili passate al sottoprogramma può essere modificato, se si agisce su di esse
Please login or register to see this code.

Come possiamo vedere, per passare un parametro per referenza si usa il carattere & davanti al parametro nel main, e il carattere * davanti al parametro nel sottoprogramma.

Le strutture

Abbiamo già visto che per aggregare più valori insieme possiamo utilizzare i vettori e le matrici.

Se però abbiamo la necessità di aggregare più variabili non omogenee fra loro, dunque di tipo diverso, possiamo utilizzare le strutture:

Please login or register to see this code.

Come possiamo vedere per dichiarare una struttura si usa l'struzione struct  e successivamente bisognerà definire una variabile del tipo della struttura per poterci lavorare sopra.

Ora vediamo come accedere ed usare le variabili interne alla struttura:

Please login or register to see this code.

La sintassi è semplice: nome della variabile del tipo della struttura.variabile interna alla struttura.

I file

Per rendere un programma più interattivo e più competitivo possiamo integrare la gestione dei file di testo.

Prima di tutto dobbiamo gestire l'apertura del nostro file:

Please login or register to see this code.

Così ci siamo definiti un puntatore al file che servirà per l'apertura, la scrittura e la lettura del file.

Andiamo ora a vedere l'apertura, la scrittura e la lettura; l'apertura può avvenire in tre modi:

  • r ---> in lettura; se dobbiamo solo svolgere operazioni di lettura sul file
  • w ---> in scrittura; se dobbiamo solo svolgere operazioni di scrittura sul file
  • a ---> in scrittura al fondo del file; se dobbiamo solo svolgere operazioni di scrittura sul file

Per l'apertura utilizziamo dunque l'istruzione fopen:

Please login or register to see this code.

Passiamo ora alla scrittura, usando l'istruzione fprintf che utilizza gli stessi identificatori della printf:

Please login or register to see this code.

Infine vediamo la lettura che è l'operazione più lunga, e si esegue tramite l'istruzione fscanf, che usa sempre gli stessi identificatori e regole della scanf:

Please login or register to see this code.

Come possiamo vedere per leggere un intero file si usa un ciclo dato che ogni fscanf legge una riga; si usa l'istruzione feof che indica la fine del file.

Inoltre si può vedere come si debba fare una fscanf prima del ciclo, per tenere la lettura del file pulita.

In verità la lettura porta il contenuto del file nelle variabili del programma e poi stampa le variabili a schermo.

Da ricordare bene, la posizione degli identificatori della fscanf deve essere scritta esattamente come sono posizionati i valori sul file.

C'è ancora una funzione che viene utilizzata per chiudere l'apertura del file, si chiama fclose:

Please login or register to see this code.

La fclose è molto utile se dobbiamo passare da una modalità di apertura del file ad un'altra; per esempio da scrittura a lettura.

Infatti apriremo il file in modalità di scrittura, poi chiuderemo l'apertura e poi riapriremo il file in modalità di lettura.

E' sempre buona regola chiudere l'apertura del file prima che il programma termini.

Il casting

A volte potremmo avere la necessità di convertire una variabile in un altro tipo; questo perchè certe istruzioni accettano solo determinati tipi di variabili oppure perchè dobbiamo copiare un tipo di dato in una variabile di diverso tipo.

Vediamo un esempio:

Please login or register to see this code.

In questo modo forziamo la conversione temporanea della variabile reale, che è di tipo float, al tipo int; in questo modo la copia nella variabile intero potrà avvenire senza problemi.

La visibilità delle variabili

Fin ora quando abbiamo definito le variabili lo abbiamo sempre fatto nel main o in un sottoprogramma.

Ciò di cui non abbiamo ancora parlato è la visibilità delle variabili che si divide in due rami:

  • Locali ---> Le variabili definite nel main sono visibili ed utilizzabili solo nel main, quelle definite in un sottoprogramma sono visibili ed utilizzabili solo in quel sottoprogramma
  • Globali ---> Le variabili sono definite fuori dal main e dai sottoprogrammi; possono essere utilizzate in tutto il programma
Please login or register to see this code.

Le costanti

In C oltre alle variabili è possibile definire delle costanti che come dice il nome non possono cambiare valore.

Please login or register to see this code.

Come possiamo vedere, per definire una costante si utilizza l'istruzione #define seguita dal nome e dal valore da attribuire alla costante.

Il vantaggio, se così si può considerare, rispetto ad una variabile è che non si rischia di modificare il valore inavvertitamente.

Documentazione

Elenco delle funzioni in lingua italiana ---> Please login or register to see this link.

Elenco delle funzioni in lingua inglese ---> Please login or register to see this link.

 

lh1s.gif

Piace a Totodile92, over_coder, Chuck Norris e 9 altri

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Complimenti innanzitutto per l'impegno nel scrivere un papiro così! ;) Una guida veloce ed essenziale senza dubbio, che per quanto possa risultare molto semplice per uno come me spero possa esser d'aiuto a chi si sta approcciando a questo linguaggio. Please login or register to see this image. /emoticons/default_fermosiset2117454613imadj1.gif" alt=":sasa:" />

 

Per il resto ti auguro buona fortuna nella stesura. Please login or register to see this image. /emoticons/default_zizi.gif" alt=":zizi:" />

 

P.S.

Nella descrizione dello scanf c'è un errore di battitura: biosgna;

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Per chi ne capisce non è di difficile comprensione. Per chi non ne capisce ci vorrebbe un approccio ancor più soft credo Please login or register to see this image. /emoticons/default_Soso.gif" alt=":soso:" />

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Please login or register to see this quote.

Da questa guida non si comprendono delle cose ?

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Io ho capito tutto. Il problema é che magari ad alcuni necessiteranno alcune nozioni ancor più basilari. Tipo per nabbissimi

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Please login or register to see this quote.

 

Cerco di renderla il più comprensibile possibile.

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Bravissimo comunque!  Please login or register to see this image. /emoticons/default_ok.gif" alt=":ok:" />

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Ottima guida Pez complimenti ^_^ termini ottimi, anche per chi conosce poco, e sei partito dalle nozioni basilari ^_^

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Dite che è meglio se metto ogni sezione sotto spoiler ?

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

A tua discrezione .... Secondo me viene più intuitivo Please login or register to see this image. /emoticons/default_ahsi.gif" alt=":ahsi:">

Inviato dal mio Galaxy Nexus con Tapatalk 2

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

@Pez_93 Si, lo spoiler è anche meglio. Così è meno confusionario per gestire i passaggi

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

più figo a mio parere Please login or register to see this image. /emoticons/default_Soso.gif" alt=":soso:">

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Molto meglio Please login or register to see this image. /emoticons/default_9e618e4d0c8703a2d90a93cd64bf8.gif" alt=":pawa:" /> molto ordinata Please login or register to see this image. /emoticons/default_fermosiset2117454613imadj1.gif" alt=":sasa:" />

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Please login or register to see this quote.

 

Pensi che sia addirittura perfetta ? Please login or register to see this image. /emoticons/default_tenero.gif" alt=":tenero:" />

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Molto più ordinata. Penso sì capisca :)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Ottima, ottima, ottima guida!
Te ne ringrazio già da adesso se mi servirà da ripasso Please login or register to see this image. /emoticons/default_2nvc5g3_th.jpg" alt=":zuzu:" />
Ma senza offesa:

Mille volte meglio Java Please login or register to see this image. /emoticons/default_Asd.gif" alt=":asd:" />

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Non é che ora, ogni volta che leggete guide su C , dovete dire meglio java XD

:P

Inviato dal mio Galaxy Nexus con Tapatalk 2

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Chiedo venia Please login or register to see this image. /emoticons/default_xp.gif" alt=":xp:" />

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Era così per dire tranquilla Please login or register to see this image. /emoticons/default_i1b9xu_th.jpg" alt=":ops:">

Inviato dal mio Galaxy Nexus con Tapatalk 2

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Pez ma come per php non c'è un sito di documentazione dove ci sono l'elenco delle funzioni ecc...?

Pensavo di vedere in fondo al topic qualche sito, che consigli, per apprendere anche il resto. È un ottimo inizio!

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

@bomale

Dato che la guida non é ancora finita non li ho ancora messi.

Comunque che ne dici di questo per esempio ---> Please login or register to see this link.

Piace a bommy

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Crea un account o accedi per lasciare un commento

You need to be a member in order to leave a comment

Crea un account

Iscriviti per un nuovo account nella nostra community. È facile!


Registra un nuovo account

Accedi

Sei già registrato? Accedi qui.


Accedi Ora