• Nenhum resultado encontrado

A estrutura de uma função C é semelhante à da função main( )

N/A
N/A
Protected

Academic year: 2022

Share "A estrutura de uma função C é semelhante à da função main( )"

Copied!
30
0
0

Texto

(1)

Função

Unidade autônoma do programa desenvolvida para executar alguma atividade

Evita que se escreva o mesmo código inúmeras vezes em um mesmo programa

A estrutura de uma função C é semelhante à da função main( )

A diferença é que main( ) possui um nome especial e é a

primeira a ser chamada quando o programa é executado

(2)

Exemplo de Função

#include "stdio.h"

#include "conio.h"

void linha( ) { int cont;

for(cont=1;cont<=19;cont++) printf("-");

printf("\n");

}

void main( ) { linha( );

printf(" Exemplo de Função \n");

linha( );

}

(3)

Chamando Funções

Do mesmo modo que se chama funções da biblioteca C (printf( ), getche( ) etc.) é possível chamarmos nossas próprias funções

Os parênteses que seguem as funções servem para diferenciar a chamada a uma função de uma variável

Chamadas a funções devem terminar com ponto-e-vírgula

Na definição da função não é preciso usar ponto-e-vírgula

(4)

Variáveis Globais

Variáveis conhecidas por todas funções do programa

declaradas no cabeçalho do programa

(5)

#include "stdio.h"

#include "conio.h"

int var=4;

void linha( ) {

printf(”%d\n”,var);

f( );

printf(”%d\n”,var);

}

void f( ) { var++;

}

4

5

(6)

#include "stdio.h"

#include "conio.h"

int var=4;

void linha( ) {

printf(”%d\n”,var);

f( );

printf(”%d\n”,var);

}

void f( ) {

int var=0;

var++;

}

4

4

(7)

Variáveis Locais

As variáveis declaradas dentro de uma função são chamadas de variáveis locais e são conhecidas apenas dentro da função Uma variável local existe apenas durante a execução do

bloco de código onde ela foi declarada

A variável local é criada quando a função for chamada e

destruída na saída da função

(8)

#include "stdio.h"

#include "conio.h"

void linha( ) { int cont;

for(cont=1;cont<=19;cont++) printf("-");

printf("\n");

}

void main( ) { linha( );

printf(" Exemplo de Função \n");

linha( );

printf(“%d”,cont);

}

A variável cont é conhecida apenas dentro da função linha

Erro !!!

(9)

#include "stdio.h"

#include "conio.h"

void linha( ) { int cont;

for(cont=1;cont<=19;cont++) printf("-");

printf("\n");

}

void main( ) { int cont=0;

linha( );

printf(" Exemplo de Função \n");

linha( );

printf(“%d”,cont);

}

Variáveis diferentes

(10)

Retorno de valores

O comando return(valor) serve para retornar um valor calculado pela função para quem chamou a função

int soma( ) {

int resultado;

resultado = a + b;

return(resultado);

}

void main( ) { int a, b, c;

scanf(“%d %d”, &a, &b);

c = soma( );

printf(" A Soma é %d\n”, c);

}

(11)

Exercício

Implemente um programa que recebe dois horários, dados em horas e minutos, chama uma função para transformar os horários em minutos e, por fim, imprime a diferença, em

minutos, entre os dois horários fornecidos na entrada.

(12)

Passagem de Parâmetros para funções

Mecanismo usado para transmitir informações para uma função é chamado de passagem de parâmetro

int abs(int x ) {

if(x<0) return(-x);

else return(x);

}

void main( ) {

printf(" %d %d %d\n”, abs(0), abs(-3), abs(10));

}

(13)

Passagem de Parâmetros para funções

É possível passar vários argumentos para uma função

int abs_soma(int x, int y ) { if((x+y) < 0) return(-(x+y));

else return(x+y);

}

void main( ) {

printf(" %d %d %d\n”, abs_soma(0, -3), abs_soma(-3, 3), abs_soma(10, -30));

}

(14)

Passagem de Parâmetros por valor

Em C, todos os argumentos de funções são passados por valor

A função chamada cria uma cópia local dos valores dos argumentos

int abs_soma(int x, int y ) { if((x+y) < 0) x = -(x+y);

else x = x+y;

return(x);

}

void main( ) { int x=4;

int y=-5;

printf(" %d %d\n”, x, abs_soma(x, y));

}

(15)

Funções Recursivas

Uma função recursiva é definida em termos dela própria

Existe uma chamada a ela própria no escopo de sua definição

(16)

Exercício

Implemente um programa com uma função recursiva que

calcula o fatorial de um número positivo qualquer.

(17)

Classe de armazenamento

Todas variáveis C possuem dois atributos: tipo e classe de armazenamento

auto

- visíveis ou acessíveis somente às funções onde estão declaradas

- sua definição é opcional extern

- visíveis por todas funções declaradas depois dela

- variáveis globais são extern visíveis em todo programa

- útil para implementação de módulos

(18)

Classe de armazenamento

static

- visível apenas dentro da função onde é declarada - mantém valor após execução da função

int soma( ) {

static int i = 0;

printf(“i = %d\n”, i++);

}

void main( ) { soma( );

soma( );

soma( );

}

(19)

int rand( ) {

static int semente = 1;

semente = (semente*25173+13849)%65536;

return(semente);

}

void main( ) { int x;

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

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

}

Geração de números aleatórios

(20)

Classe de armazenamento

register

- indica que a variável deve ser guardada em registrador - aplicadas apenas para valores do tipo int e char

- fortes candidatas são variáveis de laços e parâmetros de função

(21)

O pré-processador C

Instruções para o pré-processador são executadas antes do programa ser compilado

Altera o programa-fonte na sua forma de texto

Instruções do pré-processador fazem parte do programa que

criamos, mas não farão parte do programa a ser compilado

Instruções do pré-processador (diretivas) são iniciadas com

símbolo #

(22)

Diretiva #define

Define constantes simbólicas

#define nome constante

O pré-processador substitui cada ocorrência de nome por constante dentro do programa.

Evita que o programador tenha que atualizar todas as ocorrências de uma constante dentro do programa

Só pode haver um comando #define por linha

Não há ponto-e-vírgula após o comando

(23)

Exercício

Implemente um programa para calcular o raio de uma circunferência fornecido pelo usuário. Utilize a diretiva

#define para definir uma constante denominada PI valendo 3,14159.

#define PI 3.14159 float area(float r) {

return(4 * PI * r * r);

}

void main( ) { float raio;

printf(“Digite o raio da esfera: ”);

scanf(“%f ”, &raio);

printf(“A area da esfera é %.2f ”,area(raio));

}

(24)

Macros

Possível usar #define com argumentos

Uma primitiva #define com parâmetros é chamada macro , sendo bastante semelhante a uma função

#define PRN(n) printf(“%.2f\n”,n);

void main( ) {

float num1 = 27.25;

float num2;

num2=1.0/3.0;

PRN(num1);

PRN(num2);

}

Toda ocorrência de PRN(n) no programa

é substituída por printf(“%.2f\n”,n);

(25)

Macros

Nunca deve haver espaço em branco no identificador

#define PRN (n) printf(“%.2f\n”,n);

Interpretado como o fim do identificador

(26)

Macros

Para definir uma macro com mais de uma linha, deve-se delimitar a linha anterior com barra invertida \

#define PRN(n) printf(“%.2f\n,n*n); \ printf(“%.2f\n”,n);

void main( ) {

float num1 = 27.25;

float num2;

num2=1.0/3.0;

PRN(num1);

PRN(num2);

}

(27)

Macros

Problema da área usando macros

#define PI 3.14159

#define AREA(x) (4 * PI * x * x) void main( ) {

float raio;

printf(“Digite o raio da esfera: ”);

scanf(“%f ”, &raio);

printf(“A area da esfera é %.2f ”,AREA(raio));

}

(28)

Macros

Cuidado !!!

#define SOMA(x , y) x+y . . .

. . .

ans = 10 * SOMA(3 , 4);

Qual o valor de ans quando o programa for executado ? ans = 10 * 3 + 4 = 34

Solução: #define SOMA(x , y) (x+y)

(29)

Macros

Não funciona sempre!!!

#define PRODUTO(x , y) (x*y) . . .

. . .

ans = SOMA(2+3 , 4);

Qual o valor de ans quando o programa for executado ? ans = 2 + 3 * 4 = 14

Solução: #define PRODUTO(x , y) ( (x) * (y) )

(30)

Macros vs Fuções

Cuidado com as afirmações do livro !!!

Referências

Documentos relacionados

Curso de Engenharia Civil.. Exemplo de Derivação.. 3) Determine a função derivada de cada uma das seguintes funções, utilizando as regras

QCE-05, da Secretaria de Estado da Ciência, Tecnologia, Inovação, Educação Profissional e Desenvolvimento Econômico

▪ válido para beneficiários com declaração de saúde positiva (exceto para os processos a partir de 10 vidas); ou ▪ válido para beneficiários com plano anterior que

Depois de a Secretária Executiva Adjunta anunciar a presença do Doutor Clarindo Ferracioli, Prefeito do Município de Restinga, passou a palavra ao representante

Universidade Estadual de Campinas – UNICAMP, Campinas – SP. Realizamos uma pesquisa com o propósito de responder à seguinte questão: há trechos do enredo

O autor utilizou a história da matemática como metodologia de ensino, apresentando para os alunos uma sequência didática baseada na sequência histórica do desenvolvimento

As questões apontadas nas narrativas suscitam algumas reflexões que compartilhamos, a partir das reflexões acerca da monocultura do saber (SANTOS, 2011) produzida

São variáveis declaradas dentro de um bloco {} do programa, podendo ser variáveis locais do main(), de um procedimento, de uma função, ou mesmo de um bloco de um dado comando.