1. Escrever uma função recursiva que retorna o produto dos elementos estritamente positivos de um vetor v de n elementos inteiros. Considerar que v tem pelo menos um elemento > 0.
  2. Faça um programa em C que calcule os juros de um determinado saldo com base em uma taxa, ambos informados pelo usuário. O programa deve utilizar uma função para calcular os juros e atualizar o saldo atual com base no saldo antigo acrescido dos juros. Ao final, a aplicação deve imprimir o total de juros e o novo saldo.
  3. Escreva uma função que recebe uma string e uma substring como parâmetros. A função deve retornar um ponteiro para a primeira ocorrência da substring na string ou NULL se a substring não for encontrada.
  4. Considere a seguinte declaração: int a,*b,**c,***d. Escreva um programa que leia a variável a e calcule e exiba o dobro, o triplo e o quádruplo desse valor utilizando apenas os ponteiros b, c e d. O ponteiro b deve ser usado para calcular o dobro, c, o triplo, e d, o quádruplo.
  5. Faça um programa que leia quatro números A, B, C e D, que serão as dimensões de duas matrizes, e:
    1. Crie e leia uma matriz, dadas as dimensões dela;
    2. Crie e construa uma matriz que seja o produto de duas matrizes. Na sua função main(), imprima as duas matrizes e o produto entre elas, se existir.
  6. Faça um programa que abra um arquivo HTML e elimine todas as “tags” do texto, ou seja, o programa deve gerar um novo arquivo em disco que elimine todas as tags Html que são caracterizadas por comandos entre “<” e “>”.
  7. Mostre como implementar uma variação da busca binária que retorne um inteiro k entre 0 e n, tal que, ou lista[k] = chave, ou a chave não se encontra na lista, mas poderia ser inserida entre as posições (k-1) e k de forma a manter a lista ordenada. Note que, se k = 0, então a chave deveria ser inserida antes da primeira posição da lista, assim como, se k = n, a chave deveria ser inserida após a última posição da lista.
  8. Faça um programa para armazenar compromissos em uma agenda. A agenda deve possui uma matriz que armazene a data e hora de um compromisso, assim como um texto que descreve o compromisso agendado. Cada compromisso deve possui um mês, dia e hora (data) e mais um texto associado a este de até 30 caracteres (string) que o descreve. Inicialmente o usuário deve poder indicar a data e hora de seus compromissos, entrando um a um, e depois indicando se deseja informar mais um compromisso, até que ele responda que não deseja mais fornecer compromissos para sua agenda. O programa deve então gravar em um arquivo todos os compromissos agendados, indicando: dia, mês, hora e informações sobre o compromisso agendado. Dicas: (1) Use uma matriz do tipo Agenda [mes][dia][hora] que armazene textos, (2) Não use espaço em branco em textos se for usar o comando fscanf com “%s”, podendo usar em seu lugar o comando fgets.
  9. Crie um programa que implemente o jogo “Bingo de Prog”. Nesse jogo, o jogador deve selecionar a quantidade de números que ele gostaria de apostar (entre 1 e 20), e em seguida, informar os números escolhidos (valores entre 0 e 100). Após receber a aposta, o computador sorteia 20 números (entre 0 e 100) e compara os números sorteados com os números apostados, informando ao apostador a quantidade de acertos e os números que ele acertou. O seu programa deverá implementar as funções ler_aposta, sorteia_valores e compara_aposta. A função ler_aposta deve receber como parâmetro a quantidade de números que serão apostados e um vetor previamente alocado dinamicamente para armazenar a quantidade exata de números apostados. A função deve pedir para o usuário digitar os números apostados e armazena-los no vetor, garantindo que somente números dentro do intervalo de 0 a 100 sejam digitados. A função deve seguir o seguinte protótipo: void ler_aposta(int *aposta, int n); A função sorteia_valores deve receber como parâmetro a quantidade de números que serão sorteados e um vetor previamente alocado dinamicamente para armazenar a quantidade exata de números sorteados. A função deve sortear aleatoriamente os números (entre 0 e 100) e armazena-los no vetor. A função deve seguir o seguinte protótipo: void sorteia_valores(int *sorteio, int n); A função compara_aposta deve receber como parâmetro o vetor com os números apostados (aposta), o vetor com os números sorteados (sorteio), juntamente com os seus respectivos tamanhos (na e ns) e um ponteiro para uma variável inteira (qtdacertos), onde deve ser armazenada a quantidade de acertos. A função deve retornar o ponteiro para um vetor alocado dinamicamente contendo os números que o apostador acertou. A função deve seguir o seguinte protótipo: int compara_aposta(int *aposta, int *sorteio, int qtdacertos, int na, int ns); Em seguida, crie a função principal do programa utilizado as funções criadas anteriormente para implementar o jogo “Bingo de Prog”. Lembre-se que os vetores aposta, sorteio e acertos devem ser alocados dinamicamente e a memória alocada deve liberada quando ela não for mais ser utilizada. Para sortear números aleatórios utilize a função rand da biblioteca stdlib.h. A função rand retorna um número aleatório em um determinado intervalo. Exemplo: x = rand() % 10; Para garantir que novos números aleatórios sejam sorteados em cada execução do programa é necessário executar a função srand antes de sortear os números. Exemplo: srand(time(NULL)); Para poder utilizar essas funções é necessário incluir no programa as bibliotecas stdlib.h e time.h.