Exercícios


Os exercícios indicados a amarelo podem ser vistos como prioritários. Deverá compilar sempre com a opção -Wall (para mais warning options do gcc ver aqui). Se se sentir confuso na linha de comandos, procure voltar aos exemplos das aulas teóricas ou leia as dicas disponíveis aqui e nas páginas que lhe seguem. Sugerimos que crie uma directoria para cada folha laboratorial. No exemplo seguinte, começamos por criar uma directoria IAEDlabs para guardar tudo o que está relacionado com os labs de IAED. Para tal usamos o mkdir. Depois mudamos para a directoria criada com o comando cd (change directory). Agora criamos uma directoria folha02 para os exercícios em baixo e voltamos a mudar de directoria com o comando cd.

me@machine  ~ $ mkdir IAEDlabs
me@machine ~ $ cd IAEDlabs
me@machine IAEDlabs $ mkdir lab3
me@machine IAEDlabs $ cd lab3
me@machine lab3 $

Para manipular ficheiros poderá usar outros comandos: para copiar ficheiros use o comando cp, para apagar o comando rm, para mover deverá usar o comando mv, etc. (ver aqui).


1. (Maior de Três) Escreva um programa que determine o maior de três números inteiros dados pelo utilizador. Sugestão: defina uma função int maior (int a, int b, int c).

2. (Maior e Menor) Escreva um programa que determine o maior e o menor número de N números reais dados pelo utilizador. Considere que N é um valor pedido ao utilizador. Sugestão: inicialize o maior e o menor com o primeiro valor lido. Em alternativa, poderá utilizar a informação oferecida em limits.h para inicializar as suas variáveis (ver exemplo em baixo).

3. (Produto ou Soma) Escreva um programa que calcule o produto dos números inteiros pares e a soma dos números inteiros ímpares entre N1 e N2 (inclusive), dados pelo utilizador.

4. (Média) Escreva um programa que calcule o média de N números reais dados pelo utilizador usando a função float media (int N);
Sugestões: a) a leitura dos valores pode ser feita dentro da função "media"; b) Comece por perguntar ao utilizador quantos números vai introduzir. ; c) Experimente dar o input do seu programa através de um ficheiro de texto com uma lista de valores (relembre o redireccionamento de I/O exemplificado nas teóricas).

5. (Conversão) Escreva um programa que pede ao utilizador um valor N que corresponde a um certo período de tempo em segundos. O programa deverá apresentar no output esse período de tempo no formato HH:MM:SS. (sugestão: utilize o resto da divisão (%) ).

6. (Digitos) Escreva um programa que pede ao utilizador um valor positivo N. O seu programa deverá voltar a pedir um valor para N caso o utilizador introduza um valor inválido. No output, deverá mostrar o número de dígitos que compõem N, assim como a soma dos dígitos de N. Por exemplo, o número 12345 tem 5 dígitos e a soma desses dígitos é 15.

7. (Keep fit!) O índice de massa corporal (IMC) relaciona a altura com o peso da pessoa através da fórmula IMC=peso/altura^2. A tabela de classificação é a seguinte:

IMC              Categoria
IMC < 19         Magro
19 <=  IMC <= 25 Normal
25 <   IMC <= 30 Excesso de peso
30 <   IMC <= 40 Obeso I
> 40             Obeso II 

Escreva um programa que calcule os seguintes indicadores: IMC, categoria, peso mínimo (PMI=19×altura^2) e peso máximo (PMA=25×altura^2) que garantem que a pessoal pertence à categoria normal. Utilize e implemente as funções float imc (float peso, float altura); void escreveCategoria (float imc); float pesoMinimo (float altura); e float pesoMaximo (float altura);

8. (Seguro Automóvel) O custo de um seguro automóvel depende de vários factores entre os quais a idade do condutor e o número de acidentes deste na anuidade anterior. A companhia Madeirense aplica o seguinte sistema de bónus/malus.

nAcidentes		Idade 		Bónus
0 >=25 20%
0 <25 15%
1 >=25 0%
1 <25 -5%
2 a 4 >=25 -30%
2 a 4 <25 -50%
>5 qq RECUSA

Escreva um programa que dado o valor actual de uma apólice de seguro, a idade do condutor, e o número de acidentes registados este ano, retorne o valor da apólice de seguro para o ano seguinte.

9. (Quadrado de Números) Escreva um programa que desenhe um quadrado de números como o que se segue utilizando a função void quadrado (int N);. O valor de N, dado pelo utilizador, deverá ser obrigatoriamente maior ou igual 2. O quadrado apresentado é o exemplo para N = 5.

1   2   3   4   5
2   3   4   5   6
3   4   5   6   7
4   5   6   7   8
5   6   7   8   9
 

10. (Pirâmide de Números 1) Escreva um programa que desenhe uma pirâmide de números utilizando a função void piramide (int N);. O valor de N, dado pelo utilizador, deverá ser obrigatoriamente superior ou igual 2. A pirâmide apresentada é o exemplo para N = 5.

                1
            1   2   1
        1   2   3   2   1
    1   2   3   4   3   2   1
1   2   3   4   5   4   3   2   1

Sugestão. Utilize as seguintes funções:
void escreveCaracter (char c, int n); (escreve o caracter passado no primeiro parâmetro tantas vezes quantas forem passadas no segundo parâmetro);
void escreveNumerosAsc (int a, int b); (escreve os números inteiros entre o primeiro parâmetro e o segundo em ordem crescente);
void escreveNumerosDesc (int a, int b); (escreve os números inteiros entre o primeiro parâmetro e o segundo em ordem decrescente).

11. Partindo dos exemplos da aula teórica T04, construa um programa que consiga contar a) o número de letras minúsculas, b) o número de letras maiúsculas, c) o número de algarismos, e d) o número de linhas não vazias dos Lusíadas (LusiadasASCII.txt). Recorra ao redireccionamento de I/O pela linha de comandos.