Universidade da Beira Interior
Departamento de Informática
(6619, 11543, 11552) Programação I
Ficha prática 6
Ano letivo 2014-15
Exercícios
1. Dada as seguintes declarações e inicializações
int vector[] = {3,0,9}, a=1,b=0;
indique se as seguintes expressões são verdadeiras ou falsas, justificando.
(a) vector[2] == 2
(b) vector[a] != a
(c) vector[a+1] == 0
(d) vector[a++] == 0
(e) vector[a] - 1 == a
(f) 1- vector[a] == a
(g) vector[1] + a == 1
(h) vector[0] + 1 > vector[b+1] - b
(i) vector[vector[1]] == 3+ vector[a+b]
2. Escreva um programa que leia 10 letras do teclado, guardando-as num vetor
e de seguida mostre no ecrã apenas as vogais lidas.
Como vão ser feitas várias leituras de valores do tipo char, deve usar o
seguinte scanf() para evitar problemas com os \n que ficam no buffer do
teclado (repare no espaço!):
scanf(" %c",&letra);
3. Escreva um programa que leia 10 elementos do tipo float e mostre no
ecrã os valores lidos e os valores por ordem inversa. Para isso deve criar as
seguintes funções:
void leVetor(float a[]);
void mostraVetor(float b[]);
void inverteVetor(float original[], float invertido[]);
1
Note que neste caso não passamos às funções o comprimento dos vetores
pois vamos declarar esse comprimento como uma constante simbólica.
4. Escreva um programa que leia do teclado 10 valores inteiros e mostre no
ecrã:
(a) os valores lidos;
(b) a média dos valores lidos;
(c) o desvio padrão dos valores lidos;
(d) o maior valor lido;
(e) o menor valor lido;
(f) o segundo maior valor lido.
As acções descritas nas alíneas anteriores devem ser executadas por funções
com protótipos semelhantes ao seguinte:
void ZZZ(int v[]);
onde ZZZ deve ser substituido por um nome apropriado a cada caso. P.ex.,
no primeiro caso ZZZ deve ser mostraVetor.
Se os valores lidos forem X = {x1 , x2 , . . . , xn }, as expressões para a média
(µ) e desvio padrão (σ) são as seguintes:
n
1X
µ=
xi
n i=1
v
u
n
u1 X
(xi − µ)2
σ=t
n
i=1
5. Escreva um programa que leia uma matriz 2 × 3 de inteiros do teclado e
mostre
(a) a matriz lida;
(b) os elementos ímpares da matriz.
As acções descritas nas alíneas anteriores devem ser executadas por funções.
Os protótipos a usar nas funções referidas são os seguintes:
void leMatriz(int mat[M][N]);
void mostraMatriz(int mat[M][N]);
void mostraImparesMatriz(int mat[M][N]);
onde M e N são constantes simbólicas com as dimensões da matriz.
2
6. Escreva um programa que leia uma matriz 2 × 3 de inteiros do teclado e
mostre a matriz lida (A) e a sua transposta (B). Os protótipos a usar nas
funções a escrever são os seguintes (algumas já foram desenvolvidas em
exercícios anteriores e devem ser reutilizadas):
void leMatriz(int mat[M][N]);
void mostraMatriz(int mat[M][N]);
void calculaMatrizTransposta(int A[M][N], int B[M][N]);
onde M e N são constantes simbólicas com as dimensões da matriz.
Seja A uma matriz de dimensões p × q. A matriz transposta B = AT tem
dimensões q × p em que o valor em cada posição (i, j) é dado por
B(i, j) = A(j, i)
7. Escreva um programa que leia duas matrizes A e B com dimensões 2 × 3 de
inteiros do teclado e mostre
(a) a soma das matrizes: A + B;
(b) o produto de A pela transposta de B: C = A × B T ;
(c) as coordenadas dos valores negativos da matriz C.
Os protótipos a usar nas funções a escrever são os seguintes (algumas já
foram desenvolvidas em exercícios anteriores e devem ser reutilizadas):
void
void
void
void
void
void
leMatriz(int mat[M][N]);
mostraMatriz(int mat[M][N]);
calculaSomaMatriz(int A[M][N], int B[M][N], int C[M][N]);
calculaMatrizTransposta(int A[M][N], int B[M][N]);
calculaProdutoMatriz(int A[M][N], int B[M][N], int C[M][N]);
mostraCoordNegativosMatriz(int A[M][N]);
O produto de duas matrizes A e B de dimensões p×q e q ×p respetivamente,
é uma nova matriz C de dimensões p × p em que o valor em cada posição
(i, j) é dado por
C(i, j) =
q
X
k=1
3
A(i, k) × B(k, j)
Exercícios sobre strings: resolver apenas depois da aula T 7
8. Escreva um programa que leia uma frase do teclado (use fgets()) e, usando funções, mostre o seguinte:
(a) o número de espaços na frase;
(b) o número de algarismos na frase;
(c) a frase invertida;
(d) a frase escrita toda com letras maiúsculas.
As acções descritas nas alíneas anteriores devem ser executadas por funções
com protótipos semelhantes ao seguinte:
YYY ZZZ(char v[]);
onde ZZZ deve ser substituido por um nome apropriado a cada caso e YYY
por um tipo apropriado também. P.ex., no primeiro caso ZZZ deve ser
contaEspacos e YYY deve ser int.
9. Escreva um programa que leia duas frases do teclado (use fgets()) e,
usando funções, mostre o seguinte:
(a) qual a frase mais comprida;
(b) o número de símbolos comuns a ambas as frases;
(c) todas as vogais de ambas as frases.
4
Download

(6619, 11543, 11552) Programação I