icc – matrizes jorge macêdo. icc 2008-1 - jorge macêdo2 matrizes tipo de dado que representa...

Post on 17-Apr-2015

103 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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”, &nota[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”, &nota[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); }

top related