Nozioni di base sulla programmazione C: logica booleana e flusso di controllo

3

Molte persone pensano che la codifica riguardi algoritmi complessi. Non lo è. Si tratta principalmente di fare scelte semplici. In C, queste scelte si riducono a una cosa: le espressioni booleane.

Li hai visti nelle istruzioni if e nei cicli ** while**. Sono i semafori del tuo programma. Il verde va. Il rosso si ferma.

Prendi questo esempio di base.

Chiede un numero. Controlla se quel numero è inferiore a zero. Se lo è, il programma parla. Se non lo è? Silenzio.

La parte “(b < 0)" è l'espressione booleana. C lo valuta. Vero significa eseguire la riga successiva. Falso significa saltarlo. Semplice.

Ma cosa succede quando hai bisogno di più sfumature?

Gestione dei valori zero e positivi

Il singolo controllo sopra lascia una lacuna. Cosa succede se l’utente inserisce zero? O un numero intero positivo? Il programma li ignora.

Ecco una struttura leggermente più complessa.

Ora hai la logica per i valori negativi, zero e positivi. Le sezioni “else if” e “else” rilevano gli altri casi. È ancora basilare, ma copre tutte le basi.

Condizioni complesse e insidie ​​comuni

La logica del mondo reale raramente rimane semplice. A volte sono necessarie due condizioni affinché siano vere contemporaneamente.

Considera questa riga:

Leggilo come l’inglese. Se x è uguale a y AND j è maggiore di k, imposta z su 1. Altrimenti, imposta q su 10.

Notare gli operatori.

C utilizza == per testare l’uguaglianza. Utilizza un singolo = per assegnare un valore.

Questa è una trappola classica. Se scrivi “if (x = y)”, non stai controllando se sono uguali. Stai assegnando y a x, quindi controllando se il risultato è diverso da zero. La tua logica si rompe. Utilizzare sempre doppi uguali per i confronti.

Il simbolo && rappresenta un’operazione booleana AND. Entrambe le parti devono essere vere.

Il toolkit completo per gli operatori booleani

Non è necessario memorizzarli, ma dovresti sapere come sono. Appaiono ovunque nel codice C.

  • Uguaglianza : ==
  • Disuguaglianza : !=
  • Meno di : <
  • Maggiore di : >
  • Minore o uguale a : <=
  • Maggiore o uguale a : >=
  • AND : &&
  • O : ||
  • NON : !

Perché questo è importante per gli utenti quotidiani

Logica di looping in C: strutture while, do- while e for

Puoi usare i cicli ** while con la stessa facilità delle istruzioni if** di base. Considera un semplice esempio:

Questo codice ripete queste due righe finché a è maggiore o uguale a b. La struttura è semplice. Il C offre anche un costrutto do- while, che garantisce che il blocco di codice venga eseguito almeno una volta prima di verificare la condizione. Ecco uno snippet che mostra un controllo di input di base:

Come il ciclo for semplifica l'iterazione

Il ciclo for è essenzialmente una scorciatoia per un ciclo ** while**. Se hai un codice come questo:

Puoi comprimerlo in una singola istruzione for :

Il ciclo ** while ha tre parti distinte: inizializzazione ( x=1), test ( x<10) e incremento ( x++). Il ciclo for** li racchiude in un'unica riga. Ma non sei limitato a variabili semplici. Guarda questo scenario più complesso:

Puoi riscriverlo usando un ciclo for :

Sembra disordinato. È confuso. Ma funziona. L'operatore virgola consente di concatenare più istruzioni nelle sezioni di inizializzazione e incremento di un ciclo for. Tuttavia, non puoi inserire una virgola nella sezione test.

Molti programmatori C adorano racchiudere la logica in un'unica riga. Altri sostengono che distrugga la leggibilità. Non esiste un consenso universale. Devi solo decidere se preferisci la brevità alla chiarezza.

Il pericolo di = vs == nelle espressioni booleane

Il doppio segno di uguale == è fonte di frequenti bug in C. Gli sviluppatori spesso digitano per errore un singolo segno di uguale =. Il compilatore accetta entrambi, ma il comportamento è drasticamente diverso.

In C, le espressioni booleane vengono valutate come numeri interi. Zero significa Falso. Qualsiasi numero intero diverso da zero significa Vero. Ciò significa che puoi scrivere legalmente:

Ma cosa succede se scrivi "if (a=b)"?

Questo non è un confronto. È un incarico. L'istruzione "if (a=b)" assegna il valore di b a a, quindi verifica la veridicità booleana del valore risultante di a. Se a diventa zero, la condizione è False. Se diventa qualcos'altro, è Vero.

La tua variabile a cambia valore durante questo processo. Questo è raramente ciò che desideri quando intendi confrontare i valori. Sebbene questa funzionalità di assegnazione condizionale possa essere utile in contesti specifici, è una trappola per gli incauti. Fai attenzione all'utilizzo di = e ==. Un errore di battitura cambia tutto.