Вы находитесь на странице: 1из 38

Cincia da Computao

Programao
Prof. Maikol Rodrigues
maikolmr@gmail.com

Lgica de Programao I

Maikol Rodrigues

Vetores, Matrizes e Strings

Lgica de Programao I

Vetores
Para se declarar, forma geral:
tipo_da_varivel nome_da_varivel [tamanho];

float exemplo [20];

O C ir reservar 4x20=80 bytes

Estes bytes so reservados de maneira contgua

Em C a numerao do ndice comea do zero


exemplo[0] exemplo[1] . . .exemplo[19]

Entretanto, possvel escrever no cdigo:


exemplo[30] exemplo[103]

Por qu?
Lgica de Programao I

Maikol Rodrigues

Vetores

O C no verifica se o ndice que voc usou est dentro dos


limites vlidos

Este um cuidado que voc deve tomar

A utilizao de ndices fora do limite pode sobreescrever


variveis ou travar o computador

Bugs terrveis podem surgir

Lgica de Programao I

Maikol Rodrigues

Vetores
#include <stdio.h>
int main () {
int num[1000];/* Declara um vetor de int com 1000posicoes */
int qn, aux, i;
printf(Qtde de nmeros da relao? \n );
scanf(%d, &qn);
for (i=0; i<qn; i++ ) {
printf(Digite um nro\n);
scanf(%d, &num[i]);
}
printf ("\n\n\n\t Os nmeros que voc digitou foram:\n\n");
for (i=0 ; i<qn ; i++) printf (" %d",num[i]);
}
Lgica de Programao I

Maikol Rodrigues

Fique ligado!!! ILA X C


int num[10];
float num[10];
double num[10];

Matriz numerico num[10]

for (i=0; i<10; i++) {


scanf(%d,&num[i]);
}

Para i=1 ate 10 passo 1


ler aux
num[i]=aux
Proximo

ndice comea do 0
num[0],num[1],...,num[9]

ndice comea do 1
num[1],num[2],...,num[10]

Lgica de Programao I

Maikol Rodrigues

Exerccios

8 Lista de exerccios

Lgica de Programao I

Maikol Rodrigues

Matrizes bidimensional
A forma geral de declarao:
tipo_da_varivel nome_da_varivel [altura][largura];

O ndice da esquerda indexa as linhas e o da direita indexa as colunas.

#include <stdio.h>
int main () {
int mtrx [20][10];
int i,j,count; count=1;
for (i=0;i<20;i++) {
for (j=0;j<10;j++) {
mtrx[i][j]=count;
count++;
}
}
}

No exemplo acima, a matriz mtrx preenchida, sequencialmente por


linhas, com os nmeros de 1 a 200.

Lgica de Programao I

Maikol Rodrigues

Matrizes
AUTO AVALIAO
O que imprime o programa a seguir? Tente entend-lo e responder. A seguir,
execute-o e comprove o resultado.

# include <stdio.h>
int main() {
int t, i, M[3][4];
for (t=0; t<3; ++t)
for (i=0; i<4; ++i)
M[t][i] = (t*4)+i+1;
for (t=0; t<3; ++t)
{
for (i=0; i<4; ++i)
printf ("%3d ", M[t][i]);
printf ("\n");
}
}
Lgica de Programao I

Maikol Rodrigues

Exerccios

9 Lista de exerccios

Lgica de Programao I

Maikol Rodrigues

10

Matrizes Multidimensionais
A forma geral de declarao:
tipo_da_varivel nome_da_varivel [tam1][tam2] ...
[tamN];

Uma matriz N-dimensional funciona basicamente como


outros tipos de matrizes.
Basta lembrar que o ndice que varia mais rapidamente o
ndice mais direita.

Lgica de Programao I

Maikol Rodrigues

11

Strings

Um vetor de caracteres terminado com um caracter nulo


representado por \0

char nome_da_string[tamanho];

Devido ao caracter nulo, temos que declarar o tamanho


da string com, no mnimo, um caracter maior que a maior
string que pretendemos armazenar

Lgica de Programao I

Maikol Rodrigues

12

Strings

A funo gets() l uma string do teclado


gets (nome_da_string);

A funo gets() j coloca o caracter nulo na string,


quando voc aperta a tecla "Enter"

#include <stdio.h>
int main ()
{ char string[7];
printf ("Digite uma string: ");
gets (string);
printf ("\n\nVoce digitou %s",string);
}
Lgica de Programao I

Maikol Rodrigues

13

Strings

Suponha que tenha sido digitado a palavra JOAO


J

\0

...

...

O gets se encarrega de colocar o \0 no final da string

A duas posies no usadas tm valores indeterminados

C no inicializa variveis, conforme explicado anteriormente

O tamanho mximo da string que voc pode entrar de 6


caracteres

O programa aceita uma string de comprimento maior, mas


os resultados podem ser desastrosos. Veremos porque
posteriormente

Lgica de Programao I

Maikol Rodrigues

14

Strings
Como strings so vetores, possvel acessar posio por
posio usando o ndice do vetor
#include <stdio.h>
int main() {
char str[10] = "Joao";
printf("\n\nString: %s", str);
printf("\nSegunda letra: %c", str[1]);
str[1] = 'U';
printf("\nAgora a segunda letra eh: %c", str[1]);
printf("\n\nString resultante: %s", str);
}

Lgica de Programao I

Maikol Rodrigues

15

Strings

str[10] = "JOAO
Declara e armazena os caracteres 'J', O, A, O, e '\0'

%s indica que printf() deve colocar uma string na tela


Constantes strings
A string "Joao" na realidade uma constante string

Assim, por exemplo, 't' diferente de "t"

't' uma constante char

"t" uma constante string com dois chars onde o


primeiro 't' e o segundo '\0'

Lgica de Programao I

Maikol Rodrigues

16

Strings

O programa abaixo l uma string e conta quantos dos


caracteres desta string so iguais letra 'c'

#include <stdio.h>
int main () {
char string[100]; /* String, ate' 99 caracteres */
int i, cont;
printf("\n\nDigite uma frase: ");
gets(string);
printf("\n\nFrase digitada:\n%s", string);
cont = 0;
for (i=0; string[i] != '\0'; i=i+1)
{
if ( string[i] == 'c' ) /* Se for a letra 'c' */
cont = cont +1; /* Incrementa o contador de caracteres */
}
printf("\nNumero de caracteres c = %d", cont)
}
Lgica de Programao I

Maikol Rodrigues

17

Auto avaliao

Veja como voc est:


a) Escreva um programa que leia uma string de at 30 posies e a
imprima no vdeo
b) Escreva um programa que leia duas strings e as coloque na tela.
Imprima tambm a segunda letra de cada string.

Lgica de Programao I

Maikol Rodrigues

18

Strcpy

string1=string2; /* NO faa isto */


Forma geral : strcpy (string_destino,string_origem); // string.h
Copia a string-origem para a string- destino

#include <stdio.h>
#include <string.h>
int 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 "); /* Cpia "Voc digitou a string"
em str3 */
printf ("\n\n%s%s",str3,str2);
return(0);
}
Lgica de Programao I
Maikol Rodrigues
19

Strcat

Forma geral:strcat (string_destino,string_origem); // string.h


A string _origem permanecer inalterada e ser anexada ao fim
da string _destino

#include <stdio.h>
#include <string.h>
int main () {
char str1[100],str2[100];
printf ("Entre com uma string: ");
gets (str1);
strcpy (str2,"Voce digitou a string ");
strcat (str2,str1);
printf ("\n\n%s",str2);
}
Lgica de Programao I

Maikol Rodrigues

20

Strlen

Forma geral : strlen (string); // string.h


Retorna o comprimento da string fornecida. O terminador nulo
no contado

#include <stdio.h>
#include <string.h>
int main () {
int size;
char str[100];
printf ("Entre com uma string: ");
gets (str);
size=strlen (str);
printf ("\nA string tem tamanho %d", size);
}
Lgica de Programao I

Maikol Rodrigues

21

Strcmp

Forma geral: strcmp (string1,string2); // string.h

Compara a string1 com a string2


Se as duas forem idnticas a funo retorna
falso (zero)

Se as duas forem diferentes a funo retorna


verdadeiro (no-zero)

Lgica de Programao I

Maikol Rodrigues

22

Strcmp

#include <stdio.h>
#include <string.h>
int main () {
char str1[100],str2[100];
printf ("Entre com uma string: ");
gets (str1);
printf ("\n\nEntre com outra string: ");
gets (str2);
if ( strcmp(str1,str2) ==0)
printf ("\n\nAs strings so iguais .");
else
printf ("\n\nAs strings so diferentes.");
}
Lgica de Programao I

Maikol Rodrigues

23

Manipulao de Strings
AUTO AVALIAO
Veja como voc est:
Faa um programa que leia quatro palavras pelo teclado, e
armazene cada palavra em uma string. Depois, concatene
todas as strings lidas numa nica string. Por fim
apresente esta como resultado ao final do programa.

Lgica de Programao I

Maikol Rodrigues

24

Exerccios

5 Lista de exerccios

Lgica de Programao I

Maikol Rodrigues

25

Matrizes de Strings
A forma geral de declarao:
char nome_varivel [num_de_strings][compr_das_strings];

Matrizes de strings so matrizes bidimensionais de chars

Para acessar uma string individual (linha) basta usar o


primeiro ndice

nome_da_varivel [ndice]

Lgica de Programao I

Maikol Rodrigues

26

Matrizes de Strings

Programa que l 5 strings e as exibe na tela:

#include <stdio.h>
int main () {
char str [5][100];
int l;
for (l=0 ; l<5 ; l++) {
printf ("\n\nDigite uma string: ");
gets (str[l]);
}
printf ("\n\n\nVoce digitou as strings:\n\n");
for (l=0; l<5; l++) printf ("%s\n",str[l]);
}
Lgica de Programao I

Maikol Rodrigues

27

Inicializao
A forma geral de inicializao de uma matriz:
tipo_varivel nome_varivel [tam1][tam2] ... [tamN] = {lista_de_valores};

A lista de valores composta por valores separados por vrgula. Os


valores devem ser dados na ordem em que sero colocados na matriz.

float vect [5] = { 1.3, 4.5, 2.7, 4.1, 0.0};

int matrx [3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };

Lgica de Programao I

10

11

12

Maikol Rodrigues

28

Inicializao
char str [7] = { 'J', 'o', 'a', 'o', '\0' };
char str [7] = "Joao";
J

\0

...

...

char str_vect [3][7] = { "Joao", "Maria", "Jose" };


J

\0

...

...

\0

...

\0

...

...

Lgica de Programao I

Maikol Rodrigues

29

Inicializao Sem Especificao de Tamanho

Podemos inicializar matrizes que no sabemos o tamanho


O compilador C vai, neste caso, verificar o tamanho que voc
declarou e considerar como sendo o tamanho da matriz
til quando vamos inicializar uma string e no queremos
contar quantos caracteres sero necessrios.

char mess [] = "Linguagem C: flexibilidade e poder.";


A string mess ter tamanho 36
int matrx [][2] = { 1,2,2,4,3,6,4,8,5,10 };
Neste caso o valor no especificado ser 5.

Lgica de Programao I

Maikol Rodrigues

30

Escopo de Variveis

O escopo o conjunto de regras que determinam o uso e a


validade de variveis nas diversas partes do programa

Variveis locais
S tm validade dentro do bloco no qual so declaradas.
Sim. Podemos declarar variveis dentro de qualquer bloco.

S para lembrar: um bloco comea quando abrimos uma


chave e termina quando fechamos a chave.

At agora s tnhamos visto variveis locais para funes


completas. Mas um comando for pode ter variveis locais
e que no sero conhecidas fora dali.

Lgica de Programao I

Maikol Rodrigues

31

Escopo de Variveis

Variveis locais so exclusivas do bloco. Podemos ter


quantos blocos quisermos com uma varivel local chamada
x, por exemplo, e elas no apresentaro conflito entre
elas.
#include <stdio.h>
int main() {
int i, x =10;
for (i=0; i<10; i++){ /* Bloco do for */
int x = 20; // x local ao bloco do for { }
printf (%d\n, x); // mostrar no vdeo 20
}
printf (%d\n, x); // x local ao bloco da funo main { }
return(0);
}

Lgica de Programao I

Maikol Rodrigues

32

Escopo de Variveis

Outro exemplo de variveis locais:


func1 (...) {
int abc,x;
...
}
func (...) {
int abc;
...
}
void main () {
int a,x,y;
for (...) {
float a,b,c;
...
}
...
}

Lgica de Programao I

Maikol Rodrigues

33

Escopo de Variveis

Paramtros formais
So declarados como sendo as entradas de uma funo.

No h motivo para se preocupar com o escopo deles.


fcil: o parmetro formal uma varivel local da funo.

Voc pode tambm alterar o valor de um parmetro


formal, pois esta alterao no ter efeito na varivel que
foi passada funo.

Isto tem sentido, pois quando o C passa parmetros para


uma funo, so passadas apenas cpias das variveis. Isto
, os parmetros formais existem independentemente das
variveis que foram passadas para a funo. Eles tomam
apenas uma cpia dos valores passados para a funo.

Lgica de Programao I

Maikol Rodrigues

34

Escopo de Variveis
Variveis globais
So declaradas fora de todas as funes do programa.

Elas so conhecidas e podem ser alteradas por todas as


funes do programa.

Quando uma funo tem uma varivel local com o mesmo


nome de uma varivel global a funo dar preferncia
varivel local. Vamos ver um exemplo:

Lgica de Programao I

Maikol Rodrigues

35

Declarao e Inicializao de Variveis


Veja o programa abaixo:
int z,k;
func1 (...) {
int x,y;
...
}
func2 (...) {
int x,y,z;
...
z=10;
}
main () {
int count;
...
}

Evite ao mximo o uso de variveis globais. Elas ocupam memria o tempo todo
(as locais s ocupam memria enquanto esto sendo usadas) e tornam o
maisI difcil de ser entendido e menos geral.
Lgicaprograma
de Programao
Maikol Rodrigues
36

Declarao e Inicializao de Variveis

Veja o programa abaixo:


#include <stdio.h>
int contador;//GLOBAL-fora de todas as funes (main e func1)
int func1(int i) {
escrever i//LOCAL - parmetro de funo
}
int main() {
char condicao; //LOCAL funo main
int i;
for (i=0; ...){ /* Bloco do for */
float f2; //LOCAL ao bloco do for
...
func1(i);
}
...
return(0);
}

Lgica de Programao I

Maikol Rodrigues

37

Declarao e Inicializao de Variveis

AUTO AVALIAO
Veja como voc est:
Escreva um programa que declare uma varivel inteira global
e atribua o valor 10 a ela. Declare outras 5 variveis
inteiras locais ao programa principal e atribua os valores
20, 30, ..., 60 a elas. Declare 6 variveis caracteres e
atribua a elas as letras c, o, e, l, h, o . Finalmente, o
programa dever imprimir, usando todas as variaveis
declaradas:
As variveis inteiras contem os nmeros: 10,20,30,40,50,60
O animal contido nas variveis caracteres e o coelho

Lgica de Programao I

Maikol Rodrigues

38

Вам также может понравиться