Seja um programador profissional. Clique aqui e obtenha seu CERTIFICADO
Apostila de C da UFMG
Em seguida você deverá ver a nota que tirou.
Na segunda parte deste artigo, iremos resolver e analisar cada uma das questões propostas nessa lista da apostila, e vamos comentar bem os códigos dos exercícios.
A UFMG disponibiliza todo esse material de maneira gratuita e livre para estudo e divulgação, para saber mais:
Apostila de C da UFMG
Para você resolver as questões dessa lista da apostila, é necessário ter estudado os tutoriais da seção sobre Testes Condicionais e Laços.
Apostila de C - Exercícios sobre Testes e Laços (Lista 3)
Apostila de C - Solução dos exercícios sobre Testes e Laços da lista 3
Questão 1:
Vamos analisar a primeira expressão: if(num)A condição dela é simplesmente "num".
Se num=0 o resultado do if é FALSO.
Se num!=0 , o resultado do if é VERDADEIRO.
Agora a próxima expressão: if(num!=0)
Onde a condição do teste é "num!=0".
Se num=0, o resultado do if é FALSO.
Se num=!0, o resultado do if é VERDADEIRO.
Gabarito: a
Questão 2:
A expressão de x é: x = (b > a) ? b : a;Ou seja, vamos atribuir um valor para x de acordo com a condição de teste.
O teste do operador ternário é: b > a
Como a=10 e b=20, o teste resulta em VERDADEIRO, logo x vai assumir o primeiro valor:
x = b = 20
Gabarito: d
Questão 3:
Temos a seguinte expressão: x = a < b ? a < c ? a : c : b < c ? b : c;Sabemos que o operador ternário é da seguinte forma:
teste condicional ? (opção 1, se o teste é TRUE) : (opção 2, se o teste é FALSE)
Vamos deixar a expressão de "x" igual a esta acima:
x = (a < b) ? (a < c ? a ) : ( c : b < c ? b : c );
Assim, nosso teste condicional é: a< b, que retorna TRUE
Logo, x = (a < c ? a) ;
Ou seja, agora temos o teste: a < c
Que se for verdade, retorna "a". Se for falso, não retorna nada.
Como o teste é verdadeiro, x = a = 1
Gabarito: b
Questão 4:
Ambos exibem uma contagem de 0 até 9.Gabarito: a
Questão 5:
O seguinte trecho de código:printf("O numero e diferente de 1 e 2");
break;
Deve pertencer a algum "case" ou ao "default", mas ele não faz parte de nenhum deles, são linhas 'soltas', não fazem sentido elas não pertencerem a nenhum elemento do switch.
Gabarito: b
Questão 6:
Quando colocamos um número dentro do switch ele vai procurar dentro dos cases existentes aquele número. Caso ele encontre, ele vai rodar o código a partir daquele case em diante, até encontrar um comando break, que dá a ordem de parar.
E caso não existe esse break, o que ocorre?
Ele vai continuar rodando tudo até o final.
No caso dessa questão da apostila, o "num" vale 1, e de cara o primeiro case é 1.
Então vai rodar tudo a partir dali. Ou seja, vai rodar o case 1, case 2 e o default.
Gabarito: e
Questão 7:
Esse tipo de exercício é interessante que se faça sem testar o código, apenas olhando e raciocinando.Vamos lá, a diferença neste código está na inicialização da variável j.
No primeiro caso, quantas vezes ela é colocada com igual a 0?
A resposta é 3 vezes: quando i=0, quando i=1 e quando i=2
Ou seja, sempre que o laço for de cima inicia uma iteração, o for debaixo inicia com o valor j=0
Já no segundo caso não. A variável "j" recebe o valor 0 apenas no início de tudo.
No início, temos i=j=0, e depois o valor de j vai subindo: j=1, j=2 e j=3
Depois é a vez de i=1, porém, o j vai continuar tendo valor 3, e não retorna a ser 0, como no primeiro caso.
Gabarito: b
Questão 8:
Inicialmente, x=35 ( e x>0), então ele é impresso: 35
Em seguida: x = x/3 = 11 (x é inteiro)
Como x>0, então ele é impresso: 11
Em seguida: x = x/3 = 3
Como x>0, então ele é impresso: 3
Em seguida: x = x/3 = 1
Como x>0, ele é impresso: 1
Por fim: x = x/3 = 0
Como x<=0, ele não é mais impresso.
Gabarito: a
Questão 9:
Para resolver esta questão da apostila de C, precisamos saber o que significa: --x
Que nada mais é que uma operação de decremento de x. Ou seja, a primeira coisa que ocorre é um decremento de uma unidade (x = x-1).
Assim, no primeiro caso temos x=10 inicialmente.
Dentro do laço while vemos: --x
Logo, x é decrementado e agora x=9 e a seguinte condição é falsa: x > 9
Daí não ocorre nenhuma impressão na tela
(Se fosse x-- > 9, primeiro haveria o testo com x=10, e só depois do teste ocorreria o decremento).
No segundo caso temos um laço DO WHILE, ou seja, a primeira iteração SEMPRE OCORRE.
Então é impresso o valor de x, e só depois ocorre o laço while, igual ao exemplo passado.
Como no primeiro caso nada é impresso, e no segundo caso é, os dois códigos em C não são iguais.
Gabarito: b
Questão 10:
Nesta questão da apostila há uma pegadinha.O seguinte código retorna sempre verdadeiro: i=5
Sim, não importa o valor de "i", esse comando vai sempre ser verdadeiro pois se trata de uma ATRIBUIÇÃO. Se fosse i==5 (que é uma COMPARAÇÃO), retornaria falso.
Logo, o primeiro código é sempre verdadeiro e há um loop infinito.
O mesmo ocorre no segundo caso, o if vai retornar TRUE, pois é uma atribuição e o código do IF vai ser rodado, porém só uma vez (pois IF é um teste condicional e não um laço/loop).
Gabarito: d
Questão 11:
O comando switch tem uma limitação: seus case devem conter valor, e nada mais.Nada de teste, atribuição ou uma operação qualquer.
Ele deve conter números, valores.
No caso, os cases possuem testes, invalidando o código.
Gabarito: b
Questão 12:
Inicialmente temos i=0, e o teste para saber se i<=5
Sempre que for verdadeiro, é executado o código do for, que não faz absolutamente nada.
Após o "nada" ser feito, é realizada a operação pós-teste do laço for, que é o incremento e a impressão do valor de i.
Ou seja, o que esse código faz é: incrementa i, depois imprime.
Ele faz isso desde i=0 até i=5
Como i=0, o primeiro valor impresso é 1 (por antes o "i" é incrementado).
O valor de "i" vai crescendo até atingir 5, nesse ponto é incrementado e impresso 6.
Como i=6, a condição "i<=5" é falsa e termina o laço for, que exibe os números de 1 até 6.
Gabarito: c
Nenhum comentário:
Postar um comentário