Il linguaggio C

Il linguaggio C

Il linguaggio C è stato sviluppato per la prima volta presso i laboratori Bell di AT&T da Dennis Ritchie nel corso degli anni 1969-1973. Inizialmente, fu creato come evoluzione del linguaggio di programmazione B, anch’esso sviluppato presso i laboratori Bell. Il linguaggio C ha guadagnato rapidamente popolarità grazie alla sua flessibilità e alle sue capacità di programmazione di basso livello.

Caratteristiche Principali del Linguaggio C:

  1. Portabilità:
    • Una delle caratteristiche distintive del linguaggio C è la sua portabilità. Il codice scritto in C può essere eseguito su diverse piattaforme con poche o nessuna modifica. Questa portabilità è stata particolarmente importante nella scrittura di sistemi operativi, dove è essenziale che il codice possa funzionare su una varietà di hardware.
  2. Efficienza e Controllo Diretto sulla Memoria:
    • C offre un controllo diretto sulla memoria del computer, consentendo agli sviluppatori di ottimizzare le prestazioni del codice. Questa caratteristica è utile in situazioni in cui è necessario gestire manualmente l’allocazione e la deallocazione della memoria.
  3. Sintassi Chiara e Concisa:
    • La sintassi del linguaggio C è chiara e concisa, il che rende il codice facile da leggere e scrivere. Questa caratteristica ha contribuito alla sua popolarità e alla sua utilità in una vasta gamma di applicazioni.
  4. Libreria Standard:
    • Il linguaggio C include una libreria standard che fornisce un set di funzioni predefinite che possono essere utilizzate per svolgere una varietà di compiti. Questa libreria standard è stata una delle chiavi del successo del linguaggio.
  5. Puntatori:
    • Il concetto di puntatori è fondamentale nel linguaggio C. I puntatori consentono agli sviluppatori di manipolare direttamente la memoria, offrendo una flessibilità significativa nella gestione dei dati.

Applicazioni del Linguaggio C:

  1. Sistemi Operativi:
    • Il linguaggio C è stato originariamente sviluppato per scrivere il sistema operativo UNIX. Ancora oggi, molti sistemi operativi, inclusi Linux e Windows, sono scritti in gran parte in C.
  2. Sviluppo di Compilatori e Interpreti:
    • A causa della sua efficienza e del controllo diretto sulla memoria, il linguaggio C è spesso utilizzato per scrivere compilatori e interpreti di altri linguaggi di programmazione.
  3. Programmazione di Dispositivi Embedded:
    • La portabilità e l’efficienza del linguaggio C lo rendono una scelta popolare per la programmazione di dispositivi embedded, come microcontrollori e sistemi embedded.
  4. Applicazioni di Sistema e Software di Basso Livello:
    • Il linguaggio C è ampiamente utilizzato per lo sviluppo di applicazioni di sistema, driver di dispositivo e software di basso livello che richiedono un controllo dettagliato sull’hardware.
  5. Sviluppo di Applicazioni Desktop e Software di Rete:
    • Molti programmi desktop e software di rete sono stati sviluppati utilizzando il linguaggio C, grazie alla sua potenza e alla sua capacità di gestire operazioni di basso livello.
Corsi Python
Corso su JavaScript

Le caratteristiche principali di questo linguaggio sono:

– innanzitutto è case sensitive, ovvero distingue tra lettere maiuscole e minuscole;

– poi è general purpose (multiuso) ovvero può essere impiegato per codificare progetti software di natura diversa;

– il linguaggio C è anche multi-piattaforma;

– è un linguaggio strutturato di tipo imperativo (o procedurale);

– inoltre produce programmi efficienti, infatti è nato per implementare sistemi operativi;

– produce anche codice di dimensioni ridotte, ha infatti una sintassi che si presta alla scrittura di codice compatto.

Struttura di un programma in linguaggio C

In un programma scritto in C vi è una funzione che deve essere sempre presente, che è la funzione main(). Il compilatore infatti inizia l’esecuzione proprio da questa funzione.

La sintassi della funzione main è la seguente:

#include <stdio.h>  // Dichiarazione delle librerie

int main() {  // Funzione principale
    // Dichiarazioni di variabili

    // Istruzioni del programma

    return 0;  // Indica che il programma è stato eseguito con successo
}

Tutto il codice contenuto tra le due parentesi graffe rappresenta il corpo del programma. All’interno del main si possono inserire chiaramente una o più istruzioni, terminanti da una carattere punto e virgola.

Facciamo dunque il primissimo esempio di programma in linguaggio C che dà semplicemente un messaggio di benvenuto all’utente:

#include <stdio.h>

int main() {
    printf("Benvenuti da Coding Creativo");
}

Quindi in questo semplicissimo programma in C abbiamo utilizzato:

  1. #include <stdio.h>:
    • Questa è una direttiva di pre-processore che dice al compilatore di includere il file di intestazione stdio.h. Questo file contiene dichiarazioni necessarie per funzioni di input/output standard come printf e scanf. È una pratica comune includere stdio.h all’inizio di un programma C.
  2. main() { ... }:
    • main è una funzione speciale nel linguaggio C. È la funzione principale che viene eseguita quando il programma viene avviato. Tuttavia, la firma corretta della funzione main è int main(void) o int main(int argc, char *argv[]). Il tuo codice utilizza una forma più antica che implicitamente assume un tipo di ritorno di int.
  3. printf("Benvenuti da Coding Creativo");:
    • printf è una funzione di output standard che consente di stampare testo sullo schermo. Nel tuo caso, sta stampando la stringa “Benvenuti da Coding Creativo”.
  4. Tipo di Ritorno di main:
    • È buona pratica dichiarare il tipo di ritorno di main come int e includere una dichiarazione di ritorno, ad esempio return 0;, per indicare che il programma è stato eseguito con successo.

Nelle prossime lezioni, esploreremo dettagliatamente il concetto di variabili e costanti nel linguaggio C e impareremo come utilizzarle per creare programmi semplici. Approfondiremo la dichiarazione, l’inizializzazione e l’utilizzo di variabili, nonché la corretta gestione di costanti. Questi concetti fondamentali ci forniranno le basi necessarie per realizzare programmi più complessi e versatili. Continuate a seguirmi per imparare a sfruttare appieno il potenziale del linguaggio C.

Corsi Python
Corso su JavaScript

Alcuni link utili

Indice argomenti sul linguaggio C

Realizzare un menù di scelta in C

Esercizio sulle struct in C

Somma elementi diagonale principale di una matrice

Come sommare gli elementi della cornice esterna

Come sommare due matrici

Matrice trasposta

Inserire dati in una matrice

Tavola pitagorica in C

Array multidimensionali

Programma sui triangoli in C

Media dei numeri in un array

Array con numeri random

Quick sort in C

Istruzioni di selezione

Istruzioni di selezione

In linguaggio C, ci sono due principali istruzioni di selezione: “if” e “switch“.

  1. if: L’istruzione “if” permette di eseguire un blocco di codice se una condizione è vera. Può essere seguita dall’istruzione “else” per eseguire un altro blocco di codice nel caso in cui la condizione non sia vera.
  2. switch: L’istruzione “switch” fornisce un modo per selezionare uno dei molti blocchi di codice da eseguire. Viene utilizzata quando si desidera eseguire diverse azioni in base al valore di una singola espressione. All’interno dello switch, è possibile specificare una serie di “case”, ciascuno dei quali corrisponde a un valore possibile dell’espressione. Inoltre, è possibile includere un’istruzione “default” che viene eseguita se nessuno dei “case” corrisponde al valore dell’espressione.

Le istruzioni di selezione sono uno dei principali costrutti della programmazione imperativa e permettono di scegliere fra diverse alternative all’interno del codice, in base alle condizioni definite. Questo processo di selezione ci consente di scrivere codice che si adatta dinamicamente alle varie situazioni e input.

L’istruzione “if” è la più comune e flessibile, permettendo di valutare una condizione e, se vera, eseguire una serie di istruzioni. Se la condizione non è soddisfatta, il programma può proseguire con un’altra serie di istruzioni definite nell’istruzione “else”. Inoltre, è possibile concatenare più istruzioni “if” in cascata per gestire una serie di condizioni in sequenza.

D’altra parte, l’istruzione “switch” offre un approccio più strutturato quando si ha la necessità di valutare una singola espressione rispetto a diversi valori possibili. Questa istruzione rende il codice più leggibile ed efficiente quando si devono prendere decisioni basate su un numero finito di opzioni.

In sintesi, le istruzioni di selezione in C forniscono ai programmatori gli strumenti necessari per scrivere codice che risponde in modo intelligente e flessibile alle condizioni del programma, consentendo di controllare il flusso di esecuzione e di gestire una varietà di scenari in modo efficace.

Corsi Python
Corso su JavaScript

Istruzioni di selezione – if

La sintassi dell’istruzione if è questa:

if (condizione) {
    // Istruzioni da eseguire se la condizione è vera
}

N.B. Le parentesi graffe possono essere ignorate se è presente una sola istruzione, ma di solito conviene inserirle.

Quindi, se la condizione è vera, vengono eseguite le istruzioni all’interno delle parentesi graffe; altrimenti, se la condizione è falsa, le istruzioni vengono ignorate.

Facciamo dunque un esempio:

if (a > b) {
    printf("a è maggiore di b");
}

Oppure senza parentesi:

if (a > b) 
    printf("a è maggiore di b");

In questo esempio, se il valore di a è maggiore di b, viene stampato “a è maggiore di b”.

Se ci sono più istruzioni, le parentesi graffe diventano obbligatorie:

if (a > b) {
    printf("Questo programma dice: ");
    printf("a è maggiore di b");
}

Istruzioni di selezione – if … else

La sintassi dell’istruzione if else è la seguente:

if (condizione) {
    // Istruzioni da eseguire se la condizione è vera
}
else {
    // Istruzioni da eseguire se la condizione è falsa
}

Quindi, se la condizione è vera, vengono eseguite le istruzioni nel primo blocco di codice; altrimenti, se la condizione è falsa, vengono eseguite le istruzioni nel secondo blocco di codice.

Facciamo anche in questo caso un semplice esempio:

if (a > b) {
    printf("a è maggiore di b");
}
else {
    printf("a non è maggiore di b");
}

Istruzioni di selezione – if…else if…

Quando si desidera gestire più di due casi, si può utilizzare l’istruzione if…else if. Questo costrutto permette di valutare una serie di condizioni in sequenza e di eseguire il blocco di istruzioni associato alla prima condizione che risulta vera.

La sintassi dell’istruzione if …else if è la seguente:

if (condizione1) {
    // Istruzioni da eseguire se la condizione1 è vera
}
else if (condizione2) {
    // Istruzioni da eseguire se la condizione2 è vera
}
// Altre else if possono essere aggiunte per ulteriori condizioni
else {
    // Istruzioni da eseguire se nessuna delle condizioni precedenti è vera
}

In questo modo, l’esecuzione del programma valuta le condizioni nell’ordine in cui sono elencate. Appena trova una condizione vera, esegue il blocco di istruzioni corrispondente e salta il resto del costrutto.

Facciamo dunque un esempio:

if (voto >= 90) {
    printf("Hai ottenuto un A");
}
else if (voto >= 80) {
    printf("Hai ottenuto un B");
}
else if (voto >= 70) {
    printf("Hai ottenuto un C");
}
else if (voto >= 60) {
    printf("Hai ottenuto un D");
}
else {
    printf("Hai ottenuto un F");
}

In questo esempio, se il voto è maggiore o uguale a 90, viene stampato “Hai ottenuto un A”. Se il voto è compreso tra 80 e 89, viene stampato “Hai ottenuto un B”, e così via. Se nessuna delle condizioni è vera, viene stampato “Hai ottenuto un F”.

Corsi Python
Corso su JavaScript

if annidati

All’interno di un’istruzione if è possibile inserire qualsiasi tipo di istruzione anche una nuova istruzione if, si parla in questo caso di if annidate.

Facciamo dunque un esempio:

if (voto<10)

if (voto<6)

printf(“Mi spiace ma non sei sufficiente”);

else printf(“Bravo!”);


Alcuni link utili

Introduzione al linguaggio C

Le variabili in C

Le costanti in C

Printf

Tipi di operatori

Operatori di confronto

Stdin

Le funzioni di input e output

55711