Seleção e Ciclos Objetivo O objetivo deste questionário é levá-lo a rever os fundamentos da linguagem C. Nomeadamente, a utilização de instruções de seleção e de repetição. Entrega do Questionário As respostas devem ser enviadas para Programacao.em.C.ee@gmail.com com o assunto PCQUEST1, anexando um ficheiro de texto com o nome q1- nnnnnnn.txt (em que nnnnnnn é o seu número de aluno) com a respectiva identificação seguida de uma resposta por linha no formato: NºQuestão NºResposta (ver exemplo ao lado). Pode criar o ficheiro txt, p.e., com o programa notepad (Bloco de Notas). Exercício 1 Considere a execução do seguinte fragmento de código: int A, B, C, D; // Omitido código que atribui valores a A, B, C, e D if (A && B) if (!C!D) printf("um\n"); else if (D) printf("dois\n"); else printf("tres\n"); else if (C!= D) printf("quatro\n"); else if (C) printf("cinco\n"); else printf("seis\n"); 1.1) Qual dos seguintes conjuntos de valores originará a escrita de um? A B C D 1) 1 1 1 1 2) 1 1 1 0 3) 1 1 0 1 4) 1 1 0 0 2) 1 3 2 apenas 3) 1, 2 e 3 apenas 4) 2 e 3 apenas 5) 2, 3 e 4 apenas 1.2) Qual dos seguintes conjuntos de valores originará a escrita de quatro? A B C D 1) 1 0 1 1 2) 0 1 0 1 3) 0 1 1 0 4) 0 0 0 0 2) 1 e 2 apenas 3) 1, 2 e 3 apenas 4) 2 e 3 apenas 5) 1, 3 e 4 apenas 1.3) Qualquer que sejam os valores de A, B, C e D, o fragmento de código escreverá sempre algo. 1) Verdadeiro 2) Falso 3) Nenhum dos dois Autor: xxxxxxx Questionário 2 1.1-1 1.2-2 1.3-1 1.4-2 2.1-1... etc. 1º Semestre 2013/2014 Carlos Limão 1/6
1.4) Qual dos seguintes conjuntos de valores originará a escrita de três? A B C D 1) 1 1 1 1 2) 1 1 1 0 3) 1 1 0 1 4) 1 1 0 0 2) 1 e 2 apenas 3) 1, 2 e 3 apenas 4) 2 e 3 apenas 5) 1, 3 e 4 apenas Exercício 2 Considere a execução do seguinte fragmento de código (assuma que x é uma variável do tipo int): if (x <= 0) { printf("um\n"); else if (x <= 10) { printf("dois\n"); else if (x <= 20) { printf("tres\n"); A string Dois será impressa se e apenas se x satisfizer a condição: 1) x <= 10 2) 0 < x e x < 10 3) 0 < x e x <= 10 4) 0 <= x e x < 10 5) 0 <= x Exercício 3 Para as perguntas seguintes considere a execução da instrução switch seguinte: int valor = 10; scanf( %d, &valor); switch (valor) { case 1: valor = -4; case 2: valor = -6; case 4: break; case 6: valor = -8; break; default: Valor = -1; 3.1) Qual seria o valor de valor depois da execução deste código se o valor lido for 4? 1) -4 2) -6 3) -8 4) -1 5) 10 3.2) Qual seria o valor de valor depois da execução deste código se o valor lido for 1? 1) -4 2) -6 3) -8 4) -1 5) 10 1º Semestre 2013/2014 Carlos Limão 2/6
Exercício 4 Qual o valor impresso para contador se o seguinte código for executado? int contador = 1, alfa = 5; while (contador <= 145) { alfa = alfa + 7; printf("contador = %d\n", contador); 1) 1 2) 144 3) 145 4) 146 5) Nenhum dos anteriores Exercício 5 Que valor é escrito no ecrã para uminteiro se o seguinte código for executado? int uminteiro = 273; while (uminteiro > 500) uminteiro = uminteiro - 3; printf("uminteiro = %d\n", uminteiro); 1) 270 2) 273 3) 497 Exercício 6 Qual a condição lógica em que o seguinte ciclo terminará? int beta = 5; while (beta >= 0 && beta < 10) { printf( %d\n, beta); scanf( %d, &beta); 1) beta < 0 && beta >= 10 2) beta <= 0 && beta > 10 3) beta < 0 beta > 10 Exercício 7 Qual é o output do seguinte fragmento? int n = 1; while (n <= 5) { n++; 1) 1 2 3 4 5 2) 1 2 3 4 3) 1 1 1 para sempre Exercício 8 Qual é o output do seguinte fragmento? int n = 1; while (n <= 5) { n++; 4) 500 5) Ciclo Infinito 4) beta <= 0 beta >= 10 5) beta < 0 beta >= 10 4) 2 3 4 5 5) 2 3 4 5 6 1) 1 2 3 4 5 2) 1 2 3 4 3) 1 1 1 para sempre 4) 2 3 4 5 5) 2 3 4 5 6 1º Semestre 2013/2014 Carlos Limão 3/6
Exercício 9 Qual é o resultado produzido no ecrã pelo seguinte fragmento? (Cuidado!) int n = 1; while (n <= 5) n++; 1) 1 2 3 4 5 2) 1 2 3 4 3) 1 1 1 para sempre 4) 2 3 4 5 5) 2 3 4 5 6 Exercício 10 Diga o que falta no ciclo utilizado no seguinte programa. #include <stdio.h> int main() { int contador = 4; int output = 7; while (contador <= 8) { printf( %d\n, output); output++; return 0; 1) A inicialização da variável de controlo do ciclo 2) O teste da variável de controlo do ciclo 3) A atualização da variável de controlo do ciclo 4) Nada Exercício 11 Para produzir o resultado 2 4 6 8 10, que condição deverá ser utilizada no seguinte ciclo? int n = 0; do { n = n + 2; while ( ); 1) n <= 10 2) n < 10 3) n < 8 4) n >= 2 5) n > 8 6) Nenhuma Exercício 12 Depois da execução do seguinte código, qual o valor impresso para comprimento? int comprimento = 5, contador = 4; while (contador <= 6) { if (comprimento >= 100) { comprimento = comprimento 2; else { comprimento = contador * comprimento; printf("comprimento = %d\n", comprimento); 1) 20 2) 98 3) 100 4) 600 5) Nenhum dos anteriores 1º Semestre 2013/2014 Carlos Limão 4/6
Exercício 13 No fragmento de código seguinte repare que existe um ponto e virgula na linha onde está a condição do while. Qual o valor impresso? int contador = 1; printf( %c, 'A'); while (contador <= 3); { printf( %c, 'B'); printf( %c, 'C'); 1) Escreve AC 2) Escreve ABC 3) Escreve ABBBC Exercício 14 int soma = 0, contexterior = 1, continterior; while (contexterior <= 3) { continterior = 1; while (continterior <= contexterior) { soma = soma + continterior; continterior++; contexterior++; printf( %d\n, soma); 1) 1 2) 4 3) 10 Exercício 15 4) Há um erro de compilação 5) Fica num ciclo infinito 4) 20 5) 35 Qual dos ciclos for é equivalente ao ciclo while seguinte? Equivalente aqui, significa que as variáveis possuem os mesmos valores quando termina a execução do ciclo. int contador = -5, soma = 0; while (contador <= 15) { 1) int contador, soma = 0; for (contador = -5; contador <= 15; contador++) { 2) int contador, soma = 0; for (contador = -5; contador <= 15; contador++) { 3) int contador, soma; for (contador = -5, soma = 0; contador <= 15; contador++) { 4) int contador, soma = 0; for (contador = 1; contador <= 21; contador++) { 1º Semestre 2013/2014 Carlos Limão 5/6
2) 1 e 2 apenas 3) 1 e 3 apenas 4) 1 e 4 apenas 5) Nenhum dos anteriores Exercício 16 int contador; for (contador = 1; contador <= 6; contador = contador + 2) { printf( %d, contador); printf("feito\n"); 1) Feito 2) 1 Feito 3) 1 3 Feito 4) 1 3 5 Feito 5) 1 3 5 7 Feito Exercício 17 int contador; for (contador = 1; contador > 3; contador++) { printf( %d, contador); printf("feito\n"); 1) Feito 2) 1 Feito 3) 1 2 Feito 4) 1 2 3 Feito 5) 1 2 3 4 Feito Exercício 18 No seguinte fragmento o programador colocou, por engano, um ponto e virgula no fim da linha onde tem inicio o for. Qual é o resultado? int contador; printf( %c, 'A'); for (contador = 1; contador <= 3; contador++); printf( %c, 'B'); printf( %c, 'C'); 1) Um erro de compilação 2) Um ciclo infinito 3) Escreve ABC 4) Escreve ABBC 5) Escreve ABBBC Exercício 19 int contador, n = 2; for (contador = 1; contador <= 3; contador++) { while ( n <= 4 ) { n = 2 * n; printf( %d\n, n); 1) 4 2) 8 3) 16 4) 32 5) 64 1º Semestre 2013/2014 Carlos Limão 6/6