Enviar um café pro programador

Pode me ajudar a transformar cafeína em código?

Apostila de C - Função (Lista 6)

Neste tutorial de nossa Apostila C Progressivo, vamos propor as questões do Curso de C da UFMG sobre o assunto Função, em seguida iremos comentar e resolver cada um dos exercícios.

Obtenha seu certificado de C e se torne um programador profissional

Apostila de C da UFMG

Vamos mostrar neste tutorial as questões que foram propostas pela Apostila de C da UFMG, exercícios sobre Funções onde você deve assinalar a questão correta e, ao final do teste, verificar sua nota.

Essa apostila é divulgada de maneira gratuita, tanto pelo site como por um pdf que é totalmente liberado para download, impressão e uso. Para saber mais sobre a apostila de C, sua história e onde baixar:
Apostila de C

Muito embora algumas questões da apostila possam ser resolvidas simplesmente rodando os códigos, você não irá aprender nada fazendo isso.
Leia os enunciados, raciocine, se precisar pegue um papel e monte sua lógica na cabeça, isso é essencial para você se tornar um bom programador C.

Em seguida, ao fim deste tutorial, iremos comentar cada uma das questões e resolvê-las explicando detalhadamente cada passo.

Para resolver as questões, você deve ter estudado o assunto "Função em C", que é extensamente explicado na dita seção de nosso site.




Questões sobre Função da Apostila de C


 
1- Qual a afirmativa verdadeira?
     
    a.  Você pode retornar para um programa quantas variáveis de uma função desejar através do comando return 
    b.  Uma função só pode ter um comando return 
    c.  Os protótipos de função servem para declarar as funções, isto é, indicar para o compilador qual o seu nome, tipo de retorno e o número e tipos dos parâmetros 
    d.  Uma função não pode retornar um ponteiro 
    e.  Nenhuma das opções anteriores 

2- : Qual das seguintes razões não é uma razão válida para o uso de funções em C?
     
    a.  Funções usam menos memória do que se repetirmos o mesmo código várias vezes
    b.  Funções rodam mais rápido 
    c. Funções fornecem um meio de esconder cálculos em uma "caixa preta" que pode ser usada sem a preocupação de detalhes internos de implementação
    d. Funções mantêm variáveis protegidas das outras partes do programa

3- Qual a afirmativa falsa?
     
    a.  Se uma função não retorna nada ela deve ser declarada como void
    b.  O retorno da função main é feito para o sistema operacional 
    c.  stdio.h e string.h contêm o protótipo de algumas funções da biblioteca do C 
    d.  Funções podem ser definidas dentro de outras funções 
    e.  Uma das opções anteriores é falsa

4- Qual a afirmativa verdadeira?
     
    a.  stdio.h e string.h contêm o corpo de algumas funções da biblioteca do C 
    b.  Funções podem ser chamadas por outras funções 
    c.  Em um programa C todas as funções de um programa devem estar em um único arquivo .c
    d.  Variáveis declaradas em uma função são acessíveis por todas as outras funções 
    e.  Nenhuma das opções anteriores

5- Qual a afirmativa verdadeira?
     
    a.  A palavra reservada auto é utilizada para dizer que uma variável é local (automática). Porém, ela pode ser omitida dentro de uma função, pois todas as variáveis são locais por default.
    b.  Não se pode utilizar variáveis com o mesmo nome em funções diferentes.
    c. Os parâmetros recebidos por uma função têm o mesmo endereço das variáveis usadas na chamada à função
    d. Quando uma variável local tem o mesmo nome de uma variável global, a variável local se torna inacessível e a variável global é acessível
    e. Nenhuma das opções anteriores

6- Qual a afirmativa falsa?
     
    a.  Os parâmetros recebidos por uma função armazenam cópias das variáveis usadas na chamada da função 
    b.  Variáveis globais são conhecidas e podem ser alteradas por todas as funções do programa
    c.  Quando queremos alterar as variáveis que são passadas como parâmetros para uma função, devemos declará-las como ponteiros na função
    d.  A função scanf necessita receber como parâmetro o endereço da variável de entrada, porque ela precisa alterar esta variável. 
    e.  Uma das opções anteriores é falsa

7-  O que imprime o programa abaixo?
    #include <stdio.h>
    void func();
    int i = 10;
    void main()
    {
        int i=20;
        func();
        printf("i= %d ", i);
        {
            int i = 30;
            func();
            printf("i= %d ", i);
        }
    }
    void func()
    {
        printf("i = %d ", i);
    }
    
     
    a.  i= 20 i= 20 i= 30 i= 30
    b.  i= 10 i= 20 i=10 i= 30
    c.  i= 20 i=10 i=10 i=30
    d.  i= 10 i=10 i=10 i=10
    e.  Nenhuma das opções anteriores

8- Ao se utilizar um vetor como parâmetro para uma função que informação está sendo passada à função?
     
    a.  Uma cópia de todos elementos do vetor
    b.  Uma cópia do primeiro elemento do vetor 
    c.  O endereço do primeiro elemento do vetor 
    d.  O endereço de todos os elementos do vetor 
    e.  Nenhuma das opções anteriores 

9- Sejam par1, par2 e par3 variáveis inteiras. Se chamarmos uma função pela instrução:
    func(&par1,&par2,&par3);
Para que servem &par1, &par2 e &par3 ?
     
    a.  São valores inteiros passados para a função 
    b.  Servem para armazenar os endereços da função e das funções que chamaram
    c.  São os endereços das variáveis da função que chamou. Nestes endereços iremos armazenar os valores a serem modificados pela função
    d.  Armazenam os endereços das funções de biblioteca usados na função 
    e.  Nenhuma das opções anteriores

10- O que imprime o programa a seguir?
    #include <stdio.h>
    func(int *a, int b)
    {
        int temp;
        temp = *a;
        *a = b;
        b = temp;
    }
    void main()
    {
        int a = 10, b = 20;
        func(&a, b);
        printf("a = %d, b = %d", a, b);
    }
     
    a.  a = 10, b = 20
    b.  a = 20, b = 10
    c.  a = 10, b = 10 
    d.  a = 20, b = 20
    e.  Nenhuma das opções anteriores 



Sua nota é: em um máximo de 100.

Solução dos exercícios de Função da Apostila de C

Questão 1:

Somente a afirmativa sobre os protótipos é verdadeira.
Podemos fazer retorno de apenas uma variável, que pode ser uma struct ou vetor com vários elementos, mas retorna somente uma variável, de qualquer tipo que for.

Há também uma pegadinha nessa questão da apostila, sobre o tanto de comandos return que podem existe. Na verdade, somente um comando return vai ser executado, mas podem existir mais de um.
Por exemplo:
if (condição) return variavel1;
else              return variavel2;

Ou imagine um retorno diferente para cada case de um switch. Assim, podem existir vários return dentro de uma função, mas ó um deles vai ser executado.

Gabarito: c


Questão 2:

Na verdade, o uso de funções em linguagens de programação deixa o programa um pouco mais lento.
Ele facilita bastante a vida do programador, deixa o código bem mais compacto, de fácil leitura e entendimento, mas não é recomendado usar em excesso.

Gabarito: b


Questão 3:

Não é possível declarar uma função dentro de outra.

Gabarito: d


Questão 4:


Arquivos com a extensão .h são ditos headers, pois contém o cabeçalho de funções que pode sem implementadas em diversos arquivos, os módulos .c

Devemos lembrar também que as variáveis locais, que são declaradas dentro de uma função, "morrem" nela, não sendo visíveis fora dela.

Gabarito: b


Questão 5:

Podemos usar variáveis de mesmo nome, desde que elas sejam locais e pertençam a funções diferentes, pois elas só serão visíveis dentro do escopo da função.

Os parâmetros recebidos numa função, quando a passagem é por valor, são cópias das variáveis originais, ou seja, endereços diferentes das originais.

Gabarito: a


Questão 6:

As alternativas a, b, c e d são corretas.

Gabarito: e


Questão 7:

A primeira coisa a ser impressa é: i=10
Pois a função func() só sabe da variável "i" global, que tem valor 10. Ela não tem acesso à variável "i" que está dentro da função main().

Depois ocorre uma impressão da variável local da main, i=20
Depois a func() imprime a variável "i" global novamente: i=10
Por fim, é exibida a variável local "i" dentro dos colchetes, onde lá dentro, e somente lá, i=30

Gabarito: b


Questão 8:

Repetindo mais uma vez em nossa apostila: quando passamos, recebemos e declaramos vetores, estamos apenas trabalhando com o endereço de memória do primeiro elemento.

Gabarito: c


Questão 9:

Estamos fazendo uma passagem por referência, ou seja, estamos passando os endereços das variáveis, e não uma cópia. Nesse caso podemos alterar os valores das variáveis originais dentro do escopo de uma função.

Gabarito: c


Questão 10:

Essa é mais uma questão do tipo pegadinha, dessa apostila.
Como estamos trabalhando com ponteiro e endereço da memória da variável "a", ela será alterada de dentro da função func(), porém a variável "b" é passada por valor, ou seja, a função vai usar uma cópia do valor de "b", e não a variável "b" em si, que permanecerá intocada.

Dentro da função, "a" recebe o valor de "b".
"b" continua do jeito que está.

Gabarito: d

Nenhum comentário: