Enviar um café pro programador

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

Apostila de C - Variáveis, Operadores, Operações Matemáticas e Lógicas (Lista 2)

Neste tutorial, iremos resolver a Lista 2 da Apostila de C da UFMG.
Mostraremos as questões e comentaremos cada um dos exercícios.

Obtenha seu certificado de Programador C e entre no Mercado de Trabalho

Sobre a Apostila de C

Este tutorial se destina a resolver a famosa e muitíssimo utilizada Apostila do Curso de C da Universidade Federal de Minas Gerais, que há quase 20 anos vem ajudando a educar uma legião de programadores C no Brasil.

É um material de excelente qualidade que é ofertado de maneira totalmente gratuita, que era um curso da UFMG que já foi encerrado, mas devido a utilidade do projeto, a apostila ainda continua no ar.

Para saber mais sobre acesse:
Apostila de C

Nosso objetivo, além de divulgar e mostrar essa apostila para os iniciantes na linguagem C, é resolver e comentar as questões propostas na Lista 2 da Apostila de C.

As seguintes questões dessa apostila abordam assuntos que podem ser encontrados em nossos tutoriais do C Progressivo, como:
Números inteiros (Modificadores do tipo int)
Números decimais - Float e Double
Caracteres - O tipo char
Operadores Matemáticos
Operações Matemáticas e Precedência de Operadores
Lógica Binária
Operadores Lógicos
Operadores de Incremento ++ e Decremento --




Questões da Lista 2 da Apostila de C





1- Escolha a opção que inclui somente nomes válidos para variáveis na linguagem C.
     
    a.  If,  a_b_2,  H789,  _yes 
    b.  i,  j,  int,  obs
    c.  9xy,  a36,  x*y, --j
    d.  2_ou_1,  \fim,  *h, j 
    e.  Nenhuma das opções anteriores 

2- Qual das instruções abaixo está errada?
     
    a.  int i; 
    b.  long float x; 
    c.  long double y;
    d.  long ijk; 
    e.  short int a;
    f.  unsigned b; 

3- Em um compilador para um hardware de 16 bits uma variável double ocupa o mesmo espaço que _____ variáveis do tipo char
     
    a.  Uma 
    b.  Duas 
    c.  Quatro 
    d.  Oito 
    e.  Dezesseis 

4- Qual o trecho de programa que inicializa a variável z?
     
    a.  float z , z1=10.; 
    b.  float z; z = 10; 
    c.  float z = 10;
    d.  z = 10; 

5- O trecho de programa a seguir é
         main()
       {
              char condicao;
              condicao = 'D';
              int i = 1;
      }

    a.  Válido na linguagem C 
    b.  Não válido na linguagem C 

6- 0101 é uma constante __________  na linguagem C.
     
    a.  Binária 
    b.  Hexadecimal
    c.  Inteira 
    d.  Octal 
    e.  Ponto Flutuante 

7-  Em C, "t" e 't' representam a mesma constante.
     
    a.  Verdadeiro 
    b.  Falso 

8- Diga o resultado das variáveis x, y e z depois da seguinte sequência de operações:
        int x,y,z;
        x=y=10;
        z=++x;
        x=-x;
        y++;
        x=x+y-(z--);
     
    a.  x = 11, y = 11, z = 11 
    b.  x = -11, y = 11, z = 10 
    c.  x = -10, y = 11, z = 10 
    d.  x = -10, y = 10, z = 10 
    e.  Nenhuma das opções anteriores 

9- Diga o resultado das variáveis x,  y e z depois da seguinte sequência de operações:
        int x,y;
        int a = 14, b = 3;
        float z;
        x = a/b;
        y = a%b;
        z = y/x;
     
    a.  x = 4.66666, y = 2, z = 0.4286 
    b.  x = 5, y =2, z= 0.4 
    c.  x = 5, y = 2, z = 0. 
    d.  x = 4, y = 2, z = 0.5 
    e.  x = 4, y =2, z = 0. 
    f.  Nenhuma das opções anteriores 

10- A operação lógica   (-5 || 0)&&(3 >= 2)&&(1 != 0)||(3 < 0) é:
     
    a.  Verdadeira
    b.  Falsa 
    c.  Inválida, pois sua sintaxe está errada. 
    d.  Nem Verdadeira nem Falsa 
    e.  Nenhuma das opções anteriores 

11- Quais os valores de a, b e c após a execução do código abaixo?
     int a = 10, b = 20, c;
     c = a+++b;
     
    a.  a = 11, b = 20, c =30
    b.  a = 10 , b = 21, c = 31 
    c.  a = 11, b = 20, c = 31
    d.  a = 10, b = 21, c = 30 
    e.  Nenhuma das opções anteriores 

12- Qual o valor das variáveis v, x, y e z após a execução do seguinte trecho de código
   int v = 0, x = 1, y = 2, z = 3;
   v += x+y;
   x *= y = z + 1;
   z %= v + v + v;
   v += x += y += 2;
     
    a.  v=11, x=8, y=6, z=3 
    b.  v=0, x=1, y=2, z=3 
    c.  v=10, x=7, y=6, z=3
    d.  v=13, x=10, y=6, z=3
    e.  Nenhuma das opções anteriores


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


Resolução da Lista 2 da Apostila de C

Questão 1:

Uma variável, em C, deve ter seu nome composto por caracteres alfanumérico (número ou letra, maiúscula ou minúscula) ou pelo underline _

Não podemos dar um nome reservado (como for, while ou if) a uma variável também. Mas devemos lembrar que o C é case sensitive, então não pode 'if', mas pode 'If'.

Também não podemos iniciar o nome de uma variável por um dígito!

Gabarito A


Questão 2:

Os tipos em C são: char, unsigned char, signed char, int unsigned int, signed int, short in, unsigned short int, signed short int, long int, signed long int, unsigned long int, float, double e long double.

Ou seja, não existe long float.

Gabarito B


Questão 3:

Em um computador com hardware de 16 bits, um double ocupa 8 bytes e o char ocupa apenas 1 byte.
Então 8/1=8

Gabarito D


Questão 4:

Entendemos por inicializar uma variável o ato de criar (reservar) uma variável com um valor inicial, escolhido por nós.

No item A dessa questão da apostila, a variável z é criada e é dado o valor de '10' para outra variável, a z1. No item B, a variável z é criada sem ser inicializada (então um valor do 'lixo', local aleatório da memória, que inicia a variável), só depois que o valor 10 é atribuído.
Já no item D a variável não é declarada, então não é atribuído o valor 10 na definição da variável, não configurando uma inicialização.

Gabarito C


Questão 5:

A função main retorna uma variável do tipo inteira, então devemos usar o int main() { ... }
Como ela retorna um inteiro, é aconselhável, ao final da função, usar o "return 0;".

Gabarito B


Questão 6:

Conforme a lição sobre Constantes, da Aula 3 da própria Apostila de C da UFMG, números iniciados em 0 se referem as constantes e números octais.

Gabarito D


Questão 7:

Quando usamos aspas duplas, como em "t", estamos nos referindo a uma string.
Ou seja, para armazenar "t" necessitaríamos no mínimo de duas variáveis do tipo char em um vetor: uma para para armazenar o caractere 't' e outra para armazenar o caractere delimitador de string '\0'.

Já a 't' é um simples caractere ASCII.
Ou seja, são duas coisas totalmente diferentes do ponto de vista da linguagem C.

Gabarito B


Questão 8:

x=y=10 -> Tanto x como y recebem o valor 10
z=++x -> Como o operador '++' vem antes, primeiro x é incrementado (passa a ser 11) e só depois é atribuído a z (que será igual a 11)
x=-x -> 'x' recebe seu valor oposto, agora é -11
y++ ->: O valor de 'y' é incrementado e agora vale 11
x=x+y-(z--) -> Como o 'z' vem antes do operador de decremento '--', primeiro fazemos a operação normalmente, sem esse oprador (x = x+y - z), que resulta em x=-11 . Agora sim fazemos o decremento, então z=10

Gabarito B


Questão 9:

Para resolver este exercício da apostila de C, devemos levar em consideração que 'a', 'b', 'x' e 'y' são números inteiros, então devemos lembrar que o resultado inteiro de uma divisão de dois números inteiros é a parte inteira do resultado.

Por exemplo: x=a/b=14/3 = 4
(se você fizer isso na calculadora vai obter 4.667, mas como 'x' é inteiro, vamos ficar apenas com a parte inteira do resultado, que é 4)

Já y=a%b= 2 (resto da divisão)
E o resultado inteiro de: y/x = 2/4 = 0

Gabarito E


Questão 10:

Vamos fazer como o Jack, o estripador: por partes.

(-5 || 0) -> É uma operação que não faz alguma comparação ou teste, cujo resultado é verdadeiro (TRUE)
(3 >=2) -> Verdadeiro, retorna TRUE
(1 != 0) -> TRUE também
( 3 < 0) -> FALSE

Vamos chamar TRUE de 1 e FALSE de 0. Montando a expressão:
1 && 1 && 1 || 0
É até fácil ver que o resultado é TRUE. Mas podemos reduzir o trecho:
1 && 1 && 1 para simplesmente 1. Obtendo: 1 || 0 , que retorna verdadeiro ou TRUE.

Gabarito A


Questão 11:

Para resolver esta penúltima questão dessa Lista 2 da Apostila, também temos que ir com calma e dividir por partes.

Assim, temos: c = a+++b
Isto está dessa maneira de propósito, para confundir.
Reescrevendo de outra maneira, essa expressão equivale a: c = a++ + b
Ou de maneira mais simples: c = (a++) + b

Assim, temos 'a++', isso quer dizer que primeiro vamos trabalhar com o valor de 'a' normalmente, e só ao término da operação é que o operador de incremento entra em ação.
Logo, a primeira parte da instrução é simplesmente: c = a + b =30

Agora sim, incrementamos a: a++ = 11

Gabarito A


Questão 12:

Primeira instrução: v += x + y
Isso equivale a : v = (v + x + y) = 0 + 1 + 2 = 3

Na segunda instrução, temos duas operações na mesma linha: x *= y = z + 1;
Nesses casos, fazemos sempre da direita para a esquerda.
Assim, a primeira operação: y = z + 1 = 4
Agora: x*=y -> x = x*y = 1*4 = 4

Agora: z %= v + v + v
Que é o mesmo que: z = z%(v+v+v) = 3%(3+3+3) = 3 % 9 = 3

E por fim temos três operações numa linha só: v += x += y += 2
Vamos, mais uma vez, fazer da direita para a esquerda.
Primeiro: y+=2 -> y=y+2 = 4+2=6
Segundo: x+=y -> x=x+y = 4 + 6 =10
Por fim: v+=x ->  v=v+x = 3 + 10=13

Gabarito D

Nenhum comentário: