Você está na página 1de 10

Universidade Católica de Angola

Faculdade de Engenharia
Curso de Informática
Fundamentos de Programação I – Linguagem C

Prova de frequência - Gabarito

Instruções:

1) Escreva o seu nome, número de matrícula e turma em todas as páginas


da prova.
2) Utilize letra legível. O professor não tem a obrigação de decifrar provas
ilegíveis. Qualquer questão ilegível receberá valor zero.
3) A prova é individual e sem consulta. A não observância deste quesito
implicará na atribuição do valor zero a toda a prova.
A prova possui 5 (cinco) páginas numeradas de 1 a 5.
4) Todos os dispositivos electrónicos (celulares, i-pods, etc) devem ser
desligados.
5) As questões podem ser resolvidas em qualquer ordem. As soluções que
não forem apresentadas nas páginas a elas destinadas devem ser
identificadas com o número da questão a que se referem;
6) Leia atentamente cada questão. A interpretação faz parte da avaliação.
7) Sobre a carteira apenas lápis, borracha e caneta.
8)A prova consiste de 2 grupos questões e cada questão tem um valor.
Somados os valores chega-se ao total de 20 pontos.
9) Na avaliação das questões envolvendo a elaboração de programas serão
considerados os seguintes quesitos:
 Correcção do programa – 60% do valor da questão;
 Qualidade do código criado – 20% do valor da questão;
 Layout do programa – 10% do valor da questão;
 Padrão de Nomenclatura – 10% do valor da questão.
 Cada erro de sintaxe incorrerá numa penalização de 0,5 pontos.

I.º Grupo: tempo de resolução 1h00

Grupo I – 10 valores - tempo de resolução 60 minutos

1.ª - Escreva uma expressão em linguagem C para cada uma


das seguintes condições: (2 valores <-> 0.2/alínea)

a) z não é 9.
z!=9;
b) y é no máximo 100.
y>=100;
e) x está entre 0 e 10 inclusivamente.
X>=0 && <=10;
f) x ou y é 20.
X==20 || y==20;

g) x é maior que y, o qual é maior que z.


x>y&&y>z;
h) A soma de x e y é negativa.
X+y<0;
i) y tem o valor 73.
Y=73;
j) Metade de z é pelo menos 20.
z/2<=20;
k) x e y são ambos positivos.
x>0&&y>0
i) x não é igual a 0 e y não é negativo.
X!=0 && y>0

2.ª - Coloque parênteses nas seguintes expressões por forma a


indicar a ordem de execução das operações nelas incluídas: (2
valores <-> 0.2/alínea)

a) x % 10 == 5
(x%10)==5
b) x < 15 || !y > 0
(x<15)|| !(y>0)
c) x != z <= 3
(x!=z)<=3
d) x >= y && z == 3
(x >= y) && (z == 3)
e) x = y>0
x=(y>0)
f) a*c-b || a>b
(a*c-b) || (a>b)
g) x%2==0;
(x%2)==0;
h) a == b=’t’;
(a == b=’t’;)
i) a!=c || a<b && b<c
(a!=c )|| ((a<b) && (b<c))
j) !a>b || !c>a
(!a>b) || (!c>a)

3.ª - Supondo que x=5, y=3 e z=8, determine o valor das


seguintes expressões: (2 valores <-> 0.2/alínea)

a) x == 5
verdadeiro
b) x = 7
x=7
c) x == z
falso
d) x = z
x=8
e) x < y && y < z
falso
f) z < x && x < y
falso
g) x<1 != (y< z )
falso
h) !(x > y)
falso
i) x > z && z < y
falso
j)x>5 && x<-5
falso

4.ª - Responda as questões seguintes em função dos vectores


definidos a seguir (2 valores <-> 0,5/alínea)

int v1[]{2, 6, 8, 3, 4};

int v2[]{3, 4, 3, 4, 5};

int v3[]{2, 2, 5, 5, 6};

int v4[]{6, 2, 3, 7, 7};

int v5[]{3, 6, 5, 4, 4};

A – O retorno para a instrução:


if(v4[2]>=v2[4])
return v4[0]*v3[1];
return v5[3]/v1[4];
… é:
a) 1
b) 4
c) 12
d) 6
e) 2
B- – O retorno para a instrução

if(v4[0]>v3[1])

return v3[1]+v4[2];

return v1[3]+1;
… é:

a) 4
b) 2
c) 7
d) 5
e) Nenhuma das anteriores

C - O retorno para a instrução:



if((v3[3]>v5[2)]&&(v5[0]==v2[2]))

return v4[3]-v3[4];

return v5[1]-3;
… é:
a) 7
b) 6
c) 3
d) 5
e) Nenhuma das anteriores

D - O retorno para a instrução



if((v3[2]>v5[2])||(v3[4]<v4[0]))

return v5[4]+v3[0];

return v5[1]-v2[1];

… é:
a) 2
b) 8
c) 3
d) 6
e) Nenhuma das anteriores

5 .ª Responda às questões a seguir (2 valores <-> 0.5/alínea)

A) A seguir é apresentado o array valores, do tipo inteiro.


valores [0]=1
valores [1]=2
valores [2]=3
valores [3]=4
Sendo k = valores [2], o resultado da multiplicação de valores
[k]*valores [1] é igual a:
a) 2;
b) 8;
c) 6;
d) 3.

B) Qual o valor de x após a seguinte sequência de comandos:


int a = 10, b = 20, x = 0;
x = (b > a) ? b : a;
a. 0
b. 10
c. 20
d. 200
e. Nenhuma das opções anteriores

C) Seja a matriz M declarada e inicializada por:


int M[][4]={1,2,3,4,5,6,7,8,9,10,11,12}; Qual o valor do elemento
M[1][2] ?
a. 2
b. 5
c. 6
d. 7
D) Sobre ponteiros. Assinale a afirmação falsa
a. O endereço que um ponteiro armazena é normalmente a posição
de uma outra variável na memória
b. O endereço “apontado” contem um valor específico
c. Os ponteiros fornecem os meios pelos quais as funções podem
modificar os seus argumentos
d. Qualquer ponteiro que é nulo, implica que ele não aponta para
nada e não deve ser usado.

Grupo II – 10 valores - tempo de resolução 120 minutos

1.ª Escrever um programa em C que lê um valor i, inteiro e positivo e


3 valores a, b e c. Se o valor de i é par então calcular e imprimir na
tela a média aritmética de a, b e c. Caso contrário, se i>10 então
calcular e imprimir na tela a média ponderada de a, b e c. Os pesos
dos valores são respectivamente 2, 3 e 4. (2 valores)
2.ª Escrever um programa que lê 20 pares de valores (m e n), todos
inteiros e positivos e, para cada par m e n lidos calcula e imprime na
tela a soma dos n inteiros consecutivos à partir de m inclusive. Ex.
Se m=5 e n=3 então soma=5+6+7=18. Se m=2 e n=4 então
soma=2+3+4+5=14. Testar consistência dos valores lidos(2
valores).
3.ª Foi realizada uma pesquisa de algumas características físicas da
população de uma certa região, a qual colectou os seguintes dados
referentes a cada habitante para serem analisados: sexo (M-
masculino, F-feminino), cor dos olhos (Aazuis, V-verdes, C-
castanhos), idade. Escreva um programa em C que determine e
imprima na tela: a maior idade dos habitantes; a percentagem de
indivíduos do sexo feminino cuja idade está entre 18 e 35 anos
inclusive e que tenham olhos verdes. O fim da leitura do conjunto de
habitantes é reconhecido pelo valor -1 fornecido como idade. (3
valores valores)
Obs. Para comprar o valor armazenado na variável sexo implemente
e utilize a função srtcmp, cuja função é comparar duas strings e tem
a definição int strcmp(char str1[],char str2[]);

#include <stdio.h>
#include <string.h>
int main ( )
{
char sexo[0], olhos[0];
int idade, maior, cont=0, total=0;
float percent;
printf("Informe a idade (-1 para sair): ");
scanf("%d", &idade);
maior=idade;
while (idade >= 0)
{
printf("Informe o sexo (F/M): ");
scanf("%s", sexo);
printf("Informe a cor dos olhos (A-azuis, V-verdes, C-
castanhos): ");
scanf("%s", olhos);
total=total+1;
if (idade > maior)
maior = idade;
if((!srtcmp(sexo,"F")) && (idade>=18) && (idade<=35)
&& (!strcmp(olhos,"V")))
cont=cont+1;
printf("Informe a idade (-1 para sair): ");
scanf("%d", &idade);
}if (total > 0)
{
printf("Maior idade dos habitantes: %d fem: %d\n", maior,
cont);
percent=(cont*100)/total;
printf("Percentagem de indivíduos do sexo feminino cuja
idade está entre 18 e 35 anos e que tenham olhos verdes:
%f\n", percent);
}
}

4.º Escreva funções e/ou procedimentos para cada uma das


expressões seguinte: (3 valores)
obs.quando necessário pode utilizar funções da biblioteca
a. BISSEXTO é verdadeira se e só se a variável inteira ANO for
divisível por 4 mas não por 100 ou então for divisível por 400.

int bissexto(int ano)


{
if ((((ano % 4) == 0) && ((ano % 100) != 0)) || ((ano % 400) ==
0))
return 1;

else
return 0;

b. COMPLEX é verdadeira se e só se a equação ax2+bx+c=0 tem


raízes complexas.

c. Uma string diz-se palindroma se se lê da mesma forma da


esquerda para a direita e da direita para a esquerda. São
exemplos de strings palindromas: ANNA, radar, anilina
int palindroma(char * frase)
{
for(n=0;frase[n]!='\0';n++);

for(i=0;i<n;i++)

if(tolower(frase[i])!=tolower(frase[n-i-1]))

return 1;

return 0;

d. São dados os lados de um triângulo, verificar e mostrar se são:


a) se todos os lados são iguais;
se todos os lados são diferentes ou
se possui 2 lados iguais e um diferente
b) se a2 = b2 + c2 - > rectângulo
se a2 > b2 + c2 - > obtusângulo
se a2 < b2 + c2 - > acutângulo

void triangulo(int a2, int b2, int c2)


{
if(a2==b2&&b2==c2)
printf(“todos os lados são iguais”);
if(a2!=b2&&b2!=c2&&a2!=c2)
printf(“todos os lados”)
if(a2==b2&&b2!=c2 || c2==b2&&a2!=c2)
printf(“dois lados são iguais e um diferente”);
if(a2==(b2+c2))
printf(“triangulo rectângulo”);
if(a2 >(b2+c2))
printf(“obtusângulo”);
if(a2 <(b2 +c2))
printf(“acutângulo”);
}

Você também pode gostar