Escolar Documentos
Profissional Documentos
Cultura Documentos
break;
}
}
}
return numVogais;
}
Exerccios 2
1. Qual a diferena entre "A" e 'A'?
2. Qual a diferena entre "mno" e "m\no"? Qual a diferena
entre "MNOP" e "MN0P"? Qual a diferena entre "MN\0P" e "MN0P"?
3. Escreva uma funo que receba um caractere c e devolva uma string cujo nico
caractere c.
4. Escreva uma funo que receba uma string e imprima uma tabela com o
nmero de ocorrncias de cada caractere na string. Escreva um programa para
testar a funo.
5. PALNDROMOS. Escreva uma funo que decida se uma string ou no um
palndromo (ou seja, se o inverso da string igual a ela). Escreva um programa
para testar a funo.
6. Escreva uma funo que receba strings s e t e decida se s segmento de t (ou
seja, se s pode ser obtida apagando um nmero arbitrrio de elementos do
incio de t e um nmero arbitrrio de elementos no fim de t). Escreva um
programa que use a funo para contar o nmero de ocorrncias de uma
string s em uma string t.
7. Escreva uma funo que receba uma string e substitua cada segmento de dois
ou mais espaos em branco por um s espao em branco.
8. Escreva uma funo que receba uma string de 0s e 1s, interprete essa string
como um nmero natural em notao binria e devolva o valor desse nmero.
A biblioteca string
A biblioteca padro string da linguagem C contm vrias funes
de manipulao de strings. Para usar essas funes, o seu programa
deve incluir
#include <string.h>
o arquivo-interface string.h. Eis as funes mais importantes da
biblioteca string:
A funo strlen (o nome uma abreviatura de string length)
recebe uma string e devolve o seu comprimento. O cdigo
dessa funo poderia ser escrito assim:
unsigned int strlen( char *s) {
int k;
for (k = 0; s[k] != '\0'; ++k) ;
return k;
}
A funo strcpy (o nome uma abreviatura de string copy)
recebe duas strings e copia a segunda (inclusive o caractere
nulo final) para o espao ocupado pela primeira. O contedo
original da primeira string perdido. Antes de chamar a
funo, o programador deve certificar-se de que o espao
alocado para a primeira string suficiente para acomodar a
cpia da segunda. (Buffer overflow uma das mais comuns
origens de bugs de segurana!) O cdigo dessa funo poderia
ser escrito assim:
void strcpy( char *s, char *t) {
int i;
for (i = 0; t[i] != '\0'; ++i)
s[i] = t[i];
s[i] = '\0';
}
(Na verdade, a funo strcpy no do tipo void. Ela do
tipo char * e devolve o seu primeiro argumento. Isso til
em algumas situaes, mas em geral os usurios s esto
// Copia os dados do
VetCopia[i+TAM_MAX] = Vet2[i];
// ****** Pergunta: Como fazer a cpia usando um
nico comando for ?
Leitura dos dados de um um vetor
#define TAM_MAX 10
double Vet1[TAM_MAX];
for(i=0; i<TAM_MAX; i++)
scanf("%f",&Vet1[i]);
Encontrar o maior valor dentro de um vetor
#define TAM_MAX 10
double Vet1[TAM_MAX];
double Maior;
for(i=0; i<TAM_MAX; i++)
scanf("%f",&Vet1[i]);// le os dados
Maior = Vet1[0]; // assume que o primeiro o
maior
for(i=0; i<TAM_MAX; i++)
if Vet1[i] > Maior
Maior = Vet1[i];
printf("O maior elemento %f\n",Maior);
// ****** Pergunta: Como fazer a mesma busca e
imprimir tambm a
// ****** posio do dado dentro do vetor. Tente
fazer isto usando
// ****** apenas 1 varivel.
Crie um programa que copie para um vetor os elementos de outro em
ordem crescente.
// a idia aqui encontrar o menor elemento do vetor 1 e colocar no vetor 2.
Tirar este nmero de vet1, por exemplo,
// colocando no seu lugar, no vetor 1, um nmero grande e recomear a busca
pelo novo nmero menor.
#define TAM_MAX 10
double Vet1[TAM_MAX], VetOrdenado[TAM_MAX];
double Menor, Maior;
for(i=0; i<TAM_MAX; i++)
scanf("%f",&Vet1[i]);// le os dados
PosMaior = 0; // assume que o maior est na 1a.
posio
for(i=0; i<TAM_MAX; i++)
if Vet1[i] > Vet1[PosMaior]
PosMaior = i; // acha a posio do maior
for(j=0; j<TAM_MAX;j++)
{
PosMenor = 0; // assume que o primeiro o
menor
for(i=0; i<TAM_MAX; i++)
if Vet1[i] < Vet1[PosMenor]
PosDoMenor = i;
VetOrdenado[j]= Vet1[PosMenor]; // copia menor
para o novo vetor
// inutiliza a posio do menor colocando nela um
nmero grande
Vet1[PosMenor] = Vet1[PosMaior]; // no caso o
maior do vetor
}
for(i=0; i<TAM_MAX; i++)
print("%f\n",VetOrdenado[i]);// Imprime
os
dados
#define NCOL 10
int Matriz[NLIN][NCOL];
Preencher uma matriz com um dado
for(i=0; i < NLIN; i++)
for(j=0; j < NCOL; j++)
Matriz[i][j] = 30;
Somar um nmero a uma linha/coluna de uma matriz
void SomaValorNaColuna(int Valor, int
Matriz[NLIN][NCOL], int Coluna)
{
for(i=0; i < NLIN; i++) // para cada linha de
'Coluna'
Matriz[i][Coluna] = Matriz[i][Coluna] + 30;
}
Criar uma matriz identidade
void CriaIdent(int Colunas, int linhas, int
Matriz[NLIN][NCOL])
{
}
Criar uma matriz transposta
void CriaTransp(int Colunas, int linhas,
int Matriz[NLIN][NCOL], int
Trasposta[NLIN][NCOL])
{
}
Cria uma rotina que some duas matrizes
void SomaMatrizes(int Colunas, int linhas,
int MatrizA[NLIN][NCOL], int
MatrizB[NLIN][NCOL],
int MatrizSOMA[NLIN][NCOL])
{
}
Cria uma rotina que multiplique duas matrizes
void MultMatrizes(int Colunas, int linhas,
int MatrizA[NLIN][NCOL], int
MatrizB[NLIN][NCOL],
int MatrizMULT[NLIN][NCOL])
{
}
Exerccios
1. Dada uma seqncia de n nmeros, imprimi-la na ordem inversa da
leitura.
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#define MAX 100
int main() {
int n, i, v[MAX];
printf("Digite o comprimento da seqncia: ");
scanf("%i", &n);
printf("Digite uma seqncia com %d nmeros inteiros: ", n);
for (i = 0; i < n; i++)
scanf("%i", &v[i]);