disciplina de linguagem de programaÇÃo linguagem c professor airton kuada email - airton@fesppr.br
Post on 16-Apr-2015
107 Views
Preview:
TRANSCRIPT
DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO
LINGUAGEM C
Professor Airton KuadaEmail - 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
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
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.
QUESTÕES PRELIMINARES
EXEMPLO DE UM PROGRAMA FONTE EM LIGUAGEM C.
#include <stdio.h>
main ()
{
printf (“Bom final de semana a todos\n”);
}
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;
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
QUESTÕES PRELIMINARES
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)
LINGUAGEM C - CARACTERÍSTICAS
LINGUEM DE NÍVEL MÉDIO
PORTABILIDADE
PADRONIZADA
LINGUAGEM ESTRUTURA
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).
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
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()
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 );
}
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
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
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().
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);
}
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.
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
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 );
}
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.
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 );
}
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.
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 );
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;
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
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--
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)
}
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
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
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);
}
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\”);
}
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
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];
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’
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.
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’;
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’)
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
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
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”);
}
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.
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.
LINGUAGEM C ENDENTAÇÃO - EXEMPLO
If (a == 0 )
{
b = b * 3;
if ( b > 4 )
{
g = a * 4;
h = a / 4;
}
}
LINGUAGEM C PALAVRAS RESERVADAS
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.
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)
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.
LINGUAGEM C TIPOS DE DADOS
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
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
LINGUAGEM C MODIFICADORES DE TIPO
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
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;
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
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.
REGRAS DE ESCOPO - EXEMPLO
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
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
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 ))
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.
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 );
}
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)
if ANINHADOS COM elseIf (x)
if (y)
printf (“1”);
else
printf (“2”);
if (x)
{
if (y)
printf (“1”)
}
else printf (“2”);
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
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
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;
}
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 :
}
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
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)
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 “);
}
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 );
}
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)
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;
}
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
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];
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}
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”;
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)
}
PONTEIROS
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.
PONTEIROS-DECLARAÇÃO DE VARIÁVEIS
DECLARAÇÃO DE PONTEIRO: tipo *nome_var;
EXEMPLO: int *ptr
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.
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)
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.
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
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);
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.
OPERAÇÕES COM PONTEIRO
char *ch = 2000;
int *i = 2000;
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
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
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
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.
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.
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”);
}
PONTEIROS E MATRIZESACESSO ATRAVÉS DE PONTEIROS
Main()
{
char str[80] = “Boa Noite Brasil”, *p;
p = str;
while ( *p )
{
printf (“%c”, *p );
p++;
}
}
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));
}
top related