DCC003: Algoritmos e Estruturas de Dados I
2013/1

Exercícios 2: Condicionais (if/else), seletor de fluxo (switch), laços (while, for)

Sumário da sintaxe das estruturas de controle de fluxo em C

===========
= IF/ELSE =
===========

	if(EXPRESSÃO) COMANDO1
	else COMANDO2

	Executa COMANDO1 se EXPRESSÃO for verdadeira, caso contrário executa
	COMANDO2.  A cláusula do 'else' pode ser omitida.

==========
= SWITCH =
==========

	switch(EXPRESSÃO INTEIRA) CASOS

	Executa o CASO relativo ao valor da EXPRESSÃO INTEIRA, ou o CASO padrão
	(default) se não existir caso relativo ao valor da EXPRESSÃO INTEIRA.
	Exemplo:

	char operando;
	scanf("%c", &operando);
	switch(operando) {
		case '+': COMANDO
		case '-': COMANDO
		case '/': COMANDO
		case '*': COMANDO
		default: COMANDO /* caso padrão */
	}

=========
= WHILE =
=========

	while(EXPRESSÃO) COMANDO

	repete COMANDO enquanto EXPRESSÃO for verdadeira.

============
= DO/WHILE =
============

	do COMANDO while(EXPRESSÃO)

	executa COMANDO uma vez e depois repete COMANDO enquanto EXPRESSÃO for
	verdadeira.

=======
= FOR =
=======

	for(INICIO; TESTE; AVANÇO) COMANDO

	executa a expressão INICIO.  depois repete COMANDO e AVANÇO, nesta
	ordem, enquanto a expressão TESTE for verdadeira.

=========
= NOTAS =
=========

	Lembramos que um comando pode ser uma expressão seguida de
	ponto-e-vírgula ou um bloco de comandos entre chaves.

	Uma expressão é qualquer qualquer construção que tem um valor (uma
	variável, uma constante, uma chamada de função, uma expressão
	aritmética, ou uma expressão lógica).

Exercício 1. Uma importadora importa produtos de vários países. O preço do frete varia de acordo com o país seguindo a tabela abaixo. Faça um programa que lê o valor de um produto, o país de origem (imprima as opções possíveis em um menu) e imprima o valor total do produto mais frete.

PaísEstados UnidosFrançaMéxicoArgentinaChina
Frete60,00 75,50 50,00 27,35 80,00

Exercício 2. O conceito de um aluno é calculado a partir de sua nota, seguindo a tabela abaixo. Faça dois programa que lêem a nota de um aluno e imprimem seu conceito. O primeiro programa deve utilizar IF/ELSE e o segundo programa deve utilizar SWITCH. Assuma que alunos só podem receber notas inteiras (isto é, sem decimais).

Nota 0 a 4 5 6 7 8 9+
Conceito F E D C B A

Exercício 3. Faça um programa para imprimir as raízes de uma equação do segundo grau na forma ax2 + bx + c. Caso a seja zero, imprima a mensagem "Equação não é de segundo grau". Se delta = b2 - 4ac for menor que zero, imprima a mensagem "Não existe raiz". Se delta for zero imprima a raíz e a mensagem "Raíz única".

Exercício 4. Faça um programa para imprimir todos os números pares entre 0 e 500.

Exercício 5. Faça um programa que calcule a soma de todos os números entre 0 e 500.

Exercício 6. Calcule o valor de i após a execução de cada um dos laços abaixo (no papel, sem rodar o código):

(a)
int i = 0;
int j = 0;
while(j < 1000) {
	j = j - 2;
	i++;
}

(b)
for(int i = 0; i < 10; i++);

(c)
int i = 0;
int j = 0;
int k = 0;
for(j = 0; j < 10; j++) {
	for(k = 0; k < 10; k++) {
		i++;
	}
}

(d)
int i = 0;
int j = 1;
while(j < 1024) {
	j = j*2;
	i++;
}

(e)
int i = 0;
int j = 1;
while(j < 65536) {
	j = j*2;
	i++;
}
/* dica: generalize o resultado da letra (d) */

Exercício 7. Faça um programa que lê um número inteiro e imprime todos os seus divisores.

Exercício 8. Faça um programa que lê um número inteiro N e imprime as N primeiras linhas do triangulo de Floyd:

1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
...

Exercício 9. O valor de e (número de Euler) pode ser aproximado pelo somatório 1 + 1/1! + 1/2! + 1/3! + 1/4! + 1/5! + ...

Implemente um programa para aproximar o valor de e. Seu programa deve aumentar a precisão da aproximação calculando iterativamente (isto é, num laço) os termos do somatório acima. Seu programa deve parar a aproximação quando o i-ésimo termo 1/i! for menor do que 10-6.

Desafio. Faça um programa para imprimir o triangulo de Pascal:

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
...

Onde o k-ésimo elemento da n-ésima linha é o coeficiente binomial C(n, k) = n!/((k!)*(n-k)!), o número de combinações de n elementos com tamanho k.