Programação Estruturada Sistemas de Informação Profa . Tiemi Christine Sakata Lista de Exercı́cios 2 Desenvolva o algoritmo mostrando a solução de todos os problemas antes de implementálos em linguagem C. É importante digitar o programa no Dev-C++ (ou usar qualquer outro compilador C), compilar e executar (testar) o programa. Lembre-se que quanto mais você programar, melhor programador você será. 1. Escreva um programa que lê número de matrı́cula e média de no máximo 100 alunos. O programa deve ler informações de entrada até que o usuário digite um número negativo para o número de matrı́cula. Após inserir todas as notas, o programa deve perguntar se o usuário deseja realizar uma consulta a média de um aluno. Caso a resposta seja positiva, o programa deve buscar pela média de um aluno, dado o seu número de matrı́cula. 2. Escreva um programa que leia da entrada um vetor de n posições (n fornecido pelo usuário) e mostre na saı́da o número de elementos pares nesse vetor. 3. Escreva um programa que leia um vetor de tamanho n da entrada padrão (n informado pelo usuário) e escreva na saı́da padrão o ı́ndice do maior elemento e o ı́ndice do menor elemento desse vetor. 4. Escreva um programa que lê uma lista de inteiros positivos e imprime essa lista em ordem inversa. A lista pode ter até 100 elementos e a leitura deve ser interrompida assim que o primeiro inteiro não positivo for digitado. Não será informado previamente o número de inteiros na lista de inteiros. 5. Implemente um programa que receba uma frase e calcule e mostre a quantidade de palavras da frase digitada. 6. Implemente um programa para criptografar uma frase entrada pelo usuário, trocando as vogais da frase por *. Exemplo: Entrada: Eu estou estudando. Saı́da: ** *st** *st*d*nd*. 7. Implemente um programa que receba uma frase, calcule e mostre a quantidade de vogais da frase digitada. 8. Implemente um programa que receba uma frase, calcule e mostre a quantidade de consoantes da frase digitada. 9. Implemente um programa que receba uma frase e mostre cada palavra desta frase em uma linha separada. 10. Escreva um programa que leia da entrada padrão uma matriz de tamanho n × m (n e m fornecidos pelo usuário) e escreva na saı́da padrão o valor máximo e o valor mı́nimo existentes naquela matriz. Considere que o usuário nunca fornecerá n e m maiores que 100. 1 11. Escreva um programa que leia um valor n da entrada padrão e preencha uma matriz de forma que ela torne-se a matriz identidade de tamanho n (In ) e depois imprima essa mesma matriz na saı́da padrão. O tamanho máximo da matriz deve ser limitado pela constante LIM, definida como #define LIM 100 no começo do seu programa. 1 0 0 I3 = 0 1 0 0 0 1 12. Escreva um programa que leia pelo usuário), imprima a sua valores de n maiores que 100. 1 2 1 t M = 3 4 , M = 2 5 6 uma matriz quadrada M de dimensões n × n (n fornecido transposta M t . Considere que o usuário nunca digitará 3 5 4 6 13. Escreva uma função que recebe como parâmetro dois valores a e b e retorna o valor de a b . Desconsidere a função pow. 14. Implemente o programa abaixo e responda: #include <stdio.h> #include <stdlib.h> void troca(int a, int b); main() { int a, b; printf("Forneça o valor de a: "); scanf("%d", &a); printf("Forneça o valor de b: "); scanf("%d", &b); printf("Antes da chamada a funç~ ao troca a = %d e b = %d.\n", a, b); troca(a,b); printf("Apos a chamada a funç~ ao troca a = %d e b = %d.\n", a, b); system("PAUSE"); } void troca(int a, int b){ int tmp; tmp = a; a = b; b = tmp; printf("Apos a troca, os valores de a e b sao: %d e %d.\n", a, b); } (a) Se forem fornecidos os valores 2 para a e 3 para b, qual será a saı́da do programa, isto é, o que você verá na tela? (b) Explique o que você observa em termos do comportamento de variáveis locais. (c) Altere o programa para que, ao invés de a função fazer uso de variáveis da lista de parâmetros para receber os valores dos dois inteiros, ela os acesse a partir de variáveis globais. Após a alteração responda novamente à pergunta feita no ı́tem (a). 2 15. Escreva a saı́da produzida pela execução do programa abaixo: #include <stdio.h> void a() int x, x = 4; y = 2; printf } main () { x = 10; { y = 3; y; a(); printf ("%d %d\n", x, y); b(5); ("a: %d %d\n", x, y); printf ("%d %d\n", x, y); } void b(int y) { printf ("b: %d\n", y); } 16. Escreva a saı́da produzida pela execução do programa abaixo: #include <stdio.h> int x, y; void c() { printf ("c: %d %d\n", x, y); } void a(int x, int y) { printf ("a: %d %d\n", x, y); main () { } x = 10; y = 3; void b() { a(5,6); int x, y; printf ("%d %d\n", x, y); x = 7; b(); y = 4; printf ("%d %d\n", x, y); printf ("b: %d %d\n", x, y); c(); } printf ("%d %d\n", x, y); } 17. Implemente um programa que receba dois valores reais e exiba um menu com as seguintes opções: 1 - Calcular a soma entre eles; 2 - Calcular o produto entre eles; 3 - Calcular a diferença entre eles; 4 - Calcular a razão entre eles; 5 - Todas as operações; 6 - Encerrar o programa. Faça a validação da escolha do menu, na função main, usando um laço do-while. Determine o valor escolhido usando o comando switch-case. A execução de cada opção deve ser feita mediante o chamado a uma função. As funções têm uma lista de parâmetros consistindo de dois parâmetros do tipo float e retornam um dado do tipo float. O programa não faz uso de variáveis globais, apenas locais. 18. Escreva uma função que, dado um vetor de dimensão n, retorne o ı́ndice do maior elemento daquele vetor. O cabeçalho da função deve ser: int indice_maximo (int v[], int n); 19. Escreva uma função que receba como parâmetro o número de segundos e mostre o número de dias, horas, minutos e segundos que corresponde a aquela quantidade de segundos. 3