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
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
Não foi feito nenhum comentário até agora.
Fechar esta janela