• Nenhum resultado encontrado

Programação II. Introdução à Linguagem C

N/A
N/A
Protected

Academic year: 2021

Share "Programação II. Introdução à Linguagem C"

Copied!
154
0
0

Texto

(1)

Programação II

(2)

Um Pouco da História da

Linguagem C

● Origem: década de 70 (Dennis Ritchie)

– BCPL → B → C.

● Prover acesso de baixo nível ao hardware (CPU,

I/Os e periféricos) e se entender bem com o Assembly.

● Portável para que o SO executasse em diferentes

plataformas de hardware, além de ter um bom desempenho e otimizar o uso de memória.

(3)

Um Pouco da História da

Linguagem C

(4)

Foi criado um padrão para C pelo ANSI (American

National Standards Institute), em 1989 como ANSI

X3.159-1989 “Programming Language C”,

conhecido com ANSI C ou C89.

● Um ano depois o padrão foi adotado pela ISO

(International Organization for Standardization) como ISO/IEC 9899:1990, também chamado de C90. Na prática, C89 (ANSI C) e C90 (ISO C) referem-se ao mesmo padrão.

A Necessidade de uma

Padronização

(5)

● A partir de 1990, a ISO ficou responsável pela

evolução do padrão. Na década de 90 a ISO corrigiu alguns detalhes e publicou em 1999 o ISO/IEC 9899:1999, que ficou conhecido como C99.

● C1X é um nome não-oficial para um trabalho que

começou em 2007, com o objetivo de revisar e definir um novo padrão para a linguagem C.

A Necessidade de uma

Padronização (2)

(6)

● É uma linguagem estruturada. ● Médio nível.

● Foi criada, influenciada e testada por

programadores. É a mais popular entre os excelentes programadores.

(7)
(8)
(9)

● Compilador lê o programa inteiro, converte-o em

um código-objeto (ou código de máquina) de modo que o computador consiga executá-lo diretamente.

● Interpretador lê o código-fonte linha a linha,

executando a instrução específica daquela linha.

● Vantagens e desvantagens?

(10)

● Declarações globais.

● Funções definidas pelo programador. ● Função main().

(11)

Características do Programa em C

Declarações globais. Funções definidas pelo

programador. Função main().

(12)

● É o ponto de entrada de uma aplicação C. Uma

aplicação C se inicia no método main e, a partir dele, invoca diversas outras funções. Por fim, essa função retorna um valor inteiro.

● Esse valor retornado não é impresso, serve

apenas para indicar ao sistema operacional ou um aplicativo, qual foi o código de retorno. O retorno zero indica que o aplicativo encerrou conforme esperado. Os outros valores podem ser definidos conforme a necessidade de cada aplicação.

(13)

Palavras Reservadas em C

auto double int struct break else long switch

case enum register typedef char extern return union const float short unsigned continue for signed void

default goto sizeof volatile do if static while

(14)

● Criar o programa.

● Compilar o programa.

● Linkeditar o programa com as funções

necessárias da biblioteca.

● Com o uso de uma IDE, este processo é mais

transparente.

(15)

● Quatro regiões logicamente

distintas:

● Código do programa; ● Variáveis globais;

Pilha (stack – variáveis locais e

endereços de funções);

Heap (região de memória livre a ser

requisitada – alocação dinâmica).

Mapa de Memória em C

Pilha

Heap

Variáveis Globais

(16)

● C++ é uma versão estendida e melhorada da

linguagem C que é projetada para suportar programação orientada a objetos (POO).

● C++ contém e suporta toda a linguagem C e mais

um conjunto de extensões orientadas a objetos.

● Você não pode programar em C++ se não souber

C e tudo que aprender em C, poderá ser utilizado em C++.

(17)

Integrated Development Environment ou Ambiente

de Desenvolvimento Integrado:

● Eclipse. ● Dev-Cpp.

(18)

● É o elemento mais fundamental da linguagem C.

● São mais gerais e mais poderosas que na maioria

das outras linguagens de programação.

● As expressões são formadas por:

● dados (representados por variáveis ou constantes); ● operadores. ● Exemplos: ● 2 + 4 * (7 – 3) ● (-b + sqrt(delta)) / (2 * a) ● calcularArea(raio=3.98)

Sintaxe – Expressões

(19)

● Caractere (char); ● Inteiro (int);

● Ponto flutuante (float);

● Ponto flutuante de precisão dupla (double); ● Sem valor (void).

● C não tem um tipo lógico (utiliza-se valores

inteiros: 0 (false) e diferente de zero (true).

● Modificadores: signed, unsigned, long e short.

(20)

● char: representa um caractere ASCII; 1 byte; na

verdade, é um inteiro sem sinal (0 a 255).

(21)

● int: representa um inteiro; 4 bytes (normalmente). ● float: representa um número decimal; 4 bytes

(normalmente).

● double: representa um número decimal com maior

precisão que float; 8 bytes (normalmente).

● void: determina que uma função não retorna nada.

(22)

● São os nomes de variáveis, funções, rótulos e

vários outros objetos definidos pelo usuário.

São case-sensitive (C é case-sensitive). ● Identificador válido:

A primeira letra deve ser uma letra ou um underline ( _ ); – As letras subsequentes devem ser letras, números ou

underline.

Exemplos: idade, nome, sexo, telefone1, a1, A1, _x, _y, ....

(23)

● Uma variável é uma posição nomeada de

memória, que é utilizada para guardar um valor que pode ser modificado pelo programa.

● Todas as variáveis devem ser declaradas e

inicializadas antes de serem utilizadas (C89).

(24)

● Uma variável pode ser declarada:

– dentro de funções (variáveis locais);

– como parâmetros de funções (parâmetros formais); – fora de todas as funções (variáveis globais).

(25)

● Quais são as variáveis locais e globais? E os

parâmetros formais?

(26)

● Quatro regiões logicamente

distintas:

● Código do programa; ● Variáveis globais;

Pilha (stack – variáveis locais e

endereços de funções);

Heap (região de memória livre a ser

requisitada – alocação dinâmica).

Mapa de Memória em C

Pilha

Heap

Variáveis Globais Código do Programa

(27)

● Quais são as variáveis locais e globais? E os

parâmetros formais?

● Locais:

resultado (main).

(28)

● Quais são as variáveis locais e globais? E os parâmetros formais? ● Locais: – resultado (main). ● Globais: – PI (fora de função).

Sintaxe – Variáveis

(29)

● Quais são as variáveis locais e globais? E os parâmetros formais? ● Locais: – resultado (main). ● Globais: – PI (fora de função). ● Parâmetros Formais:

– valor1, valor2 (soma).

(30)

● const: o valor da variável NÃO pode ser

modificado pelo programa. Esse tipo de variável é útil quando se precisa garantir que um valor seja mantido até o final da execução do programa.

Exemplos:

1) const double pi = 3.1415; 2) const int maioridade = 18;

(31)

● volatile: o valor da variável PODE ser alterada de

uma forma não especificada pelo programa, por comandos que fazem parte de outros programas (sistemas em tempo real ou programas concorrentes).

Exemplos:

1) volatile char *port = 0x30; 2) volatile double dolar = 3.49;

(32)

● extern: informa ao compilador que os tipos e

nomes de variável que o seguem foram declarados em outro arquivo fonte.

Sintaxe – Especificadores

de Armazenamento

(33)

● extern: informa ao compilador que os tipos e

nomes de variável que o seguem foram declarados em outro arquivo fonte.

● register: Variável armazenada de tal modo que

seja o mais rápido possível.

Sintaxe – Especificadores

de Armazenamento

(34)

● extern: informa ao compilador que os tipos e

nomes de variável que o seguem foram declarados em outro arquivo fonte.

● register: Variável armazenada de tal modo que

seja o mais rápido possível.

● auto: Declaração de variáveis locais, porém não é

utilizada. Por padrão, todas as variáveis não globais são auto.

Sintaxe – Especificadores

de Armazenamento

(35)

● static: mantém seus valores entre as chamadas

(variáveis permanentes). É inicializada na primeira vez que a função é chamada.

Sintaxe – Especificadores

de Armazenamento

(36)

● static: mantém seus valores entre as chamadas

(variáveis permanentes). É inicializada na primeira vez que a função é chamada.

Sintaxe – Especificadores

de Armazenamento

(37)

● São valores fixos que o programa não pode

alterar.

(38)

● São valores fixos que o programa não pode

alterar.

1) Constante inteira: 1, 2, 55, 89, …

(39)

● São valores fixos que o programa não pode

alterar.

1) Constante inteira: 1, 2, 55, 89, …

2) Constante ponto flutuante: 0.55, 3.14, 6.78, …

(40)

● São valores fixos que o programa não pode

alterar.

1) Constante inteira: 1, 2, 55, 89, …

2) Constante ponto flutuante: 0.55, 3.14, 6.78, … 3) Constante caracter: 'A', 'f', 'X', …

(41)

● São valores fixos que o programa não pode

alterar.

1) Constante inteira: 1, 2, 55, 89, …

2) Constante ponto flutuante: 0.55, 3.14, 6.78, … 3) Constante caracter: 'A', 'f', 'X', …

4) Constante hexadecimal: 0xF (15), 0x18 (24), …

(42)

● São valores fixos que o programa não pode

alterar.

1) Constante inteira: 1, 2, 55, 89, …

2) Constante ponto flutuante: 0.55, 3.14, 6.78, … 3) Constante caracter: 'A', 'f', 'X', …

4) Constante hexadecimal: 0xF (15), 0x18 (24), … 5) Constante octal: 017 (15), 025 (21), …

(43)

● São valores fixos que o programa não pode

alterar.

1) Constante inteira: 1, 2, 55, 89, …

2) Constante ponto flutuante: 0.55, 3.14, 6.78, … 3) Constante caracter: 'A', 'f', 'X', …

4) Constante hexadecimal: 0xF (15), 0x18 (24), … 5) Constante octal: 017 (15), 025 (21), …

6) Constante string: “constantes em C“, “s“, “Oi“...

(44)

● Constantes caracter de barra invertida:

– \n (nova linha)

– \r (retorno do cursor em direção à margem esquerda) – \t (tabulação horizontal em direção à margem direita) – \' (aspas simples) – \“ (aspas duplas) – \0 (nulo) – \\ (barra invertida) – \a (alerta - beep)

Sintaxe – Constantes

(45)

● Aritméticos: + (soma); - (subtração); * (multiplicação); / (divisão); % (resto da divisão).

Sintaxe – Operadores

(46)

● Aritméticos: atribuições compostas.

+= x += 2 (x = x + 2)

(47)

● Aritméticos: atribuições compostas.

+= x += 2 (x = x + 2) -= x -= 2 (x = x – 2);

(48)

● Aritméticos: atribuições compostas.

+= x += 2 (x = x + 2) -= x -= 2 (x = x – 2); *= x *= 2 (x = x * 2);

(49)

● Aritméticos: atribuições compostas. += x += 2 (x = x + 2) -= x -= 2 (x = x – 2); *= x *= 2 (x = x * 2); /= x /= 2 (x = x / 2);

Sintaxe – Operadores

(50)

● Aritméticos: atribuições compostas. += x += 2 (x = x + 2) -= x -= 2 (x = x – 2); *= x *= 2 (x = x * 2); /= x /= 2 (x = x / 2); %= x%= 2 (x = x % 2).

Sintaxe – Operadores

(51)

● Aritméticos: atribuições compostas. += x += 2 (x = x + 2) -= x -= 2 (x = x – 2); *= x *= 2 (x = x * 2); /= x /= 2 (x = x / 2); %= x%= 2 (x = x % 2).

Sintaxe – Operadores

(52)

● Aritméticos: atribuições compostas. += x += 2 (x = x + 2) -= x -= 2 (x = x – 2); *= x *= 2 (x = x * 2); /= x /= 2 (x = x / 2); %= x%= 2 (x = x % 2).

Sintaxe – Operadores

(53)

● Aritméticos: incremento e decremento.

++ incrementa 1 -- decrementa 1

(54)

● Aritméticos: incremento e decremento.

++ incrementa 1 -- decrementa 1

● A posição faz diferença:

++ antes da variável: incrementa e retorna (pré). -- depois da variável: retorna e incrementa (pós).

(55)

● Aritméticos: incremento e decremento.

++ incrementa 1 -- decrementa 1

(56)

● Aritméticos: incremento e decremento.

++ incrementa 1 -- decrementa 1

(57)

● Relacionais:

== (comparação)

!= (não igual / diferença) < (menor)

<= (menor ou igual) > (maior)

>= (maior ou igual)

(58)

● Lógicos:

&& (and / e)

(59)

● Lógicos:

&& (and / e) || (or / ou)

(60)

● Lógicos:

&& (and / e) || (or / ou) ! (not / não)

(61)

● Bit a bit:

~ (complemento de um)

<< (deslocamento à esquerda) >> (deslocamento à direita)

>>> (deslocamento à direita com sinal)

(62)

● Comentário até o final da linha: Tudo digitado

após ele na linha, é considerado comentário.

int idade; // Variável para armazenar a idade do usuário.

● Comentário de bloco: Tudo escrito entre /* e */ é

considerado comentário.

/* Estou dentro de um comentário de bloco. Neste exemplo, o

comentário ocupa três linhas. */

(63)

● if if ( condição-1 ){ comando-1; comando-2; comando-3; } if ( condição-2 ){ comando-1; }

Sintaxe – Estruturas de Decisão

● A condição retorna um tipo booleano. ● Os comandos somente serão

executados se a condição for verdadeira.

● Se existe somente um comando não é

obrigatório o uso das chaves.

(64)

● if if ( condição-1 ){ comando-1; comando-2; comando-3; } else{ comando-4; comando-5; comando-6; }

Sintaxe – Estruturas de Decisão

● Se a sentença for verdadeira, então...

(65)

● switch switch ( variável ){ case 1: comando-1; break; case 2: comando-2; break; default: comando-padrão; }

Sintaxe – Estruturas de Decisão

● Uma variável do tipo char ou int, é

comparada com cada valor de case.

● Se um valor igual foi encontrado, as

instruções depois do teste são executadas.

● Se nenhum valor for igual, a instrução

default é executada.

(66)

● Operador ternário: é útil para condicionais curtas e

simples.

● Sintaxe:

variável = <condição> ? seVerdade : seFalso;

● Exemplo:

int v1 = 2, v2 = 3;

int r = ( v1 > v2 ) ? v1 : v2; // Qual o valor de r?

Sintaxe – Estruturas de Decisão

(67)
(68)

while: considerado um loop (laço) de pré-teste. while ( condição ){ comando-1; comando-2; comando-N; }

Sintaxe – Estruturas de Repetição

Testa a condição antes de executar o bloco de comandos.

(69)

Sintaxe – Estruturas de Repetição

A variável de controle, que é testada na condição do while, deve ser inicializada e incrementada (ou decrementada).

(70)

Sintaxe – Estruturas de Repetição

Este código-fonte tem problema?

(71)

Sintaxe – Estruturas de Repetição

Este código-fonte tem problema?

(72)

Sintaxe – Estruturas de Repetição

Este código-fonte tem problema?

(73)

do..while: considerado um loop (laço) pós-teste. do{ comando-1; comando-2; comando-N; }while ( condição );

Sintaxe – Estruturas de Repetição

Testa a condição depois de executar o bloco de comandos.

(74)

Sintaxe – Estruturas de Repetição

A variável de controle, que é testada na condição do do..while, deve ser inicializada e incrementada (ou decrementada).

(75)

for: é composto por inicialização, condição e

operação.

for( inicialização; condição; operação ){ comando-1;

comando-2; comando-N; }

(76)

for: é composto por inicialização, condição e

operação.

for( inicialização; condição; operação ){ comando-1;

comando-2; comando-N; }

Sintaxe – Estruturas de Repetição

Executado uma única vez no início do loop

(77)

for: é composto por inicialização, condição e

operação.

for( inicialização; condição; operação ){ comando-1;

comando-2; comando-N; }

Sintaxe – Estruturas de Repetição

Executado uma única vez no início do loop

Executado antes de cada iteração.

(78)

for: é composto por inicialização, condição e

operação.

for( inicialização; condição; operação ){ comando-1;

comando-2; comando-N; }

Sintaxe – Estruturas de Repetição

Executado uma única vez no início do loop Executado antes de cada iteração. Executado ao final de cada iteração.

(79)

Sintaxe – Estruturas de Repetição

(80)

Sintaxe – Estruturas de Repetição

(81)

Sintaxe – Estruturas de Repetição

(82)

Sintaxe – Estruturas de Repetição

(83)

Sintaxe – Estruturas de Repetição

(84)

Sintaxe – Estruturas de Repetição

(85)

Sintaxe – Estruturas de Repetição

(86)

Sintaxe – Estruturas de Repetição

O ponto-e-vírgula indica o fim da instrução!!!

(87)

Sintaxe – Estruturas de Repetição

(88)

● São coleções de um mesmo tipo em sequência.

● Podem ser de tipos primitivos (char, int, float,

double), de um outro arranjo, de uma estrutura, de enumeração, etc...

● Estrutura homogênea de dados.

(89)

● Declaração.

(90)

● Acesso: é possível alterar ou recuperar qualquer

elemento armazenado.

● Em C, o índice de um vetor inicia-se na posição 0

(zero).

– int idades[3];

– O vetor idades[3] armazena três elementos.

– A indexação inicia-se em 0 (zero) e termina em 2 (3 - 1).

(91)

● Vetor de caracteres: é como qualquer outro vetor.

Se ele tem tamanho n, ele tem n posições disponíveis indexadas de 0 a n – 1.

– char letras[3] = {'A', 'B', 'C'};

● Para leitura e impressão utiliza-se o caracter %c. ● Tamanho pode ser obtido pela função sizeof().

(92)

● Vetor de string: É finalizado pelo caracter '\0'. Se

ele tem tamanho n, ele tem n posições disponíveis indexadas de 0 a n – 2.

– char nomeCidade[50]; – gets(nome);

● Para leitura utiliza-se a função gets() e para

impressão o caracter %s.

Tamanho pode ser obtido pela função strlen().

(93)

● Vetor multidimensional: É um vetor de vetor. O

mais comum é o bidimensional, visto como uma matriz.

– int matrizIdades[3][4]; // matriz de 3 linhas e 4 colunas.

Vetores

11 12 13 14 21 22 23 24 31 32 33 34 0 1 2 3 0 1 2 Colunas Linhas

(94)

● Um programa em C é uma coleção de funções.

● Uma função PODE receber parâmetros, declarar

variáveis locais, conter instruções e retornar um valor.

● Uma função NÃO PODE declarar outra função

(por isso C não é classificada integralmente como estruturada em blocos).

(95)

Uma das funções deve se chamar main.

● A função deve ser declarada antes do local onde é

chamada.

● Uma função deve ser de um dos tipos básicos:

int, float, double, char, void.

(96)

Funções – Exemplo

Parâmetros formais

(97)

A instrução return efetua o término da função.

● Uma função pode ou não retornar um valor para a

função chamadora.

● Uma função pode ou não ter parâmetros formais.

(98)

Funções – Exemplo

(99)

Funções – Exemplo

(100)

Funções – Exemplo

Prototipação (assinatura)

Chamada da função soma()

(101)

● A passagem de parâmetros é realizada para que a

função receba os valores com os quais vai “trabalhar“ (realizar o seu processamento).

A passagem de parâmetros em C é sempre POR

VALOR, ou seja, os valores são copiados da

origem para o destino.

● Uma função pode ou não ter parâmetros formais.

(102)

A passagem de parâmetros em C é sempre POR

VALOR, ou seja, os valores são copiados da

origem para o destino.

(103)

● Uma função pode retrornar valores de qualquer

tipo (exceto vetores e outras funções).

Uma função do tipo void não retorna nada.

A expressão após o return é o valor retornado.

● O valor do retorno de uma função pode ser

ignorado.

(104)

● O término de uma função ocorre quando:

– A chave de fechamento é encontrada; – Ou quando o return é executado.

(105)

● Funções de E/S (stdio.h)

– printf(), scanf(), fprintf(), fscanf(), gets(), fwrite(),

fread(), ...

● Funções matemáticas (math.h)

– sin(), cos(), pow(), sqrt(), ...

● Teste e manipulação de caracteres (ctype.h)

– isDigit(), isAlpha(), toupper(), ...

(106)

● Funções de uso geral (stdlib.h)

– malloc(), free(), exit(), rand(), ...

● Manipulação de strings e vetores (string.h)

– strcpy(), strcmp(), strcat(), strlen(), ...

● Manipulação de datas e horas (time.h)

– time(), clock(), localtime(), ...

(107)

● São variáveis que armazenam um endereço de

memória, geralmente a posição de outra variável.

● Se uma variável p possui o endereço da variável

x, então é correto dizer que p “aponta“ para x.

● Por isso, este tipo de variável recebe o nome de

ponteiro (apontador).

(108)

● A declaração de um ponteiro é feita de acordo

com as regras de declaração de identificadores em C.

– tipo *nome-da-variável-ponteiro;

● Exemplos:

– int *pValor; // ponteiro para variável inteira – float *pSalario; // ponteiro para variável float

Ponteiros

(109)

● Um ponteiro aponta para outra variável. Porém, é

preciso inicializá-la, pois seu valor “inicial“ é lixo de memória. O valor inicial de um ponteiro deve ser NULL.

– int *pValor = NULL; // não aponta para nenhum endereço.

Usa-se o %p para imprimir o endereço de

memória:

– printf(“O ponteiro pValor aponta para %p“, pValor);

(110)

● Existem dois operadores especiais para ponteiros:

*

e &.

O operador & é unário e retorna o endereço de

memória do seu operando (variável).

(111)
(112)
(113)

● No exemplo anterior, a variável pValor recebe o

endereço de memória que contém a variável valor.

● O endereço não tem nenhuma relação com o

valor da variável valor.

O operador & pode ser lido como retorna “o

endereço de“.

(114)

● O operador

*

é o complemento de &. É um

operador unário que retorna o valor da variável localizada na posição de memória que o segue.

– int aux = *pValor;

● O operador

*

pode ser lido como retorna “o valor

da variável apontada por“.

● Logo, no exemplo acima, aux recebe o valor da

variável apontada por pValor.

(115)
(116)

int valor = 11;

Ponteiros

(117)

int valor = 11; int *pValor;

Ponteiros

(118)

int valor = 11; int *pValor;

pValor = &valor;

Ponteiros

(119)

int valor = 11, aux; int *pValor;

pValor = &valor;

Ponteiros

(120)

int valor = 11, aux; int *pValor;

pValor = &valor; aux = *pValor;

Ponteiros

(121)

int valor = 11, aux; int *pValor;

pValor = &valor;

aux = *pValor; // * acessa o conteúdo do endereço

Ponteiros

(122)

int valor = 11, aux; int *pValor;

pValor = &valor;

aux = *pValor; // * acessa o conteúdo do endereço

Ponteiros

(123)

int valor = 11, aux; int *pValor;

pValor = &valor;

aux = *pValor; // * acessa o conteúdo do endereço

valor = 22;

Ponteiros

(124)

int valor = 11, aux; int *pValor;

pValor = &valor;

aux = *pValor; // * acessa o conteúdo do endereço

valor = 22;

*pValor = 33; // O que será alterado?

Ponteiros

(125)

int valor = 11, aux; int *pValor;

pValor = &valor;

aux = *pValor; // * acessa o conteúdo do endereço

valor = 22;

*pValor = 33; // O conteúdo da variável valor.

Ponteiros

(126)

int valor = 11, aux; int *pValor;

pValor = &valor;

aux = *pValor; // * acessa o conteúdo do endereço

valor = 22;

*pValor = 33;

pValor = 44; // O que será alterado?

Ponteiros

(127)

int valor = 11, aux; int *pValor;

pValor = &valor;

aux = *pValor; // * acessa o conteúdo do endereço

valor = 22;

*pValor = 33;

pValor = 44; // O endereço para onde pValor aponta.

Ponteiros

valor = 33 aux = 11 Pvalor = 44

(128)

● Embora em C a passagem de parâmetros seja por

valor, é possível simular uma chamada por referência.

● Passa-se o endereço de uma variável para um

ponteiro (parâmetro formal na função).

● O endereço da variável é passado para a função,

permitindo que o valor da variável seja alterado na função que recebeu seu endereço.

(129)
(130)
(131)
(132)

1) Escreva um programa que leia dois valores inteiros para as variáveis num1 e num2. Depois, faça uma função para trocar os valores entre num1 e num2. Ou seja, o valor de num1 é gravado em num2 e o valor de num2 é gravado em num1, sem perder os valores originais. Esta função deve passar os valores por valor.

2) Faça uma função para o exercício anterior que utilize a passagem de parâmetros por referência (via ponteiros).

(133)

1) Escreva um programa que leia dois valores inteiros para as variáveis num1 e num2. Depois, faça uma função para trocar os valores entre num1 e num2. Ou seja, o valor de num1 é gravado em num2 e o valor de num2 é gravado em num1, sem perder os valores originais. Esta função deve passar os valores por valor.

2) Faça uma função para o exercício anterior que utilize a passagem de parâmetros por referência (via ponteiros).

(134)
(135)

Ponteiros e Funções

main

num1 num2 num3

(136)

Ponteiros e Funções

main

num1 num2 num3

(137)

Ponteiros e Funções

main

num1 num2 num3

(138)

Ponteiros e Funções

main

num1 num2 num3

(139)

Ponteiros e Funções

main

num1 num2 num3

5 3 ?

funcaoTeste

n1 n2 return

(140)

Ponteiros e Funções

main

num1 num2 num3

5 3 ?

funcaoTeste

n1 n2 return

(141)

Ponteiros e Funções

main

num1 num2 num3

5 3 ?

funcaoTeste

n1 n2 return

(142)

Ponteiros e Funções

main

num1 num2 num3

(143)

Ponteiros e Funções

main

num1 num2 num3

(144)
(145)

Ponteiros e Funções

main

num1 num2 num3

(146)

Ponteiros e Funções

main

num1 num2 num3

(147)

Ponteiros e Funções

main

num1 num2 num3

(148)

Ponteiros e Funções

main

num1 num2 num3

(149)

Ponteiros e Funções

main

num1 num2 num3

5 3 ?

funcaoTeste

n1 n2 return

(150)

Ponteiros e Funções

main

num1 num2 num3

5 8 ?

funcaoTeste

n1 n2 return

(151)

Ponteiros e Funções

main

num1 num2 num3

5 8 ?

funcaoTeste

n1 n2 return

(152)

Ponteiros e Funções

main

num1 num2 num3

(153)

Ponteiros e Funções

main

num1 num2 num3

(154)

● C – Completo e Total (Herbert Schildt). ● Linguagem C (Luis Damas).

● Apostila C Ansi (Ricardo Terra).

Referências

Documentos relacionados

Aula Expositiva, Discussão dos textos, Apresentação de alunos, Exercícios, Prova.. 2

Esta maior concen- tração de hemoglobina no plasma colhido com EDTA evidencia o efeito hemolítico mais acentuado desse anticoagulante, quando comparado à Heparina, confor- me

Para cada estra- tégia, executamos 10 vezes o AG e comparamos o valor médio da função-objetivo com o “ótimo” obtido pelo método da Busca Exaustiva (BE), no qual se calcula

•  Como calcular os dois valores numa função. •  Como fazer essa função devolver

A) cada agente comunitário de saúde deve possuir em seu cadastro, no máximo, 750 pessoas de sua microárea. B) uma equipe de saúde da família deve conter, no máximo, 10

ABSTRACT: The toxicological effects of crude ethanolic extracts (CEE) of the seed and bark of Persea americana have been analyzed on larvae and pupae of

8.1 -Considerando que os pagamentos serão efetuados após os fornecimentos, não havendo assim nenhum risco futuro para o Município, contudo fica estipulado multa de 30% (trinta

De acordo com dados da Pesquisa Nacional por Amostra de Domicílios (PNAD) referente a 2011, o país ganhou 10 milhões de novos usuários em apenas três anos: de 2009 para 2011, o