Sie sind auf Seite 1von 30

Funes

Prof. Claudio Fabiano Motta Toledo: claudio@icmc.usp.br

13/08/2012

Modularizao Funes Return Void Declaraes

de programas

em linguagem C

de Funes
13/08/2012

tipo_retornado nome_funo(lista_dos_parametos) { <declaraes> <instrues> }

Exemplo: int fatorial (int n) { int i, product = 1; for (i=2; i<=n; ++i) product *= i; return product; }

/* cabealho da funo*/ /* incio do corpo da funo*/

13/08/2012

As funes retornam um resultado que deve ser do mesmo tipo para o qual a funo foi declarada.

<tipo_retornado> <nome_funo>(<lista_dos_parametos>)
int fatorial (int n)

O comando return responsvel por encerrar a execuo da funo e retornar o valor daquele tipo. return product;
13/08/2012

Se um tipo no especificado para uma funo, o tipo int ser o default.


all_add( int a, int b) { int c; .... return (a+b+c); }

int all_add( int a, int b) { int c; .... return (a+b+c); }

13/08/2012

O valor retornado convertido, se necessrio, para o tipo retornando pela funo

float add( int a, int b) { int soma; soma = a+b; return soma; }

13/08/2012

As

sub-rotinas na linguagem C podem ser encaradas todas como funes.


palavra reservada void na declarao de uma sub-rotina indica que se trata de uma funo que no retorna valor.

uso de void no lugar de uma lista de parmetros indica que a funo no utiliza argumentos (lista de parmetros).
13/08/2012

Exemplos:

void nadafaz(void) { } void wrt_endereo(void){ printf(%s\n%s\n%s\n%s\n%s\n\n, **************************, *** SANTA CLAUS *, *** NORTH POLE *, *** EARTH *, **************************); }
13/08/2012

Os trechos abaixo so equivalentes void func() void func(void)


A declarao abaixo, considerando a linguagem C tradicional, significa que o nmero de argumentos da funo no conhecido. int func(); Isso ocorre pelo fato de void no ser uma palavra reservada na linguagem C tradicional.

13/08/2012

Exemplos:
float func(x, y) /* C tradicional */ int x float y; {... <corpo_da_funo> ...}

float func(int x, float y) /* ANSI C */


{... <corpo_da_funo> ...}
13/08/2012

10

Uma prottipo da funo indica ao compilador o nmero e o tipo de argumentos que devem ser passados para a funo e o tipo de valor que deve ser retornado pela funo.
tipo_retornado nome_funo(lista_dos_parametos);

A lista dos parmetros apresenta os tipos separados por vrgula, onde os identificadores so opcionais.

float func(int, float); float func(int x, float y);


13/08/2012

11

Se

uma funo, por exemplo, func(x) chamada antes de sua declarao, definio ou prottipo, o compilador assume a declarao abaixo como default
int func();

maioria dos compiladores precisa conhecer os tipos de retorno e os parmetros, antes que o programa principal faa uma chamada sub-rotina.

13/08/2012

12

Exemplo:

Blocos aninhados
{ int a_outer=2; printf(%d\n,a_outer); { int a_inner = 5; printf(%d\n,a_inner); } printf(%d\n, ++a_outer); }

{ int a=2; printf(%d\n,a); /* 2 exibido*/ { int a = 5; printf(%d\n,a); /* 5 exibido */ } printf(%d\n, ++a); /*3 exibido*/ }

13/08/2012

13

Exemplo: Blocos aninhados

int a=1, b=2, c=3; printf(%3d%3d%3d\n,a,b,c); { int b=4; float c=5.0; printf(%3d%3d%5.1f\n,a,b,c); a=b; { int c; c=b; printf(%3d%3d%3d\n,a,b,c); } printf(%3d%3d%5.1f\n,a,b,c); } printf(%3d%3d%3d\n,a,b,c); }
13/08/2012

/* 1 2 3 */

/* 1 4 5.0 */

/* 4 4 4 */ /* 4 4 5.0 */ /* 4 2 3 */

14

Variveis Locais Tem como escopo a funo onde foi declarada. Os nomes e valores dessas variveis tem uso restrito funo que declarou estas variveis.
Variveis Globais Os nomes e valores dessas variveis podem ser acessados em todo o programa. Devem ser declaradas fora do corpo de todos os procedimentos ou funes do programa. O programa pode alterar uma varivel global em qualquer ponto, tornando difcil localizar a alterao que possa ter provocado um erro.
13/08/2012

15

Exemplo: #include <stdio.h> int a=1, b=2, c=3; /* variveis globais */ int f(void); /* prottipo da funo*/ int main(void) { printf(%3d\n, f( )); /*?????*/ printf(%3d%3d%3d\n, a,b,c); /*?????*/ return 0; } int f(void) { int b, c; a=b=c=4; return (a+b+c); }

/* b e c so variveis locais */

13/08/2012

16

Exemplo: #include <stdio.h> int a=1, b=2, c=3; /* variveis globais */ int f(void); /* prottipo da funo*/ int main(void) { printf(%3d\n, f( )); /* 12 exibido */ printf(%3d%3d%3d\n, a,b,c); /* 4 2 3 so exibidos*/ return 0; } int f(void) { int b, c; a=b=c=4; return (a+b+c); }

/* b e c so variveis locais */

13/08/2012

17

Uma

cpia dos valores das variveis passada funo. modificaes executadas nos valores fornecidos esto restritas ao escopo da funo.
valor original da varivel no alterado.

As

Exemplo: #include<stdio.h> int compute_sum(int n); int main(void) { int n=3, sum; printf(%d\n,n); /* ? exibido*/ sum = compute_sum(n); printf(%d\n,n); /* ? exibido */ printf(%d\n,sum); /* ? exibido*/ return 0; } int compute_sum(int n){ int sum = 0; for(; n > 0; --n) sum+= n; return sum; }
13/08/2012

19

Exemplo: #include<stdio.h> int compute_sum(int n); int main(void) { int n=3, sum; printf(%d\n,n); /* 3 exibido*/ sum = compute_sum(n); printf(%d\n,n); /* 3 exibido */ printf(%d\n,sum); /* 6 exibido*/ return 0; } int compute_sum(int n){ int sum = 0; for(; n > 0; --n) sum+= n; return sum; }
13/08/2012

20

endereo de memria da varivel fornecido funo e no uma cpia do valor da varivel. alterao executada pela funo ocorre na posio de memria fornecida. isso, as alteraes permanecem quando a funo encerrada. que sero apresentados em breve, so utilizados nas passagens por referncia.

Qualquer

Por

Ponteiros,

Exemplo: #include <stdio.h> void swap(int *, int *); int main(void){ int i=3, j=5; swap(i, j); printf(%d %d\n, i, j); /* 5 e 3 so exibidos */ return 0;

}
void swap (int *p, int *q){ int tmp;

tmp = *p;
*p = *q; *q = tmp; }
13/08/2012

22

As

variveis i e j so passadas por referncia, ou seja, o endereo de memria das variveis repassado funo.
swap (i, j)

Os

ponteiros *p e *q, declarados no argumento na funo swap, passam a referenciar a posio de memria das variveis i e j. void swap (int *p, int *q)
13/08/2012

23

Vetores e matrizes

So passados sempre como referncia.

Os colchetes, aps o nome do vetor passado a uma funo, indicam que o parmetro um vetor. No precisa especificar o tamanho do vetor.

int soma_vetor(int vetor[], int elementos)

Exemplo: Formas possveis de se declarar a funo func() para receber o vetor int vet[100]

func(int x[100]);

func (int x[]);


func(int *x);

Vetores

e matrizes

Ao passar uma matriz bidimensional, se for preciso acessar entradas especficas, o nmero de colunas precisa ser fornecido. int soma_matriz(int matriz[][5], int linhas) Se no h necessidade de acessar entradas especficas da matriz, ela poder ser tratada como um vetor. Nesse caso, o nmero de elementos da matriz dever ser fornecido.

13/08/2012

25

Crie uma funo que receba trs nmeros inteiros a, b e c sendo a maior que 1. A funo dever retornar o resultado da soma de todos os inteiros entre b e c que sejam divisveis por a (inclusive b e c).
Crie um programa que imprime os valores da funo f(x) no intervalo [0,3] . O valor de x deve percorrer o intervalo com passos de tamanho 0.1. Uma funo dever ser implementada para retornar os valores de f(x). f(x) = ax2+bx+c.
13/08/2012

27

1.

Escreva um programa que receba trs valores reais e retorne o maior deles.
Escreva um programa que:

2.

Receba valores para as variveis x1, x2 e x3. Os valores devem ser inteiros positivos. Crie uma funo que valide a entrada de dados, ou seja, o usurio s consegue entrar com os valores adequados. Devolva aos programa principal os valores ordenados com x1<x2<x3. Crie uma funo que ordene esses valores.
13/08/2012

28

Ascencio AFG, Campos EAV. Fundamentos de programao de computadores. So Paulo : Pearson Prentice Hall, 2006. 385 p. Kelley, A.; Pohl, I., A Book on C: programming in C. 4 Edio. Massachusetts: Pearson, 2010, 726p. Kernighan, B.W.; Ritchie, D.M. C, A Linguagem de Programao: padro ANSI. 2 Edio. Rio de Janeiro: Campus, 1989, 290p.

13/08/2012

29

FIM Aula 3

13/08/2012

30

Das könnte Ihnen auch gefallen