Sie sind auf Seite 1von 6

Exercícios - Lista1 referente à P1

Resolva os enunciados abaixo como exercícios preparatórios para a


realização da N1.

Destes exercícios, quatro(4) serão solicitados para serem entregues


como nota parcial da N1, valendo 0.5 (ponto) cada.

Os exercícios(funções)para nota serão solicitados em lista a parte, e


devem ser entregues impressos em dupla(identifique a matricula, nome e
turma de cada integrante da dupla), no dia da prova N1.
As funções devem ter o código fonte comentado. Os exercícios que não
estiverem dentro das especificações acima serão desconsiderados!

As funções devem ser escritas de acordo com os protótipos anunciados


em cada questão.

OBS: Não use nenhuma função da biblioteca string nas soluções


dos exercícios de 1 a 4

EXERCICIOS

1)Escreva uma função que receba um ponteiro para uma string (*f) e
outros 2 caracteres m e p. A função deve trocar todas as ocorrências
do caractere m pelo caractere p, retornar o número de vezes que essa
troca foi efetuada dentro na string. Veja não é trocar a letra ‘m’
pela letra ‘p’.
int trocaCarac(char *f, char m, char p)

2)Escreva um procedimento que receba um ponteiro para uma string


(palavra), inverta seu conteúdo em uma área auxiliar (que deverá ser
compatível com o tamanho da string enviada) e informe(escreva) se a
palavra é um palíndromo. (Palíndromo é uma palavra que permanece igual
se escrita ao contrário). O tamanho da string auxiliar não deve ser
presumido, mas calculado!!!
Exemplos: arara, osso, asa, etc... são palíndromos
void palindromo(char *palavra)
main(){
char palavra[50];
printf("Digite a palavra:");
scanf("%s",&palavra);
palindromo(palavra);
}
void palindromo(char *palavra){
int cont,qtde,resultado;
char test[50];
qtde = strlen(palavra);
for(cont=0;cont<qtde;cont++){
test[cont]=palavra[qtde-cont];
printf("%c",palavra[qtde-cont]);
}
resultado=strcmp (test,palavra);
if(resultado == 0){
printf("%s e um palindromo\n",test);
}else{
printf("%s nao e um palindromo\n",palavra);
}
}

3)Escreva um procedimento que receba um ponteiro para uma string. A


função deve retirar todos os espaços em branco contidos na string (se
existirem), modificando (reduzindo) a string original.
void retira_brancos(char *frase)
void retira_brancos(char *frase);

main(){
char c[50],*frase;
int tam,i;
printf("Digite uma frase qualquer:");
gets(c);
tam = strlen(c);
frase = (char*)realloc(frase,sizeof (char)*tam);
for(i=0;i<tam;i++){
frase[i] = c[i];
}
retira_brancos(frase);
return 0;
}
void retira_brancos(char *frase){
char *fra_sem;
int cont,qtde,i;
qtde = strlen(frase);
fra_sem = (char *)realloc(fra_sem,sizeof (char) *qtde);
for(cont=0,i=0;i<qtde;cont++,i++){
if(frase[i] == ' '){
cont++;
}
fra_sem[i]=frase[cont];
}
printf("%s",fra_sem);
}

4)Escreva um procedimento que receba um ponteiro para uma string p e


mostre(imprima)o número de ocorrências de cada letra dentro da
palavra.
Exemplo: arara deve mostrar a=3 e r=2
sapato deve mostrar s=1, a=2, t=1 e o=1
void contaLetras(char *p)
PILHAS E FILAS
Os arquivos da interface pilha.h e fila.h contem,
respectivamente, as seguintes funções:
<pilha.h> <fila.h>

Pilha *pilha_cria(void); Fila *fila_cria(void);


void pilha_insere(Pilha *p, void fila_insere(Fila *f,
float v); int v);
float pilha_retira(Pilha *p); int fila_retira(Fila *f);
int pilha_vazia(Pilha *p); int fila_vazia(Fila *f);
void pilha_libera(Pilha *p); void fila_libera(Fila *f);

O typedef usado para a definição dessas estruturas é


desconhecido, assim como não se sabe se as pilhas ou filas
são implementadas por meio de vetor ou lista encadeada.
Portanto, não use qualquer aspecto ligado à implementação
física, mas tão somente as funções apresentadas!

5)Usando apenas o arquivo de interface pilha.h, criado para uma pilha


de números reais, escreva um procedimento que receba ponteiros para
duas pilhas:p1 e p2. A função deve empilhar o conteúdo da pilha p2
sobre a pilha p1. A pilha p2 não deve ficar vazia.
void empilhaPilha(Pilha *p1, Pilha *p2)

6)Usando apenas o arquivo de interface pilha.h, criado para uma pilha


de números reais, escreva uma função que receba um ponteiro para uma
pilha e retorne uma nova pilha onde cada elemento é a metade do
elemento da pilha original. A pilha original não deve ficar vazia.
Pilha* dividePilha(Pilha *p)

7) Usando apenas o arquivo de interface pilha.h, criado para uma pilha


de números reais, escreva uma função que receba o ponteiro para uma
pilhas p. A função deve retornar a soma de todos os elementos menores
que 10 contidos na pilha, mantendo-a intacta.
int contaMenores10 (Pilha *p)

8) Usando apenas o arquivo de interface pilha.h, criado para uma pilha


de números reais, escreva uma função que receba o ponteiro para uma
pilhas pi. A função deve retornar o elemento que está na base da
pilha, mantendo a pilha intacta.
float base(Pilha *pi)

9)Usando apenas as funções do arquivo de interface fila.h escreva um


procedimento que receba ponteiros para duas filas de números inteiros.
O procedimento deve concatenar (emendar) os dados da segunda fila na
primeira fila. A fila f2 deve permanecer intacta.
void concatena_fila (Fila *f1, Fila *f2)
10)Usando apenas o arquivo de interface fila.h, criado para uma fila
de números inteiros, escreva uma função que apenas retorne o primeiro
elemento de uma fila qualquer, mantendo a fila original intacta.
int primeiroDaFila (Fila *f)

11)Usando apenas o arquivo de interface fila.h, criado para uma fila


de números inteiros, escreva uma função que receba ponteiros para duas
filas. A função deve criar uma nova fila com o conteúdo intercalado
das filas f1 e f2. As filas originais não devem ficar vazias. A função
retorna para o programa principal o endereço dessa nova fila.
Atenção: as filas podem ter tamanhos diferentes!!
Fila *intercala_fila (Fila *f1, Fila *f2)

12)Usando apenas o arquivo de interface fila.h, criado para uma fila


de números inteiros, escreva um procedimento que mostre apenas os
elementos impares contidos na fila, mantendo a fila original intacta.
void mostraImpares (Fila *f)
LISTAS ENCADEADAS SIMPLES

13)Dada uma lista simplesmente encadeada de valores inteiros como se


segue:
typedef struct lista{
int numero;
struct lista *next;
}Lista;

13.a) Crie uma função que retorne a soma dos numeros contidos na
lista:
int somaNumeros (Lista *L)

13.b)Crie uma função que retorne o menor número da lista:


int menorNumero (Lista *Li)

13.c)Crie uma função que retorne uma nova lista contendo apenas os
valores (itens) impares da lista:
Lista *lista_impares(Lista *L1)

14) Dado o typedef de lista encadeada:


typedef struct lista{
char nome[20];
char fone[9];
struct lista *prox;
}Lista;

14.a)Crie um procedimento que dado um nome, mostre o fone


associado ao nome ou informe que o nome não foi encontrado.
void mostraFone(Lista *l, char *nome)

14.b)Crie um procedimento que receba um ponteiro para o primeiro


elemento de uma lista já inicializada, um nome e um fone. O
procedimento deve inserir os dados no final da lista. Para tanto
o procedimento deve procurar o final da lista para encadear o
novo elemento.
A função deve ter o seguinte protótipo:
void insere_final(Lista *primeiro, char *nome, char *tel)
LISTAS DUPLAMENTE ENCADEADAS

15) Dado o typedef de uma lista duplamente encadeada:


typedef struct lista{
int matricula;
float nota;
struct lista *ant;
struct lista *prox;
}Lista;

Supondo que a lista contenha matriculas únicas com suas respectivas


notas

15.a) Crie uma função que dado um ponteiro para o início da lista
e uma matricula(mat), retorne a nota correspondente ou -1 caso a
matricula não seja encontrado.
float retornaNota(Lista *l, int mat)

15.b)Crie um procedimento que recebendo o ponteiro de um elemento


qualquer da lista, mostre os dados (matricula e nota) dos
elementos que lhe são adjacentes(o seu vizinho (anterior) e o seu
vizinho (próximo))
void adjacentes(Lista *elemento)

15.c)Crie uma função que retorne a média das notas contidas na


lista. Não se sabe, a priori, quantos elementos existem na lista.
float media(Lista *l)

15.d)Crie uma função que retorne o número de alunos que tem nota
maior que a nota(n) informada no parâmetro.
int notasMaiores(Lista *l, float n)

15.e)Crie um procedimento que recebendo o ponteiro para um


elemento qualquer da lista(item), mostre os dados (matricula e
nota) do primeiro elemento da lista.

void primeiroLista(Lista *item)

Das könnte Ihnen auch gefallen