Upload
internet
View
103
Download
0
Embed Size (px)
Citation preview
ICC – Matrizes
Jorge Macêdo
ICC 2008-1 - Jorge Macêdo 2
Matrizes Tipo de dado que representa variáveis pelo mesmo
nome. Sintaxe:
tipo nome[tamanho]; Variáveis são alocadas seqüencialmente na
memória. Endereço mais baixo corresponde ao primeiro
elemento (índice 0). C não possui o tipo string, deve-se utilizar uma
matriz de char.
ICC 2008-1 - Jorge Macêdo 3
Dimensões da Matriz Unidimensional
Tamanho representa o número de elementos; O índice da matriz varia de 0 a [tamanho-1]; tipo nome[tamanho];
Bidimensional As duas dimensões são respectivamente as
linhas e colunas da matriz; tipo nome[tamanho1][tamanho2];
ICC 2008-1 - Jorge Macêdo 4
Exemplomain(){
int nota[5], i, soma;for(i = 0; i < 5; i++){
printf(“Digite a nota %d:\n”,i);scanf(“%d\n”, ¬a[i]);
}for(i = 0; i < 5; i++)
soma += nota[i];printf(“Media = %d\n”, soma/5);
}
ICC 2008-1 - Jorge Macêdo 5
Verificação de Limites A linguagem C não faz verificação de
automática de limites das matrizes Erro comum de programação. Deve ser realizado dentro do programa.
ICC 2008-1 - Jorge Macêdo 6
Exemplomain(){
int nota[5], i, soma;for(i = 0; i < 10; i++){
printf(“Digite a nota %d:\n”,i);scanf(“%d\n”, ¬a[i]);
}for(i = 0; i < 5; i++)
soma += nota[i];printf(“Media = %d\n”, soma/5);
}
Tamanho da matriz é cinco,neste for, a contagem vai atédez. Logo, o limite da matrizfoi ultrapassado.
ICC 2008-1 - Jorge Macêdo 7
Matrizes Estáticas Valores atribuídos à matriz podem ser inicializados
no momento da declaração da mesma (variáveis estáticas)
main(){
static int nota[5] = {8,9,4,5,7}, i;
for(i = 0; i < 5; i++)
printf(“Nota %d: %d\n”, i, nota[i]);
}
ICC 2008-1 - Jorge Macêdo 8
Matrizes Multidimensionais C permite matrizes com mais de duas dimensões Sitnaxe
tipo nome [tamanho1][tamanho2]...[tamanhoN];
Matrizes com três ou mais dimensões são pouco utilizadas. Ocupam muita memória Demora no cálculo do índice
ICC 2008-1 - Jorge Macêdo 9
Matrizes de char (strings) Em C uma string é um vetor de char com ‘\0’
no final É preciso declarar um vetor de caracteres com um
caractere a mais que maior tamanho da string. As funções de manipulação de string
armazenam e manipulam automaticamente com o ‘\0’
Uma constante string fica entre aspas duplas-“ ” Ex: printf(“%s”, “Teste”);
Strings também podem ser armazenadas estaticamente.
ICC 2008-1 - Jorge Macêdo 10
Exemplo
main(){
static char st[] = “testando”;
int i;
for(i = 0; st[i]; i++)
putchar(st[i]);
putchar(‘\n’);
}
ICC 2008-1 - Jorge Macêdo 11
Funções de manipulação de string
Leitura – gets() gets(nome_da_string);
Escrita – puts() puts(nome_da_string);
Cópia – strcpy() strcpy(str_de_destino, str_de_origem);
Concatenação – strcat() strcat(str_de_destino, str_de_origem);
Comparação – strcmp() strcmp(string1, string2); Retorna 0 se as strings forem iguais.
Tamanho – strlen() strlen(nome_da_string);
ICC 2008-1 - Jorge Macêdo 12
Exemplo – gets()
main(){
char str[100];
printf(“Digite seu nome: ”);
gets(str);
printf(“\n\nOla, %s.”, str);
}
ICC 2008-1 - Jorge Macêdo 13
Exemplo – strcpy()#include <stdio.h>#include <string.h>main(){
char s1[20], s2[20], s3[20];printf(“Entre com uma string: ”);gets(s1);strcpy(s2, s1); // copia s1 em s2// Copia: “Voce digitou a string.” em s3strcpy(s3, “Voce digitou a string.”);printf(“%s %s”, s3, s2);
}
ICC 2008-1 - Jorge Macêdo 14
Exemplo strcat()#include <stdio.h>#include <string.h>main(){
char s1[20], s2[20];printf(“Entre com uma string: ”);gets(s1);strcpy(s2, “Você digitou a string ”); // s2 armazena “Você digitou a string // ” + o conteúdo de s1 em s2strcat(s2, s1);printf(“%s”, s2);
}
ICC 2008-1 - Jorge Macêdo 15
Exemplo strlen()#include <stdio.h>#include <string.h>main(){char str[20];int tamanho;printf(“Entre com uma string: ”);gets(str);tamanho = strlen(str); printf(“Tamanho: %d”, tamanho);
}
ICC 2008-1 - Jorge Macêdo 16
Exemplo strcmp()#include <stdio.h>#include <string.h>main(){
char s1[20], s2[20];printf(“Entre com uma string: ”); gets(s1);printf(“Entre com uma outra string: ”); gets(s2);if (strcmp(s1, s2))
printf(“\n\n As strings são difetentes”);else
printf(“\n\n As strings são iguais”);}
ICC 2008-1 - Jorge Macêdo 17
Matrizes de strings Pode surgir a necessidade de matriz
multidimensional de caracteres. Bidimensionais são mais comuns.
O tamanho do índice esquerdo indica o número de strings e
O tamanho do índice direito determina o comprimento máximo de cada string.
Para especificar uma string individual basta especificar o índice esquerdo.
ICC 2008-1 - Jorge Macêdo 18
Matriz de Strings char pessoas[5][10];
0 1 2 3 4 5 6 7 8 9
0 ‘J’ ‘o’ ‘a’ ‘o’ ‘\0’
1 ‘M’ ‘a’ ‘r’ ‘i’ ‘a’ ‘ ’ ‘J’ ‘o’ ‘s’ ‘\0’
2 ‘R’ ‘o’ ‘y’ ‘ ’ ‘T’ ‘u’ ‘d’ ‘o’ ‘\0’
3 ‘L’ ‘i’ ‘l’ ‘i’ ‘a’ ‘\0’
4 ‘\0’
ICC 2008-1 - Jorge Macêdo 19
Exemplo Matrizes de strings#include <stdio.h>main(){
char strings[5] [20]; int cont;for(cont = 0; cont < 5; i++){
printf(“Digite a string %d: ”,(cont+1));
gets(strings[i]);}printf(“As strings digitadas foram:\n”); for(cont = 0; cont < 5; i++)
printf(“%d: %s\n”, (cont+1), strings[i]);
}
ICC 2008-1 - Jorge Macêdo 20
Inicialização de Matrizes de Caracteres
Inicialização de matrizes de caracteres pode ser das seguintes formas: char nome [tamanho1][tamanho2]...
[tamanhoN] = “string”; Ex: char str[14] = “Eu gosto de C”;
char nome [tamanho1][tamanho2]...[tamanhoNn] = {‘s’,‘t’,‘r’,‘i’,‘n’,‘g’,‘\0’}; Ex: char str[14] = {‘E’,‘u’,‘
’,‘g’,‘o’ ,‘s’,‘t’,‘o’,‘ ’,‘d’,‘e’,‘ ’,‘C’,‘\0’};
ICC 2008-1 - Jorge Macêdo 21
Operador sizeof() Este operador retorna o tamanho da variável
ou tipo que está em seu operando. Por exemplo “sizeof(char)” resultaria em
1 (byte).main(){ int num, tam; tam = sizeof(num); printf(“Ocupa %d bytes.”, tam); }