Sei sulla pagina 1di 13

Universidade Católica de Angola

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

Prova de frequência

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 9 (nove) páginas numeradas de 1 a 9.
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.
A prova consiste de 5 questões, no total de 20 pontos.
8) 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/questão)

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/questão)

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.

II . Grupo

Grupo II – 10 valores - 1/questão - tempo de resolução 30 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).

5.ª 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. (4 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);
}
}

5.º Escreva funções e/ou procedimentos para cada uma das expressões seguinte:
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 - > retâ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”);
}
Encontre os 7 erros neste programa. Escreva ao lado da linha onde está o erro o comando correto.
#include <stdio>
main()
{
int i, soma=0, idade, quantidade=0
for(i=0; i++; i<20)
{
printf("Digite a idade da pessoa %d. \n", i+1);
scanf("%d", idade);
if (idade >=0)
{
soma = soma + idade;
quantidade++;
}
else
printf("Idade invalida, nao sera considerada!\n");
}
if (quantidade > 0)
{
media = soma / quantidade;
printf("Media idade das %d pessoas: %f", media);
else printf("Nenhum dado valido foi informado.");
}
}

e. Nenhuma das opções anteriores


3. Qual função pode ser usada para determinar o comprimento de uma string?
a. strcpy
b. strcat
c. strlen
d. strcmp
e. gets

4. Se i e j são variáveis inteiras e pi e pj são ponteiros para inteiro, qual


atribuição é ilegal?
a. pi = &i;
b. *pj = &j;
c. pj = &*&j;
d. i = *&*&j;
e. j = (*pi)+++*pj;
5. Seja a seguinte seqüência de instruções em um programa C:
int i = 10, *ptr;
ptr = &i;
Qual a_rmativa é falsa?
a. ptr armazena o endereço de i
b. *ptr é igual a 10
c. ao se executar *ptr = 20; i passará a ter o valor 20
d. ao se alterar o valor de i, *ptr será modi_cado
e. ptr é igual a 10

6. Seja a seguinte seqüência de instruções em um programa C:


int *ptr;
int vet[]={10,7,2,6,3};
ptr = vet;
Qual a_rmativa é falsa?
a. *ptr é igual a 10
b. *(ptr+2) é igual a 2
c. ptr[4] é igual a 3
d. ptr[1] é igual a 10
e. *(vet+3) é igual a 6
7. Seja a seguinte seqüência de instruções
int i=10, j=20;
int *pti, *ptj;
pti = &i;
ptj = &j;
Qual expressão não é válida?
a. j = pti == ptj;
b. i = *pti - *ptj;
c. pti += ptj;
d. pti++;
e. i = pti || ptj;
8. Seja a declaração: int matr[][4] = {1,2,3,4,5,6,7,8,9,10,11,12}; Qual a_rmativa
é falsa?
a. **matr é igual a 1
b. *(*(matr+1)+2) é igual a 7
c. *(matr[2]+3) é igual a 12
d. (*(matr+2))[2] é igual a 11
e. *((*matr)+1) é igual a 5
Observe o algoritmo a seguir:
Ao final da execução do algoritmo, o valor impresso será:
a) 1;
b) 5
c) 7;
d) 4.

Analise as afirmativas abaixo:


I - O Algoritmo pode ser representado através de fluxograma, pseudolinguagem ou linguagem
natural;
II - O fluxograma e representado através de formas geométricas;
III - A pseudolinguagem e representada por conjunto de palavras pré definidas;
IV - Um algoritmo opera sobre um conjunto de entradas de modo a gerar uma saída que seja
útil.
a) somente I e II estão corretas;
b) somente I, II e III estão corretas;
c) somente III e IV estão corretas;
d) todas estão corretas.

Na linguagem de programação C não é um tipo de variável válida:


a) char;
b) float;
c) string;
d) double.

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.

Potrebbero piacerti anche