Baixe o app para aproveitar ainda mais
Prévia do material em texto
Exercícios - Questões Objetivas Apresentação 08 – Matrizes 1) Qual dos fragmentos de código abaixo preenche todos os elementos da matriz corretamente? a) for(i = 0; i < 3; i++) { for(j = 0; j < 3; j++) printf("\nElemento [%d][%d]: ", i+1, j+1); scanf("%d", &mat[i][j]); } b) for(i = 0; i < 3; i++) { scanf("%d", &mat[i][j]); for(j = 0; j < 3; j++) printf("\nElemento [%d][%d]: ", i+1, j+1); } c) for(i = 0; i < 3; i++) { for(i = 0; i < 3; i++) { printf("\nElemento [%d][%d]: ", i+1, i+1); scanf("%d", &mat[i][i]); } } d) for(i = 0; i < 3; i++) { for(j = 0; j < 3; j++) { printf("\nElemento [%d][%d]: ", i+1, j+1); scanf("%d", &mat[i][j]); } } e) for(i = 0; i < 3; i++) { printf("\nElemento [%d][%d]: ", i+1, i+1); scanf("%d", &mat[i][i]); } 2) Qual a função do programa abaixo? #include <stdio.h> #include <stdlib.h> int main() { int mat[5][5], i, j, soma = 0; printf("Digite os elementos da matriz:\n"); for(i = 0; i < 5; i++) { for(j = 0; j < 5; j++) { printf("\nElemento [%d][%d]: ", i+1, j+1); scanf("%d", &mat[i][j]); } } for(i = 0; i < 5; i++) { soma = soma + mat[i][i]; } printf("Soma = %d", soma); return 0; } a) Imprimir a soma de todos os elementos da matriz. b) Imprimir a soma dos elementos da primeira coluna. c) Imprimir a soma dos elementos da diagonal principal. d) Imprimir a matriz. e) Imprimir a soma dos elementos da diagonal secundária. 3) Explique a função do programa abaixo: #include <stdio.h> #include <stdlib.h> int main() { int mat[3][3], i, j, valor1, valor2; printf("Digite os elementos da matriz:\n"); for(i = 0; i < 3; i++) { for(j = 0; j < 3; j++) { printf("\nElemento [%d][%d]: ", i+1, j+1); scanf("%d", &mat[i][j]); } } valor1 = mat[0][0]; valor2 = mat[0][0]; for(i = 0; i < 3; i++) { for(j = 0; j < 3; j++) { if(valor1 > mat[i][j]) { valor1 = mat[i][j]; } if(valor2 < mat[i][j]) { valor2 = mat[i][j]; } } } printf("Resultado = %d", (valor2 - valor1)); return 0; } a) Imprimir a diferença entre os dois primeiros elementos. b) Imprimir a diferença entre o maior e o menor elemento. c) Imprimir o maior e o menor elemento. d) Imprimir a diferença entre o menor e o maior elemento. e) Imprimir a diferença entre o primeiro e o último elemento. 4) Tendo como entrada os valores na seguinte ordem: {1, 3, 9, 6, -23, 54, 2, 7, 16}, mostre qual a saída do programa e qual a sua função: #include <stdio.h> #include <stdlib.h> int main() { int mat[3][3], i, j, cont = 0; printf("Digite os elementos da matriz:\n"); for(i = 0; i < 3; i++) { for(j = 0; j < 3; j++) { printf("\nElemento [%d][%d]: ", i+1, j+1); scanf("%d", &mat[i][j]); } } for(i = 0; i < 3; i++) { for(j = 0; j < 3; j++) { if(mat[i][j] % 2 == 0) { cont++; } } } printf("Contador = %d", cont); return 0; } a) 4. Imprimir a quantidade de números ímpares. b) 3. Imprimir todos os números pares. c) 9. Imprimir o número de elementos da matriz. d) 1. Imprimir a quantidade de números negativos. e) 3. Imprimir quantidade de números pares. 5) Mostre a saída e a finalidade do seguinte programa, sendo n a ordem da matriz quadrada: #include <stdio.h> #include <stdlib.h> int main() { int mat[3][3] = {{1, 5, 7}, {9, 8, 0}, {1, 10, 16}}, i, j, n = 3, soma = 0; for(i = 0; i < 3; i++) { for(j = 0; j < 3; j++) { if(i + j == n - 1) { soma = soma + mat[i][j]; } } } printf("Soma = %d", soma); return 0; } a) 25. Imprimir a soma dos elementos da diagonal principal. b) 13. Imprimir a soma dos elementos da primeira linha. c) 16. Imprimir a soma dos elementos da diagonal secundária. d) 11. Imprimir a soma dos elementos da primeira coluna. e) 23. Imprimir a soma dos elementos da última coluna. 6) Explique qual a função do programa abaixo: #include <stdio.h> #include <stdlib.h> int main() { int mat[3][3], i, j; for(i = 0; i < 3; i++) { for(j = 0; j < 3; j++) { if(i == j) { mat[i][j] = 1; } else { mat[i][j] = 0; } } } for(i = 0; i < 3; i++) { for(j = 0; j < 3; j++) { if(i == 0) { printf("%d ", mat[i][j]); } } } return 0; } a) Criar uma matriz identidade e imprimir os elementos da primeira linha. b) Criar uma matriz triangular superior e imprimir os elementos da primeira coluna. c) Criar uma matriz identidade e imprimir os elementos da diagonal principal. d) Criar uma matriz triangular inferior e imprimir os elementos da primeira linha. e) Criar uma matriz nula e imprimir todos os elementos. 7) Tendo como entrada os valores na seguinte ordem: { 56, 78, 65, 48, 76, 50, 48, 74, 59}, mostre qual será a saída correta: #include <stdio.h> #include <stdlib.h> int main() { int i, j; float media, mat[3][3]; for(i = 0; i < 3; i++) { printf("\nNotas aluno %d\n", i+1); for(j = 0; j < 3; j++) { printf("Nota %d: ", j+1); scanf("%f", &mat[i][j]); } } for(i = 0; i < 3; i++) { media = 0; printf("\nAluno %d: ", i+1); for(j = 0; j < 3; j++) { media = media + mat[i][j]; } media = media/3; if(media >= 60 && media <= 100) { printf("Aprovado."); } else { if(media >= 0 && media < 60) { printf("Reprovado."); } } } return 0; } a) Reprovado, Reprovado, Aprovado. b) Aprovado, Reprovado, Aprovado. c) Aprovado, Aprovado, Aprovado. d) Reprovado, Aprovado, Aprovado. e) Reprovado, Aprovado, Reprovado. 8) Mostre a(s) linha(s) que apresente(m) erro(s) de sintaxe: 1 real soma_elementos( real m ) 2 { 3 inteiro i, j; 4 real soma ← 0; 5 para ( i ← 0; i < 2; i ← i + 1) faça 6 { 7 para (j ← 0; j < 3; ← j + 1) faça 8 { 9 soma ← soma + m[i][j]; 10 } 11 } 12 retorne soma; 13 } 14 principal 15 { 16 real mat[2][3] ← {{2.1,0,1.3},{5.0,1.5,6.3}}; 17 real soma ← soma_elementos(mat[2][3]); 18 imprima ("A soma dos elementos da matriz foi ", soma); 19 } a) Linhas 1 e 17. b) Linha 5. c) Linhas 9 e 16. d) Linhas 16. e) Linhas 7 e 9. 9) Quais serão os novos valores dos elementos da matriz no código abaixo? principal { inteiro mat[3][3] ← {{2, 4, 5},{7, 9, 3}, {8, 11, 1}}, i, j; para ( i ← 0; i < 3; i ← i + 1) faça { para (j ← 0; j < 3; ← j + 1) faça { se((i + j) < 2) então { mat[i][j] ← mat[i][j] – 1; } } } } a) mat[3][3] ← {{2, 4, 5},{7, 9, 2}, {8, 10, 0}} b) mat[3][3] ← {{2, 4, 5},{7, 9, 3}, {8, 11, 1}} c) mat[3][3] ← {{2, 3, 5},{6, 9, 3}, {8, 11, 1}} d) mat[3][3]← {{1, 3, 5},{6, 9, 3}, {8, 11, 1}} e) mat[3][3] ← {{1, 3, 5},{8, 9, 3}, {8, 12, 1}} 10) Se for inicializada a seguinte matriz: {{3, 7, 14},{2, 6, 15}, {17, 1, 9}}, mostre qual o valor que a função irá retornar: inteiro soma( real m[3][3] ) { inteiro i, j, soma ← 0; para ( i ← 0; i < 2; i ← i + 1) faça { para (j ← 0; j < 3; ← j + 1) faça { se(i = 1 ou j = 1) então { soma ← soma + m[i][j]; } } } retorne soma; } a) 31. b) 24. c) 22. d) 38. e) 13. Apresentação 09 – Estruturas de Dados Heterogêneas 1) Indica em qual linha há um erro no código abaixo: 1 #include <stdio.h> 2 typedef struct saluno 3 { 4 char nome[120]; 5 int matricula; 6 float nota; 7 tipo_endereco endereco; 8 }; 9 typedef struct sendereco 10 { 11 char rua[120]; 12 int complemento; 13 char bairro[120]; 14 }tipo_endereco; 15 int main() 16 { 17 aluno p1; 18 gets(p1.nome); 19 scanf(“%d”,&p1.matricula); 20 scanf(“%f”,&p1.nota); 21 gets(p1.endereco.rua); 22 scanf(“%d”,&p1.endereco.complemento); 23 gets(p1.endereco.bairro); 24 return 0; 25 } a) 1. b) 5. c) 8. d) 16. e) 22. 2) Considerando o programa abaixo, qual estrutura deve ser inserida na linha 6? 1 #include <stdio.h> 2 #include <string.h> 3 4 int main() 5 { 6 <estrutura> 7 dados d[3]; 8 int i,j; 9 for(i=0;i<3;i++) 10 { 11 printf("Nome\n"); 12 scanf("%s",d[i].nome); 13 printf("Rua\n"); 14 scanf("%s",d[i].rua); 15 printf("Telefone\n"); 16 scanf("%d",&d[i].telefone); 17 } 18 for(i=0;i<3;i++) 19 { 20 printf("Pessoas que moram na mesma rua de %s\n",d[i].nome); 21 for(j=0;j<3;j++) 22 { 23 if((strcmp(d[i].rua,d[j].rua)==0)&&(!(strcmp(d[i].nome,d[j].nome))==0)) 24 { 25 printf("%s\n",d[j].nome); 26 } 27 } 28 } 29 system("pause"); 30 return 0; 31 } a) struct sdados { char nome,rua; int telefone; }; b) struct sdados { char nome[20],rua[20]; int telefone; }; c) typedef struct sdados { char nome[20],rua[20]; float telefone; }dados; d) typedef struct sdados { char nome[20],rua[20]; int telefone; }dados; e) N.D.A. 3) O que será gerado pelo código abaixo? #include <stdlib.h> struct Aluno { int matricula; char nome[50]; char end[50]; }; int main() { struct Aluno a1,a2; printf("Nome: "); gets(a1.nome); printf("Endereco: "); gets(a1.end); printf("Matricula: "); scanf("%d",&a1.matricula); a2=a1; printf("Nome: %s\n",a2.nome); printf("Endereco: %s\n",a2.end); printf("Matricula: %d\n",a2.matricula); system("pause"); return 0; } a) O meu nome, endereço e matrícula. b) “Nome:%s\n Endereco: %s\n Matricula: %d\n”. c) Os dados digitados pelo usuário e inseridos na variável a1. d) Erro. e) N.D.A. 4) Utilizando a estrutura abaixo indique qual das funções retornaria a diferença de dias duas instâncias dessa estrutura. Considere 1 mês = 30 dias e 1 ano = 365 dias. typedef struct sdata { int dia,mes,ano; }data; a) function dif(data d1,data d2) { int dias1,dias2; dias1= d1.dia + d1.mes*30 + d1.ano*365; dias2= d2.dia + d2.mes*30 + d2.ano*365; return dias1-dias2; } b) int dif(data d1,data d2) { int dias1,dias2; dias1= d1.dia + d1.mes*30 + d1.ano*365; dias2= d2.dia + d2.mes*30 + d2.ano*365; dias1-dias2; } c) int dif(data d1,data d2) { int dias1,dias2 dias1= d1.dia + d1.mes*30 + d1.ano*365 dias2= d2.dia + d2.mes*30 + d2.ano*365 return dias1-dias2 } d) function dif(data d1,data d2) { int dias1,dias2; dias1= d1.dia + d1.mes*30 + d1.ano*365; dias2= d2.dia + d2.mes*30 + d2.ano*365; return dias1-dias2; } e) N.D.A. 5) Considerando a função distância abaixo, qual estrutura pode corresponder à estrutura Cidades. inteiro distancia (Cidades c1, Cidades c2) { retorne (raizQuadrada(elevaQuadrado(c1.coordenada.x-c.coordenada.x) + elevaQuadrado(c1.coordenada.y-c.coordenada.y))); } a) estrutura cidades { caracter nome[30]; real coordenadas; inteiro habitantes; }; b) estrutura cidades { caracter nome[30]; coord coordenadas; inteiro habitantes; }; estrutura coord { inteiro x,y; c) estrutura cidades { caracter nome[30]; real coordenadas; inteiro habitantes; }; estrutura coord { inteiro x,y; }; d) estrutura cidades { caracter nome[30]; coord coordenadas; inteiro habitantes; }; f) N.D.A. Apresentação 10 – Recursividade 1) O que é representado pelas expressões a seguir? s = 0, se n = 0; s = 1, se n = 1; s = n*(n+1)/2, se n > 1; - Obs.: n >= 0. a) soma de ‘n’ elementos. b) soma dos ‘n’ primeiros números naturais. c) os primeiros ‘n’ números naturais. d) todas as anteriores. e) nenhuma das anteriores. 2) Qual função recursiva é similar ao fragmento iterativo a seguir? for(i=0 ; i<tam ; i++) //tam é o tamanho do vetor { Soma = soma + vet[i]; } a) int func_rec(int vet[], int tam) { if(tam >= 0) return vet[0] + func_rec(vet, tam - 1); } b) int func_rec(int vet[], int tam) { if(tam == 0) return 1; else return vet[tam] + func_rec(vet, tam + 1); } c) int func_rec(int vet[], int tam) { if(tam >= 0) return vet[tam] + func_rec(vet, tam - 1); } d) int func_rec(int vet[], int tam) { if(tam != 0) return vet[tam] + func_rec(vet, tam + 1); } e) int func_rec(int vet[], int tam) { if(tam >= 0) return vet[tam] + func_rec(vet, tam); } 3) Qual é a funcionalidade do código a seguir? int func_rec (int n) { if(n == 1) return 1; else return (n * func_rec(n - 1)); } a) somatório b) produtório c) potenciação d) fatorial e) radiciação 4) Qual das funções a seguir calculará corretamente o enésimo termo da sequência de Fibonacci? Obs.: Sequência (ou série) de Fibonacci: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89... a) inteiro fib(inteiro num) { se(num <= 0) então imprime(“Valor digitado é inválido para posição em fibonacci. ”); senão { se(num=1 ou num=2) então retorne 0; senão retorne fib(num-1) + fib(num-2); } } b) inteiro fib(inteiro num) { se(num <= 0) então imprime(“Valor digitado é inválido para posição em fibonacci. ”); senão { se(num=1) então retorne 1; senão retorne fib(num-1) + fib(num-2); } } c) inteiro fib(inteiro num) { se(num <= 0) então imprime(“Valor digitado é inválido para posição em fibonacci. ”); senão { se(num=2 ou num=3) então retorne 1; senão retorne fib(num-1) + fib(num-2); } } d) inteiro fib(inteiro num) { se(num <= 0) então imprime(“Valor digitado é inválido para posição em fibonacci. ”); senão { se(num=1 ou num=2) então retorne1; senão retorne fib(num-1) + fib(num-2); } } e) inteiro fib(inteiro num) { se(num <= 0) então imprime(“Valor digitado é inválido para posição em fibonacci. ”); senão { se(num=1 ou num=2) então retorne 1; senão retorne fib(num) + fib(num-1); } } 5) O que será impresso no algoritmo a seguir? //Obs.: A variável “indice” recebe a última posição do vetor, no início. int func_rec(int vet[], int indice) { int x; if(tam == 0) return vet[0]; else { x = func_rec(vet,tam-1); if(x < vet[n]) return vet[n]; else return x; } } int main() { int vet[6] = {13, -8, 4, 9, -6, 8}; printf("%d", func_rec(vet,5)); return 0; } a) 13, -8, 4, 9, -6, 8. b) -8. c) 8, -6, 9, 4, -8, 13. d) “nada será impresso”. e) 13. 6) O que será impresso no código a seguir, considerando como entradas x = 8 e y = 3: inteiro func_rec(inteiro x, inteiro y) { se(x = y) então imprima(x); senão { func_rec(x-1,y); imprima(x); } } a) 3, 4, 5, 6, 7, 8. b) 4, 5, 6, 7, 8. c) 7, 6, 5, 4, 3. d) 3, 4, 5, 6, 7. e) 8, 7, 6, 5, 4, 3. 7) O que será impresso no código a seguir, considerando como entradas x = 8 e y = 3: inteiro func_rec(inteiro x, inteiro y) { se(x = y) então imprima(x); senão { imprima(x); func_rec(x-1,y); } } a) 3, 4, 5, 6, 7, 8. b) 4, 5, 6, 7, 8. c) 7, 6, 5, 4, 3. d) 3, 4, 5, 6, 7. e) 8, 7, 6, 5, 4, 3. 8) Para a função abaixo, indique em quais linhas estão definidas as bases da recursão: 1 int mdc (int n, int m) 2 { 3 if((n>=m) && ((n%m)==0)) 4 return(m); 5 else 6 { 7 if (n<m) 8 return (mdc(m,n)); 9 else 10 return (mdc(m,n%m)); 11 } 12 } a) linhas 5 e 9. b) linhas 7, 8, 9 e 10. c) linhas 3 e 4. d) linhas 3 e 7. e) linhas 8 e 10. 9) Quais devem ser as linhas de código a serem colocadas nas lacunas a seguir para que a função retorne o valor correto? A função deve retornar a soma dos elementos pares entre os 2 números digitados pelo usuário, sendo que o primeiro (a) deve ser menor que o segundo (b). obs.: Se o usuário digitar 4 e 6, por exemplo, deve retornar 4 + 6 = 10. Se ele digitar 4 e 4, deve retornar 4.. Se ele digitar 3 e 5, também deve retornar 4. int soma_pares(int a, int b) { if(a > b) return 0; else { if(a == b) return a; else { if(a % 2 == 0) ??????????????????????; else ??????????????????????; } } } a) soma_pares(a+2, b); return soma_pares(a+1, b); b) return a + soma_pares(a+1, b); soma_pares(a+2, b); c) return a + soma_pares(a, b+2); return a + soma_pares(a, b+1); d) return soma_pares(a+2, b); return soma_pares(a+1, b); e) return a + soma_pares(a+2, b); soma_pares(a+1, b); 10) O que a função recursiva a seguir faz? // obs.: a variável n, inicialmente, recebe o maior índice possível do vetor: “tam-1” int x(int a[], int n) { int aux; if(n == 0) return 0; else { if(a[n] > a[n-1]) { aux = a[n]; a[n] = a[n-1]; a[n-1] = aux; } x(a,n-1); } } a) Ordena o vetor de forma crescente. b) Ordena o vetor de forma decrescente. c) Puxa o menor elemento do vetor pro índice ‘0’. d) Puxa o maior elemento do vetor pro índice ‘0’. e) Puxa o menor elemento do vetor pro último índice. Gabarito Apresentação 08 – Matrizes 1. D 2. C 3. B 4. E 5. C 6. A 7. B 8. A 9. D 10. A Apresentação 09 – Estruturas de Dados Heterogêneas 1. C 2. D 3. C 4. D 5. B Apresentação 10 – Recursividade 1. B 2. C 3. D 4. D 5. E 6. A 7. E 8. C 9. E 10. D Equipe de alunos responsável pelo desenvolvimento desta lista: • DIEGO RAMALHO DE OLIVEIRA (Coordenador do grupo) • RAMON ABRITTA AGUIAR SANTOS • VITOR MENDES MANSUR • VICTOR CALIXTO DE SOUZA • GÉFERSON FELIPE DE SOUZA • MARIA RIBEIRO DAIBERT • RENATA MENDES ROSA DA SILVA
Compartilhar