Ciao e bentornato.
Parlerò ancora un po 'del flusso di controllo.
Quindi tuffiamoci direttamente nei cicli che ripetono il codice.
Per prima cosa, parleremo di questo ciclo for.
Il ciclo for sarà incentrato
sulla ripetizione del codice. Quindi, proprio come promemoria, la ripetizione
del codice è un modo per consentire la
non duplicazione e in realtà forse stai eseguendo più di un codice simile
alla volta.
Quindi il linguaggio di programmazione c ha alcuni costrutti progettati per
il linguaggio che puoi usare quando vuoi ripetere il codice.
E questo ti consente di ripetere un blocco di affermazioni fino a quando non viene soddisfatta una condizione.
Quindi è simile al ciclo for e valuterai un'espressione
booleana, una condizione. Non puoi correre per sempre.
Quando corri in un ciclo per sempre, significa che è un ciclo infinito.
E ci sono solo alcune volte in cui
potresti volerlo fare di nuovo per esempio monitorare o ascoltare qualcosa.
Quindi il numero di volte in cui un ciclo viene ripetuto può essere controllato semplicemente dall'account.
Ci sono 2 tipi di loop che
puoi fare, un loop di controllo del contatore o come un loop di controllo sentinel è come lo chiamano.
Un ciclo di controllo del contatore significa che il
ciclo viene eseguito 10 volte, 20 volte, 30 volte, una quantità di tempo specifica.
Ripete lo stesso blocco di istruzioni all'interno del ciclo un
numero di volte.
Puoi avere un altro tipo di loop in cui non è controllato da un contatore.
Può essere eseguito 5 volte, può essere eseguito un 100, può volere 20,
tutto dipende da una condizione, una variabile o qualcosa del genere. Quindi, ad esempio, puoi eseguire un ciclo che dice che
eseguirò il mio ciclo ancora e ancora e ancora fino a quando l'utente
non entra in esci.
Quindi fino a quando la variabile non cambia per uscire. Non è controcontrollato. Non è dipendente.
Anche in questo caso, può essere eseguito 10 volte, può essere eseguito 100 volte.
Questi sono i 2 diversi tipi di loop. Quindi fornirò esempi di
entrambi, ma pensateci ad alto livello quando dovrei ripetere il codice?
Bene, potrei voler ripetere il codice 5 volte, una certa quantità di tempo, una
quantità di tempo definitiva o potrei voler inserire il
codice in base a una determinata condizione inserita da un utente, e si chiama sentinella.
Il nostro ciclo for ha la parola chiave for. Viene utilizzato per eseguire un
determinato numero di volte. Di solito viene utilizzato per il controllo del contatore, ma non è necessario.
Puoi usarlo per il ciclo di controllo del contatore o una sentinella per il ciclo di controllo.
Tocca a voi. Ma molti esempi in molte
pratiche sono controcontrollati, un certo numero di volte.
Se vuoi visualizzare i numeri da 1 a 10, ad esempio, dovresti usare il ciclo for.
Non vorresti scrivere 10 righe di codice con
la stessa istruzione printf che mostra un numero diverso.
È molto inefficiente. Richiede molto tempo.
Usereste un ciclo for per ripetere il codice.
Quello che faresti è che faresti qualcosa del genere.
Ecco un'introduzione a come appare il ciclo
for, la sintassi.
Hai la parola chiave for e poi hai queste parentesi.
Ancora una volta, le parentesi identificano diverse cose che stanno succedendo per
il ciclo for.
Quindi hai una parentesi e hai dichiarazioni all'interno delle parentesi.
Quindi, ancora una volta, le parentesi rappresentano il corpo del
ciclo, proprio come le parentesi che rappresentano il corpo di un'istruzione if.
Se hai una sola affermazione lì dentro, non hai bisogno delle parentesi,
ma è buona norma usarle sempre.
Quindi in questo esempio qui, vedi la parola chiave for, che dovrebbe essere la prima cosa che identifichi.
L'operazione, la durata della sua esecuzione è controllata e ciò che appare tra le parentesi
dopo la parola chiave for, di cui andremo in dettaglio specifico.
Ci sono fondamentalmente 3 diverse espressioni all'interno.
E puoi riconoscerli perché sono separati dal punto e virgola.
Quindi il punto e virgola dice che questa è una dichiarazione di espressione.
Quindi cosa stanno facendo queste 3 cose, le descriveremo.
L'azione che vuoi ripetere
è all'interno del corpo del loop, è quello che succede tante volte.
In questo esempio, il corpo del ciclo è printf.
Quindi, se una condizione viene valutata come vera, continuerà a stampare quel numero.
E ancora, per singole affermazioni puoi omettere le parentesi graffe.
Quindi esaminiamolo in dettaglio.
lo schema generale per il ciclo for è che hai questo tipo di istruzione.
Hai un per e poi hai una condizione di partenza, questo è lo pseudocodice.
Sto cercando di descrivere il ciclo for qui.
Quindi la condizione di partenza è la prima cosa, tutto prima del primo punto e virgola.
La seconda cosa è la condizione di continuazione con
un punto e virgola alla fine e quindi l'ultima cosa tra le parentesi è l'azione per iterazione.
E voglio descrivere ognuno di questi. E poi all'interno del corpo c'è l'istruzione loop.
L'istruzione loop è piuttosto semplice. È solo all'interno del corpo.
Questo è il codice che verrà eseguito e che viene ripetuto ogni volta.
È piuttosto semplice.
E ancora, puoi rompere le parentesi graffe se hai più affermazioni o omettere le
parentesi se hai una singola istruzione.
La condizione iniziale, quella prima cosa tra parentesi prima
del primo punto e virgola è di solito ma non
sempre di solito inizializza una variabile, chiamata variabile di controllo del ciclo.
Questa è la variabile che inizierai a guardare ad ogni iterazione.
Quindi la variabile di controllo del ciclo è tipicamente un contatore
di qualche volta, non sempre di nuovo, voglio sottolineare
che, non deve essere. Ma molte volte in un ciclo for
è un contatore e tiene traccia della frequenza con cui il loop è stato ripetuto.
Questo è ciò che stanno facendo questa condizione iniziale e la variabile di controllo del ciclo.
Puoi anche dichiarare e inizializzare diverse variabili dello stesso tipo qui con
la dichiarazione separata da virgole. Quindi puoi avere più inizializzazioni qui
variabili.
Ora, a seconda del compilatore c che usi,
potresti non essere in grado di dichiarare quelle variabili all'interno dell'istruzione for.
Se usi qualcosa al di sotto del compilatore C99, devi dichiarare
le variabili al di fuori dell'istruzione for e quindi dovresti semplicemente inizializzarle in questo punto
in cui dice la condizione
iniziale, ma esamineremo alcuni di questi esempi.
Ma la condizione iniziale è dove si inizializzano le variabili.
È la variabile di controllo del ciclo ed è chiamata per questo motivo perché controlla
la frequenza con cui verrà eseguito il ciclo quando lo si inizializza.
La prossima cosa di cui voglio parlare è quella condizione di continuazione, condizione di continuazione, la parte che
è prima del dopo questo primo punto e virgola nel ciclo for.
Questa è un'espressione logica.
Questa è la condizione che valuterà come vero o falso.
Questo è il momento in cui salterai nel loop o uscirai dal loop.
Questo determina se il ciclo deve continuare ad essere eseguito.
Finché questa condizione ha un valore di true, l'esecuzione del ciclo
continua, tutte le istruzioni nel corpo verranno eseguite.
Questo tipicamente controllerà il valore della variabile di controllo del loop.
Quindi si inizializza la variabile di controllo del ciclo nella condizione iniziale
e poi si guarda nella condizione di continuazione.
Puoi inserire qualsiasi logica o qualsiasi espressione aritmetica qui finché sai cosa stai facendo.
La condizione di continuazione viene verificata all'inizio del ciclo anziché alla fine.
Questo è indicato come un ciclo di pre-test.
Noterai la differenza quando parliamo del ciclo do-while, che è un ciclo post-test.
Ma ciò significa che l'istruzione loop può essere eseguita una volta, può
essere eseguita 0 volte.
Tutto dipende dal fatto che la condizione di continuazione venga valutata come vera o falsa.
Se restituisce false, non eseguirai mai il corpo.
Se restituisce true, eseguirai quel corpo almeno una volta.
L'azione per iterazione che si trova alla fine del ciclo for dopo il secondo punto e virgola,
che di solito fa qualche tipo di modifica della variabile di controllo del ciclo.
Lo incrementerà o decrementerà se è un contatore
di loop o se è un loop sentinella, potrebbe chiedere all'utente di inserire più input.
Puoi anche fare più di una modifica di una variabile.
È possibile modificare la variabile di controllo del ciclo e modificare altre variabili.
Devi solo separarli con virgole.
Ma per riassumere tutto
quello che ho detto, abbiamo questo tavolino che lo descrive.
Ma prima di parlarne, diamo un'occhiata a un piccolo esempio.
Quindi ecco un esempio. Abbiamo la parola chiave for.
E poi noterai che abbiamo int I uguale a 1 j uguale a
2, è lì che inizializziamo le variabili.
E stiamo effettivamente inizializzando 2 variabili qui separate dalla virgola, in genere in
un ciclo for di solito ne inizializza solo una, la variabile di controllo del ciclo.
Ma in questo caso, stiamo inizializzando I e j.
E poi, dopo quel punto e virgola, abbiamo la condizione.
Quando entreremo e ogni volta che usciremo da questo ciclo.
Entreremo fintanto che I è minore di 5.
Questa è la nostra espressione booleana che restituisce true o false.
E poi, dopo quel secondo punto e
virgola, modificheremo quella variabile di controllo del ciclo o qualsiasi altra variabile che abbiamo interessato.
Qui stiamo facendo un più, più I, questo è un
operatore di incremento, prefisso I. E poi assegniamo j uguale a j più 2.
Questa sarà solitamente la tua condizione x, modificando quella
variabile di controllo del ciclo.
E poi il corpo del ciclo ha solo una singola istruzione, quindi non abbiamo bisogno delle parentesi.
Stiamo solo stampando i valori di I per j.
Quindi l'output prodotto da questo codice sarà
i valori 2, 8, 18, 32 e 50 su una singola riga.
La prima iterazione del ciclo, I sarà uguale a 1, j sarà uguale a 2.
E quindi dirà I per j, che è 1 per 2 e lo visualizzerà.
Controllerà per assicurarsi che non sia maggiore di 5, non è 1.
Quindi tornerà indietro e verrà eseguito una seconda volta.
E stiamo anche modificando quella variabile I nella nostra ultima dichiarazione.
Quindi nella seconda iterazione del ciclo, sarò uguale a 2.
E j sarà uguale a 2 più 2 che è 4.
Quindi ora moltiplicheremo 2 per 4, che è 8
e lo visualizzeremo e poi controlleremo se I
è maggiore di 5? No, ho ancora 2 anni.
Quindi modifichiamo I in modo che ora sia uguale a 3 per
l'iterazione successiva, e modifichiamo j in modo che sia uguale a 4 più
2 che è 6.
E poi per la terza
iterazione del ciclo, moltiplichiamo I per J. Quindi diciamo 3 per 6 e mostriamo 18.
Prima di eseguire la quarta iterazione, controlliamo se I è maggiore di 5.
No, sono 4. Quindi lo incrementiamo, diciamo che è 5. È uguale a 5, quindi continuerà a funzionare.
Poi ne faremo 32 e poi ne faremo 50.
Quindi questa è una dichiarazione for. Vuoi eseguirlo ed eseguirlo nel browser
del codice e giocare e cambiare le cose.
Ma quello che stiamo facendo qui è che stiamo facendo 3 cose separate su una singola riga di codice.
Stiamo inizializzando la variabile di controllo del ciclo o qualsiasi altra variabile.
Abbiamo la nostra espressione booleana dopo il nostro primo punto e virgola, la nostra condizione di uscita.
E poi stiamo modificando la variabile di controllo del ciclo e qualsiasi altra variabile
che vogliamo come ultima parte dell'istruzione for.
Quindi, per riassumere quello che stiamo facendo, ho trovato questo simpatico
grafico pratico da un libro e volevo mostrartelo. Questo riassume tutto.
Quel primo punto e virgola inizializza la variabile di controllo del ciclo.
Dopo il primo punto e virgola, stiamo eseguendo la nostra condizione, la nostra espressione booleana.
E poi, dopo il secondo punto e
virgola, stiamo modificando quella variabile di controllo del ciclo. E questo è il tipico esempio che vedi.
Questo è un ciclo di controllo del contatore che inizia da 1 e arriva fino a 10.
Quindi questo verrà effettivamente eseguito 10 volte.
La chiave è inferiore a 10. Quindi vedrai gli operatori relazionali come le nostre condizioni, proprio
come abbiamo visto gli operatori relazionali come le nostre condizioni sulla nostra istruzione if.
La chiave qui è che vuoi modificare quella variabile di controllo del ciclo o non uscirai mai.
Quindi il conteggio più positivo è molto importante.
E per quanto riguarda l'incremento pre o post se quel plus plus è prima della
variabile o
dopo la variabile, non devi preoccuparti perché
verrà incrementato o decrementato solo dopo l'iterazione del ciclo, quindi non lo fa ' Non
importa se fai più più conta o conta più più.
E anche di nuovo a seconda della versione di c che stai utilizzando
per il tuo compilatore, potresti
essere in grado di dichiarare la variabile count all'interno del ciclo for o potresti dover dire
int count è uguale a 1 o in count al di fuori del ciclo for e quindi inizializzalo nel primo punto e virgola.
C99 ha aggiunto l'inizializzazione e la dichiarazione nella stessa
parte del ciclo for.
Ma questo è fondamentalmente il modo in cui funziona il ciclo for.
Ora andiamo in un piccolo esempio, voglio mostrarti la flessibilità del ciclo for.
Ecco un esempio in cui sostanzialmente sommeremo solo alcuni numeri interi.
E in questo esempio, chiederemo all'utente di inserire un numero di numeri interi che desidera sommare.
Lo memorizzeremo in una variabile chiamata count.
Ora avremo un ciclo for che passa attraverso tutti
quelli a seconda del numero che hanno inserito e ripetuto molte volte.
Quindi qui diciamo 4, abbiamo unsigned int, non deve essere unsigned per int
I è uguale a 1. Stiamo inizializzando la variabile di controllo del ciclo.
E poi stiamo dicendo che se sono inferiore a contare, allora usciremo e poi
modificheremo il materiale del loop più più I.
Quindi questo funzionerà. Ancora una
volta, l'1 al numero inserito dall'utente, 10 o 20.
E tutto quello che faremo è dire che la somma è uguale alla somma più 1.
Ora il ciclo for è così potente perché il ciclo for ti
consente di modificare molte variabili.
Non abbiamo nemmeno bisogno di mettere quella somma più uguale a I nel corpo del ciclo for.
Possiamo metterlo alla fine dell'ultima affermazione.
Quindi, oltre a incrementare I di 1, possiamo semplicemente dire che somma più è uguale a I più più.
Quindi abbiamo fatto tutto in una singola riga di
codice e questo ti mostra la flessibilità. è tutto perché possiamo
modificare la variabile nell'istruzione for stessa. Non dobbiamo avere quella linea del corpo.
Quindi diamo un'occhiata a questo esempio nei blocchi di
codice per mostrarti come puoi manipolarlo e vedere qual è l'output.
Ecco il nostro esempio che abbiamo avuto durante la lezione. Voglio andare avanti e provare a compilare questo.
E quando lo compilo, noterai che ho un errore.
Dice che non posso dichiarare la mia variabile all'interno della mia istruzione for. Questo perché sto eseguendo una versione precedente
del compilatore c. Sto eseguendo il C89.
Probabilmente non lo avrai.
Ma per risolvere, se mai vedi questo tipo di errore, tutto ciò che
devi cancellarlo al di fuori del ciclo for. Quindi dici solo io non firmato.
E poi all'interno del ciclo for, lo si
inizializza, qualcosa del genere. Ora proviamo a compilare e
devo solo sbarazzarmi di alcuni di questi specificatori di formato.
Quindi, quando compilo con successo ed
eseguo questo programma, vedrai come funziona il ciclo.
Mi chiederà di inserire i numeri interi che voglio sommare. Se inserisco 5, sommerà 1
2 3 4 e 5 che è 15.
E quello che potremmo fare per eseguire il debug di questo è che potremmo aggiungere una
parentesi al ciclo for, e potremmo voler vedere quante volte viene eseguito, possiamo aggiungere un'istruzione
print non necessariamente per eseguire il debug, ma solo vedere cosa sta succedendo , potremmo dire loop interno.
E questo ci dirà che il ciclo viene eseguito
5 volte perché verrà eseguito I per contare.
Quindi quello che voglio dimostrare è quante volte viene eseguito. Quindi ora quando lo
costruisco e lo eseguo, vedrò cosa sta succedendo per ogni iterazione.
Quindi dico 8.
Ciclo interno, ciclo interno, ciclo interno, non ho aggiunto un avanzamento riga. Quindi è difficile da leggere, ma
il ciclo interno viene visualizzato 8 volte.
E poi riassumo ciascuno di quei numeri all'interno dei loop, quindi la risposta è
36, 1 più 2 più 3 più 4 più 5 più 6 più 7 più 8.
Quindi puoi giocare con questo. Ma ancora una volta, inizializziamo
la nostra variabile di controllo del ciclo. Controlliamo le condizioni per uscire. Usciremo una volta che avremo premuto
qualunque cosa l'utente abbia inserito. Se l'utente ha inserito 8,
eseguiremo 8 volte e poi dovremo modificare I. Se non avessimo modificato I qui, avresti un ciclo per sempre.
E cosa sarebbe successo quando avresti eseguito il
programma, sarebbe eseguito per sempre.
Quindi vedrai dopo aver inserito il numero, il tuo programma non uscirà mai.
Quindi diciamo di inserire 6, premo invio, guarda cosa sta
succedendo, stampando solo loop all'interno. Non esce mai.
È un ciclo infinito. Quindi l'ultima cosa è molto, molto importante. Vuoi sempre modificare la tua variabile di controllo del ciclo.
E ancora, la variabile di controllo del ciclo determina l'uscita, in questo caso I.
Quindi il ciclo for viene utilizzato un po '.
È molto facile da usare e ti permette di fare 3 cose diverse all'interno del loop.
Inizializzare la variabile di controllo del ciclo, controllare il controllo
del ciclo della variabile per la condizione di uscita e quindi modificare
quella variabile di controllo del ciclo.
Queste sono 3 cose che devi fare in un ciclo e puoi fare in una singola dichiarazione.
Ora lasciami parlare del ciclo infinito molto velocemente.
Quindi ho appena dimostrato un ciclo infinito. Qui è dove non esci mai.
E non hai l'obbligo di inserire alcun parametro nell'istruzione for loop.
Puoi effettivamente scrivere un ciclo infinito apposta.
Il modo in cui lo faresti è semplicemente inserire i punti e virgola lì.
Quindi avresti un ciclo for con 2 punti e virgola.
Se mai lo vedi, significa che stai scrivendo un ciclo infinito.
In genere, non si desidera avere cicli
infiniti, ma a volte perché la condizione per continuare il ciclo è assente.
Il ciclo continuerà indefinitamente. A volte è utile se stai monitorando i dati.
Quindi, se stai monitorando i dati, potresti avere qualcosa lì dentro.
In genere, quando si dispone di un ciclo per sempre, di solito
si ha anche una sospensione, che interromperà l'esecuzione del programma, forse per un secondo, quindi si sta monitorando qualcosa.
L'altro caso d'uso in cui potresti avere un ciclo infinito è se stai ascoltando una connessione.
Quindi, se stai aspettando e stai ascoltando la connessione o se stai tirando qualcosa
per vedere qualcosa, puoi farlo.
Ora alcune persone sostengono che non dovresti mai tirare e non dovresti mai
ascoltare, ma questo è un altro argomento.
Questo è davvero l'unico caso per alcuni cicli for che sono infiniti.
Evita il più possibile i loop infiniti modificando quella variabile di controllo del loop.
Spero che questo sia stato utile. Questo è il ciclo for.
Utilizzeremo un ciclo for in una delle nostre sfide, così diventeremo più familiari.
Grazie.