Esse código possui duas saídas, produzidas nas linhas 13 e 1...
Considerando o código em linguagem C acima, julgue os itens de 101 a 107.
Comentários
Veja os comentários dos nossos alunos
CESPE pegando pesado, mas vamos lá...
a mágica está entre as linhas 4 a 8:
for(i=0;i<n/2; i++){
......... s[n] = *(s+i); // Aqui é atribuída uma variável temporária que irá receber o valor conforme a variável i
......... s[i] = s[n - i !1];
......... *(s+n-i-1) = *(s+n); } // Como um array é um ponteiro, podemos acessá-lo da seguinte maneira: *(s+n-i-1),
...........................................// leia-se assim: *(s+5-0-1) ===> *(s+4) ===> s[4]
.... *(s+n) = '\0';
O array str inicialmente vale: "abcde"
Entraremos no laço for, somente 2 vezes ( i=0 e i=1), pois n/2 = 2, porque estamos dividindo 2 inteiros
Após o primeiro for (i=0):
> Trocamos os valores do s[0] com s[4]
Após o segundo for (i=1)
> Trocamos os valores do s[1] com s[3]
Saímos do laço for;
O primeiro printf, linha 13, imprimirá na tela: edcba
Como estamos trabalhando com ponteiro, os valores do array foram alterados, portanto:
O segundo printf, linha 15, imprimirá na tela: edcba
Ou seja, as duas saída produzidas serão iguais
GABARITO: CERTO
juntando a declaracao da funcao char *MyStr (char *s, int n, int i) que contém um ponteiro para um array (string), tamanjo do array e loop counter) com a sua oimplemtacao (que inverte a o inut da string com um loop
de 0 a n/2 -1, faznedo um swap dos caracteres), a funcao main inicializa o array str com a string abcde e chama MyStr para inverter a string. o printf exibe a srting modifcado com o espficiador de formato %s. Apos, ele exibe cada carcter do array str com o loop. O ouput é exibido 2 vezes: edcba
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo