Questões Ponteiros, Vetores, Matrizes e Strings

5
Exercícios da Apostila de C (Listas 4 e 5) 1- Seja um vetor declarado por int vet[10]; Qual elemento deste vetor é acessado quando se escreve vet[2] ? a. Primeiro elemento b. Segundo elemento c. Terceiro elemento d. Quarto elemento e. Nenhuma das opções anteriores Respostas 1: Em vetores, o primeiro elemento é sempre o 0. Assim, temos: vet[0], vet[1], vet[2], ..., vet[9] Logo, o vet[2] é um terceiro elemento do vetor. Gabarito: c 2- Se declararmos um vetor como: int vet[30] a instrução abaixo acessa corretamente os elementos deste vetor? for (j=0; j <= 30; j++) vet[j] = j*j; a. Sim b. Não Respostas 2: Se você declaram um vetor de 30 elementos, eles são: vet[0], vet[1], ..., vet[29] Ou seja, não existe: vet[30] Gabarito: b 3- Seja a matriz matrx declarada e inicializada por: int matrx[][4] = {1,2,3,4,5,6,7,8,9,10,11,12}; O que conterá o elemento matrx[1][2] ? a. 2 b. 5 c. 6 d. 7 e. Nenhuma das opções anteriores Respostas 3: Temos um vetor bidimensional, ou matriz, com 12 elementos. Não foi especificado na declaração dela o tanto de linhas que ela possui, somente o número de elementos existentes em cada linha, que é 4. Ou seja, temos 12 elementos, agrupados de 4 em 4. Logo, temos 3 linhas: matrx[0][], matrx[1] e matrx[2] Desenhando nossa matriz para resolver esta Respostas da apostila, temos: matrx[][0] matrx[][1] matrx[][2] matrx[][3]

description

Questões de Matrizes, Vetores

Transcript of Questões Ponteiros, Vetores, Matrizes e Strings

Exerccios da Apostila de C (Listas 4 e 5) 1- Seja um vetor declarado porint vet[10];Qual elemento deste vetor acessado quando se escreve vet[2] ?a.Primeiro elementob.Segundo elementoc.Terceiro elementod.Quarto elementoe.Nenhuma das opes anterioresRespostas 1: Em vetores, o primeiro elemento sempre o 0. Assim, temos: vet[0], vet[1], vet[2], ..., vet[9] Logo, o vet[2] um terceiro elemento do vetor. Gabarito: c 2- Se declararmos um vetor como: int vet[30]a instruo abaixo acessa corretamente os elementos deste vetor?for (j=0; j 1 234 matrx[1] ->5 678 matrx[2] ->9 101112 Gabarito: d 4- Se uma string for declarada como: char str[20];o nmero mximo de caracteres que podero ser lidos e armazenados nela :a.18b.19c.20 d.21 Respostas 4: Emboraasstringssejamcomumentevistascomoumvetordecaracteres,estainformao no est totalmente correta,pois o que caracteriza uma string que o ltimo elemento do vetor o caractere '\0', e no um caractere visvel. Assim,se declaramos uma string com20 elementos, s podemos usar 19,pois o ltimo o \0. Gabarito: b 5- Qual funo pode ser usada para determinar o comprimento de uma string?a.gets b.strcpy c.strcat d.strlen e.strcmp Respostas 5: strlen vem de string length, que significa tamanho da string. Gabarito: d 6- Qual das instrues abaixo correta para declarar um ponteiro para inteiro?a.*int pti;b.*pti; c.&i;d.int_pti pti;e.int *pti; Respostas 6: A sintaxe para declarao de um ponteiro : tipo_do_ponteiro * nome_do_ponteiro; Gabarito: e 7-Seja a seguinte seqncia de instrues em um programa C: int *pti;int i = 10;pti = &i;Qual afirmativa falsa?a. pti armazena o endereo de ib.*pti igual a 10c.ao se executar *pti = 20; i passar a ter o valor 20 d.ao se alterar o valor de i, *pti ser modificado e.pti igual a 10 Respostas 7: pti no igual a 10, pois pti armazena um endereo de memria, um tipo de dado especial, diferente de um inteiro comum. Gabarito: e 8- Se i e j so variveis inteiras e pi e pj so ponteiros para inteiro, qual atribuio ilegal?a.pi = &i;b.*pj = &j;c.pj = &*&j;d.i = *&*&j;e.i = (*pi)+++*pj;Respostas 8: Como dissemos, o endereo de memria um tipo especial de dado, no exatamente igual a inteiro. Sabemos que *pj vai mudar o local na qual o ponteiro pj aponta. Por exemplo, vamos fazer pj apontar para a varivel j: pj = &j; Assim, fazer: j=10 o mesmo que: *pj = 10 Pois pj aponta para j. Ento,*pjumnmerointeiro,eeledevereceberuminteiro,enessaopoelerecebe dado do tipo endereo de memria: *pj = &j Gabarito: e

9- Seja a seguinte seqncia de instrues em um programa C: int *pti;int veti[]={10,7,2,6,3};pti = veti;Qual afirmativa falsa?a.*pti igual a 10b.*(pti+2) igual a 2c.pti[4] igual a 3 d.pti[1] igual a 10e.*(veti+3) igual a 6 Respostas 9: Um vetor, na verdade, um ponteiro, um ponteiro que aponta para seu primeiro elemento. Por isso que fazemos: pti = veti , em vez de pti = &veti Assim,aofazer"pti=veti",fazeroponteiroptiapontarparaoprimeiroelementodo vetor. Logo, pti[0] = veti[0] = 10 E, pti[1] = veti[1] = 7 Gabarito: d 10- Na seqncia de instrues abaixo: float f;float *pf;pf = &f;scanf("%f", pf);a.Efetuamos a leitura de f b.No efetuamos a leitura de f c.Temos um erro de sintaxed.Deveramos estar usando &pf no scanfe.Nenhuma das opes anteriores Respostas 10: Parausarmosafunoscanfparaaleituradeumnmerodoteclado,devemosfornecer para ela um endereo de memria, de onde essa varivel vai ser armazenada. Ecomofornecemosumendereodememria?Atravsdooperador&antesdeuma varivel, ou atravs de um ponteiro, pois este ponteiro armazena um endereo de memria. Gabarito: a 11- Seja a seguinte seqncia de instrues int i=10, j=20;int *pti, *ptj;pti = &i;ptj = &j;Qual expresso no vlida?a.j = pti == ptj; b.i = pti-ptj;c.pti += ptj; d.pti++;e.i = pti || ptj; Respostas 11: O resultado da operao de soma ou subtrao de ponteiros, um inteiro. Por isso, verdadeira a instruo:i = pti - ptj; Assim,(pti+ptj)tambmseriauminteiro,logofazer:pti+=ptjerrado,poisfazercom que pti receba (pti + ptj) que um inteiro. Gabarito: c 12- Seja a declarao: int matr[][4] = {1,2,3,4,5,6,7,8,9,10,11,12}Qual afirmativa falsa?a.**matr igual a 1 b.*(*(matr+1)+2) igual a 7c.*(matr[2]+3) igual a 12 d.(*(matr+2))[2] igual a 11 e.*((*matr)+1) igual a 5 Respostas 12: Desenhando a matriz: matrx[][0]matrx[][1] matrx[][2]matrx[][3] matr[0] -> 1 234 matr[1] -> 5 678 matr[2] -> 9 101112 Sabemos que um vetor , na verdade, um ponteiro. Assim, uma matriz um conjunto de ponteiros, ou um ponteiro de ponteiros. tantoquepodemosrepresentaressamatrizpor:**matr(umponteiroqueapontapara ponteiros), desenhando: matr[0] -> *ptr matr[1] -> *ptr matr[2] -> *ptr Assim, **matr aponta para o primeiro elemento, 1. Para apontarmos para a segunda linha: *( *(ptr+1) ) ou *( ptr[1] ) Para apontar para a segunda coluna: *( *(ptr) + 1 ) ou *( *ptr)[1] Para apontar para a segunda linha e terceira coluna: *( *(ptr+1) + 2 ) Portanto,fcilverque*((*matr)+1)apontaparaaprimeiralinhaesegundacoluna,o elemento 6 (e no 5). Gabarito: e