Escolar Documentos
Profissional Documentos
Cultura Documentos
while (1) {
printf("Digite o valor limite (tecle -1 para sair): ");
scanf("%d", &limite);
if (limite == -1) {
break;
}
maiores = lista_maiores(numeros, 10, limite, &n_maiores);
if (maiores == NULL) {
printf("Nada a declarar!\n");
}
else {
printf("Valores maiores do que %d = ", limite);
imprime_vetor(maiores, n_maiores);
}
}
return 0;
}
6. Escreva uma funo troca_letras que recebe como parmetro o endereo
de uma cadeia de caracteres e retorna um ponteiro para uma nova cadeia
(alocada dinamicamente), onde todas as letras minsculas da cadeia original foram trocadas por maisculas e vice-versa. Caracteres que no so
letras (como dgitos, ., espao, etc.) no devem ser trocados. Essa funo
deve obedecer o seguinte prottipo:
char* troca_letras (char* s);
Na implementao de troca_letras voc pode usar as seguintes funes
da biblioteca padro:
strlen (descrita em string.h), que recebe o endereo de uma cadeia
(um char *) e retorna o nmero de caracteres nessa cadeia (sem
contar o \0);
isalpha, islower, isupper, toupper e tolower (descritas em ctype.h),
as quais recebem como parmetro um caractere. A funo isalpha
verifica se o caractere recebido uma letra (retorna verdadeiro) ou
no (retorna falso). A funo islower verifica se o caractere recebido
uma letra minscula (retorna verdadeiro) ou no (retorna falso); a
funo isupper faz o contrrio (isto , verifica se o caractere uma
letra maiscula). A funo toupper retorna um caractere que a
maiscula da letra minscula recebida; a funo tolower faz o contrrio. Caso no consiga alocar memria, a sua funo troca_letras
deve retornar NULL.
4
Teste a sua funo troca_letras com o cdigo abaixo. Note que o formato passado para scanf permite a leitura de cadeias contendo espaos e
que o programa termina quando o usurio digita uma cadeia que comea
com um .. Teste troca_letras com alguns exemplos de cadeias, com
letras minsculas e maisculas e caracteres que no so letras. Verifique se
a sada do seu programa est correta, ou seja, se sua funo troca_letras
faz o que deveria fazer.
#include
#include
#include
#include
<stdio.h>
<stdlib.h>
<string.h>
<ctype.h>
inicial) do ltimo nome encontrado. Note que voc no deve alocar uma
nova cadeia para retornar o ltimo nome. Essa funo deve obedecer o
seguinte prottipo:
char* ultimo_nome (char *nome_completo);
Veja alguns exemplos:
para a cadeia Dennis MacAlistair Ritchie a sua funo deve retornar
Ritchie;
para a cadeia Brian Wilson Kernighan a sua funo deve retornar
Kernighan;
para a cadeia Fulano a sua funo deve retornar Fulano.
Assuma que h apenas um espao entre os nomes e que aps o ltimo
nome no h espaos. Adapte a funo main do exerccio anterior para
testar ultimo_nome. Note que agora no h liberao de memria.
9. Considere o programa de cadastro de alunos a seguir:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct aluno {
char nome[81];
int mat;
} Aluno;
/* Cria uma nova estrutura Aluno com dados lidos do teclado */
Aluno* lealuno() {
Aluno* a = (Aluno*) malloc(sizeof(Aluno));
if (a == NULL) return NULL;
printf("Entre proximo nome (. para terminar): ");
scanf(" %80[^\n]", a->nome);
/* Se no h um novo aluno, libera a memria alocada */
if (a->nome[0] == .) {
free(a);
return NULL;
}
printf("Entre matricula: ");
scanf(" %d", &(a->mat));
return a;
}
(a) Escreva uma funo que receba um vetor de ponteiros para Aluno,
o tamanho mximo do vetor e um nmero de matrcula e remova
do vetor, se existir, o aluno cujo nmero de matrcula seja igual
matrcula especificada. A posio no vetor ocupada pelo aluno
removido deve receber o valor NULL. Assuma que o vetor de ponteiros
para Aluno pode conter buracos (ou seja, posies que armazenam o
valor NULL). A funo deve retornar 1, se o aluno foi removido, e 0,
caso no haja no vetor um aluno com o nmero de matrcula dado.
No esquea de liberar a rea alocada para o aluno removido. Essa
funo deve obedecer o seguinte prottipo:
int removealuno (Aluno** v, int n, int mat);
Insira na funo main testes para sua funo removealuno. Teste
pelo menos uma remoo para uma matrcula existente no vetor e
uma remoo para uma matrcula no existente no vetor. Aps a
chamada de removealuno imprima uma mensagem informando se o
aluno foi removido ou se no foi encontrado no vetor. Use tambm a
funo imprimealunos para exibir as informaes dos alunos antes e
depois da tentativa de remoo.
(b) Crie uma funo inserealuno que receba um vetor de ponteiros para
Aluno, o tamanho mximo do vetor, o nmero atual de alunos no
vetor e um ponteiro para uma estrutura Aluno e insere este novo
aluno no vetor de alunos, mantendo o vetor ordenado crescentemente
por matrcula. Para garantir a ordem do vetor de alunos, voc deve
verificar os nmeros de matrcula dos alunos existentes no vetor e, ao
encontrar a posio onde deve ser inserido o novo aluno, voc deve
empurrar os demais alunos uma posio para frente. Essa funo
deve obedecer o seguinte prottipo:
int inserealuno (Aluno** v, int tam, int n, Aluno* novo);
Os parmetros da funo so:
v o vetor de alunos;
tam o tamanho do vetor;
n o nmero de alunos no vetor;
novo um ponteiro para os dados do novo aluno.