Buscar

Biblioteca 1115350

Prévia do material em texto

LISTA DE EXERCÍCIOS 07
TEÓRICOS
1) Explique a diferença entre: 
a. p++; 
b. (*p)++; 
c. *(p++); 
d. *(p+10); 
2) Qual o valor de y no final do programa? Procure primeiro descobrir o resultado e só
após verifique no computador. A seguir, escreva um /* comentário */ em cada comando
de atribuição, explicando o que ele faz e o valor da variável à esquerda do '=' após sua
execução. 
int main() { 
int y, *p, x; 
y = 0; 
p = &y; 
x = *p; 
x = 4; 
(*p)++; 
x--; 
(*p) += x; 
printf ("y = %d\n", y); 
return 0; 
} 
3) Qual o objetivo do programa do trecho de código em negrito? 
int main ( ){ 
float matrx [50][50]; 
float *p; 
int count; 
p=matrx[0]; 
for (count=0;count<2500;count++){ 
*p=0.0; 
p++; 
} 
return 0; 
} 
4) Seja um vetor declarado por int vet[10]. Qual elemento deste vetor é acessado
quando se escreve vet[2] (primeiro, segundo, terceiro, etc.)? 
 
5) Se declararmos um vetor como int vet[30], a instrução abaixo acessa corretamente os
elementos deste vetor? 
for (j=0; j <= 30; j++) 
vet[j] = j*j; 
6) Se uma string for declarada como char str[20], qual o número máximo de caracteres
que poderão ser lidos e armazenados nela? 
7) Qual função pode ser usada para determinar o comprimento de uma string? 
8) Qual das instruções abaixo é correta para declarar um ponteiro para inteiro? 
a. *int pti 
b. *pti 
c. &i 
d. int_pti pti 
e. int *pti 
9) Para a seguinte sequência de instruções em um programa C, qual afirmativa é falsa: 
int *pti; 
int i = 10; 
pti = &i; 
a. pti armazena o endereço de i 
b. *pti é igual a 10 
c. ao se executar *pti = 20; i passará a ter o valor 20 
d. ao se alterar o valor de i, *pti será modificado 
e. pti é igual a 10 
10) 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. i = (*pi)+++*pj 
11) Para a seguinte seqüência de instruções em um programa C, qual afirmativa é
falsa? 
int *pti; 
int veti[]={10,7,2,6,3}; 
pti = veti; 
a. *pti é igual a 10 
b. *(pti+2) é igual a 2 
c. pti[4] é igual a 3 
d. pti[1] é igual a 10 
e. *(veti+3) é igual a 6 
12) Na sequência de instruções abaixo: 
float f; 
float *pf; 
pf = &f; 
scanf("%f", pf); 
a. Efetuamos a leitura de f 
b. Não efetuamos a leitura de f 
c. Temos um erro de sintaxe 
d. Deveríamos estar usando &pf no scanf 
e. Nenhuma das opções anteriores 
13) Para a seguinte sequência de instruções, qual expressão não é válida? 
int i=10, j=20; 
int *pti, *ptj; 
pti = &i; 
ptj = &j; 
a. j = pti = = ptj 
b. i = pti-ptj 
c. pti += ptj 
d. pti++ 
e. i = pti || ptj; 
14) Para a declaração int matr[][4] = {1,2,3,4,5,6,7,8,9,10,11,12}, qual
afirmativa é 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 
15) Observe o programa abaixo e identifique a saída do printf. Desenhe um esquema
de memória contendo x, p1 e p2 (estime os endereços atribuídos a cada variável). 
# include <stdio.h> 
int main () 
{ 
int x, *p1, *p2; 
p1 = &x; 
p2 = p1; 
printf ("%d", p2); 
}
16) Observe os programas abaixo e identifique o erro cometido em cada um no uso
de ponteiros. 
int main () 
{ 
int x, *p; 
x = 10; 
*p = x; 
}
int main () 
{ 
int x, *p; 
x = 10; 
p = x; 
printf (“%d”, *p); 
} 
int main () 
{ 
char s[80], y[80]; 
char *p1, *p2; 
p1 = s; 
p2 = y; 
if (p1 < p2) .... 
} 
int main () 
{ 
int primeiro[10],
segundo[10]; 
int *p, t; 
p = primeiro; 
for (t = 0; t < 20; ++t) 
*p++ = t; 
} 
int main () /* deve ler várias strings, (até “fim”) e mostrar cada string com
1 letra por linha */ 
{ 
char *p1, s[80]; 
p1 = s; 
gets (s); 
while (strcmp (s, “fim”) != 0)
{ 
while (*p1 != NULL) 
printf (“%c\n”, *p1++); 
gets (s); 
} 
}
17) O que está errado com os programas abaixo? Descubra e indique a solução para
consertá-los. 
int main() 
{
int x, *p;
x = 10; 
*p = x; 
} 
int main() 
{
int x, *p; 
x = 10; 
p = x; 
printf ("%d", 
*p); 
} 
//Este prog. deve mostrar 10 na 
tela 
#include <stdio.h> 
void int main() 
{ 
int x, *p, *q; 
p = &x; 
q = p; 
x = 10; 
printf("\n%d\n", &q); 
} 
18) Para o código abaixo: 
#include<stdio.h> 
#include <alloc.h> 
int main () { 
int y, x, k, *p,*q; 
p = &x; 
q = (int *) malloc(6 * sizeof(int)); 
for(y = 0; y< 3; y=y+1) { 
p--; 
scanf(“%d”, p); 
p++; 
scanf(“%d”, p); 
*q = k; 
*(q+1) = x; 
q = q + 2; 
} 
} 
a. Desenhe o esquema de memória mostrando a localização das variáveis do 
programa, até a linha 5 (inclusive). Mostre o conteúdo de p e q. Considere 100 como
o endereço de início de atribuição das variáveis e 200 para a área de alocação de 
memória, o tamanho de inteiro como 4 bytes e o tamanho de um ponteiro como 4 
bytes.
b. Desenhe o esquema de memória mostrando a localização e conteúdo das 
variáveis do programa ao final da execução, se forem digitados: 50, 30, 20, 10, 40, 
80. 
c. Indique o valor dos itens abaixo após a execução da linha 13. Pela primeira vez: 
i. q[0] 
ii. &q 
iii. *(&k + 1) 
19) O que há de errado com o programa abaixo? Como poderíamos corrigi-lo?
void main( void )
{ 
 int x, *p; 
 x = 10; 
 *p = x; 
}
20) Seja o seguinte trecho de programa:
int i = 3, j = 5; 
int *p, *q; 
p = &i; 
q = &j;
Qual será o valor das seguintes expressões:
a) p==&i;
b) *p - *q;
c) &p==&i;
d) 3* *p/(*q)+7
21) Qual será a saída do programa supondo que i ocupa o endereço 4094H na
memória?
int main( void ) 
{ 
 int i=5, *p; 
 p=&i; 
 printf(“%d %d %d %d %d\n”, p, *p+2, **&p, 3**p, **&p+4); 
}
22) Assumindo que Pulo[] é um array do tipo int, quais das seguintes expressões
referenciam o valor do terceiro elemento do array?
a) *(pulo+2)
b) *(pulo+4)
c) pulo+4
d) pulo+2
23) Suponha a declaração:
int mat[4], *p, x;
Quais das expressões abaixo são válidas? Justifique:
a) p = mat+1;
b) p = mat++;
c) p = ++mat;
d) x = (*mat)++;
24) Explique a diferença entre os comandos abaixo: (assuma que p é um ponteiro do
tipo int)
a) p++;
b) (*p)++;
c) *(p++);
PRÁTICOS
1) Dada a função StrCpy() abaixo, faça uma função StrLen() e StrCat() que funcionem
como as funções strlen() e strcat() de string.h respectivamente. 
#include <stdio.h> 
void StrCpy (char *destino,char *origem){ 
while (*origem!=’\0’) { 
*destino=*origem; 
origem++; 
destino++; 
} 
*destino='\0'; 
} 
 
2) Execute o programa abaixo passo a passo no compilador e registre em papel os
endereços alocados para cada variável (inclusive os ponteiros). Observe o que
acontece no decorrer do programa e no final. Tente entender o que o programa faz e
explique porque acontece o erro de execução ao final. 
# include <stdio.h> 
int main () 
{ 
int x, *p, *q, i, k=0; 
q = p = &x; 
for (i=1; i <= 3; i++) 
{ 
scanf ("%d", p); 
p++; 
} 
p--; 
while (p >= q) 
{ 
k = k + *p; 
p--; 
} 
printf ("%d", k); 
} 
Inverta a ordem de declaração das variáveis e observe o que acontece.
3) Leia um vetor de 12 posições e em seguida ler também dois valores X e Y quaisquer
correspondentes a duas posições no vetor. Ao final seu programa deverá escrever a
soma dos valores encontrados nas respectivas posições X e Y.
4) Declare um vetor de 10 posições e o preencha com os 10 primeiros números impares e
o escreva.
5) Leia um vetor de 16 posições e troque os 8 primeiros valores pelos 8 últimos e vice-e-
versa. Escreva ao final o vetor obtido.
6) Leia um vetor de 20 posições e em seguida um valor X qualquer. Seu programa devera
fazer uma busca do valor de X no vetor lido e informar a posição em que foi encontrado
ou se não foi encontrado.
7) Leia um vetor de 40 posições.Contar e escrever quantos valores pares ele possui.
8) Leia um vetor de 40 posições e atribua valor 0 para todos os elementos que possuírem
valores negativos.
9) Leia dos vetores de 20 posições e calcule um outro vetor contendo, nas posições pares
os valores do primeiro e nas posições impares os valores do segundo.
10) Leia um vetor de 40 posições e acumule os valores do primeiro elemento no
segundo, deste no terceiro e assim por diante. Ao final, escreva o vetor obtido.
11) Leia um vetor contendo letras de uma frase inclusive os espaços em branco.
Retirar os espaços em branco do vetor e depois escreve-los.
12) Leia um vetor de 5 posições contendo os caracteres de um numero. Em seguida
escreva esse numero por extenso.
13) Leia dois vetores de 4 posições. Verifique e escreva se um é anagrama de outro.
Ex: ARARA ARARA - são anagramas
14) Leia 3 vetores de 9 posições e crie outro com o 1º terço do primeiro, o segundo
3º. do segundo e o ultimo terço do 3º. Escrever o vetor resultante ao final.
15) Leia um vetor de 10 posições e verifique se existem valores iguais e os escreva.
16) Leia um vetor de 50 posições e o compacte, ou seja, elimine as posições com
valor zero avançando uma posição, com os com os valores subsequentes do vetor.
Dessa forma todos “zeros” devem ficar para as posições finais do vetor.
17) Considere um vetor de trajetórias de 9 elementos, onde cada elemento possui o
valor do próximo elemento do vetor a ser lido. 
 Índice 1 2 3 4 5 6 7 8 9 
 Valor 5 7 6 9 2 8 4 0 3 
Assim, a sequência da leitura seria 1, 5, 2, 7, 4, 9, 3, 6, 8, 0
Faça um algoritmo que seja capaz de ler esse vetor e seguir a trajetória.
18) Leia uma matriz 10 x 10 e escreva a localização (linha e a coluna) do maior valor.
19) Declare uma matriz 5 x 5. Preencha com 1 a diagonal principal e com 0 os
demais elementos. Escreva ao final a matriz obtida.
20) Leia duas matrizes 4 x 4 e escreva uma terceira com os maiores elementos entre
as primeiras
21) Leia uma matriz 6 x 6, conte e escreva quantos valores maiores que 10 ela
possui.
22) Leia uma matriz 20 x 20. Leia também um valor X. O programa deverá fazer uma
busca desse valor na matriz e, ao final escrever a localização (linha e coluna) ou uma
mensagem de “não encontrado”.
23) Leia uma matriz 4 x 4 e troque os valores da 1ª.linha pelos da 4ª.coluna, vice-e-
versa. Escrever ao final a matriz obtida
24) Leia uma matriz 8 x 8 e a transforme numa matriz triangular inferior , atribuindo
zero a todos os elementos acima da diagonal principal, escrevendo-a ao final.
25) Leia uma matriz 5 x 5 e faça uma troca entre as diagonais superior e inferior.
Escreva-a ao final.
26) Leia duas matrizes 10 x 10 e faça uma substituição entre a diagonal inferior da
primeira coma diagonal superior da segunda.
27) Leia uma matriz 8x 8 e escreva o maior elemento da diagonal principal e a soma
dos elementos da diagonal secundaria.
28) Leia uma matriz 6 x 6 e atribuir o valor 0 para os valores negativos encontrados
fora das diagonais principal e secundaria.
29) Leia uma matriz 50 x 2, onde cada coluna corresponde a um lado de um
triangulo retângulo. Declare um vetor que contenha a área dos respectivos triângulos e
o escreva.
30) Leia duas matrizes 20 x 20 e escreva os valores da primeira que ocorrem em
qualquer posição da segunda.
31) Considere uma matriz de distância entre cidades 6 x 6:
 1.
(Cáceres)
2.
(BBugres)
3.(Cuiabá) 4.
(VGrande)
5.
(Tangará)
6.
(PLacerda)
1.
(Cáceres)
63 210 190 190
2.
(BBugres)
63 160 150 95
3.(Cuiabá) 210 160 10
4.
(VGrande)
190 150 10
5.
(Tangará)
95 80
6.
(PLacerda)
190 80
Considere também um vetor de viagem indo de Cuiabá até Cáceres pela seguinte rota:
Indice 1 2 3 4 5 6
Cidade 3 4 2 5 6 1
Faça um programa que leia a matriz e o vetor e calcule a distância percorrida durante a
viagem.
32) Leia uma matriz 100 x 10 que se refere respostas de 10 questões de múltipla
escolha, referentes a 100 alunos. Leia também um vetor de 10 posições contendo o
gabarito d e respostas que podem ser a, b, c ou d. Seu programa deverá comparar as
respostas de cada candidato com o gabarito e emitir um vetor Resultado, contendo a
pontuação correspondente.
33)Leia duas matrizes 4 x 4 e verifique se uma é palíndromo, isto é, sua leitura a partir de
qualquer direção sempre apresentara a mesma sequência.
 EX. SATOR
AREPO
TENET
OPERA
ROTAS
34) Faça um programa que simule um calculador de 4 operações. Seu programa
deverá:
a) ler dois números e o operador;
b) chamar procedimentos com passagem de parâmetros para efetuar os cálculos;
c) escrever o resultado ao final.
35) Faça um programa que:
a) leia os valores de A, B e C ;
b) calcule o “delta” e classifique a equação do 2o. grau;
c) calcule e escreva as raízes da equação, se houverem;
d) calcule as raízes de uma equação do segundo grau. 
36) Uma empresa deseja especificar um programa para gerar sua folha de
pagamentos.Seu programa deve:
a) ler salário_bruto, horas extras e descontos de 50 funcionários;
b) Calcular o valor das horas extras, sabendo que uma hora extra custa R$ 20,00;
c) Calcular os proventos (salário_bruto + valor_horas_extras);
d) Calcular salário_liquido (proventos – descontos). 
e) Escrever o salário liquido de cada funcionário e ao final o valor necessário para
efetuar o pagamento dos funcionários.
37) A Imobiliária Pirâmide deseja emitir fatura para pagamento de alugueis dos 56
imóveis locados sendo que:
a) Leia cliente, valor_aluguel, IPTU, situação;
b) o valor da fatura é: 
fatura = valor_aluguel + IPTU + tx_administracao + tx_banco
c) as taxas de administração e do banco utilizam-se das seguintes tabelas 
Aluguel
(R$)
Tx
(%)
Aluguel
(R$)
Tx
(R$)
Até 500 8 Até 1000 1,50
500-2000 5 Acima de
1000
0,95
Acima de
2000
3
d) calcular e emitir as faturas sendo que, se a situação for igual a “atrazo”, escrever
também uma mensagem convidando o cliente a comparecer ao escritório da
imobiliária.
e) escrever ao final o valor total faturado.
38) Um instituto de pesquisas sócio-economicas realizou uma pesquisa com coleta
de dados de 50.000 entrevistados. Faça um programa que:
a) Leia renda, escolaridade e numero_de_filhos dos entrevistados;
b) Escrever quantos entrevistados existem para cada classe segundo a tabela 
abaixo:
Classe Renda (SM)
A Até 2
B 2< e <40
C Acima de 40
c) Escrever o percentual de entrevistados da classe C, com escolaridade “2o.grau”
39) A escola pequeno polegar deseja emitir boletim final para os seus 1500 alunos.
Seu programa deve:
a) Ler nota e freqüência correspondente a 4 bimestres;
b) Calcular a media final de cada aluno;
c) Definir a situação do aluno ( APM, RP ou PF), sendo que:
APM : Media ≥ 7 e Freq_Total ≥ 40
RP : Media < 5 ou Freq_Total <40
PF : Media ≥ 5 e < 7
d) Para os alunos aprovados por media, a escola deseja oferecer um desconto para
o próximo ano, de acordo com a tabela abaixo:
Nota Desc. 
(%)
10 20
10> e ≥8 15
8> e ≥7 10
e) Emitir os boletins com todas as notas e frequências e a oferta de desconto para
todos os alunos.
40) Faça um programa que, referente a 20 figuras geométricas:
a) leia 2 valores referentes a sua geometria (lado, diâmetro, etc) e o tipo da figura
que pode ser: C=Circulo, R=Retângulo, T= Triangulo;
b) de acordo com o tipo de figura calcular e escrever a área e o perímetro de cada
uma.
 
41) Deseja especificar um programa que trate os dados do cartão de ponto dos 43
funcionários de uma empresa, utilizando-se para tal, de técnica de modularização
através procedimentos. O Cartão de Ponto tem o seguinte lay-out:
Funcionário: Mês:
Data Matutino VespertinoEntrad
a
Saída Entrad
a
Saíd
a
Faça um programa que:
a) leia os dados referentes a 30 dias do mês;
b) calcule os atrasos, sendo que deve entrar as 7:00 e as 13:00;
c) calcule as horas excedentes, sendo que deve sair as 11:00 e as 17:00;
d) escrever ao final o total de atrasos e de horas excedentes de cada funcionário;
e) As operações com horas(soma e subtração) devem ser feitas através de
funções.
42) Um hemocentro possui um cadastro de doadores de sangue. Faça um algoritmo
que: 
a) leia os dados de 600 pessoas com: nome, data de nascimento, data da ultima
doação, tipo sanguíneo e fator RH
b) escrever o nome das pessoas com idade entre 18 e 55 anos com tipo
sanguíneo B+;
c) escrever ao final quantos doadores estão a mais de 90 dias sem doar sangue;
d) O calculo da idade e do tempo da ultima doação devem ser efetuados através
de funções.
43) O Serviço Municipal de Zoonoses mantém um cadastro dos cães capturado nas
ruas contendo data, rua, peso, altura e raça aparente. Faça um programa que permita:
a) ler os dados de 450 animais;
b) escrever a data de captura dos animais de raça aparente “VL” pegos na rua
“A”;
c) escrever a data de capura do animal maior índice MC. Este índice deve ser
calculado através de uma função da seguinte equação: MC = P+h/12
PROJETO-DESAFIO (Nível I)
R2D2
Imagine seu R2 (a bolinha preta) em uma sala de 10 × 10 passos, como esta:
Seu R2 é livre para se movimentar tanto verticalmente quanto horizontalmente, mas não nas diagonais. Ou seja, a
cada momento ele pode escolher entre 4 posições para caminhar.
Nesta sala, a área azul é chamada de Área de armazenagem, e será usada para armazenar blocos que estarão
espalhados pela sala. Os blocos podem estar em qualquer lugar, definido pelo usuário, sendo sempre num total de 4.
Por exemplo:
Seu robô é livre para se movimentar pela área de armazenagem, inclusive pelos quadrados dos blocos, ou seja, os
blocos não impedem o trânsito de R2.
Além disso, na sala pode haver alguns obstáculos, cuja quantidade e posição são definidos pelo usuário. Por
exemplo:
Desta vez o robô não pode passar por casas com obstáculos. Sendo assim, casas com obstáculos não podem ser
consideradas quando da escolha dos movimentos do robô.
Sua tarefa é, então, escrever um programa que receba do usuário as posições dos 4 blocos e dos N obstáculos (N
dado pelo usuário também). Seu programa deve fazer o robô andar pela sala em busca dos blocos, evitando os
obstáculos. O tamanho da sala é sempre 10 × 10.
A cada passo do robô você deve mostrar o mapa da sala, contendo os blocos, obstáculos, área de armazenagem e o
robô. Para tal você pode usar caracteres. Por exemplo, r para o robô, b para um bloco, o para obstáculo, a para área
de armazenagem vazia e A para área de armazenagem com um bloco.
Ao chegar em uma casa onde exista um bloco, o robo deve coletá-lo, removendo-o dessa casa. Ele então deve voltar
à área de armazenagem (o robô somente carrega um bloco por vez). Ao chegar na área de armazenagem ele deve
parar sobre uma casa vazia (na área) e descarregar o bloco, fazendo ele aparecer nesta casa.
A cada movimento, o robô deve escolher para onde ir. Tal escolha pode ser completamente aleatória.
Entrada
A entrada é composta pela posição dos 4 blocos, o número de obstáculos e sua posição.
 Bloco1:
 x: 4
 y: 3
 Bloco2:
 x: 8
 y: 3
 Bloco3:
 x: 6
 y: 2
 Bloco4:
 x: 2
 y: 3
 Número de obstáculos: 2
 Obstáculo1:
 x: 5
 y: 5
 Obstáculo2:
 x: 7
 y: 5
Saída
A saída do programa é o mapa da sala, a cada movimento do robô, mostrando a posição dele, dos blocos, da área de
armazenagem e dos obstáculos.
 
	Classe
	Nota
	PROJETO-DESAFIO (Nível I)
	R2D2
	Entrada
	Saída

Continue navegando

Outros materiais