Informática, perguntado por fernandesisasantos, 11 meses atrás

Os compiladores C/C++, para realizar a verificação de consistência de uso das funções, faz uso dos arquivos de cabeçalhos ( headers ). Nestes arquivos, por exemplo, o protótipo das funções são declarados. Desta forma, o compilador verifica se as chamadas implementadas estão compatíveis com as definições das funções. Para essa questão, suponha a existência de dois arquivos: um contendo o arquivo header e outro contendo a implementação em C .

(A) Arquivo header :

#ifndef _ARQHEADER
#define _ARQHEADER

int func1(int *, int);
float func2(float, char []);
void func3(int *, int *, float);
int func4(char[],int, char);

#endif

(B) Arquivo de implementação

int main()
{
int a,b,c;
float f1,f2;
char str[20],carac;
c=func1(a,b); //Linha 1
f2=func2(f1,str[0]); //Linha 2
c=func3(&a, &b, f1); //Linha 3
c=func4(str,a,carac); //Linha 4
func1(&c,a); //Linha 5
return 0;
}

Analisando a parte de implementação com o arquivo header, assinale a alternativa que contém os possíveis erros que seriam acusados pelo compilador:

(A) Na linha 1, o parâmetro “a” não está sendo passado por referência (falta o “&”); na linha 2, está sendo passado o caracter da posição 0 e não toda a string
“str”; na linha 3, está sendo atribuído um valor à variável “c” por intermédio de uma função que nada retorna (func3); as demais linhas estão corretas.

(B) Na linha 1, o parâmetro “a” não está sendo passado por referência (falta o “&”); na linha 3, está sendo atribuído um valor à variável “c” por intermédio de uma função que nada retorna (func3); as demais linhas estão corretas.

(C) Na linha 1, o parâmetro “a” não está sendo passado por referência (falta o “&”); na linha 2, está sendo passado o caracter da posição 0 e não toda a string
“str”; as demais linhas estão corretas.

(D) Na linha 1, o parâmetro “a” não está sendo passado por referência (falta o “&”); na linha 2, está sendo passado o caracter da posição 0 e não toda a string
“str”; na linha 3, está sendo atribuído um valor à variável “c” por intermédio de uma função que nada retorna (func3); na linha 5, falta uma variável para receber o retorno da função “func1”. A linha 4 está correta.

(E) Na linha 2, está sendo passado o caracter da posição 0 e não toda a string “str”; na linha 3, está sendo atribuído um valor à variável “c” por intermédio de uma função que nada retorna (func3); as demais linhas estão corretas.

Soluções para a tarefa

Respondido por CarlosCraaj
1

Resposta:

Vamos lá.

** Eu usei "você" para explicar, mas sei que é um exercício, é só pra facilitar a didática.

Na Linha 1, a variável não está sendo passada por ponteiro. Geralmente quando se cria um vetor de inteiros (ex.: int a[20]) na linguagem C/C++ ele é automaticamente interpretado por ponteiro. Ou vc pode criar um malloc para ele ou tbm usar ponteiro (int *a). Ou até mesmo passar como parâmetro dessa forma: "&variavel". Então linha 1 tem esse erro.

Na linha 2, você está passando somente o caractere da primeira posição, ou seja, o caractere na posição 0 do sa sua string/vetor de caracteres.

Na linha 3, como sua função é do tipo void, não tem necessidade vc atribuir a variável C ao return dessa função.

Na linha 5, A função está sendo chamada, mas não tem nenhuma variável atribuída para receber o retorno dessa função.

Explicação:

Respondido por gabrielsantosm52
16

Resposta:

.Na linha 1, o parâmetro “a” não está sendo passado por referência (falta o “&”); na linha 2, está sendo passado o caracter da posição 0 e não toda a string

“str”; na linha 3, está sendo atribuído um valor à variável “c” por intermédio de uma função que nada retorna (func3); as demais linhas estão corretas.

Explicação:

Perguntas interessantes