ICC – Matrizes Jorge Macêdo
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
Dimensões da Matriz Unidimensional Bidimensional 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
Exemplo main(){ 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
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
Exemplo main(){ int nota[5], i, soma; for(i = 0; i < 10; i++){ Tamanho da matriz é cinco, neste for, a contagem vai até dez. Logo, o limite da matriz foi ultrapassado. main(){ 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); ICC 2008-1 - Jorge Macêdo
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
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
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
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
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
Exemplo – gets() main(){ char str[100]; printf(“Digite seu nome: ”); gets(str); printf(“\n\nOla, %s.”, str); } ICC 2008-1 - Jorge Macêdo
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 s3 strcpy(s3, “Voce digitou a string.”); printf(“%s %s”, s3, s2); } ICC 2008-1 - Jorge Macêdo
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 s2 strcat(s2, s1); printf(“%s”, s2); } ICC 2008-1 - Jorge Macêdo
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
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
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
Matriz de Strings char pessoas[5][10]; 1 2 3 4 5 6 7 8 9 ‘J’ ‘o’ ‘a’ 1 2 3 4 5 6 7 8 9 ‘J’ ‘o’ ‘a’ ‘\0’ ‘M’ ‘r’ ‘i’ ‘ ’ ‘s’ ‘R’ ‘y’ ‘T’ ‘u’ ‘d’ ‘L’ ‘l’ ICC 2008-1 - Jorge Macêdo
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
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
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); } ICC 2008-1 - Jorge Macêdo