Nivelamento de C: Vetores e Strings Prof. Frederico Brito Fernandes [email protected] CONTEÚDO (1) Exercícios de Revisão (2) Vetores (3) Strings (1) Exercícios de Revisão Antes de prosseguir para vetores e strings... • Implemente o que se pede: a) Faça um programa que leia a altura de uma pessoa (em metros) e retorne esse valor convertido para pés e polegadas Considere: 1 pé = 30.48cm e 1 polegada = 2.54cm Saída: 1.68m corresponde a 5.5 pes e 66.1 polegadas b) Faça um programa que leia um número em segundos, e retorna o mesmo em horas, minutos e segundos Saída: 7322 segundos equivalem a 2 horas, 2 minutos e 2 segundos c) Faça um programa que leia um número e imprima uma sequência numérica. Ex: se o número digitado foi 3: Saída: 1 12 123 d) Faça uma função que recebe um inteiro e retorna seu fatorial Fat(n)=n*n-1*n-2*..*1 Ex: Fat(5)=5*4*3*2*1 e) Faça uma função que recebe uma temperatura em ºC e retorna seu equivalente em ºF Considere: TC = TF-32 100 180 Estrutura, Pesquisa e Ordenação de Dados Frederico Brito Fernandes 2 (2) Vetores Definição e declaração de vetores • Objetivo: – Declarar N variáveis de um mesmo tipo – Primeiro índice: zero – Também conhecido como arranjo Ex: O que faz o programa abaixo? • Sintaxe: main(){ tipo nome_do_vetor[N]; int v[10], j; for (j = 0; j <= 10; j++) { v[j] = 0; } • Ex: float notas[30]; float teste=7; notas[0] = 4.5; notas[1] = 10; notas[2] = notas[0]; notas[3] = notas[10]; notas[30] = 2; Estrutura, Pesquisa e Ordenação de Dados igual? } // qual valor é atribuído a elemento de índice 2? // o que acontece aqui? // essa instrução é legal em C? // qual o valor provável de teste depois dessa instrução? Frederico Brito Fernandes 3 (2) Vetores Inicializando valores • Inicialização: tipo nome_do_vetor[N] = {valor1,valor2,...,valorN}; – Caso o vetor tenha sido inicializado, seu tamanho (N) pode ser omitido • Ex1: int idades[10] = {34,53,12,20,22}; int idades2[] = {34,53,12,20,22}; // qual o valor de idades[5]? // qual o tamanho de idades2? for(i=0;i<10;i++){ printf(“Idade do usuario %d eh %d”,i+1,idade[i]); // cuidado com o lixo!!! } Solução? Você deveria ter inicializado todos os valores! Estrutura, Pesquisa e Ordenação de Dados Frederico Brito Fernandes 4 (2) Vetores Auto-avaliação • Faça um programa que defina um vetor de 10 inteiros, com valores já inicializados e calcule a soma dos elementos Ex: int vetor[10] = {1,2,3,4,5,6,7,8,9,10}; • Faça um programa que copie o vetor1 no vetor2 de forma invertida. Depois, imprima os vetores. Defina uma constante para o tamanho do vetor. Ex: #define N 10 int vetor1[N] = {1,2,3,4,5,6,7,8,9,10}; int vetor2[N]; Estrutura, Pesquisa e Ordenação de Dados Frederico Brito Fernandes 5 (3) Strings Definição e inicialização de strings • Vetor de char – Não existe o tipo pré-definido string em C – Termina com o caractere ‘\0’ • Portanto, se você precisa de uma string com 10 caracteres, declare um vetor com 11 posições (char) É opcional, caso você inicialize um valor, pois o compilador consegue deduzir • Sintaxe: char nome_da_string[tamanho]; • Ex1: char s1[]=“Fred”; char s2[5]; char s3[]; // qual o tamanho dessa string? // ilegal, pois não declarei o tamanho da string nem inicializei • Ex2: char nome[20] = {'F','r','e','d‘,’\0’}; A printf(“Nome: ”); for(i=0;i<20;i++){ printf(“%c”,nome[i]); } Estrutura, Pesquisa e Ordenação de Dados char nome[20] = “Fred”; B printf(“Nome: ”); for(i=0;nome[i]!=‘\0’;i++){ printf(“%c”,nome[i]); } Frederico Brito Fernandes C printf(“Nome: %s”,nome); 6 (3) Strings Função gets() • Ex: o programa abaixo copia uma string em outra #include <stdio.h> main (){ int count; O scanf() não! char s1[100],s2[100]; printf(“Digite a primeira string: ”); gets(s1); A função gets (stdio.h) é capaz de capturar uma string com espaços em branco for (count=0;s1[count];count++) s2[count]=s1[count]; s2[count]='\0'; Qual é a condição de parada do for aqui? (vimos na aula passada!) } • Não é permitido diretamente: (lembre-se: string não é um tipo pré-definido em C) – Comparar duas strings • Ex: if (s1==s2) {...} – Atribuir uma string a outra • Ex: s1 = s2; • Para realizar tal tarefa, use a biblioteca <string.h> Estrutura, Pesquisa e Ordenação de Dados Frederico Brito Fernandes 7 (3) Strings Biblioteca string.h • strcpy (string_destino,string_origem) – Objetivo: copia a string_origem para a string_destino – Ex: #include <stdio.h> #include <string.h> main () { char str1[100],str2[100],str3[100]; printf ("Entre com uma string: "); gets (str1); strcpy (str2,str1); /* Copia str1 em str2 */ strcpy (str3,"Voce digitou a string "); /* Copia "Voce digitou a string" em str3 */ printf ("\n\n%s%s",str3,str2); } Estrutura, Pesquisa e Ordenação de Dados Frederico Brito Fernandes 8 (3) Strings (2) Strings: biblioteca string.h • strcat (string_destino,string_origem) – Objetivo: A string_origem permanecerá inalterada e será anexada ao fim da string_destino – Ex: #include <stdio.h> #include <string.h> main () { char str1[100],str2[100]; printf ("Entre com uma string: "); gets (str1); strcpy (str2,"Voce digitou a string "); strcat (str2,str1); /* str2 armazenara' Voce digitou astring + o conteudo de str1 */ printf ("\n\n%s",str2); } Estrutura, Pesquisa e Ordenação de Dados Frederico Brito Fernandes 9 (3) Strings Biblioteca string.h • strlen (string) – Objetivo: A função strlen() retorna o comprimento da string fornecida – Retorno: tamanho de string • Atenção: O terminador nulo não é contado – Ex: #include <stdio.h> #include <string.h> main () { int size; char str[100]; printf ("Entre com uma string: "); gets (str); size=strlen (str); printf ("\n\nA string que voce digitou tem tamanho %d",size); } Estrutura, Pesquisa e Ordenação de Dados Frederico Brito Fernandes 10 (3) Strings Biblioteca string.h • strcmp (string1,string2) – Objetivo: compara a string1 com a string2. – Retorno: 0 se elas forem idênticas valor<0 se string1 for menor que string2. Ex: “Fred” < “Ze” valor>0 se string1 for maior que string2. Ex: “Fred” > “Bala” – Ex: #include <stdio.h> #include <string.h> main (){ int iguais; char str[100], str2[]=“Fred”; printf (“Digite seu nome: "); gets (str); iguais=strcmp (str, str2); if (iguais==0) printf ("\n\nSeu nome é Fred"); getchar(); } Estrutura, Pesquisa e Ordenação de Dados Frederico Brito Fernandes 11 (3) Strings Biblioteca string.h • Outras funções: Estrutura, Pesquisa e Ordenação de Dados Frederico Brito Fernandes 12 (3) Strings Auto-avaliação • Faça um programa que leia do usuário duas strings: nome e ultimoNome. Seu programa deve criar uma terceira string vazia (nomeCompleto), que deve concatenar as duas outras strings, lembrando de colocar um espaço em branco entre elas. Finalmente imprima nomeCompleto na tela. • Ex: nome = “Frederico” ultimoNome = “Fernandes” Então: nomeCompleto = “Frederico Fernandes” Estrutura, Pesquisa e Ordenação de Dados Frederico Brito Fernandes 13