Por favor, estudem o Capítulo 2 do livro texto.

Adicionalmente, esses são os comentários da aula:

Em C, para trabalharmos com condições no seu programa, utilizamos a instrução if. Com ele, podemos ter várias condições em nosso programa, como:

#include <stdio.h>
int main()
{
	char letra;
	printf("Digite uma letra: ");
	scanf("%c", &letra);
	if (letra == 'a')
		printf("Você digitou uma vogal\n");
	if (letra == 'e')
		printf("Você digitou uma vogal\n");
	if (letra == 'i')
		printf("Você digitou uma vogal\n");
	if (letra == 'o')
		printf("Você digitou uma vogal\n");
	if (letra == 'u')
		printf("Você digitou uma vogal\n");
}

Porém, em programas maiores, tal utilização do if não é adequada, tanto logicamente quanto computacionalmente.

Explicação: se a letra digitada for a, o condicional do primeiro if será verdadeiro, executando assim seu escopo. Da mesma forma, os outros condicionais serão falsos e o computador vai perder processamento ao tentar fazer cada um deles.

Por isso, torna-se necessário fazer os condicionais (if) aninhados, como no exemplo abaixo:

#include <stdio.h>
int main()
{
	char letra;
	printf("Digite uma letra: ");
	scanf("%c", &letra);
	if (letra == 'a')
		printf("Você digitou uma vogal\n");
	else if (letra == 'e')
		printf("Você digitou uma vogal\n");
	else if (letra == 'i')
		printf("Você digitou uma vogal\n");
	else if (letra == 'o')
		printf("Você digitou uma vogal\n");
	else if (letra == 'u')
		printf("Você digitou uma vogal\n");
	else
		printf("Você não digitou uma vogal\n");
}

Nesse caso, pode-se notar que sempre comparamos a variável letra com uma constante (‘a’, ‘e’, ‘i’, ‘o’, ‘u’). Para esses casos, a linguagem C possui uma instrução que facilita essa escrita e também o trabalho com sequências de constantes, que é o switch:

switch (variavel)
{
	case constante1:
		instrucao_1;
		instrucao_2;
		...
	   break;
	   
	case constante2:
		instrucao_1;
		instrucao_2;
		...
	   break;
	...
	default
		instrucao_1;
		instrucao_2;
		...
}

Utilizando o switch, o último exemplo pode ser reescrito assim:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
int main()
{
	char letra;
	printf("Digite uma letra: ");
	scanf("%c", &letra);
	switch (letra)
	{
		case 'a':
			printf("Você digitou uma vogal\n");
			break;
		case 'e':
			printf("Você digitou uma vogal\n");
			break;
		case 'i':
			printf("Você digitou uma vogal\n");
			break;
		case 'o':
			printf("Você digitou uma vogal\n");
			break;
		case 'u':
			printf("Você digitou uma vogal\n");
			break;
		default:
			printf("Você não digitou uma vogal\n");
	}
}

Explicação:

  • Linha 7: instrução switch, que vai colocar em evidência, ou seja, vai obter o valor da variável que está entre parênteses (nesse caso, letra ) e vai comparar com todos os case(s) dentro de seu escopo (código dentro de suas chaves).
  • Linha 9: é nosso primeiro condicional do switch, comparando letra com o char ‘a’. É como se estivéssemos fazendo: if (letra == 'a') ...
    Caso esse condicional funcione, tudo escrito após os dois pontos (:) até o primeiro break ou o fim do escopo serão executados.
  • Linha 11: caso o condicional anterior (comparação de letra com ‘a’) dê verdadeiro, esse break fará com que o código abaixo não seja executado.
  • Outros case e break: seguem o mesmo padrão explicado acima.
  • Linha 24: só pode existir um default dentro de cada switch utilizado no programa. Ele que determina o caso geral, ou seja, se não casar com nenhum caso antes dele, ele será executado. O default sempre deve ser colocado no final do switch, ou seja, depois de todos os case` existentes nesse escopo.

O código acima ainda possui muita repetição de código. Notem que o printf("Você digitou uma vogal\n"); é repetido 5 vezes. Por isso (e também utilizando o que o switch permite), o código pode ser reescrito melhor da seguinte forma:

#include <stdio.h>
int main()
{
	char letra;
	printf("Digite uma letra: ");
	scanf("%c", &letra);
	switch (letra)
	{
		case 'a':
		case 'e':
		case 'i':
		case 'o':
		case 'u':
			printf("Você digitou uma vogal\n");
			break;
		default:
			printf("Você não digitou uma vogal\n");
	}
}

E agora, sabendo disso, podemos melhorar ainda mais nosso programa, tomando cuidado com letras maiúsculas e minúsculas:

#include <stdio.h>
int main()
{
	char letra;
	printf("Digite uma letra: ");
	scanf("%c", &letra);
	switch (letra)
	{
		case 'a':
		case 'e':
		case 'i':
		case 'o':
		case 'u':
		case 'A':
		case 'E':
		case 'I':
		case 'O':
		case 'U':
			printf("Você digitou uma vogal\n");
			break;
		default:
			printf("Você não digitou uma vogal\n");
	}
}

O switch também permite trabalhar com faixas de valores, desde que eles sejam sequenciais. Leia e estude o exemplo abaixo:

#include <stdio.h>
int main()
{
	int idade;
	printf("Digite sua idade: ");
	scanf("%d", &idade);
	switch (idade)
	{
		case  0 ... 17:
			printf("Você é menor de idade\n");
			break;
		case 18 ... 59:
			printf("Você é adulto\n");
			break;
		case 60 ... 120:
			printf("Você é um adulto com experiência\n");
			break;
		default:
			printf("Idade diferente.. você digitou certo?\n");
	}
}

Ele também é muito utilizado em menu de opções:

#include <stdio.h>
int main()
{
	int opt, num1, num2;
	printf("Digite a opção desejada:\n");
	printf("1 - Mostrar uma frase engraçada.\n");
	printf("2 - Dizer bom dia.\n");
	printf("3 - Mostrar a soma de dois números.\n");
	printf(":: ");
	scanf("%d", &opt);
	switch (opt)
	{
		case 1:
			printf("O que o pato disse para a pata?\nR.: Vem Quá!\n");
			break;
		case 2:
			printf("Bom diaaaaa!!!!!!!\n");
			break;
		case 3:
			printf("Digite dois números: ");
			scanf("%d %d", &num1, &num2);
			printf("Soma: %d\n", num1+num2);
			break;
		default:
			printf("Opção inválida\n");
	}
}

Have fun!!