Olá, seja bem-vindo de volta.
Ainda vou falar um pouco sobre o fluxo de controle.
Então, vamos mergulhar direto nos loops que repetem o código.
Primeiro, vamos falar sobre esse loop for.
O loop for vai se
concentrar na repetição de código. Portanto, apenas como um lembrete, repetir
o código é uma maneira de não permitir a
duplicação e, na verdade, talvez você esteja executando mais de um código semelhante
por vez.
Portanto, a linguagem de programação c tem certas construções projetadas para a
linguagem que você pode usar quando quiser repetir o código.
E isso permite que você repita um bloco de afirmações até que alguma condição seja atendida.
Então é semelhante ao loop for e que você vai avaliar uma
expressão booleana, uma condição. Você não pode correr para sempre.
Quando você executa em um loop para sempre, isso significa que é um loop infinito.
E há apenas alguns momentos em que você
pode querer fazer isso de novo, como monitorar ou ouvir algo.
Portanto, o número de vezes que um loop é repetido pode ser controlado simplesmente por conta.
Existem 2 tipos de loops que você
pode fazer, um loop de controle de contador ou como um loop de controle sentinela como eles o chamam.
Um loop de controle de contador significa que o
loop é executado 10 vezes, 20 vezes, 30 vezes, um determinado período de tempo.
Ele repete o mesmo bloco de instruções dentro do
loop várias vezes.
Você pode ter outro tipo de loop onde não é controlado por contador.
Pode rodar 5 vezes, pode rodar 100, pode querer 20, tudo
depende de uma condição, uma variável ou algo assim. Então, por exemplo, você pode executar um loop
que diz que vou executar meu loop indefinidamente até que o
usuário digite sair.
Então, até que a variável mude para sair. Não é controlado por contador. Não é dependente.
Novamente, ele pode ser executado 10 vezes, pode ser executado 100 vezes.
Estes são os 2 tipos diferentes de loops. E então vou fornecer exemplos de
ambos, mas pense nisso em um alto nível, quando eu iria querer repetir o código?
Bem, posso querer repetir o código 5 vezes, uma certa quantidade de tempo, uma
quantidade de tempo definitiva ou posso querer colocar o código
com base em uma determinada condição inserida por um usuário, e isso é chamado de sentinela.
Nosso loop for tem a palavra-chave for. É usado para executar um
determinado número de vezes. Geralmente é usado para controle de contador, mas não precisa ser.
Você pode usá-lo para a malha de controle do contador ou uma sentinela para a malha de controle.
Você decide. Mas muitos dos exemplos em muitas
práticas são contra-controlados, uma certa quantidade de vezes.
Se você quiser exibir os números de 1 a 10, por exemplo, use o loop for.
Você não gostaria de escrever 10 linhas de
código com a mesma instrução printf exibindo um número diferente.
Isso é muito ineficiente. É muito demorado.
Você usaria um loop for para repetir o código.
O que você faria é algo assim.
Aqui está uma introdução à aparência do loop
for, a sintaxe.
Você tem a palavra-chave for e esses parênteses.
Novamente, os parênteses identificam coisas diferentes que estão acontecendo
no loop for.
Então você tem um colchete e instruções dentro dos colchetes.
Portanto, novamente, os colchetes representam o corpo do loop,
assim como os colchetes representam o corpo de uma instrução if.
Se você tiver uma única instrução lá, não precisará dos colchetes, mas
é uma boa prática sempre usá-los.
Portanto, neste exemplo aqui, você vê a palavra-chave for, que deve ser a primeira coisa a identificar.
A operação, por quanto tempo ela vai ser executada, é controlada e o que aparece entre
os parênteses após a palavra-chave for, que vamos entrar em detalhes específicos.
Existem basicamente 3 expressões diferentes lá dentro.
E você pode reconhecê-los porque eles estão separados por ponto-e-vírgula.
Portanto, o ponto-e-vírgula indica que esta é uma declaração de expressão.
Então, o que essas 3 coisas estão fazendo, vamos descrever.
A ação que você deseja
repetir está dentro do corpo do loop, é o que acontece tantas vezes.
Neste exemplo, o corpo do loop é printf.
Portanto, se uma condição for avaliada como verdadeira, ele continuará imprimindo esse número.
E, novamente, para instruções individuais, você pode omitir as chaves.
Então, vamos examinar isso em detalhes.
o padrão geral para o loop for é que você tem esse tipo de instrução.
Você tem um for e uma condição inicial, esse é o pseudocódigo.
Estou tentando descrever o loop for aqui.
Portanto, a condição inicial é a primeira coisa, tudo antes do primeiro ponto e vírgula.
A segunda coisa é a condição de continuação com
um ponto e vírgula no final e a última coisa entre os parênteses é a ação por iteração.
E eu quero descrever cada um deles. E depois disso, dentro do corpo está a instrução de loop.
A instrução de loop é muito fácil. Isso está apenas dentro do corpo.
Esse é o código que será executado e é repetido a cada vez.
Isso é muito básico.
E, novamente, você pode quebrá-lo entre colchetes se tiver várias instruções ou omitir as
chaves se tiver uma única instrução.
A condição inicial, a primeira coisa dentro dos
parênteses antes do primeiro ponto-e-vírgula é geralmente, mas nem sempre,
geralmente inicializa uma variável, chamada de variável de controle de loop.
Essa é a variável que você vai começar a olhar para cada iteração.
Portanto, a variável de controle de loop é tipicamente um
contador de algum tempo, nem sempre novamente, quero enfatizar
que não precisa ser. Mas muitas vezes em um loop
for é um contador e rastreia quantas vezes o loop foi repetido.
Isso é o que esta condição inicial e a variável de controle de loop estão fazendo.
Você também pode declarar e inicializar várias variáveis do mesmo tipo aqui
com a declaração separada por vírgulas. Portanto, você pode ter várias inicializações aqui
variáveis.
Agora, dependendo de qual compilador c você usa,
pode não ser capaz de declarar essas variáveis dentro da instrução for.
Se você usar qualquer coisa abaixo do compilador C99, terá
que declarar as variáveis fora da instrução for e então apenas inicializá-las onde
a condição inicial diz,
mas vamos examinar alguns desses exemplos.
Mas a condição inicial é onde você inicializa as variáveis.
É a variável de controle do loop e é nomeada por esse motivo porque controla
a frequência com que o loop será executado quando você inicializá-lo.
A próxima coisa que quero falar é sobre a condição de continuação, a condição de continuação,
a parte que está antes deste primeiro ponto-e-vírgula no loop for.
Esta é uma expressão lógica.
Esta é a condição que será avaliada como verdadeira ou falsa.
É quando você vai pular no loop ou sair dele.
Isso determina se o loop deve continuar a ser executado.
Enquanto essa condição tiver um valor true, o loop continuará a ser
executado, todas as instruções no corpo serão executadas.
Isso normalmente verifica o valor da variável de controle do loop.
Portanto, você inicializa a variável de controle de loop na condição inicial
e, em seguida, olha na condição de continuação.
Você pode colocar qualquer lógica ou qualquer expressão aritmética aqui, contanto que saiba o que está fazendo.
A condição de continuação é testada no início do loop, e não no final.
Isso é conhecido como loop de pré-teste.
Você notará a diferença quando falamos sobre o loop do-while, que é um loop de pós-teste.
Mas o que isso significa é que a instrução de loop pode ser executada uma
vez, pode ser executada 0 vezes.
Tudo depende se essa condição de continuação é avaliada como verdadeira ou falsa.
Se for avaliado como falso, você nunca executará o corpo.
Se for verdadeiro, você executará esse corpo pelo menos uma vez.
A ação por iteração que está no final do loop for após o segundo ponto-e-vírgula,
que geralmente faz algum tipo de modificação na variável de controle do loop.
Ele irá incrementar ou decrementar se for um
contador de loop ou se for um loop sentinela, pode pedir ao usuário para inserir mais dados.
Você também pode fazer mais de uma modificação em uma variável.
Você pode modificar a variável de controle do loop e pode modificar outras variáveis.
Você apenas tem que separá-los por vírgulas.
Mas, para resumir tudo
o que eu disse, temos esta pequena tabela que descreve isso.
Mas antes de falarmos sobre isso, vamos ver um pequeno exemplo.
Então aqui está um exemplo. Temos a palavra-chave for.
E então você notará que temos int I igual a 1 j igual
a 2, é onde estamos inicializando as variáveis.
E, na verdade, estamos inicializando 2 variáveis aqui separadas por vírgula, normalmente
em um loop for, geralmente inicializa apenas uma, a variável de controle de loop.
Mas, neste caso, estamos inicializando I e j.
E depois desse ponto-e-vírgula, temos a condição.
Quando vamos entrar e quando vamos sair desse loop.
Entraremos contanto que I seja menor que 5.
Essa é a nossa expressão booleana avaliada como verdadeira ou falsa.
E então, após o segundo ponto-e-vírgula,
vamos modificar essa variável de controle de loop ou quaisquer outras variáveis de que tratamos.
Aqui estamos fazendo um mais, mais I, este é um
operador de incrementação, prefixo I. E então estamos atribuindo j igual a j mais 2.
Normalmente, essa será sua condição x, modificando essa variável
de controle de loop.
E então o corpo do loop tem apenas uma única instrução, portanto, não precisamos dos colchetes.
Estamos apenas imprimindo os valores de I vezes j.
Portanto, a saída produzida por este código
será os valores 2, 8, 18, 32 e 50 em uma única linha.
A primeira iteração do loop, I vai ser igual a 1, j vai ser igual a 2.
E então vai dizer I vezes j, que é 1 vezes 2 e vai exibi-lo.
Ele vai verificar se eu não é maior que 5, se não é 1.
Então, ele vai voltar e executar uma segunda vez.
E também estamos modificando essa variável I em nossa última declaração.
Portanto, na segunda iteração do loop, I será igual a 2.
E j será igual a 2 mais 2, que é 4.
Então agora vamos multiplicar 2 por 4, que é 8
e vamos exibi-lo e então vamos verificar se eu
é maior que 5? Não, ainda tenho 2 anos.
Portanto, modificamos I para agora ser igual a 3 para
a próxima iteração e modificamos j para ser igual a 4 mais
2, que é 6.
E então, para a terceira
iteração do loop, multiplicamos I vezes J. Dizemos 3 vezes 6 e exibimos 18.
Antes de executarmos a quarta iteração, verificamos se I é maior que 5.
Não, são 4. Então nós o incrementamos, dizemos que é 5. É igual a 5, então ainda funcionará.
Então faremos 32 e depois 50.
Portanto, esta é uma declaração para. Você quer rodar isso e executá-lo no
navegador de código e brincar e mudar as coisas.
Mas o que estamos fazendo aqui é três coisas separadas em uma única linha de código.
Estamos inicializando a variável de controle do loop ou qualquer outra variável.
Estamos tendo nossa expressão booleana após nosso primeiro ponto e vírgula, nossa condição de saída.
E então estamos modificando a variável de controle de loop e quaisquer outras variáveis que
desejamos como a última parte da instrução for.
Então, para resumir o que estamos fazendo, encontrei este pequeno gráfico útil
de um livro e quero mostrar a vocês. Isso resume tudo.
O primeiro ponto e vírgula inicializa a variável de controle do loop.
Após o primeiro ponto e vírgula, estamos fazendo nossa condição, nossa expressão booleana.
E então, após o segundo ponto-e-vírgula,
estamos modificando essa variável de controle de loop. E este é o exemplo típico que você vê.
Este é um loop de controle de contador que começa em 1 e vai até 10.
Então, isso vai realmente ser executado 10 vezes.
A chave está lá menor que igual a 10. Portanto, você verá os operadores relacionais como nossas condições,
assim como vimos os operadores relacionais como nossas condições em nossa instrução if.
A chave aqui é que você deseja modificar essa variável de controle de loop ou nunca sairá.
Portanto, a contagem mais positiva é muito importante.
E no que diz respeito à pré ou pós-incremento, se esse mais é antes da variável ou
depois da variável,
você não precisa se preocupar com isso
porque só vai ser incrementado ou decrementado após a iteração do loop, por isso não Não
importa se você faz mais mais conta ou conta mais mais.
E também, dependendo da versão de c que você está executando
para o seu compilador, você
pode declarar a variável count dentro do loop for ou pode ter que dizer
int count igual a 1 ou in count fora do loop for e em seguida, inicialize-o no primeiro ponto e vírgula.
C99 adicionou a inicialização e declaração na mesma
parte do loop for.
Mas é basicamente assim que o loop for funciona.
Agora vamos entrar em um pequeno exemplo, quero mostrar a flexibilidade do loop for.
Aqui está um exemplo em que vamos basicamente somar alguns números inteiros.
E, neste exemplo, pediremos ao usuário que insira um número de inteiros que deseja somar.
Vamos armazenar isso em uma variável chamada contagem.
Agora teremos um loop for que passa por todos
esses, dependendo do número que eles inseriram e iteram tantas vezes.
Então aqui dizemos 4, temos unsigned int, não precisa ser unsigned para
int I igual a 1. Estamos inicializando a variável de controle de loop.
E então estamos dizendo que se eu for menos do que contar, é quando vamos sair e
então vamos modificar o material do loop mais mais eu.
Então, isso vai funcionar. Novamente, o
1 para o número inserido pelo usuário, 10 ou 20.
E tudo o que vamos fazer é dizer soma igual a soma mais 1.
Agora, o loop for é tão poderoso porque o loop for permite
que você modifique muitas variáveis.
Nem mesmo precisamos colocar essa soma mais igual a I no corpo do loop for.
Podemos colocá-lo no final da última declaração.
Portanto, além de incrementar I em 1, podemos apenas dizer soma mais igual a I mais mais.
Então, fizemos tudo em uma única linha de
código, e isso mostra a flexibilidade. é tudo porque podemos modificar
a variável na própria instrução for. Não precisamos ter essa linha de corpo.
Portanto, vamos dar uma olhada neste exemplo em blocos de código
para mostrar como você pode manipulá-lo e ver qual é a saída.
Aqui está nosso exemplo que tivemos na palestra. Eu quero ir em frente e tentar compilar isso.
E quando eu compilar isso, você vai notar que eu tenho um erro.
Diz que não posso declarar minha variável dentro da minha instrução for. Isso ocorre porque estou executando uma versão mais
antiga do compilador c. Estou executando o C89.
Você provavelmente não terá isso.
Mas para resolver, se você vir esse tipo de erro, tudo o que você
precisa fazer é excluí-lo fora do loop for. Então você acabou de dizer eu não assinado.
E então, dentro do loop for, você
o inicializa, algo assim. Agora, vamos tentar construir e
só tenho que me livrar de alguns desses especificadores de formato.
Então, quando eu compilar com sucesso e
executar este programa, você verá como o loop funciona.
Ele vai me pedir para inserir os inteiros que desejo somar. Se eu inserir 5, vai
somar 1 2 3 4 e 5, que é 15.
E o que poderíamos fazer para depurar isso é adicionar um colchete ao loop for,
e podemos querer apenas ver quantas vezes ele é executado, podemos adicionar uma instrução
de impressão não necessariamente para depurá-lo, mas apenas ver o que está acontecendo , poderíamos dizer loop interno.
E isso nos dirá que o loop roda 5
vezes porque vai rodar I para contar.
Então, o que quero demonstrar é quantas vezes isso está rodando. Então, agora, quando eu
construir e executar, verei o que está acontecendo em cada iteração.
Então, vou dizer 8.
Loop interno, loop interno, loop interno, eu não adicionei uma alimentação de linha. Portanto, é difícil de ler, mas
o loop interno é exibido 8 vezes.
E então eu somo cada um desses números dentro dos loops, então a resposta é
36, 1 mais 2 mais 3 mais 4 mais 5 mais 5 mais 6 mais 7 mais 8.
Então você pode brincar com isso. Mas, novamente, inicializamos nossa
variável de controle de loop. Verificamos a condição para sair. Vamos sair assim que atingirmos o
que o usuário inseriu. Se o usuário inseriu 8, iremos
executar 8 vezes e então teremos que modificar I. Se não modificássemos I aqui, você teria um loop eterno.
E o que aconteceria quando você executasse o
programa, ele funcionaria para sempre.
Assim, você verá que, depois de inserir o número, o programa nunca será encerrado.
Digamos que entremos em 6, eu pressiono enter e vejo o que está
acontecendo, apenas imprimindo um loop interno. Nunca está saindo.
É um loop infinito. Portanto, essa última coisa é muito, muito importante. Você sempre deseja modificar sua variável de controle de loop.
E novamente, a variável de controle de loop determina a saída, neste caso I.
Portanto, o loop for é usado um pouco.
É muito fácil de usar e permite que você faça 3 coisas diferentes dentro do loop.
Inicialize a variável de controle do loop, verifique o controle da
variável do loop para a condição de saída e, em seguida, modifique
essa variável de controle do loop.
Essas são 3 coisas que você deve fazer em um loop e pode fazer em uma única instrução.
Agora, deixe-me falar sobre o loop infinito bem rápido.
Então, acabei de demonstrar um loop infinito. É aqui que você nunca sai.
E você não tem obrigação de colocar nenhum parâmetro na instrução de loop for.
Você pode realmente escrever um loop infinito de propósito.
A maneira de fazer isso é simplesmente colocar o ponto-e-vírgula lá.
Portanto, você teria um loop for com 2 pontos e vírgulas.
Se você já viu isso, significa que está escrevendo um loop infinito.
Agora, normalmente, você não quer ter loops
infinitos, mas às vezes porque a condição para continuar o loop está ausente.
O loop continuará indefinidamente. Às vezes, isso é útil se você estiver monitorando dados.
Portanto, se você estiver monitorando dados, pode haver algo lá.
Normalmente, quando você tem um loop eterno, normalmente também adormece, o
que pausa a execução do programa, talvez por um segundo, para que você esteja monitorando algo.
O outro caso de uso em que você pode ter um loop infinito é se você estiver ouvindo uma conexão.
Então, se você está esperando e ouvindo a conexão ou se está puxando algo para
ver algo, você pode fazer isso.
Agora, algumas pessoas argumentam que você nunca deve puxar e nunca
ouvir, mas esse é outro argumento.
Esse é realmente o único caso para alguns loops for infinitos.
Evite loops infinitos tanto quanto possível, modificando essa variável de controle de loop.
Eu espero que isso tenha sido útil. Este é o loop for.
Usaremos um loop for em um de nossos desafios, para nos tornarmos mais familiares.
Obrigada.