CI067 - Oficina de Computação
Exercícios # 01
1º semestre 2015

Linguagem C


Os exercícios abaixo são exercícios preparatórios para facilitar a migração para a Linguagem C.

Muitos dos exercícios abaixo já foram vistos em disciplinas introdutórias de Programação de Computadores. Muitos deles foram retirados ou adaptados de materiais dos professores do DINF/UFPR Marcos Castilho, Ionildo Sanches e Carmem Hara.

1 Básicos

  

 
  1. Dadas as declarações em linguagem C
    • short int s = 10;
    • int i = 25;
    • long int l = 50L;
    • float f = 0.5;
    • double d = 1.7;
     
    Qual seria o valor e tipo de cada uma das expressões abaixo:
    1. f + s * i - 1
    2. i / f + s * d
    3. i / s * f
    4. (double) i / s * f
    5. l / i + (int) d / f

 
  1. (tamtipos)Faça um programa que imprime o tamanho em bytes dos tipos básicos em C , inclusive para tipos com sinal e longos. Os resultados devem ser exibidos com mensagens adequadas e bem formatadas para o usuário.

 Solução: sizeof.c

 
  1. (fatorial)Dado um número inteiro, calcular seu Fatorial.

 O fatorial de um número inteiro é definido como:

$ n! = 1 * 2 * 3 * .... * (n-1) * n$
$ 0! = 1$

 
  1. (fibonacci)Faça um programa que exiba na tela os 20 primeiros números da seqüência de Fibonnacci.

 A seqüência de Fibonnacci é definida como:

$ fib(0) = 0$
$ fib(1) = 1$
$ fib(n) = fib(n-1) + fib(n-2)$

ou seja, a seqüência 0,1,1,2,3,5,8,13,21,34,.......
Solução: fibonacci.c

 
  1. (fiboelem)Baseado na solução do exercício anterior, faça um programa que mostre o N-ésimo elemento da seqüência de Fibonnacci. O valor de N deve ser fornecido pelo usuário.

 
  1. (ehPrimo)Dado um número inteiro maior que 1, verifique se este número é primo ou não, exibindo mensagens convenientes em cada caso.

 Nas soluções abaixo, observe o número de iterações necessárias para chegar ao resultado:

 
  1. (raizesgrau2)Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma

    $\displaystyle Ax^2 + Bx + C = 0 . $

    Cada linha de dados contém a definição de uma equação por meio dos valores de $ A$, $ B$ e $ C$ do conjunto dos números reais. Após a leitura de cada linha o programa deve calcular as duas raízes da equação. A listagem de saída, em cada linha, deverá conter sempre os valores de $ A$, $ B$ e $ C$ lidos, seguidos dos valores das duas raízes reais. Caso a equação não tenha raízes reais, isto deve ser indicado na saída. Após cada resultado, o programa deve pedir que o usuário digite T para terminar o programa ou qualquer outra LETRA para continuar a calcular raízes de equações de 2º grau.

 As raízes de uma equação do segundo grau são calculadas pela fórmula de Bhaskara:

$\displaystyle x = \frac{-B \pm \sqrt{B^2
- 4AC}}{2A} . $

Sabe-se também que se o valor do Discriminante $ B^2 - 4AC$ for menor que 0 (zero), a equação não possui raízes reais.

 
  1. (coseno-for)Sabe-se que o valor do coseno de $ x$ radianos pode ser calculado pela série infinita abaixo:

    $\displaystyle \cos (x) =
\sum_{i = 0}^{N}(-1)^i \frac{x^{2i}}{(2i)!} =
\frac{...
... - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!}
+ \frac{x^8}{8!} - \cdots $

    Faça um programa que calcule o valor do coseno de um ângulo em radianos obtido pela série acima considerando apenas os primeiros 14 termos da mesma. Use o comando FOR.

 
  1. (coseno-while)Resolva o exercício 8 usando o comando WHILE.

 
  1. (coseno-do)Resolva o exercício 8 usando o comando DO...WHILE.

 
  1. (intsqrt)Faça um programa que calcule o número inteiro que mais se aproxime da raiz quadrada de um número fornecido pelo usuário.

 
  1. (casalfeliz)Afrânio tem um peso inicial $ P_a$ (e.g., 80 kg) e está engordando a uma média de $ T_a$ quilos por ano (e.g. 2 kg/ano). Enquanto isto, Ermengarda, sua amada esposa, tem um peso inicial $ P_e$ (e.g. 45kg) e está engordando a uma média de $ T_e$ quilos por ano (e.g., 3kg/ano). Faça um programa que solicite de um usuário os valores para $ P_a$, $ P_e$, $ T_a$ e $ T_e$, e calcule e imprima quantos anos serão necessários para que Ermengarda ultrapasse o peso de Afrânio. O programa também deve mostrar os pesos de cada membro do casal ternura neste momento importante de suas vidas. Considere que os valores fornecidos pelo usuário serão consistentes, tal que Ermengarda incialmente é mais magra que Afrânio, mas que Ermengarda engorda mais rápido que seu marido.

2 Vetores

  

 
  1. (lervetor)Escreva a função obtem_vetor() que ao ser chamada preencha um vetor de inteiros com dados do usuário. Esta função deve ter como argumentos o vetor a ser preenchido, o tamanho máximo do vetor e o valor inteiro que o usuário deve digitar indicando final da entrada de dados (este valor NÃO deve ser armazenado no vetor). A função deve retornar a quantidade de elementos lidos.

 
  1. (lervetor)Altere a função a função obtem_vetor() desenvolvida no exercício 13 de forma que a função passe a ter apenas 2 argumentos: O vetor a ser preenchido e seu tamanho máximo. O final da entrada de dados quando o usuário digitar qualquer valor não-inteiro, que não deve ser armazenado no vetor. DICA: Use o valor de retorno da função scanf().

 
  1. (contaelem)Escreva a função conta_ocorr() que recebe 2 argumentos: o 1º argumento é um vetor de caracteres e o 2º argumento é um caracter. A função deve retornar como resultado o número de vezes o 2º argumento da função ocorre dentro do vetor. O vetor de caracteres recebido pela função possui como último elemento o valor inteiro 0 (zero), que indica o final do vetor.

 
  1. (somaval)Faça uma função que some todos os valores reais de um vetor com no máximo 30 elementos.

 
  1. (contafreq)Escreva uma função que retorne os elementos que aparecem mais que 2 (duas) vezes em um vetor.

 
  1. (inverte)Dada uma seqüência de N números, imprimí-la na ordem inversa à da leitura.

 
  1. (pertence)Fazer um programa que leia e armazene em um vetor uma seqüência de inteiros. Em seguida o programa deve ler uma seqüência de inteiros informados pelo usuário e, para cada um deles, dizer se ele pertence ou não ao vetor armazenado previamente.

 
  1. (identidade)Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se os dois vetores são idênticos.

 
  1. (permutacao)Fazer um programa que leia duas seqüências de N inteiros em dois vetores distintos, digamos, V e W e verifique se um vetor é uma permutação do outro, isto é, eles tem os mesmos elementos mas em ordens diferentes. Não é permitido ordená-los previamente.

 
  1. (subconjunto)Fazer um programa que leia duas seqüências de inteiros, não necessariamente contendo a mesma quantidade de números, e diga se a segunda seqüência está contida na primeira. Esta verificação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.

 
  1. (concatena)Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, e construa um terceiro vetor, sem destruir os originais, que é a concatenação do primeiro com o segundo. A concatenação deve ser feita por uma função. O tamanho máximo das seqüências deve estar definida no programa.

 
  1. (calcpol)Dados n+1 valores reais, a_0, a_1, ..., a_n representando os coeficientes de um polinômio de grau n, calcular o valor do polinômio nos pontos X indicados pelo usuário, até o usuário entrar com o valor 999.99.

 
  1. (compvet)Escreva um programa que leia 2 seqüências de 15 números cada e diga quantos números da segunda lista são iguais aos seus correspondentes da primeira lista. Seu programa deve usar a função produzida no Exercício 13 para a leitura das 2 seqüências.

3 Vetores e Matrizes

  

 
  1. (ordenaseqs)Fazer um programa que leia duas seqüência de inteiros, não necessariamente contendo a mesma quantidade de números, ordene-os, e em seguida imprima todos os números ordenados em ordem crescente. Exemplo:

    V1: 7 3 2 6
    V2: 5 1 8 4 9
    Saída: 1 2 3 4 5 6 7 8 9

 
  1. (prodescalar)Dados dois vetores X e Y, determinar o produto escalar desses vetores.

 
  1. (histograma)Dada uma seqüência de N números, determinar quantos números distintos compõem a seqüência e o número de vezes que cada um deles ocorre na mesma. Exemplo:

    N=5
    1 2 3 2 3
    a seqüência tem três números distintos, 1, 2 e 3. Ocorrências:
    1 1 vez
    2 2 vezes
    3 2 vezes

 
  1. (convbin)Dadas duas seqüências com N números inteiros, cada qual assumindo os valores 0 ou 1, interpretadas como números binários:
    1. imprimir o valor decimal dos números;
    2. calcular a soma de ambos (em binário);
    3. imprimir o valor decimal da soma.

 
  1. (achamaior)Fazer um programa que calcula o maior elemento de cada linha de uma matriz e coloca estes valores em um vetor, onde cada n-ésimo elemento deste corresponde ao maior elemento da n-ésima linha da matriz.

 
  1. (somamat)Crie uma função que some duas matrizes A e B, com dimensões máximas de 10x10. A função deve receber como argumentos as duas matrizes, suas dimensões reais (que deverão estar dentro do limite 10x10) e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função.

 
  1. (multmat)Crie uma função que multiplique duas matrizes A e B. A função deve receber como argumentos as duas matrizes, suas dimensões reais e o resultado deve ser colocado em uma outra matriz, também passada como argumento da função. A função deve retornar 0 (zero) se a operação for bem sucedida e -1 se houver qualquer tipo de impedimento para a operação.

 
  1. (trocaelem)Faça um programa que obtenha do usuário uma matriz quadrada (dimensão máxima de 10x10) e troque o maior elemento de cada linha com o elemento da diagonal principal.

 
  1. (popmult)Faça um programa que preenche uma matriz 15x9 com o produto dos índices de cada posição.

4 Estruturas (struct) e Vetores de Estruturas

  

 
  1. (censo)Foi realizada uma pesquisa entre N habitantes de uma certa região. De cada habitante foram coletados os dados: Idade, sexo, salário e número de filhos.
    Faça um programa em linguagem C que receba do usuário uma lista de dados (idade,sexo,salario,num_filhos) e calcule a média salarial, a maior e menor idade do grupo, a média de idade e a quantidade de mulheres com 3 filhos que recebe até R$ 1000,00. Neste último caso também devem ser exibidos os dados em ordem crescente de salário. Quando a $ idade$ fornecida for 0 (zero), o programa deve exibir os resultados e terminar.
    Use uma função para cada cálculo.

 
  1. (agenda)Fazer um programa que implemente uma agenda de endereços. Cada item da agenda possui os seguintes campos: nome (40 caracteres no máximo), endereço (120 caracteres no máximo), fone (DDD inclusive), e-mail (20 caracteres no máximo), cidade (10 caracteres no máximo), CEP e estado (2 caracteres).
    O programa deve apresentar um diálogo em que pede no máximo 20 ítens para a agenda. Caso o usuário deseje terminar a entrada de dados antes de completado os 20 ítens, deve fornecer um nome vazio como entrada.
    Uma vez terminada a entrada de dados, o programa deve solicitar o NOME de uma pessoa e termina após exibir na tela o endereço e e-mail desta pessoa.

 
  1. (mult_matrizes)Faça um programa que leia pelo teclado pares de matrizes (cada matriz com dimensões máximas de $ 5
\times 5$) e calcule o produto entre elas. O resultado deve emitido na tela após a leitura de todos os pares de matrizes.
    A entrada consiste de vários conjuntos de linhas, em que a primeira linha do conjunto contém a dimensão da primeira matriz a ser multiplicada, seguida das duas matrizes. Assim, cada conjunto é caracterizado por (1 + N + M) linhas, considerando que dimensão indicada para o conjunto seja $ N \times M (N, M \leqslant 5)$. A entrada termina quando for indicada dimensão $ 0 \times 0$ na primeira linha de um conjunto. Exemplo:

    2 2  (dimensão do 1º conjunto de matrizes)
    1 2  (1ª matriz - 2x2)
    3 7
    7 8  (2ª matriz - 2x2)
    4 1
    3 2  (dimensão do 2º conjunto de matrizes)
    2 4  (1ª matriz - 3x2)
    9 2
    4 3
    0 2 7  (2ª matriz - 2x3)
    12 21 1
    0 0  (dimensão do 3º conjunto de matrizes)
    A saída para a tela deve conter a linha com a ordem da matriz resultante, seguida do resultado da multiplicação. O programa não precisa validar a entrada de dados antes de proceder aos cálculos.

 
  1. (calcraizes)Ler uma conjunto de linhas de dados contendo a definição de várias equações do segundo grau da forma

    $\displaystyle Ax^2 + Bx + C = 0 . $

    Cada linha de dados contém a definição de uma equação por meio da tupla de valores $ A$, $ B$ e $ C$ do conjunto dos números reais. O programa deve ler um conjunto de no máximo 10 tuplas de coeficientes. Após a leitura das tuplas, o programa deve calcular as duas raízes da equação para cada grupo de coeficientes. Estes resultados devem estar em um array de estruturas. A estrutura deve conter os coeficientes e as raízes. Após o cálculo de todas as raízes, deve ser gerada uma listagem de saída no formato abaixo:
                A  B C  =>  X1  =  valor1    X2  =  valor2
    ou
                A  B C  =>  Sem raízes reais.
    Após a listagem de resultados o programa termina.



Armando Luiz Nicolini Delgado
2015-03-17