Noções básicas de programação C: lógica booleana e fluxo de controle

12

A maioria das pessoas pensa que codificação envolve algoritmos complexos. Não é. Trata-se principalmente de fazer escolhas simples. Em C, essas escolhas se resumem a uma coisa: expressões booleanas.

Você os viu em instruções if e loops while. Eles são os semáforos do seu programa. Verde vai. Vermelho para.

Veja este exemplo básico.

Ele pede um número. Ele verifica se esse número é menor que zero. Se for, o programa fala. Se não for? Silêncio.

A parte (b <0) é a expressão booleana. C avalia isso. True significa executar a próxima linha. Falso significa ignorá-lo. Simples.

Mas o que acontece quando você precisa de mais nuances?

Tratamento de valores zero e positivos

A única verificação acima deixa uma lacuna. E se o usuário inserir zero? Ou um número inteiro positivo? O programa os ignora.

Aqui está uma estrutura um pouco mais complexa.

Agora você tem lógica para valores negativos, zero e positivos. As seções else if e else capturam os outros casos. Ainda é básico, mas cobre todas as bases.

Condições complexas e armadilhas comuns

A lógica do mundo real raramente permanece simples. Às vezes você precisa que duas condições sejam verdadeiras ao mesmo tempo.

Considere esta linha:

Leia como em inglês. Se x for igual a y E j for maior que k, defina z como 1. Caso contrário, defina q como 10.

Observe os operadores.

C usa == para testar a igualdade. Ele usa um único = para atribuir um valor.

Esta é uma armadilha clássica. Se você escrever if (x = y), não estará verificando se eles são iguais. Você está atribuindo y a x e verificando se o resultado é diferente de zero. Sua lógica quebra. Sempre use iguais duplos para comparações.

O símbolo && representa uma operação booleana AND. Ambos os lados devem ser verdadeiros.

O kit completo de ferramentas do operador booleano

Você não precisa memorizá-los, mas deve saber como são. Eles aparecem em todos os lugares no código C.

  • Igualdade : ==
  • Desigualdade : !=
  • Menos que : <
  • Maior que : >
  • Menor ou igual a : <=
  • Maior ou igual a : >=
  • E : &&
  • OU : ||
  • NÃO : !

Por que isso é importante para usuários comuns

Lógica de loop em C: while, do-while e for estruturas

Você pode usar loops while com a mesma facilidade que instruções if básicas. Considere um exemplo simples:

Este código repete essas duas linhas até que a seja maior ou igual a b. A estrutura é simples. C também oferece uma construção do-while, que garante que o bloco de código seja executado pelo menos uma vez antes de verificar a condição. Aqui está um trecho mostrando uma verificação básica de entrada:

Como o loop for simplifica a iteração

O loop for é essencialmente uma abreviação para um loop while. Se você tiver um código como este:

Você pode compactá-lo em uma única instrução for :

O loop while tem três partes distintas: inicialização (x=1 ), teste (x<10 ) e incremento (x++ ). O loop for os agrupa em uma linha. Mas você não está limitado a variáveis ​​simples. Veja este cenário mais complexo:

Você pode reescrever isso usando um loop for :

Parece confuso. É confuso. Mas funciona. O operador vírgula permite encadear múltiplas instruções nas seções de inicialização e incremento de um loop for. Porém, você não pode colocar uma vírgula na seção de teste.

Muitos programadores C adoram agrupar a lógica em uma única linha. Outros argumentam que isso destrói a legibilidade. Não existe um consenso universal. Você apenas precisa decidir se valoriza a brevidade em vez da clareza.

O perigo de = vs == em expressões booleanas

O sinal de igual duplo == é uma fonte de bugs frequentes em C. Os desenvolvedores geralmente digitam um único sinal de igual = por engano. O compilador aceita ambos, mas o comportamento é drasticamente diferente.

Em C, as expressões booleanas são avaliadas como números inteiros. Zero significa Falso. Qualquer número inteiro diferente de zero significa Verdadeiro. Isso significa que você pode escrever legalmente:

Mas o que acontece se você escrever if (a=b)?

Isto não é uma comparação. É uma tarefa. A instrução if (a=b) atribui o valor de b a a e, em seguida, testa o valor resultante de a quanto à sua veracidade booleana. Se a se tornar zero, a condição será False. Se se tornar qualquer outra coisa, é Verdade.

Sua variável a muda de valor durante esse processo. Isso raramente é o que você deseja quando pretende comparar valores. Embora esse recurso de atribuição condicional possa ser útil em contextos específicos, é uma armadilha para os incautos. Tenha cuidado com seu uso de = e ==. Um erro de digitação muda tudo.