Comandos de decisão (IFs)
Muitas vezes, ao desenvolver programas de computador, precisamos executar determinado conjunto de instruções, apenas, se determinada condição for verdadeira, ou, caso contrário. Para tanto, a linguagem C oferece um comando simples, o if ("Se" em português). Veja o exemplo abaixo:
#include <stdio.h>
int main() {
int n;
printf("Informe um numero: ");
scanf("%d",&n);
if ( n > 10 ) {
printf("O numero %d eh maior que 10",n);
}
printf("\nTecle enter para finalizar...");
return 0;
}
O exemplo acima lê um número e armazena na variável (n). E, então, verifica se o numero (n) é maior que 10. Se sim, imprime a mensagem informando que o número (n) é maior que 10. E depois, imprime outra mensagem pedindo para o usuário teclar enter. Repare que o if recebe uma condição entre parenteses e o as instruções que devem ser executados se a condição entre parenteses for verdadeira ficam entre chaves. Veja abaixo outro exemplo:
#include <stdio.h>
int main() {
int n;
printf("Informe um numero: ");
scanf("%d",&n);
if ( n > 10 ) {
printf("O numero %d eh maior que 10",n);
} else {
printf("O numero %d eh menor ou igual a 10",n);
}
return 0;
}
O programa acima pede para o usuário informar um número e, após a leitura, o número é armazenado na variável (n). Apos isso, uma verificação é feita. Se o número armazenado na variável (n) for maior que 10, o programa imprime uma mensagem informando isso. Caso contrário (else em inglês), significa que a condição n > 10 é falsa, ou seja, o número é menor ou igual a 10 e, então, é impressa a devida mensagem. Lembrando que a mensagem é criada pelo programador, o texto entre aspas duplas pode ter a mensagem que o programador preferir. Vejamos outro exemplo:
#include <stdio.h>
int main() {
int n1, n2;
printf("Informe um numero: ");
scanf("%d",&n1);
printf("Informe outro numero: ");
scanf("%d",&n2);
if ( n1 == n2 ) {
printf("Os numeros informados sao iguais");
} else if ( n1 > n2 ) {
printf("O maior numero eh %d",n1);
} else {
printf("O maior numero eh %d",n2);
}
return 0;
}
O programa acima pede para o usuário digitar dois números, então verifica qual é maior ou se os dois números são iguais. Se o primeiro número for igual ao segundo, é impressa a mensagem informando que os números informados são iguais, caso contrário, se o primeiro número for maior que o segundo, é impressa uma mensagem informando que o primeiro número é maior que o segundo, caso contrário, significa que o segundo número é maior que o primeiro e é impressa a mensagem informando isso.
Preste atenção ao operador igual igual(==) na primeira condição. Um único igual (=) é utilizado para atribuição de valores a uma variável. O == é utilizado para comparar se dois valores são iguais.
Vejamos mais um exemplo:
#include <stdio.h>
int main() {
int n;
printf("Informe um numero: ");
scanf("%d",&n);
if (n%2==0) {
printf("O numero %d eh par!",n);
} else {
printf("O numero %d eh impar!",n);
}
return 0;
}
O exemplo acima pede que o usuário digite um número e verifica se o número é par ou impar. Se o resto da divisão do número por 2 for igual a 0, significa que o número é par, caso contrário, é impar.
Ex: 1%2=1, 2%2=0, 3%2=1, 4%2=0, 5%2=1
Preste atenção aos exemplos abaixo:
if(n%2==0){
printf("O numero %d eh par!",n);
}else{
printf("O numero %d eh impar!",n);
}
if( n%2==0 )
printf("O numero %d eh par!",n);
else
printf("O numero %d eh impar!",n);
if( n % 2 == 0 )
printf("O numero %d eh par!",n);
else printf("O numero %d eh impar!",n);
Os três conjuntos de instruções acima fazem exatamente a mesma coisa. Em C, em todo comando que tenha um bloco de código como uma de suas partes, o bloco de código fica entre chaves {}. O if e else são desses comandos, assim como o switch/case, for, while e do/while que serão vistos mais adiante
Repare que, nos exemplos 2 e 3 acima, os comandos if, else não utilizam as chaves para declaração de um bloco de código, isso porque o if tem apenas uma instrução e, nesse caso, o uso das chaves é opcional. Do mesmo modo com o bloco de código do else.
IFs aninhados
Abaixo, um programa que pede que o usuário digite 3 números e os mostra em ordem crescente:
#include <stdio.h>
int main() {
int a, b, c, maior, meio, menor;
printf("Informe o primeiro numero: ");
scanf("%d",&a);
printf("Informe o segundo numero: ");
scanf("%d",&b);
printf("Informe o terceiro numero: ");
scanf("%d",&c);
if ( a > b && a > c ) {
maior = a;
if ( b > c ) {
meio = b;
menor = c;
} else {
meio = c;
menor = b;
}
} else if ( a > b ) {
maior = c;
meio = a;
menor = b;
} else if ( a > c ) {
maior = b;
meio = a;
menor = c;
} else {
menor = a;
if ( b > c ) {
maior = b;
meio = c;
} else {
maior = c;
meio = b;
}
}
printf("\nOrdem crescente: %d %d %d",menor,meio,maior);
return 0;
}
Exercícios
1) Faça um programa que leia um média escolar de um aluno e imprima se o aluno foi aprovado, reprovado ou se deve ser submetido a avaliação final. Ex:
- Se a nota média for menor que 5, imprimir a mensagem de aluno reprovado;
- Se a nota média for maior ou igual a 5 e menor que 7, imprimir mensagem de necessária avaliação final;
- Se a nota média for maior que 7, imprimir mensagem de aluno aprovado;
2) Faça um programa que leia os valores reais a, b e c de uma equação do segundo grau e calcule e mostre os valores x1 e x2. Veja abaixo o cálculo dos valores x1 e x2:
delta = b^2 - 4 * a * c; x1 = ( -b + sqrt( delta ) ) / ( 2 * a ); x2 = ( -b - sqrt( delta ) ) / ( 2 * a );
Onde: * é o sinal de multiplicação e ^ é o sinal de potênciação (b^2 == b*b).
A função sqrt serve para o cálculo de raiz quadrada (Necessário incluir a biblioteca math.h). Ex: sqrt(25)=5.
A função pow pode ser utilizada para potenciação conforme a seguir: 4^2 = pow( 4, 2 ) = 16.0. A função pow retorna um número real como resultado e depende da inclusão da bibliotecsa math.h.
Atenção: é necessário evitar a divisão por zero e o cálculo de raiz quadrada de número negativo. Logo, para o cálculo de x1 e x2, o delta não pode ter valor negativo e o a não pode ter valor 0.