Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Cap4_Comandos_de_Decisao/Exercicio20.c /*Treinamento em Linguagem C - Victorine Viviane Mizrahi Capítulo 4 - Comandos de decisao Exercício 20. Escreva um programa que crie um numero aleatorio x por meio da funcao rand(). O programa deve solicitar um numero n ao usuario e compara-lo com x. Se n for menor do que x, o programa devera imprimir "Muito Pequeno" e solicitar novamente um numero para o usuario; se n for maior do que x, o programa devera imprimir "Muito Grande" e solicitar numero para o usuario. O programa terminara quando o usuario adivinhar o numero x, tomado aleatoriamente, e devera imprimir "Correto" e o numero de tentativas ate o acerto. */ #include <stdio.h> #include <stdlib.h> int main(){ int x, n, cont; x = rand(); printf("%d\n", x); printf("Programa de adivinhacao\n\n"); cont = 1; do{ printf("Digite um numero entre 0 e 100: "); scanf("%d", &n); if(n == x) printf("Correto! O numero aleatorio eh %d\nVoce acertou em %d tentativas", x, cont); else if(n > x) printf("Muito Grande\n"); else printf("Muito Pequeno\n"); cont++; } while(n != x); return 0; } Cap4_Comandos_de_Decisao/Exercicio19.c /*Treinamento em Linguagem C - Victorine Viviane Mizrahi Capítulo 4 - Comandos de decisao Exercício 19. Escreva um programa que solicite ao usuario tres numeros inteiros a, b e c, em que a seja maior do que 1. Seu programa deve somar todos os inteiros entre b e c que sejam divisiveis por a; */ #include<stdio.h> int main(){ int a, b, c, maior, menor, i, divs; /*Entrada dos dados*/ do{ /*Condicao para a ser maior do que 1*/ printf("Digite o valor de a que seja maior do que 1: "); scanf("%d", &a); } while(a < 1); printf("Digite o valor de b e c respectivamente: "); scanf("%d%d", &b, &c); /*Processamento dos dados*/ if(b > c){/*Comparacao do maior b ou c*/ maior = b; menor = c; } else{ maior = c; menor = b; } divs = 0; for(i = menor + 1; i < maior; i++)/*Verificar o divisivel entre b e c*/ if(i % a == 0) divs += i; /*Saida dos dados*/ printf("A soma eh: %d", divs); return 0; } Cap4_Comandos_de_Decisao/Exercicio18.c /*Treinamento em Linguagem C - Victorine Viviane Mizrahi Capítulo 4 - Comandos de decisao Exercício 18: Escreva um programa que encontre o menor inteiro positivo n que satisfaca as seguintes condicoes: n / 3 = x inteiros e resto 2 n / 5 = y inteiros e resto 3 n / 7 = z inteiros e resto 4 Resolução comentada em: https://youtu.be/_ap5JajQlhs */ #include<stdio.h> int main(){ int i; for(i = 159; ; i++) if(i % 3 == 2 && i % 5 == 3 && i % 7 == 4) break; printf("%d %% 3 = %d, %d %% 5 = %d, %d %% 7 = %d", i, i % 3, i, i % 5, i, i % 7); return 0; } Cap4_Comandos_de_Decisao/Exercicio1_17.c //Treinamento em Linguagem C - Victorine Viviane Mizrahi //Capítulo 4 - Comandos de decisao //Exercícios 1 a 17 1. Numa construcao if sem else, o que acontece se a condicao de teste for falsa? a) o controle procura pelo ultimo else do programa; b) nada; c) o controle passa para a instrucao seguinte ao if; d) o corpo do comando if eh executado Resposta: b) O if nao precisa ser obrigatoriamente acompanhado pelo else. Vamos a um exemplo: i = 0; if(i =! 0) printf("Diferente"); printf("Igual"); Veja neste caso, o i nao atende a condicao de teste, logo pulara direto para o printf("Igual"). Mas se o i atende-se a condicao? i = 1; if(i =! 0) printf("Diferente"); printf("Igual"); Faca voce mesmo este teste. O i atendendo a condicao, entraria no if e executaria a instrucao printf("Diferente"). Apos isso, encerraria o if e iria para a proxima instrucao, que eh printf("Igual"). Ou seja, imprimiria 'DiferenteIgual'. No livro: Pagina 84 descreve a sintaxe do if simples. 2. A principal diferenca entre o modo de operacao do comando if e de um laco while eh: a) A expressao de teste eh avaliada diferentemente; b) O corpo de um laco while eh executado sempre, e o do comando if apenas se a condicao de teste for verdadeira; c) O corpo de um laco while pode ser executado diversas vezes, enquanto o corpo de um if eh executado uma unica vez; d) a expressao de teste eh avaliada antes da execucao do corpo de um while e depois da execucao do corpo de um if; Resposta: O proprio enunciado auxilia na resposta. Laco da-se a entender como algo que repete, comando da-se a entender que eh uma unica instrucao. A resposta eh a c). O while faz a instrucao quantas vezes forem necessarias ate a condicao de teste ser atendida. Ja o if faz a instrucao apenas uma vez, atendendo o if se a instrucao for verdadeira. No livro: A pagina 85 exemplifica esta diferenca. 3. O else de um comando if-else eh executado quando: a) a expressao de teste do if for falsa; b) a expressao de teste do if for verdadeira; c) a expressao de teste do else for falsa; d) a expressao de teste do else for verdadeira; Resposta: Pegando o gancho da resposta da 1 e da 2 podemos facilmente dizer que o else eh executado quando o if tiver seu teste de condicao como falso. No livro: Pagina 88 descreve a sintaxe do if-else. 4. Num programa, o comando else fara par com qual if? a) o ultimo if com mesmos requisitos do else; b) o ultimo if sem else; c) o ultimo if de corpo nao envolto por chaves; d) o ultimo if de corpo nao envolto por chaves e sem else; Resposta: Tranquilamente podemos dizer que a resposta eh a b). No livro: A autora da um bom exemplo na pagina 93. 5. A vantagem de uma construcao switch sobre um if-else eh: a) a condicao default pode ser utilizada no switch; b) switch fornece clareza e facilidade de leitura; c) os casos de um switch sao avaliados de forma a permitir diversas escolhas; d) Varias instrucoes podem ser executadas em cada caso de um switch; Resposta: Segundo a autora, pagina 100, o comando switch "tem um formato limpo e claro". Com base nisso podemos dizer que a b) eh a resposta correta. 6. Verdadeiro ou falso: Toda construcao switch pode ser transformada em ninhos de if-else. Resposta: Verdadeiro. 7. Verdadeiro ou falso: Todo ninho de if-else pode ser transformado numa construcao switch. Resposta: Esta reciproca eh verdadeira. A pagina 102 traz o exemplo de um algoritmo de calculador usado com if-else sendo usado com switch. A legibilidade eh notavel. 8. Um comando break: a) termina o programa; b) deve ser utilizado seguindo as instrucoes de cada caso num switch; c) causa a saida imediata de um if; d) causa a saida imediata de um laco for, while ou do-while; e) causa a saida imediata de um switch; Resposta: d) Causa a saida imediata de um laco for, while ou do-while; No livro: Pagina 97 cita esta caracteristica de break. 9. Um comando continue: a) continua o programa apos uma pausa; b) desvia para o proximo caso de um switch; c) permite a repeticao continua de um laco; d) provoca a proxima iteracao de um laco; Resposta: d) provoca a proxima interacao de um laco; No livro: Pagina 98 cita esta caracteristica de continue. 10. Verdadeiro ou Falso: A instrucao goto eh um metodo primitivo de interromper um fluxo de um programa e eh desaconcelhado em programaca estruturada. Resposta: Verdadeiro, o goto eh o "patinho feio" da programacao. Devido o "salto" que ele pode dar em um programa ele se torna totalmente desaconcelhado para programacao, perde em muito a legibilidade. 11. Converta o fragmento seguinte para que utilize um laco for. int i = 0; loop: printf("%d", (i++)); goto loop; Resposta: Este eh um tipico looping infinito, veja que nao tem condicao de teste para que o codigo pare. Desta forma, podemos fazer: int i = 0; for(; ;) printf("%d", (i++)); 12. A substituicao do codigo: if(ch >= '0' && ch <= '9') continue; else printf("%c", ch); por (ch >= '0' && ch <= '9') ? continue : printf("%c", ch); esta errada. Explique. Resposta: Apesar do operador ternario ter bastante semelhanca com o if-else, ele eh apenas um operador. O continue trabalha em lacos, comandos, funcoes. 13. Substitua o uso do if-else pelo operador condicional. if(x > y) m = x; else m = y; Resposta: Lembrando que o operador ternario tem a seguinte sintaxe exp1 ? exp2 : exp3. Se exp1 for verdadeiro faça exp2, senao faça exp3. Com isso: x > y ? m = x : m = y; 14. A sintaxe do laço while eh semelhante a de um if. Se i for uma variavel inteira, os dois codigos seguintes provocarao o mesmo efeito? a) while(i = 8){ printf("%d %d %d ", i, i + 2, i + 3); i = 0; } b) if(i = 8) printf("%d %d %d ", i, i + 2, i + 3); Resposta: Ah de se lembrar que o while eh um um laco e repete-se enquanto sua condicao de teste for verdadeira. Vejamos. while(i = 8) Aqui, apesar de ser um campo para teste pode se fazer operacoes, o que eh o caso. i = 8. Em uma validacao logica, qualquer valor diferente de 0 entender-se-a como 1. Logo, a condicao de teste dara como verdadeira e fara a instrucao: printf("%d %d %d ", i, i + 2, i + 3); i = 0; Veja que i = 0 mas quando volta ao teste while i recebe 8. Ou seja, o i, nao importa que atribuicao seja feita dentro do laco while, sempre tera o valor 8, logo sempre entrara no laco fazendo um loop infinito. Ja o if so fara o teste de condicao uma vez. Portanto nao ha o mesmo efeito nos dois lacos. 15. O codigo seguinte eh correto? switch (temp){ case temp < 10: printf("Esta verdadeiramente frio!"); break; case temp < 25: printf("Que tempo agradavel!"); break; default: printf("Certamente esta quente!"); break; } Resposta: Parece que tudo esta correto, exceto por um simples detalhe. Os case de switch recebem apenas constantes. Nao eh possivel colocar operacoes relacionais, operacoes aritmeticas ou algo do tipo. O que deve seguir o case eh um unico valor. No livro: Na pagina 100 a autora reforca que "Voce nao podera usar uma variavel ou uma expressao logica como rotulo de um caso dentro de um switch(...)" 16. Modifique o programa "xadrez.c" para imprimir um tabuleiro maior, que preencha a tela; /*xadrez.c*/ /*Desenha um tabuleiro de xadrez*/ #include <stdio.h> int main(){ int lin, col; for(lin = 1; lin <= 8; lin++){ for(col = 1; col <= 8; col++) if((lin + col) % 2 == 0) printf("\xdb\xdb"); else printf(" "); printf("\n"); } return 0; } Resposta: Simples, apenas modifique a condicao de parada do primeiro for e do segundo for. 17. Modifique o programa "diagonal.c" para que imprima quatro linhas: as duas que ja estao no programa; a terceira, uma linha vertical que passa pelo centro do retangulo; e a quarta, uma linha horizontal que passa pelo mesmo centro. As quatro linhas devem se cruzar no mesmo ponto. /*diagonal.c*/ #include <stdio.h> int main(){ int lin, col; for(lin = 1; lin < 25; lin++){ /*Passo da descida*/ for(col = 1; col < 25; col++) /*Passo da largura*/ if(lin == col) /*Estamos na diagonal?*/ printf("\xDB"); /*Desenha bloco escuro*/ else printf("\xB0"); /*Desenha bloco claro*/ printf("\n"); /*Pula linha*/ } return 0; }
Compartilhar