






Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Appunti sul linguaggio di programmazione C con argomenti riguardanti: variabili, condizionali, macro, array, puntatori, ecc...
Tipologia: Appunti
1 / 10
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!







Creato nel 1970 per la programmazione del kernel dei sistemi operativi mentre ora si usa per la programmazione di microcontrollori e superPC. Per eseguire dei codici scritti in C si usa un compilatore che traduce C in linguaggio macchina. Tra i compilatori più usati c'è VS code. Per fare certe operazioni e utilizzare funzioni esterne si possono anche importare delle librerie col comando #include, e tra le più usate c'è la libreria <stdio.h> che contiene funzioni per l’input e l’output. Alla fine di ogni istruzione,
macchina che l’istruzione è finita.
I comandi che vanno eseguiti sono scritti nella parte main del codice, e per controllare gli errori nell’esecuzione del programma si usa return 0. Nel caso il programma faccia ritornare 0 vuol dire che non ci sono stati errori, in caso contrario vuol dire che ci sono degli errori. Quando la prima del main c’è scritto void vuol dire che non restituisce alcun valore.
Le variabili sono come dei contenitori che contengono dei valori; e possono essere di diversi data type , cioè essere numeri, lettere, o valori booleani. Per inizializzare una variabile si scrive prima il suo data type, poi il nome. Per assegnare il valore
l’inizializzazione, oppure dopo nel codice si può scrivere nome_var = valore; senza scrivere più il type perchè lo spazio preso dalla variabile è già stato creato. Ogni datatype utilizza un certo spazio in memoria che si di erenzia in base al tipo, quindi non cambia se un numero ha 5 o 2 cifre se è int occuperà sempre 4 byte.
int main(){ → la funzione main che racchiude le istruzioni principali. int numero = 2; → inizializzazione della variabile numero di tipo int, che contiene il valore 2. return 0;} → il return per controllare lo stato dell’esecuzione.
Le variabili di type unsigned int sono di erenti dal type int perche l’int è in complemento quindi il primo bit si usa per il segno del numero quindi i numeri vanno anche sotto lo 0 , mentre l’unisgned non usa nessun complemento quindi il numero non va sotto lo 0.
char 1 %c char[n] n %s float 4 %f double 8 %lf int 4 %d long 4 %ld short 2 %d bool 1 %d
Per scrivere qualcosa sul terminale si usa la funzione printf(“Testo”), si possono anche stampare delle variabili, o delle data structure. Quando si stampa una variabile si deve scrivere tra “” il suo format string(tabella sopra) e poi il nome della variabile. Un altro tipo di funzione è il putchar(“”) che serve a stampare a schermo un solo carattere, si può anche mettere un numero corrispondente al valore nella tabella ASCII. L’ultimo è puts() che è simile al printf ma non usa format string ma è utile perché dopo la fine del testo va automaticamente a capo.
Per avere dell’input dall’utente ci sono:
Nel caso si vogliano fare delle operazioni matematiche tra due numeri, basta usare gli operatori matematici:
printf(“Hello world”) → viene stampata sul terminale la frase “Hello world”. int num = 3; → inizializzazione della variabile num. printf(“La variabile num è %d”, num) → viene stampato il testo “La variabile num è 3 ”.
int numero; → si inizializza la var. numero. printf(“Scrivi un numero: ”); → si chiede all’utente di scrivere un numero sul terminale. scanf(“%d”, numero); → si prende il numero scritto dall’utente e lo si mette nella variabile numero.
int x = 2; → variabile uno int y = 5; → variabile due int xy = x + y; → variabile contenente la somma tra uno e due quindi, 7.
int x; x ++ ; → per un incremento. int y; y – ; → per un decremento. int uno = 1; int due = uno ++ ; → due=1, uno=2; int tre = 2; int quattro = ++ tre; → tre=3, quattro=3.
Una matematica in cui ci sono solo due valori True o False. Per fare le operazioni con questi valori si usano degli altri operatori che sono: AND, OR, NOT. Per usare variabili booleane si deve includere la libreria <stdbool.h>.
Per poter far prendere “decisioni” al computer, quindi “se succede questo fai questo” e “se succede questo fai quest’altro” si fa usando if. IF che utilizza la matematica booleana per fare cose. Quando all’interno delle () c’è una condizione che restituisce True viene eseguito il codice dell’if, in caso contrario esegue il codice dell’else. Quando ci sono più possibilità su usa else if che è uguale a if.
Sono come tanti else if ma si occupano di una sola variabile. Servono per non scrivere troppi else if. Alla fine di ogni caso va sempre messo un break perchè sennò il codice esegue anche i codici sotto al caso che corrisponde alla condizione.
int num = 3; → inizializ. num if(num = 3){ → se la condizione è true si stampa il 1° printf, senno il 2°. In questo caso num è = 3 quindi si stampa il 1°. printf(“Il numero è tre”);} else{ → viene eseguito solo se la condizione dell’if è false. printf(“Il numero non è tre”);}
switch(month){ → la condizione generale è month. case 1: →se month è 1 allora si esegue il codice sennò si controllano gli altri casi. printf(“E gennaio”); break; → il break fa smettere di controllare anche gli altri casi, visto che se si è eseguito il codice vuol dire che ha finito e si può fermare. default: → Nel caso non sia nessuno dei casi funziona come un else. printf(“Wrong numbers”);
I loop servono a ripetere una riga di codice molteplici volte. Ci sono due tipi di loop:
Sono dei modi usati nei loop per continuare o fermare le iterazioni. Il break ferma forzatamente un loop, mentre continue salta l’iterazione corrente.
Dei codici riutilizzabili quando vengono invocati utilizzando (). Nel caso vengano definite dopo il main in cui vengono invocate vanno prima dichiarate perchè il codice è letto dall’alto verso il basso quindi se la macchina non vede nessun nome della funzione segnala un errore. Per risolvere il problema la funzione va dichiarata prima del main assieme alle sue variabili(nel caso ci siano). Ci sono anche le funzioni di overload , cioè delle funzioni che condividono lo stesso nome ma hanno un numero diverso di parametri.
for(int i = 1; i <= 10; i++)} → è formato da tre parti principali l'indice(i); la condizione, quindi per quanto va ripetuto il codice, e l’incrementare o decrementare l'indice(i++). printf(“Interazione n: %d”, i)} →ad ogni iterazione viene stampato i quindi si vede il suo incremento nel tempo.
i = 1; → creazione di i. while(i < 20){ → il ciclo continua fino a quando i è minore di 20. if(i = 13){ → se i = 13 si fa: continue;} → con continue il programma salterà il 13 e andrà avanti alla prossima iterazione quindi il printf non viene eseguito. Nel caso ci fosse stato un break il ciclo si sarebbe fermato a 13. printf(“%d”, i); → si stampa ogni iterazione di i i++;} → i viene incrementato ad ogni iterazione.
void metà(int x); → dichiarazione della funzione metà. int main(){ → funzione principale int num1 = 4; → creazione di num1. metà(num1);} → invocazione della funzione con num1 come parametro. Restituisce 2. void metà(int x){ → funzione assieme al suo corpo. int meta = x / 2; → creazione di una variabile contenente il parametro(x) /2. printf(“%d”, meta);} → stampa il risultato della divisione.
Sono delle datastructure che contengono più variabili dello stesso type, che sono indicizzate con un numero(che parte da 0). Sono inizializzati come delle variabili ma con delle [] dopo il nome e delle {} per contenere le varie variabili separate da una virgola. Non si possono stampare interamente perchè farebbe vedere l’indirizzo di memoria, ma vanno stampati in base all’indice([n]).
Un loop che ha meno flessibilità dei for normali perchè parte dall'inizio e arriva alla fine, però facilita molto cose come l’iterazione di array.
Nel caso si debba cercare un elemento in un array si può creare una funzione che controlla attraverso un for ogni elemento, e il numero di iterazioni fatte equivale all’indice dell’elemento. Quindi la posizione contando normalmente è l'iterazione - 1.
Sono degli array che rappresentano cose come dati tabellari quindi hanno righe e colonne. Vengono inizializzati con [][]. Il primo [] serve per indicare il numero di righe, mentre il secondo indica il numero di colonne.
int ciao[] = {1, 2, 3, 5, 8}; → creazione dell’array ciao. array[0] = 9; → i valori degli elementi si possono cambiare usando il loro indice. char sil[][] = {“ab”, “bc”, “cd”} → creazione di un array di stringhe. strcpy(sil[0], “hg”); → gli array di stringhe vanno modificati con strcpy().
int grades[] = {65, 72, 81, 93}; → array for(int grade : grades){ → grade è quella che cambia nelle iterazioni(= i), grades è l’array che va iterato. pritnf(“%d”, grade) → stampa il valore di grade ad ogni iterazione quindi gli elementi dell’array.
int searchArray(char array[][], int size, char element[]){ → funzione che prende come argomenti l’array, la grandezza dell’array e l’elemento da cercare. for(int i = 0; i < size; i++){ →viene ripetuto tante volte quanto la lunghezza dell’array. if(array[i] == element){ → se l’elemento num i è = all'elemento da cercare: return i;} → si ritorna il valore di i, quindi la posizione dell’elemento. return -1; → in caso contrario si ritorna -1 che indica quando qualcosa non è stato trovato.
int numbers[2][3] = {{1, 2, 3}, {4, 5, 6}} → creazione dell’array bidirezionale avente 2 righe e 3 colonne.
Per scambiare il valore di due variabili si può creare un valore di riferimento in cui viene inserito un valore momentaneamente per poi essere messo nell’altra variabile. Nel caso si crea una funzione per farlo si ha il problema che la funzione duplica i valori quindi non avviene nessun cambiamento alle variabili globali ma solo a quelle locali , quindi nella variabile. Per risolvere il problema si mette & davanti ai parametri nell’inizializzazione della funzione per associarli direttamente alle locazioni di memoria delle variabili. Questo metodo si chiama referenziale.
Servono a memorizzare più valori in una sola variabile. I vettori hanno valori tutti dello stesso type. Sono array. Tra i vettori ce ne sono di più tipi:
x = 2; → creazione di x. y = 3; → creazione di y. temp = x; → creazione della variabile temporanea che mantiene il valore di x. x = y; → x prende il valore di y. Quindi 3 y = temp; → y prende il valore di temp quindi di x. Quindi 2
#define DIM 10 → definizione del vettore int numero[DIM] → creazione del vettore con DIM celle. numero[ 0 ] = 5; → assegnazione alla cella con indice 0 il valore 5. int vet[DIM] = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); →i vari valori verranno associati agli indici da sinistra a destra quindi 1 = [0], 2 = [1], … int vet[DIM] = {[2] = 1, [3] = 4}; → si possono anche associare i valori utilizzando gli indici.
Si possono avere dei puntatori che puntano alle varie celle di un array e ci si può muovere incrementando il puntatore perché il compilatore sa già la distanza tra le celle quindi fa automaticamente il calcolo per spostare il puntatore.
Si possono mettere dei parametri nella funzione main che verranno usati in base ai parametri scritti nell’esecuzione del file. Ad esempio nome_file.exe par.
Ci sono varie librerie con varie funzioni per le stringhe ad esempio la libreria stdlib.h :
Oppure la libreria string.h :
int vet[10]; → creazione di un array con 10 celle distanti 4 byte tra loro essendo int. int *vetPtr = vet; → puntatore che punta al primo indice dell’array, vet[0]. vetPtr++; → il puntatore che punta all’indice vet[1]. vetPtr++; → il puntatore che punta all’indice vet [2].
char st1[20]; → inizializzazione stringa ricevente. char st2[] = “Stringa sorgente” → creazione stringa sorgente. strcpy(st1, st2); → copia tutti i caratteri dalla st2 alla st1. strncpy(st1, st2, 19); → copia i primi 19 caratteri dalla st2 alla st1.