disciplina de linguagem de programaÇÃo linguagem c professor airton kuada email - [email protected]

98
DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - [email protected]

Upload: internet

Post on 16-Apr-2015

107 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO

LINGUAGEM C

Professor Airton KuadaEmail - [email protected]

Page 2: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

QUESTÕES PRELIMINARES

LINGUAGEM DE PROGRAMAÇÃO.

É UMA FORMA DE TRANSFERIR O CONHECIMENTO HUMANO PARA O COMPUTADOR SEM CONHECER A LINGUAGEM NATIVA DO COMPUTADOR.

EXISTEM DIVERSAS LINGUAGENS DE PROGRAMAÇÃO:

- BASIC

- COBOL

- FORTRAN

- ASSEMBLER

- PASCAL

- C

Page 3: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

QUESTÕES PRELIMINARES O COMPUTADOR CONHECE APENAS A LINGUAGEM BINÁRIA COMO POR EXEMPLO 01010100011100110011001

É NECESSÁRIO TRADUZIR OS COMANDOS CONHECIDOS PELO HOMEM PARA UMA FORMA QUE O COMPUTADOR ENTENDA: Imprima (“Bom final de semana a todos”)

EXISTEM DIFERENTES FORMAS DE EXPRESSAR O COMANDO ACIMA E VARIA CONFORME A LINGUAGEM DE PROGRAMAÇÃO QUE ESTÁ SENDO UTILIZADA

printf (“Bom final de semana a todos”) - C

writeln (‘Bom final de semana a todos”) - PASCAL

display “Bom final de semana a todos” - COBOL

print “Bom final de semana a todos” - BASIC

Page 4: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

QUESTÕES PRELIMINARES

TODAS AS INSTRUÇOES ANTERIORES SÃO TRADUZIDAS PARA UM MESMO FORMATO FINAL.

UM PROGRAMA É ESCRITO UTILIZANDO UMA FORMA QUE É DEFINIDOS PELA LINGUAGEM DE PROGRAMAÇÃO

UM PROGRAMA É ESCRITO UTILIZANDO-SE UMA EDITOR DE TEXTO

UM PROGRAMA ESCRITO EM UMA LINGUAGEM DE PROGRAMAÇÃO É CHAMADO DE PROGRAMA FONTE.

Page 5: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

QUESTÕES PRELIMINARES

EXEMPLO DE UM PROGRAMA FONTE EM LIGUAGEM C.

#include <stdio.h>

main ()

{

printf (“Bom final de semana a todos\n”);

}

Page 6: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

QUESTÕES PRELIMINARES

UM PROGRAMA FONTE AINDA NÃO É ENTENDIDO PELO COMPUTADOR

É NECESSÁRIO CONVERTER ESTE PROGRAMA PARA A LINGUAGEM DO COMPUTADOR (BINÁRIO)

ESTE PROCESSO É CHAMADO DE GERAÇÃO DE PROGRAMA EXECUTÁVEL

A GERAÇÃO É COMPOSTA POR DUAS FASES:

- COMPILAÇÃO;

- LINKEDIÇÃO;

Page 7: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

QUESTÕES PRELIMINARES

A FERRAMENTA QUE REALIZA A COMPILAÇÃO É CHAMADO DE COMPILADOR E GERA UM CODIGO INTERMEDIÁRIO CHAMADO DE CÓDIGO OBJETO

A FERRAMENTA QUE GERA O PROGRAMA EXECUTÁVEL FINAL A PARTIR DO CODIGO OBJETO É CHAMADO DE LINKEDITOR

EXISTEM DIVERSOS FABRICANTES DE COMPILADORES (OS MAIS CONHECIDOS) :

- MICROSOFT

- BORLAND

Page 8: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

QUESTÕES PRELIMINARES

Page 9: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C - HISTÓRICO

NASCEU NO INÍCIO DA DÉCADA DE 1970 NOS LABORATÓRIO DA AT&T BELL A PARTIR DE UMA

LINGUAGEM CHAMADA DE B(CPL) DE BELL

TEM UMA LIGAÇÃO MUITO ESTREITA COM O SISTEMA OPERACIONAL UNIX

1978 BRIAN KERNIGHAN E DENNIS RITCHIE ESCREVERAM O LIVRO THE C LANGUAGE PROGRAMMING

MUITAS VERSÕES FORAM CRIADAS

1983 UM COMITÊ COMEÇOU A TRABALHAR NA CRIAÇÃO DE UM PADRÃO (ANSI C)

Page 10: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C - CARACTERÍSTICAS

LINGUEM DE NÍVEL MÉDIO

PORTABILIDADE

PADRONIZADA

LINGUAGEM ESTRUTURA

Page 11: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C - APLICAÇÕES

A LINGUAGEM C PODE UTILIZADA EM DIVERSOS CAMPOS DE DESENVOLVIMENTO:

SISTEMAS OPERACIONAIS

GERENCIADORES DE BD

EDITORES DE TEXTO

PLANILHAS ELETRÔNICAS

COMPILADORES

SISTEMAS DE NEGÓCIOS (FOLHA, CONTAB, ESTOQUE, ETC).

Page 12: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C - ESTRUTURA

BÁSICA #include <stdio.h>

main ()

{

commandos;

}

OBSERVAÇÕES IMPORTANTES:

A LINGUAGEM C TRABALHA SEMPRE COM LETRAS MINÚSCULAS

C É CASE-SENSITIVE, ISTO É FAZ DIFERENCIAÇÃO ENTRE MAÍUSCULA E MINÚSCULA. EX: BOM É DIFERENTE DE Bom E É DIFERENTE DE bom

Page 13: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C DESCRIÇÃO DA ESTRUTURA

A LINHA #include <stdio.h> INDICA A INCLUSÃO DE UM SEGUNDO ARQUIVO FONTE NO ARQUIVO FONTE ATUAL, SEMELHANTE AO ATO DE COPIAR E COLAR.

A LINHA main(), ESPECIFÍCA O NOME DA FUNÇÃO. TODOS OS PROGRAMAS EM C INICIAM SUA EXECUÇÃO CHAMANDO A FUNÇÃO main(), DESTA FORMA, A FUNÇÃO TEM QUE ESTAR SEMPRE PRESENTE (INICIO DO PROGRAMA)

A LINHA { SIGNIFICA O INICIO DA FUNÇÃO MAIN E TAMBÉM INDICA O INÍCIO DE UM BLOCO DE COMANDO

A LINHA } SIGNIFICA O FINAL DA FUNÇÃO MAIN E TAMBÉ INDICA A FINALIZAÇÃO DE UM BLOCO DE COMANDO

comandos INDICA COMANDOS DA LINGUAGEM C QUE PODEM SER UTILIZADOS NO CORPO DA FUNÇÃO main()

Page 14: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C COMANDOS DE ENTRADA E SAÍDA

#include <stdio.h>

main()

{

int valorint;

printf (“Entre com o valor da variável “);

scanf (“%d”, &valorint);

printf (“O valor que você digitou foi %d\n”, valorint );

}

Page 15: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM CDESCRIÇÃO DE printf E scanf

NO PROGRAMA ANTERIOR, FOI DECLARADA UMA VARÍAVEL CHAMADA variavel DO TIPO int QUE REFERE-SE A UM INTEIRO (VISTO ADIANTE)

A LINHA printf (“Entre com o valor da variável “); IRÁ MOSTRAR A EXPRESSÃO QUE ESTÁ ENTRE ASPAS

A LINHA scanf (“%d”, &valorint); IRÁ LER DO TECLADO UM VALOR INTEIRO QUE SERÁ ARMAZENADO NA VARIÁVEL valorint

A LINHA printf (“O valor que você digitou foi %d\n”, valorint ); IRÁ MOSTRAR O CONTEÚDO A EXPRESSÃO QUE ESTÁ ENTRE ASPAS E O LOCAL QUE POSSUI %d, SERÁ SUBSTITUIDO PELO CONTEÚDO DA VARIÁVEL valorint. O \n IRÁ GERAR UM CRLF (NOVA LINHA) APÓS O FINAL DA MENSAGEM

Page 16: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C FUNÇÃO

UMA FUNÇÃO É UM BLOCO DE COMANDOS QUE EXECUTA UMA ÚNICA FUNÇÃO, SEMELHANTE AS FUNÇÕES DE UMA CALCULADORA

EXEMPLO DE FUNÇOES:

RAIZ QUADRADA - SQRT

ORDENAÇÃO - SORT

LOGARÍTMO - LOG

Page 17: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C FORMA GERAL DE UMA FUNÇÃO

nome-da-função (declarações dos parâmetros)

{

comandos;

}

COMO PODEMOS VER, A ESTRUTURA É BEM SEMELHANTE A ESTRUTURA DE UM PROGRAMA EM C.

NA VERDADE O main () É A FUNÇÃO PRINCIPAL DO PROGRAMA.

ASSIM, SEMPRE IRÁ EXISTIR PELO MENOS UMA FUNÇÃO EM UM PROGRAMA EM C, ISTO É, A FUNÇÃO main().

Page 18: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C FUNÇÃO - EXEMPLO

#include <stdio.h>

main ()

{

soma ();

}

soma ()

{

int a, b, c;

a = 10;

b = 10;

c = a + b;

printf (“O valor da soma foi %d\n”, c);

}

Page 19: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C FUNÇÃO - ARGUMENTOS

ARGUMENTOS DE UMA FUNÇÃO É SIMPLESMENTE UM VALOR QUE É PASSADO PARA A FUNÇÃO NA HORA EM QUE ELA É CHAMADA.

A FUNÇÃO ANTERIOR soma() NÃO NECESSITA DE NENHUM ARGUMENTO DURANTE A SUA CHAMADA, A FUNÇÃO printf E scanf, NECESSITAM DE ARGUMENTOS NA HORA DE SUA CHAMADA.

Page 20: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C PARÂMETROS x ARGUMENTOS

ARGUMENTOS REFERE-SE AO VALOR QUE É USADO PARA CHAMAR UMA FUNÇÃO.

PARÂMETROS REFERE-SE À VARIÁVEL EM UMA FUNÇÃO QUE RECEBE O VALOR DOS ARGUMENTOS USADOS NA CHAMADA DA FUNÇÃO

É IMPORTANTE QUE DEVE FICAR CLARO QUE, A VARIÁVEL USADA COMO ARGUMENTO NA CHAMADA DE UMA FUNÇÃO NÃO TEM NADA A VER COM O PARÂMETRO QUE RECEBE O VALOR DESTA VARIÁVEL.

FUNÇÕES QUE ACEITAM ARGUMENTOS SÃO CHAMADAS DE FUNÇÕES PARAMETRIZADAS E POSSUEM UM COMPORTAMENTO DINÂMICO

Page 21: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C FUNÇÃO PARAMETRIZADA

#include <stdio.h>

main ()

{

int a = 10, b=20, c;

soma (a, b);

printf (“O valor da soma é %d \n”, c );

}

soma (int x,int y )

{

int z;

z = x + y;

printf (“O valor da soma foi %d\n”, z );

}

Page 22: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C FUNÇÃO-RETORNO DE VALOR

UMA FUNÇÃO PODE RETORNAR ALGUM VALOR PARA A FUNÇÃO CHAMADORA, ESTE VALOR É CHAMADO DE VALOR DE RETORNO DA FUNÇÃO.

Page 23: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C FUNÇÃO-RETORNO DE VALOR

#include <stdio.h>

main ()

{

int resultado;

resultado = soma (10, 20);

printf (“o resultado final é %d\n”, resultado );

}

soma (int a, int b)

{

int c;

c = a + b;

return ( c );

}

Page 24: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C FUNÇÃO-RETORNO DE VALOR

NESSE EXEMPLO, A FUNÇÃO SOMA DEVOLVE O RESULTADO DE a + b QUE ESTÁ ARMAZENADO EM c USANDO O COMANDO return.

O PROGRAMA ENTÃO ATRIBUI ESSE VALOR PARA A VARIÁVEL resultado, ISTO É, O VALOR DEVOLVIDO PELO COMANDO return SE TORNA O VALOR DE soma () NA ROTINA CHAMADA.

NO EXEMPLO, O VALOR DE RETORNO É DO TIPO int, MAS FUNÇÕES PODEM DEVOLVER OUTROS TIPOS DE DADOS. POR DEFAULT UMA FUNÇÃO DEVOLVE SEMPRE UM VALOR DO TIPO int

É POSSÍVEL UTILIZAR O COMANDO return SEM NENHUM VALOR LIGADO A ELA.

Page 25: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C COMANDOS INICIAIS - if

O COMANDO if AVALIA SE UMA EXPRESSÃO LÓGICA É VERDADEIRA OU FALSA.

A FORMA MAIS SIMPLES DO COMANDO if é

if ( condição )

comando;

EXEMPLO:

if (a < b )

printf (“A e menor que B );

Page 26: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C COMANDOS INICIAIS - if

OPERADORES DE COMPARAÇÃO

< - MENOR QUE

> - MAIOR QUE

<= - MENOR OU IGUAL QUE

>= MENOR OU IGUAL QUE

== IGUAL QUE

!= DIFERENTE DE

A ANALISE DAS EXPRESSÕES LÓGICAS SEMPRE RESULTAM EM UM VALOR 0 OU 1;

Page 27: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C COMANDOS INICIAIS - for

COMANDO DE LOOP (REPETIÇÃO)

A FORMA MAIS SIMPLES DO COMANDO for É

for (inicialização, condição, incremento)

comando;

inicialização AJUSTA A VARIÁVEL DE CONTROLE DO LOOP PARA UM VALOR INICIAL

A condição É TESTADO TODA VEZ QUE O LOOP SE REPETE, SE A condição FOR VERDADEIRO, O LOOP CONTINUA A SER EXECUTADO

incremento INCREMENTA UMA VARÍAVEL DE CONTROLE DE LOOP

Page 28: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C COMANDO for - EXEMPLO

#include <stdio.h>

main()

{

int cont;

for ( cont = 0; cont <= 100; cont++ )

printf (“%d\n”, cont);

}

OBSERVAÇÃO:

a = a + 1 ========= a++

a = a - 1 ========= a--

Page 29: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C BLOCOS DE CÓDIGO

UM BLOCO DE CÓDIGO É UM GRUPO DE COMANDOS (DOIS OU MAIS) DE PROGRAMAS LÓGICAMENTE AGRUPADOS

UM BLOCO DE CÓDIGO É CRIADO QUANDO É COLOCADO UMA SEQUENCIA DE COMANDO ENTRE CHAVES

EXEMPLO:

if ( a >= b)

{

printf (“O valor comparado é muito baixo, tente novamente”);

scanf (“%d”,^&b)

}

Page 30: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C BLOCOS DE CÓDIGO

SÃO UMA UNIDADE LÓGICA

UM COMANDO NÃO PODE SER EXECUTADO SEM QUE O OUTRO TAMBEM SEJA EXECUTADO

PERMITE QUE SE IMPLEMENTE ALGORITMOS COM MAIOR CLAREZA, ELEGÂNCIA E EFICIÊNCIA

AJUDAM A CONCEITUALIZAR A VERDADEIRA NATUREZA DA ROTINA

UM BLOCO DE CÓDIGO PODE TER UM COMANDO APENAS, NESTE CASO NÃO É NECESSÁRIO O ABRE E FECHA CHAVES

O MAIS COMUM É TER NO MÍNIMO DOIS COMANDOS

Page 31: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C CARACTERES

OUTRO TIPO IMPORTANTE EM C É O TIPO char (CARACTER)

UM CARACTER É UM VALOR DE UM BYTE QUE É UTILIZADO PARA MANTER CARACTERES IMPRIMÍVEIS OU INTEIROS NA ESCALA DE -128 A + 127

EM UM PROGRAMA, A CONSTANTE DE UM CARACTERE

APARECE ENTRE ASPAS SIMPLES

Page 32: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C CARACTERES - EXEMPLO

#include <stdio.h>

main()

{

char ch;

printf (“Entre com o caracter: “);

scanf (“%c”, &ch)

printf (“A entrada foi %c\n”, ch);

ch = ‘T’;

printf (“O valoR de ch é = %c\n”, ch);

}

Page 33: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C CARACTERES - GETCH, GETCHE

#include <stdio.h>

main()

{

char ch;

ch = getche();

if (ch == ‘H’)

printf (“Você apertou a tecla mágica\n\n\n”);

else

printf (“Você apertou a tecla errada, tente novamente\n\n\”);

}

Page 34: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C DIFERENÇA - getch, getche, scanf

scanf (“%c”, &ch) - ESPERA A DIGITAÇÃO DE UM CARACTER E A SEGUIR A TECLA ENTER;

ch = getche () - APÓS A LEITURA DE UM CARACTER DO TECLADO O CARACTER É MOSTRADO NA TELA E ARMAZENADO NA VARIÁVEL ch, NÃO É NECESSÁRIO APERTAR A TECLA ENTER.

ch = getch() - APÓS A LEITURA DE UM CARACTER DO TECLADO O CARACTER NÃO É MOSTRADO NA TELA E ARMAZENADO NA VARIÁVEL ch, NÃO É NECESSÁRIO APERTAR A TECLA ENTER

Page 35: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C STRING E MATRIZES

UMA STRING É UMA MATRIZ DE CARACTERES TERMINADO POR UM ZERO BINÁRIO

EM C NÃO EXISTE O TIPO STRING

UMA MATRIZ É UM LISTA DE VARIÁVEIS DO MESMO TIPO

A MATRIZ É CRIADA , COLANDO ENTRE COLCHETES O SEU TAMANHO, DEPOIS DO NOME DA MATRIZ

EXEMPLO:

char ch[15];

Page 36: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C STRING E MATRIZES

O PRIMEIRO ELEMENTO DE UMA MATRIZ É SEMPRE ZERO

O SEGUNDO ELEMENTO É 1

O ULTIMO ELEMENTO DE UMA MATRIZ É SEMPRE O NÚMERO DE ELEMENTO MENOS 1 ( N - 1 )

PARA FAZER REFERENCIA A UM ELEMENTO ESPECÍFICO DA MATRIZ, É COLOCADO O ÍNDICE DO ELEMENTO ENTRE COLCHETES, DEPOIS DO NOME DA MATRIZ

EXEMPLO:

if (ch[0] == ‘H’) ......

ch[ n - 1 ] = ‘h’

Page 37: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C STRING E MATRIZES

A CARACTERÍSTICA MAIS IMPORTANTE A SER LEMBRADO EM LINGUAGEM C É QUE A LINGUAGEM NÃO FAZ VERIFICAÇÃO DE LIMITE, ISTO SIGNIFICA QUE É NECESSÁRIO TER MUITO CUIDADO PARA NÃO IR ALÉM DOS LIMITES DA MATRIZ.

PARA O MOMENTO, A MANEIRA MAIS FÁCIL DE EVITAR ESSES PROBLEMA É USAR UMA MATRIZ QUE SEJA GRANDE O SUFICIÊNTE PARA CONTER TUDO O QUE VOCÊ QUISER COLOCAR DENTRO DELA.

Page 38: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C STRING E MATRIZES

EM C TODAS AS STRINGS TERMINAM COM UM ZERO BINÁRIO QUE É ESPECIFICADO EM UM PROGRAMA NA FORMA DA CONSTANTE DE CARACTERE ‘\0’.

EXEMPLO: ch[14] = ‘\0’;

PORTANTO, UMA MATRIZ ESTÁ SENDO PROJETADA PARA SUPORTAR NO MÁXIMO 14 CARACTERES, NECESSITAMOS AUMENTAR EM UM ESSE TAMANHO PARA FINALIZAR A STRING COM O ‘\0’;

Page 39: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C STRING E MATRIZES

PARA LER UMA STRING DO TECLADO, PRIMEIRO É NECESSÁRIO CRIAR UMA MATRIZ DE CARACTERES PARA CONTER A STRING E DEPOIS UTILIZAR A FUNÇÃO gets(). ESTA FUNÇÃO RECEBE O NOME DA STRING COMO ARGUMENTO E LÊ OS CARACTERES DO TECLADO ATÉ SER PRESSIONADO A TECLA ENTER, O ENTER NÃO É ARMAZENADO, MAS SUBSTITUIDO PELO TERMINADOR ZERO (‘\0’)

Page 40: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C STRING E MATRIZES

#include <stdio.h>

main()

{

char str[80];

printf (“Entre com a string: “);

gets (str);

printf (“A string informada foi %s\n”, str );

}

A FORMATAÇÃO %s DIZ PARA A FUNÇÃO printf PARA IMPRIMIR UMA STRING

Page 41: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C printf - STRING DE FORMATAÇÃO

A FORMA GERAL DE UTILIZAÇÃO DA FUNÇÃO printf () É:

printf (“string de controle”, lista de argumentos)

NA FUNÇÃO printf(), A string de controle CONTÉM CARACTERES QUE SERÃO EXIBIDOS NA TELA, COMANDOS DE FORMATAÇÃO QUE DIZEM AO printf() COMO EXIBIR OS ARGUMENTOS RESTANTES OU AMBOS.

CODIGOS DE FORMATAÇÃO VISTO ATÉ O MOMENTO:

%d - MOSTRA UM INTEIRO NO FORMATO DECIMAL

%f - MOSTRA UM FLOAT EM FORMATO DECIMAL

%c - MOSTRA UM CARACTER

%s - MOSTRA UMA STRING

Page 42: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C printf - VARIAÇÕES DE USO

#include <stdio.h>

main()

{

int i = 10;

float j = 10.123;

char k = ‘H’, str[20] = “Bom dia”;

printf (“Uma string qualquer\n”);

printf (“%d %f %c % s\n\n\n”, i, j, k, str );

printf (“MSG - %d %f, %c, %s\n\n\n”, 102, j, ‘K’, “Boa Tarde”);

}

Page 43: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C scanf - STRING DE FORMATAÇÃO

A FORMA GERAL DE UTILIZAÇÃO DA FUNÇÃO scanf() É:

scanf (“string de controle”, lista de argumentos);

NO MOMENTO VAMOS ASSUMIR QUE NA string de controle PODE CONTER APENAS CÓDIGOS DE FORMATAÇÃO

QUE SÃO:

%d - LEITURA DE UM NÚMERO INTEIRO

%f - LEITURA DE UM NÚMERO COM PONTO FLUTUANTE, SEPARANDO A CASA DECIMAL POR UM PONTO (.)

NA LISTA DE ARGUMENTOS, UM & DEVE PRECEDER AS VARIÁVEIS QUE IRÃO RECEBER OS VALORES LIDOS DO TECLADO.

Page 44: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C COMENTÁRIOS E ENDENTAÇÃO

COMENTÁRIOS EM LINGUAGEM C É FEITO DA SEGUINTE FORMA:

/* Isto é um Comentário em C */

TUDO QUE ESTIVER EM /* E */ SERÁ CONSIDERADO COMO UM COMENTÁRIO E NÃO SERÁ PROCESSADO PELO COMPILADOR

ENDENTAÇÃO É A PRÁTICA DE ALINHAR OS BLOCOS DE COMANDOS PARA FACILITAR A LEITURA. A ENDENTAÇÃO NÃO É NECESSÁRIO NA LINGUAGEM C, MAS É FORTEMENTE RECOMENDADO QUE O FAÇA.

UM NÍVEL DE ENDENTAÇÃO É FEITO A PARTIR DA ABERTURA DE UMA CHAVE E O SEU FECHAMENTO.

Page 45: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C ENDENTAÇÃO - EXEMPLO

If (a == 0 )

{

b = b * 3;

if ( b > 4 )

{

g = a * 4;

h = a / 4;

}

}

Page 46: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C PALAVRAS RESERVADAS

Page 47: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C IDENTIFICADORES

A LINGUAGEM C DEFINE IDENTIFICADORES COMO SENDO NOMES USADOS PARA SE FAZER REFERÊNCIA A VARIÁVEIS, FUNÇÕES, RÓTULOS, E VÁRIOS OUTROS OBJETOS DEFINIDOS PELO USUÁRIO.

UM IDENTIFICADOR PODE TER VÁRIOS CARACTERES. O PRIMEIRO DEVE SER SEMPRE UMA LETRA OU UM SUBLINHADO E OS CARACTERES SEGUINTE DEVEM SER LETRAS, NUMEROS OU UM SUBLINHADO

UM IDENTIFICADOR PODE TER NO MÁXIMO 32 CARACTERES

EXEMPLO: VAR1, VAR_2, VARXYZ, _123VAR - VALIDOS

12VAR, !VAR, %XYZ - NÃO VÁLIDOS.

Page 48: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C TIPOS DE DADOS

TODAS AS VARIÁVEIS DEVEM SER DECLARADAS ANTES DE SER DE SEU USO. ISTO É NECESSÁRIO PORQUE O COMPILADOR C DEVE SABER QUE TIPO DE DADO A VARIÁVEL É ANTES DE COMPILAR QUALQUER COMANDO NA QUAL A VARIÁVEL É UTILIZADA.

EM ALGORITMOS GERALMENTE EXISTEM OS SEGUINTES TIPOS: NÚMERO, LITERAL E BOOLEANO

EM C EXISTEM OS SEGUINTES TIPOS: CARACTER (char), INTEIRO (int), PONTO FLUTUANTE (float), PONTO FLUTUANTE DE DUPLA PRECISÃO (double), E SEM VALOR (void)

Page 49: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C TIPOS DE DADOS

char - UTILIZADO PARA ARMAZENAR CARACTERES ASCII DE 8 BITS COMO AS LETRAS, ‘A’, ‘a’, ‘b’, ‘B’.

int - UTILIZADO PARA ARMAZENAR QUANTIDADES INTEIRAS QUE NÃO REQUEIRAM UM COMPONENTE FRACIONÁRIO, GERALMENTE UTILIZADO PARA CONTROLAR LOOPS E COMANDOS CONDICIONAIS.

float, double - UTILIZADO QUANDO É NECESSÁRIO UM COMPONENTE FRACIONÁRIO O QUANDO SEU APLICATIVO NECESSITA DE UM VALOR MUITO GRANDE. A DIFERENÇA ENTRE DOUBLE E FLOAT É A MAGNETUDE DO MAIOR E DO MENOR NÚMERO QUE ELAS PODEM CONTER.

Page 50: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C TIPOS DE DADOS

Page 51: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C MODIFICADORES DE TIPO

MODIFICADORES DE TIPO É UTILIZADO PARA ALTERAR O SIGNIFICADO DO TIPO-BASE PARA QUE ELE SE ADAPTE DE MANEIRA MAIS PRECISA ÀS NECESSIDADES DAS VÁRIAS SITUAÇÕES

OS MODIFICADORES DE TIPO SÃO: signed (com sinal), unsigned (sem sinal), long, short

APLICAMOS OS MODIFICADORES signed, unsigned, long e short AOS TIPOS BASE char E int. E TAMBÉM PODEMOS APLICAR long AO TIPO BASE double

POR DEFAULT O TIPO BASE int JÁ signed

Page 52: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C SINALIZAÇÃO DE VARIÁVEIS

PARA REPRESENTAR O SINAL DE UMA VARIÁVEL, É UTILIZADO O BIT DE MAIOR GRANDEZA.

EXEMPLO:

+127 EM BINÁRIO É 00000000 01111111

-127 EM BINÁRIO É 10000000 01111111

* bit de sinal

Page 53: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C MODIFICADORES DE TIPO

Page 54: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C EXEMPLO - MODIF. DE TIPOS

#include <stdio.h>

main()

{

unsigned int i = 4294967290;

int j;

j = i;

printf (“%u %d \n”, i, j);

}

EXIBE: 4294967295 -1

%u É UM NOVO CÓDIGO DE FORMATAÇÃO PARA IMPRIMIR UM INTEIRO SEM SINAL

Page 55: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LINGUAGEM C DECLARAÇÃO DE VARIÁVEIS

FORMA GERAL DE DECLARAÇÃO DE VARIÁVEIS:

tipo lista_variaveis;

tipo DEVE SER UM TIPO VÁLIDO EM C E lista_variaveis PODE CONSISTIR E UM OU MAIS IDENTIFICADORES SEPARADOS POR VÍRGULA.

EXEMPLO:

int i, j, k;

unsigned int si;

float balanco, lucro, prejuizo;

Page 56: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

REGRAS DE ESCOPO

O LUGAR ONDE UMA VARIÁVEL É DECLARADA AFETA EM MUITO A MANEIRA COMO AS OUTRAS PARTES DE SEU PROGRAMA PODEM USAR AQUELA VARIÁVEL.

AS REGRAS QUE DETERMINAM COMO UMA VARIÁVEL PODE SER UTILIZADA COM BASE NO LUGAR DE SUA DECLARAÇÃO NO PROGRAMA SÃO CHAMADAS REGRAS DE ESCOPO DA LINGUAGEM.

AS VARIÁVEIS PODEM SER DECLARADAS EM TRÊS LOCAIS DE SEU PROGRAMA:

- FORA DE TODAS AS FUNÇÕES (VARIÁVEIS GLOBAIS)

- DENTRO DE UMA FUNÇÃO (VARIÁVEIS LOCAIS)

- DECLARAÇÃO DOS PARÂMETROS FORMAIS DE FUNÇÃO

Page 57: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

REGRAS DE ESCOPO

VARIÁVEIS GLOBAIS PODE SER UTILIZADA EM QUALQUER PARTE DO PROGRAMA

VARIÁVEIS LOCAIS PODEM SER UTILIZADAS SOMENTE PELOS COMANDOS QUE ESTIVEREM DENTRO DA MESMA FUNÇÃO. EM ESSÊNCIA, UMA VARIÁVEL LOCAL É CONHECIDA SOMENTE DENTRO DA FUNÇÃO E DESCONHECIDA FORA DAQUELA FUNÇÃO.

PARÂMETROS FORMAIS DE FUNÇÃO SÃO UTILIZADOS PARA RECEBER OS ARGUMENTOS QUE SÃO PASSADOS PARA A FUNÇÃO, ESSES PARÂMETROS FUNCIONAM COMO QUALQUER OUTRA VARIÁVEL LOCAL.

Page 58: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

REGRAS DE ESCOPO - EXEMPLO

Page 59: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

REGRAS DE ESCOPO - COMENTÁRIOS DO PROGRAMA

QUALQUER FUNÇÃO PODE ACESSAR A VARIÁVEL sum

A FUNÇÃO total() NÃO PODE ACESSAR DIRETAMENTE A VARIÁVEL LOCAL count DA FUNÇÃO main(), QUE DEVE SER PASSADA COMO UM ARGUMENTO. ISTO É NECESSÁRIO PORQUE UMA VARIÁVEL LOCAL SÓ PODE SER USADA PELO CÓDIGO QUE ESTÁ NA MESMA FUNÇÃO NA QUAL ELA É DECLARADA.

NA FUNÇÃO display(), A VARIÁVEL count É COMPLETAMENTE SEPARADA DA VARIÁVEL count DA FUNÇÃO main(), NOVAMENTE POR QUE UMA VARIÁVEL LOCAL É CONHECIDA APENAS PELA FUNÇÃO NA QUAL ELA É DECLARADA

Page 60: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

REGRAS DE ESCOPO - OBSERVAÇÕES

NÃO PODE EXISTIR DUAS VARIÁVEIS GLOBAIS COM O MESMO NOME

UMA VARIÁVEL LOCAL EM UMA FUNÇÃO PODE TER O MESMO NOME DE UMA VARIÁVEL LOCAL EM OUTRA FUNÇÃO. A RAZÃO PARA ISTO É QUE O CÓDIGO E OS DADOS DENTRO DE UMA FUNÇÃO SÃO COMPLETAMENTE SEPARADOS DAQUELES EM OUTRA FUNÇÃO.

DUAS VARIÁVEIS DENTRO DE UMA MESMA FUNÇÃO NÃO PODE TER O MESMO NOME

Page 61: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

OPERADORES DE RELAÇÃO E LÓGICOS

OPERADORES DE RELAÇÃO REFERE-SE ÀS RELAÇÕES QUE OS VALORES PODEM TER UNS COM OS OUTROS

OPERADORES LÓGICOS REFERE-SE ÀS MANEIRAS COMO AS RELAÇÕES PODEM SER CONECTADAS.

OPERADORES DE RELAÇÃO: >, <, <=, >=, ==, !=

OPERADORES LÓGICOS: && (and) || (or) ! (not)

EXEMPLOS:

(a > b ), (c <= d), (a == b ), (e != a )

((a > b) && ( c <= d)), (((e != a ) || ( a == b ))) && (c < d ))

Page 62: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

OPERADORES DE RELAÇÃO E LÓGICOS

A CHAVE PARA O CONCEITO DOS OPERADORES DE RELAÇÃO E LÓGICOS É A IDÉIA DE VERDADEIRO E FALSO

EM C, VERDADEIRO É QUALQUER VALOR DIFERENTE DE ZERO, ENQUANTO FALSO É ZERO.

AS EXPRESSÕES QUE USAM OPERADORES DE RELAÇÃO E LÓGICOS RETORNARÃO 0 PARA FALSO E 1 PARA VERDADEIRO.

Page 63: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

OPERADORES DE RELAÇÃO E LÓGICOS

main()

{

int i = 10, j = 20, k;

k = (i < j);

printf (“O conteúdo de i < j é %d\n”, k );

}

Page 64: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

COMANDOS DE CONTROLE DE FLUXO - COMANDO if

If (condicao)

comando/Bloco de comando;

else

comando/Bloco de comando;

if ANINHADOS

if (condicao1)

if (condicao2)

if (condicao3)

if condicao4)

Page 65: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

if ANINHADOS COM elseIf (x)

if (y)

printf (“1”);

else

printf (“2”);

if (x)

{

if (y)

printf (“1”)

}

else printf (“2”);

Page 66: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

ESCADA if-else-if

If (condicao1)

comando/bloco de comando

else

if (condicao2)

comando/bloco de comando

else

if (condicao3)

comando/bloco de comando

else

comando/bloco de comando

Page 67: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

COMANDO switch

A ESCADA if-else-if GERA UM CÓDIGO DIFICIL DE SER SEGUIDO E NÃO GERA UMA SOLUÇÃO ELEGANTE.

A LINGUAGEM C TEM UM COMANDO DE VÁRIOS DESVIOS CHAMADO DE SWITCH.

EM SWITCH, O COMPUTADOR TESTA UMA VARIÁVEL SUCESSIVAMENTE CONTRA UMA LISTA DE CONSTANTES INTEIRAS OU DE CARACTERES. DEPOIS DE ENCONTRAR UMA COINCIDÊNCIA, O COMPUTADOR EXECUTA O COMANDO OU BLOCO DE COMANDOS QUE ESTEJAM ASSOCIADOS ÀQUELA CONSTANTE

Page 68: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

COMANDO switchSwitch (variável)

{

case constante1 : sequência de comandos;

break;

case constante2 : sequência de comandos;

break;

case constante3 : sequência de comandos;

break;

default : sequência de comandos;

}

Page 69: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

COMANDO SWITCH ANINHADOswitch (x)

{

case 1 :

switch (y )

{

case ‘a’ : sequência de comandos;

break;

case ‘b’ : sequência de comandos;

break;

}

break;

case 2 :

}

Page 70: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LOOP for

For ( i = 0; i < 100; i ++ )

comando/Bloco de comandos;

for ( i = 0; i < 100; i++ )

for ( j = 0; j < 50, j++);

printf (“%d “, matriz[i][j] );

for ( ; ; ) // Looping infinito

comando/Bloco de comandos;

for (x = 0; x != 123; )

comando/Bloco de comandos

Page 71: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

LOOP while e do-while

while (condicao)

comando/Bloco de comandos;

while (1) // looping

comando/Bloco de comandos;

do

{

comando/Bloco de comandos;

} while (condicao)

Page 72: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

INTERRUPÇÃO DE LOOPSO COMANDO BREAK TEM DOIS USOS. O PRIMEIRO É ENCERRAR UM case NO COMANDO switch. O SEGUNDO É FORÇAR O TÉRMINO IMEDIATO DE UM LOOP, PASSANDO POR CIMA DO TESTE NORMAL DO LOOP.

QUANDO O COMPUTADOR ENCONTRA O COMANDO break DETRO DE UM LOOP, ELE IMEDIATAMENTE ENCERRA O LOOP MAIS INTERNO.

for ( i = 0 ; i < 1000; i++)

{

if ( i == 100 ) break;

printf (“Estou em looping no for “);

}

Page 73: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

COMANDO continue

O COMANDO continue FUNCIONA DE MANEIRA PARECIDA COM O COMANDO break. PORÉM EM VEZ DE FORÇAR O ENCERRAMENTO, continue FORÇA A PRÓXIMA ITERAÇÃO DO LOOP E PULA O CÓDIGO QUE ESTIVER NO MEIO.

for (x = 0; x < 100; x++ )

{

if ( x % 2 )

continue;

printf (“%d\n”, x );

}

Page 74: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

MATRIZES MULTIDIMENSIONAISEM LINGUAGEM C, A FORMA MAIS SIMPLES DE UMA MATRIZ MULTIDIMENSIONAL É A MATRIZ BIDIMENSIONAL QUE É DECLARADO DA SEGUINTE FORMA:

int multidim[4][3]

NO CASO ACIMA FOI DEFINIDO UMA MATRIZ MULTIDIMENSIONAL COM DUAS DIMENSÕES, ISTO É, 4 LINHAS E TRÊS COLUNAS, ONDE O PRIMEIRO ELEMENTO DESTA MATRIZ POSSUI O INDICE [0][0] E O ÚLTIMO ELEMENTO POSSUI O INDICE [3][2].

C ALOCA PERMANENTEMENTE ESPAÇO NA MEMÓRIA PARA TODOS OS ELEMENTOS DA MATRIZ. NO CASO DE UMA MATRIZ BIDIMENTSIONAL, PODEMOS UTILIZA A FÓRMULA ABAIXO PARA ENCONTRAR O NÚMERO DE BYTES DE MEMÓRIA. - BYTES = LINHA * COLUNA * SIZEOF (TIPO_DADO)

Page 75: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

MATRIZES MULTIDIMENSIONAIS

Main()

{

int x, y;

int varmat[5][4];

for (x = 0; x < 5; x++)

for (y = 0; y < 4; y++)

varmat[x][y] = 0;

}

Page 76: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

MATRIZES DE STRINGS

EM PROGRAMAÇÃO NÃO É MUITO RARO USAR UMA MATRIZ DE STRINGS COMO POR EXEMPLO UM BANCO DE DADOS DE ERROS, EXEMPLO

1 - ARQUIVO NÃO ECONTRADO

2 - ARQUIVO BLOQUEADO

DEFINIÇÃO DE UMA MATRIZ DE STRING

char matriz_de_erro [10][80]

ACIMA DEFINIMOS UMA MATRIZ COM 10 LINHAS DE ERRO E MENSAGENS QUE NÃO TÊM MAIS DO QUE 80 COLUNAS.

PRIMEIRO INDICE INDICA NÚMERO DE LINHAS E O SEGUNDO INDICE INDICA A QUANTIDADE DE CARACTERES DE CADA LINHA

Page 77: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

MATRIZES DE STRINGS - FUNÇÃO gets

PARA REALIZAR A ENTRADA DE DADOS DE UMA MATRIZ DE CARACTERES UTILIZAMOS A FUNÇÃO gets DA SEGUINTE FORMA:

char arraymsg[5][80];

gets (&arraymsg[0][0]);

PARA MOSTRAR AS MENSAGENS UTILIZAMOS O CÓDIGO ABAIXO:

for (x=0; x < 5; x++)

printf (“%s\n”, arraymsg[x][0];

Page 78: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

INICIALIZAÇÃO DE MATRIZES

A LINGUAGEM C PERMITE A INICIALIZAÇÃO DE MATRIZES DA SEGUINTE FORMA:

MATRIZES UNIDIMENSIONAIS

int var[5] = {1,2,3,4,5};

char var[5] = {‘a’, ‘b’, ‘c’, ‘d’, ‘\0’ }; ou char var[5]=“abcd”

MATRIZES MULTIDIMENSIONAIS

int var[2][3] = {1,2,4,

5,6,7}

Page 79: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

INICIALIZAÇÃO DE MATRIZESMATRIZES SEM TAMANHO DEFINIDO

EM ALGUMAS VEZES É NECESSÁRIO CONTAR O NÚMERO DE CARACTERES PARA DEFINIR O TAMANHO DE UMA MENSAGENS:

char e1[12]=“read error \n”;

char e2[13]=“write error \n”;

O COMPILADOR C PERMITE A DETERMINAÇÃO DINÂMICA DO TAMANHO DA MATRIZ QUE INICIALIZADA NO MOMENTO DA SUA CRIAÇÃO, DESTA FORMA NÃO É NECESSÁRIO PREOCUPAR-SE COM O SEU TAMANHO

char e1[ ]=“read error \n”;

char e2[ ]=“write error”\n”;

Page 80: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

INICIALIZAÇÃO DE MATRIZES

A FUNÇÃO sizeof PODE SER UTILIZADO PARA RESGATAR O ESPAÇO DE MEMÓRIA OCUPADO POR UMA VARIÁVEL EM MEMÓRIA .

main()

{

int x, y[10], z[2] [2], tx, ty, tz;

tx = sizeof (x);

ty = sizeof (y);

tz = sizeof (z);

printf (tx = %d, ty = %d, tz = %d\n”, tx, ty, tz)

}

Page 81: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

PONTEIROS

Page 82: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

PONTEIROS

UM PONTEIRO É UMA VARIÁVEL QUE CONTÉM O ENDEREÇO DE MEMÓRIA, OU SEJA, ESSE ENDEREÇO É A LOCALIZAÇÃO DE UMA OUTRA VARIÁVEL NA MEMÓRIA.

SE UMA VARIÁVEL CONTÉM O ENDEREÇO DE UMA OUTRA VARIÁVEL, ENTÃO DIZEMOS QUE A PRIMEIRA APONTA PARA A SEGUNDA.

Page 83: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

PONTEIROS-DECLARAÇÃO DE VARIÁVEIS

DECLARAÇÃO DE PONTEIRO: tipo *nome_var;

EXEMPLO: int *ptr

Page 84: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

PONTEIROS-OPERADORESOPERADORES DE PONTEIROS:

EXEMPLO:

int a = 0;

int *ptr;

ptr = &a;

printf (“Conteúdo da Variavel ptr e %p\n”, ptr );

& - OPERADOR UNÁRIO QUE DEVOLVE O ENDEREÇO DE MEMÓRIA DA VARIÁVEL (a)

NO EXEMPLO ACIMA, A VARIÁVEL( ptr) IRÁ CONTER O ENDEREÇO DE MEMÓRIA DA VARIÁVEL (a). SE A VARIÁVEL (a) ESTÁ LOCALIZADO NO ENDEREÇO 2000, ENTÃO O VALOR DE (ptr) SERÁ 2000.

Page 85: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

PONTEIROS - OPERADORES* - OPERADOR UNÁRIO QUE DEVOLVE O VALOR DA VARIÁVEL LOCALIZADA NO ENDEREÇO QUE SE SEGUE

int a = 0, b = 100;

int *ptr;

ptr = &a;

b = *ptr;

printf (“Conteúdo da posição apontada por %d\n”, b );

NO EXEMPLO ACIMA, A VARIÁVEL (a) ESTÁ LOCALIZADO NA POSIÇÃO 2000 E A VARIÁVEL (b) ESTÁ NA POSIÇÃO 2002 E A VARIÁVEL (ptr) ESTÁ NA POSIÇÃO 2004, O CONTÉUDO DE (a) É 0, DE (b) É 100 E DE (ptr) 2000, NA INSTRUÇÃO (b=*ptr OU b=*(2000)), O VALOR ARMAZENADO NA POSIÇÃO 2000 ESTÁ SENDO ATRIBUÍDO A VARIÁVEL (b)

Page 86: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

PONTEIROS - IMPORTÂNCIA DO TIPOS BASE

NO EXEMPLO ANTERIOR, O VALOR DE DA VARIÁVEL (a) FOI COPIADA PARA A VARIÁVEL (b) DE FORMA INDIRETA, ISTO É, ATRAVÉS DE PONTEIROS

PERGUNTA - COMO A LINGUAGEM C SABE DETERMINAR A QUANTIDADE DE BYTES A SER COPIADO PARA A VARIÁVEL (b) DO ENDEREÇO APONTADO POR (ptr) ????

EM OUTRAS PALAVRAS, COMO É QUE O COMPILADOR TRANSFERE O NÚMERO ADEQUADO DE BYTES PARA QUALQUER ATRIBUIÇÃO QUE USA UM PONTEIRO ?

A RESPOSTA A AMBAS AS PERGUNTAS QUESTÕES É QUE O TIPO-BASE DO PONTEIRO DETERMINA O TIPO DE DADOS PARA O QUAL O COMPUTADOR ASSUME QUE O PONTEIRO ESTÁ APONTANDO.

Page 87: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

PONTEIRO - IMPORTÂNCIA DO TIPO BASE

float x=10.1, y;

int *p;

p = &x;

y = *p;

printf (“%f %f \n”, x, y);

O PROGRAMA ACIMA NÃO IRÁ ATRIBUIR O VALOR DE (x) PARA (y). COMO O PROGRAMA DECLARA (p) COMO SENDO UM PONTEIRO PARA INTERIO, O COMPILADOR IRÁ TRANSFERIR APENAS DOIS BYTES DE INFORMAÇÃO PARA (y) E NÃO 4 BYTES QUE NORMALMENTE FORMAM UM NÚMERO DE FONTO FLUTUANTE

Page 88: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

EXPRESSÕES COM PONTEIROS

EM GERAL AS EXPRESSÕES QUE ENVOLVEM PONTEIROS OBEDECEM ÀS MESMAS REGRAS DAS EXPRESSÕES EM C.

- ATRIBUIÇÕES COM PONTEIROS

int x;

int *p1, *p2;

p1 = &x;

p2 = p1;

printf (“%p %p %d %d \n”, p2, p1, *p1, *p2);

Page 89: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

EXPRESSÕES COM PONTEIROSPODEMOS USAR APENAS DUAS OPERAÇÕES ARITMÉTICAS EM PONTEIROS: + E -.

PARA ENTENDER O QUE OCORRE NA ARITMÉTICA COM PONTEIROS SUPONHA QUE (p1) SEJA UM PONTEIRO PARA UM INTEIRO, COM VALOR CORRENTE DE 2000.

DEPOIS DA EXPRESSÃO

p1++;

O CONTEÚDO DE (p1) SERÁ DE 2002 E NÃO 2001.

SE O VALOR CORRENTE DE (p1) É 2000, ENTÃO APÓS A OPERAÇÃO

p1--;

O VALOR DE (p1) SERÁ DE 1998.

Page 90: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

OPERAÇÕES COM PONTEIRO

char *ch = 2000;

int *i = 2000;

Page 91: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

OPERAÇÕES COM PONTEIROS

CADA VEZ QUE O COMPUTADOR INCREMENTA O PONTEIRO, ELE APONTA PARA A LOCALIZAÇÃO DE MEMÓRIA DO PRÓXIMO ELEMENTO DE SEU TIPO-BASE.

CADA VEZ QUE O COMPUTADOR DECREMENTA O PONTEIRO, ELE APONTA PARA A LOCALIZAÇÃO DE MEMÓRIA DO ELEMENTO ANTERIOR

A LINGUAGEM C PERMITE INCREMENTO E DECREMENTO DE CONSTANTES INTEIRA A UM PONTEIRO:

p1 = p1 + 5;

SE (p1) É UM PONTEIRO PARA UM int E O SEU CONTEÚDO É 2000, ENTÃO APÓS A OPERAÇÃO O SEU VALOR SERÁ DE 2010

Page 92: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

OPERAÇÕES COM PONTEIROS

OPERAÇÕES NÃO PERMITIDAS COM PONTEIROS:

MULTIPLICAR OU DIVIDIR PONTEIROS;

SOMAR OU SUBTRAIR DOIS PONTEIROS;

APLICAR AOS PONTEIROS O DESLOCAMENTO DE BIT A BIT

APLICAR OPERADORES COM MÁSCARA

SOMAR OU SUBTRAIR OS TIPOS double OU float DE OU PARA PONTEIROS

Page 93: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

OPERAÇÕES COM PONTEIROS

- COMPARAÇÕES DE PONTEIROS

É POSSÍVEL COMPARAR DOIS PONTEIROS EM UMA EXPRESSÃO DE RELAÇÃO. POR EXEMPLO DADOS DOIS PONTEIROS p1 E p2, O SEGUINTE FORMATO É PERFEITAMENTE VÁLIDO:

if (p1 < p2 )

printf (“p1 aponta para uma posição inferior de memória do que p2”);

EM GERAL UTILIZAMOS COMPARAÇÕES DE PONTEIROS QUANDO DOIS OU MAIS PONTEIROS ESTÃO APONTANDO PARA UM OBJETO COMUM

Page 94: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

PONTEIROS E MATRIZESEXISTE UM RELACIONAMENTO MUITO PRÓXIMO ENTRE PONTEIROS E AS MATRIZES.

CONSIDERE O FRAGMENTO:

char str[80], *p;

char *p1;

p1 = str;

ESTE FRAGMENTO AJUSTA p1 PARA O ENDEREÇO DO PRIMEIRO ELEMENTO DA MATRIZ (str).

EM C, O NOME DE UMA MATRIZ SEM UM ÍNDICE É O ENDEREÇO DO INÍCIO DA MATRIZ. EM ESSËNCIA, O NOME DA MATRIZ É UM PONTEIRO PARA AQUELA MATRIZ.

Page 95: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

PONTEIROS E MATRIZES

PARA ACESSAR O QUINTO ELEMENTO str[4] OU *(p1 + 4);

É BOM LEMBRAR QUE AS MATRIZES COMEÇAM COM ZERO, PORTANTO ESSES DOIS COMANDOS USAM O NÚMERO 4 PARA INDEXAR (str). PODEMOS TAMBÉM SOMAR 4 AO PONTEIRO (p1) PARA OBTER O QUINTO ELEMENTO, PORQUE (p1) ATUALMENTE APONTA PARA O PRIMEIRO ELEMENTO DE (str).

A LINGUAGEM C PERMITE, ESSENCIALMENTE DOIS MÉTODOS DE ACESSO AOS ELEMENTOS DE UMA MATRIZ: A INDEXAÇÃO E A ARITMÉTICA DE PONTEIROS.

A ARITMÉTICA DE PONTEIRO É MAIS RÁPIDO QUE A INDEXAÇÃO DE MATRIZES.

Page 96: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

PONTEIROS E MATRIZESACESSO ATRAVÉS DE INDEXAÇÃO

main()

{

char str[80] = “Boa Noite Brasil”;

int i;

for (i = 0; str[i]; i++)

printf (“%c”, str[i]);

printf (“\n”);

}

Page 97: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

PONTEIROS E MATRIZESACESSO ATRAVÉS DE PONTEIROS

Main()

{

char str[80] = “Boa Noite Brasil”, *p;

p = str;

while ( *p )

{

printf (“%c”, *p );

p++;

}

}

Page 98: DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO LINGUAGEM C Professor Airton Kuada Email - airton@fesppr.br

INDEXANDO UM PONTEIROEM C PODEMOS INDEXAR UM PONTEIRO COMO SE ELE FOSSE UMA MATRIZ. ESSA HABILIDADE INDICA DE FORMA MAIS CLARA O ESTREITO RELACIONAMENTO ENTRE PONTEIROS E AS MATRIZES

main()

{

int i[5] = {1, 2, 3, 4, 5};

int *p, t;

p = i;

for (t = 0; t < 5; t++)

printf (“%d “, p[t] ); ou printf (“%d”, *(p + t));

}