17 - funções e procedimentos em c programação · pdf...

39
Unesp – Campus de Guaratinguetá 17 17 - - Fun Fun ç ç ões e Procedimentos em C ões e Procedimentos em C Programa Programa ç ç ão Modular ão Modular Curso de Programação Computadores Prof. Aníbal Tavares Profa. Cassilda Ribeiro Ministrado por: Prof. André Amarante

Upload: lykhanh

Post on 06-Feb-2018

213 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 17 - Funções e Procedimentos em C Programação · PDF fileFunções e Procedimentos em C 3 A forma de modularizar um programa em C é através de Funções e Procedimentos. Pode-se

Unesp – Campus de Guaratinguetá

17 17 -- FunFunçções e Procedimentos em Cões e Procedimentos em CProgramaProgramaçção Modularão Modular

Curso de Programação ComputadoresProf. Aníbal Tavares

Profa. Cassilda RibeiroMinistrado por: Prof. André Amarante

Page 2: 17 - Funções e Procedimentos em C Programação · PDF fileFunções e Procedimentos em C 3 A forma de modularizar um programa em C é através de Funções e Procedimentos. Pode-se

Funções e Procedimentos em C 2

Para a estruturação de programas, utiliza-se o conceito de MODULARIZAMODULARIZAÇÇÃO.ÃO.

ModularizarModularizar um programa consiste em dividi-lo em partes que serão desenvolvidas em separado. Essas partes executam tarefas menores que depois serão acopladas para formar o programa. A cada uma dessas partes chamamos de subprograma.subprograma.

Os subprogramasOs subprogramas permitem uma melhorlegibilidade e manutenibilidadelegibilidade e manutenibilidade do programa

17 17 -- FunFunçções e Procedimentos ões e Procedimentos -- Definições

Page 3: 17 - Funções e Procedimentos em C Programação · PDF fileFunções e Procedimentos em C 3 A forma de modularizar um programa em C é através de Funções e Procedimentos. Pode-se

Funções e Procedimentos em C 3

A forma de modularizar um programa em C é através de FunFunçções e Procedimentos.ões e Procedimentos.

Pode-se então dizer que :FunFunçções e Procedimentos são blocos de cões e Procedimentos são blocos de cóódigo digo

que podem ser nomeados e chamados de dentro de que podem ser nomeados e chamados de dentro de um programa.um programa.

Programas grandes e complexos devem ser construídos bloco a bloco.

17 17 -- FunFunçções e Procedimentos ões e Procedimentos -- DefiniDefiniççõesões

Page 4: 17 - Funções e Procedimentos em C Programação · PDF fileFunções e Procedimentos em C 3 A forma de modularizar um programa em C é através de Funções e Procedimentos. Pode-se

Funções e Procedimentos em C 4

17 17 -- FunFunçções e Procedimentos ões e Procedimentos -- DefiniDefiniççõesões

Utilidade de funUtilidade de funçções: ões: Um função pode ser empregada para evitar repetição de código e assim facilitar a manutenção do código contido no programa.

Na linguagem C, de modo geral, as Funções e Procedimentos são chamadas dentro da Função Principal (mainmain()() ) ou ainda por outras funções.

A declaradeclaraçção da funão da funççãoão deve vir antes de seu uso.

Page 5: 17 - Funções e Procedimentos em C Programação · PDF fileFunções e Procedimentos em C 3 A forma de modularizar um programa em C é através de Funções e Procedimentos. Pode-se

Funções e Procedimentos em C 5

17 - Funções e Procedimentos - Definições

A declaração de uma Função em C é constituída de um cabeçalho e de um corpo. O cabeçalho identifica a Função através de um nome, e o corpo contém as declarações dos objetos locais, além de comandos e estruturas do procedimento.

Uma função em C tem a seguinte forma geral:

tipo_de_retorno nome_função ( parâmetros ){declaraçõescomandos}

Corpo da FunCorpo da Funççãoão

Page 6: 17 - Funções e Procedimentos em C Programação · PDF fileFunções e Procedimentos em C 3 A forma de modularizar um programa em C é através de Funções e Procedimentos. Pode-se

Funções e Procedimentos em C 6

O tipo-de-retorno é o tipo de valor que a função vai retornar.

O default é o tipo int, ou seja, uma função para qual não declaramos o tipo de retorno é considerada como retornando um inteiro.

A declaração de parâmetros é uma lista de variáveis com a seguinte forma geral:

tipo nome1, tipo nome2, ... , tipo nomeNRepare que o tipo deve ser especificado para cada uma

das N variáveis de entrada. É na declaração de parâmetros que informamos ao compilador quais serão as entradas da função (assim como informamos a saída no tipo-de-retorno).

17 - Funções e Procedimentos - Definições

Page 7: 17 - Funções e Procedimentos em C Programação · PDF fileFunções e Procedimentos em C 3 A forma de modularizar um programa em C é através de Funções e Procedimentos. Pode-se

Funções e Procedimentos em C 7

Uma função pode retornar qualquer valor válido em C, sejam de tipos pré-definidos ( int, char, float) ou de tipos definidos pelo usuário ( struct, typedef )

Um ProcedimentoUm Procedimento é função que não retorna nada. Ela é definida colocando-se o tipo void como valor retornado.

Pode-se colocar void entre parênteses se a função não recebe nenhum parâmetro

O corpo da funcorpo da funççãoão é a sua alma. É nele que as entradas são processadas, saídas são geradas ou outras coisas são feitas.

17 - Funções e Procedimentos - Definições

Page 8: 17 - Funções e Procedimentos em C Programação · PDF fileFunções e Procedimentos em C 3 A forma de modularizar um programa em C é através de Funções e Procedimentos. Pode-se

Funções e Procedimentos em C 8

17 17 -- FunFunççõesões e Procedimentos -- DeclaraDeclaraçção de ão de FunFunççõesões

O cabeçalho de uma função NUNCA NUNCA deve ser seguido de ponto e vírgula.

Dentro do corpo de uma função pode-se escrever qualquer instrução ou conjunto de instruções da linguagem C. Em C não se pode definir funções dentro de funções.

A comunicação entre a função e o programa principal (main) se faz através dos argumentosque são enviados a ela e dos parâmetrospresentes na função.

Page 9: 17 - Funções e Procedimentos em C Programação · PDF fileFunções e Procedimentos em C 3 A forma de modularizar um programa em C é através de Funções e Procedimentos. Pode-se

Funções e Procedimentos em C 9

17 17 -- FunFunççõesões e Procedimentos -- DeclaraDeclaraçção de Funão de Funççõesões

É o programa principal que controla o fluxo de execução do programa como um todo.

Quando o programa principal chama a função; através do seu nome; o controle do fluxo de execução do programa passa para a função. No momento que termina a execução da função o controle do fluxo de execução retorna para o programa principal.

Page 10: 17 - Funções e Procedimentos em C Programação · PDF fileFunções e Procedimentos em C 3 A forma de modularizar um programa em C é através de Funções e Procedimentos. Pode-se

Funções e Procedimentos em C 10

17 17 -- FunFunççõesões e Procedimentos -- UtilizaUtilizaçção de Funão de Funççõesões

Exemplo 171: Fazer um programa que imprima a seguinte saída na tela:

++++++++=======++++++++

Para fazer este programa sem a utilização do conceito de modularidade, isto é, sem usar funções, é necessário fazer um laço para imprimir cada uma das linhas.

Os dois programas mostrados a seguir resolvem este problema sem função e com função.

Page 11: 17 - Funções e Procedimentos em C Programação · PDF fileFunções e Procedimentos em C 3 A forma de modularizar um programa em C é através de Funções e Procedimentos. Pode-se

Funções e Procedimentos em C 11

#include <stdio.h>main() {

int i; // Imprime linha com 3 +.for (i=0; i < 3; i++)

printf(“+”);printf(“\n”);// Imprime linha com 5 +.for (i=0; i < 5; i++)

printf(“+”);printf (“\n”);// Imprime linha com 7 =.for (i=0; i < 7; i++)

printf(“=”);printf (“\n”);

Exemplo 17.1 – Sem usar Função

17.1 17.1 -- FunFunçções e Procedimentos: ões e Procedimentos: UtilizaUtilizaçção de Funão de Funççõesões

// Imprime linha com 5 +.for (i=0; i < 5; i++)

printf(“+”);printf (“\n”);

// Imprime linha com 3 +.for (i=0; i < 3; i++)

printf(“+”);printf(“\n”);

}

Continuação...

Observe que foi necessário repetir duas vezes o for para imprimir 3+ e duas vezes o for para imprimir 5+

Page 12: 17 - Funções e Procedimentos em C Programação · PDF fileFunções e Procedimentos em C 3 A forma de modularizar um programa em C é através de Funções e Procedimentos. Pode-se

Funções e Procedimentos em C 12

17.1 17.1 -- FunFunçções e Procedimentos: ões e Procedimentos: UtilizaUtilizaçção de Funão de Funççõesões

#include <stdio.h>void imprime_Linha_3 (){ int i;

for(i=0;i < 3; i++) printf(“+”);printf (“\n”);}

void imprimeLinha_5(){ int i;

for(i=0; i < 5; i++) printf(“+”);printf (“\n”);}

void imprimeLinha_7(){ int i;

for(i=0; i < 7; i++) printf(“=”);printf (“\n”);}

main() {imprimeLinha_3();

imprimeLinha_5();imprimeLinha_7();imprimeLinha_5();imprimeLinha_3();

}

Exemplo 17.1 – com FunçãoObserve que:Observe que:1.1. com o uso de funções, não é

preciso repetir os comandos for.

2. O que se repete são aschamadas das funções.

3. As funções são chamadas dentro do main.

4. As funções utilizadas não têm parâmetros de entrada nem de saída (procedimentos).

5. O void serve para indicar que a função não tem parâmetro de saída.

chamadas

das funções

no main.

Page 13: 17 - Funções e Procedimentos em C Programação · PDF fileFunções e Procedimentos em C 3 A forma de modularizar um programa em C é através de Funções e Procedimentos. Pode-se

Funções e Procedimentos em C 13

17.1 17.1 -- FunFunçções e Procedimentos: ões e Procedimentos: UtilizaUtilizaçção de parâmetros. ão de parâmetros.

O programa doExemplo 17.1 pode seraperfeiçoado se forem utilizados parâmetrosde entrada. Pode-se então fazeruma função maisgenérica, por exemplo, a função imprimeCh.

Exemplo 17.2 – Com parâmetros#include <stdio.h>void imprimeCh(char ch, int n){

int i;for(i=0;i < n; i++)

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

}main() {

imprimeCh(‘+’,3);imprimeCh(‘+’,5);imprimeCh(‘=’,7);imprimeCh(‘+’,5);imprimeCh(‘+’,3);

}

chamada das

funções com

argumentos

Nos parâmetros são passados: o caractere que será utilizado na função e o numero de linhas n, que serão impressas.

Page 14: 17 - Funções e Procedimentos em C Programação · PDF fileFunções e Procedimentos em C 3 A forma de modularizar um programa em C é através de Funções e Procedimentos. Pode-se

Funções e Procedimentos em C 14

Relembrando: a comunicação entre a função e o programa principal (main) é feita através dos

argumentosargumentos e dos parâmetrosparâmetros.

Na declaração da função é necessário definir o tipo de cada parâmetroparâmetro.

Os argumentosargumentos da função têm que ser compatíveis com os tipos declarados nos parâmetros.

17.1 17.1 -- FunFunçções e Procedimentos: ões e Procedimentos: UtilizaUtilizaçção de parâmetros. ão de parâmetros.

Page 15: 17 - Funções e Procedimentos em C Programação · PDF fileFunções e Procedimentos em C 3 A forma de modularizar um programa em C é através de Funções e Procedimentos. Pode-se

Funções e Procedimentos em C 15

No exemplo 17.2, os parâmetrosparâmetros passados no cabeçalho da função são:

void imprimeCh(char ch, int n).

Os argumentos são colocados na chamada da função imprimeCh(‘+’,3);

O primeiro parâmetro é a variável ch do tipo char, e ele é compatível com o primeiro argumento ‘+’ segundo parâmetro é a variável n do tipo int e ele é compatível com o número 3.

Relembrando: Uma função que não retorna nada (void ) é um procedimentoprocedimento. Logo o, exemplo 17.1 é um procedimentoprocedimento

17.1 17.1 -- FunFunçções e Procedimentos: ões e Procedimentos: UtilizaUtilizaçção de parâmetros. ão de parâmetros.

Page 16: 17 - Funções e Procedimentos em C Programação · PDF fileFunções e Procedimentos em C 3 A forma de modularizar um programa em C é através de Funções e Procedimentos. Pode-se

Funções e Procedimentos em C 16

ExemploExemplo 17.3: 17.3: Fazer um programa para verificar se um dado número é par ou não. Para isso, utilize uma função com passagens de parâmetros.

17.1 17.1 -- FunFunçções e Procedimentos: ões e Procedimentos: UtilizaUtilizaçção de parâmetros. ão de parâmetros.

#include <stdlib.h>#include <stdio.h>int verifPar(int k){ if (k%2 == 0) return 1;

else return 0;}main(){ int num, resultado;

printf("Digite um numero ");scanf("%d",&num);resultado = verifPar(num);if(resultado == 1)

printf("\nO numero que voce digitou eh par\n");else

printf("\nO numero que voce digitou nao eh par\n");system("PAUSE");

}

A função verifPar retorna um número inteiro. É por esta razão que foi colocado o int antes do nome da função.

O número é retornado através do comando return.

O número retornado éarmazenado na variável resultado

Page 17: 17 - Funções e Procedimentos em C Programação · PDF fileFunções e Procedimentos em C 3 A forma de modularizar um programa em C é através de Funções e Procedimentos. Pode-se

Funções e Procedimentos em C 17

É passado para a função int verifPar(int k) uma variável (k) do tipo inteiro.

A função recebe esta variável, verifica se ela é par ou não e devolve ao programa principal o número 1 se k for par e o número zero se k for ímpar.

A função utiliza o comando return para devolver o valor. O tipo do valor devolvido é que define o tipo da função.

A função int verifPar(int k) é então uma função do tipo inteiro, porque o valor devolvido é inteiro.

O programa principal armazena o valor recebido na variável resultado.

ObservaObservaçções sobre o exemplo 17.3ões sobre o exemplo 17.3

17.1 17.1 -- FunFunçções e Procedimentos: ões e Procedimentos: UtilizaUtilizaçção de parâmetros. ão de parâmetros.

Page 18: 17 - Funções e Procedimentos em C Programação · PDF fileFunções e Procedimentos em C 3 A forma de modularizar um programa em C é através de Funções e Procedimentos. Pode-se

Funções e Procedimentos em C 18

VariVariááveis Locais :veis Locais : são variáveis declaradas dentro de um subprograma.

Elas só podem ser manipuladas dentro do subprograma que as declarou. Logo, elas não são visíveis em nenhuma outra parte do programa.

17.1 17.1 -- FunFunçções e Procedimentos: ões e Procedimentos: Conceitos ImportantesConceitos Importantes

No Exemplo 17.4 mostrado a seguir, a variável a é uma variável local e qualquer alteração que se faça nela, dentro da função mudaA, não será visível dentro do programa principal, main( ).

Page 19: 17 - Funções e Procedimentos em C Programação · PDF fileFunções e Procedimentos em C 3 A forma de modularizar um programa em C é através de Funções e Procedimentos. Pode-se

Funções e Procedimentos em C 19

17.2 17.2 -- FunFunçções e Procedimentos: ões e Procedimentos: VariVariáável Localvel Local

#include <stdio.h> Função mudaA().

void mudaA(){

int a;a = 4;printf(“MudaA, a = %d \n”,a);

} Função Principal.main() { int a;

a = 2;printf(“main, a = %d \n”,a);mudaA();printf(“main, a = %d \n”,a);

}

Exemplo 17.4 – Variável Local

main, a = 2

Na tela

mudaA, a = 4

Na tela

Observe que o valor da variável a foi alterado em mudaA(), mas esta alteração não foirepassada para o main.

main, a = 2

Na tela

Page 20: 17 - Funções e Procedimentos em C Programação · PDF fileFunções e Procedimentos em C 3 A forma de modularizar um programa em C é através de Funções e Procedimentos. Pode-se

Funções e Procedimentos em C 20

17.2 17.2 -- FunFunçções e Procedimentos: ões e Procedimentos: VariVariáável Localvel Local

Na realidade a variável a da função mudaA() NÃO éigual a variável a do main. O programa trabalha com as duas variáveis independentemente.

Com a variável local, duas funções diferentes, por exemplo f1 e f2 podem ter o mesmo nome de variável, para armazenar dados diferentes, pois neste caso quando a função f1 está sendo executada o valor da variável fica “oculto” em f2 e vice-versa.

Page 21: 17 - Funções e Procedimentos em C Programação · PDF fileFunções e Procedimentos em C 3 A forma de modularizar um programa em C é através de Funções e Procedimentos. Pode-se

Funções e Procedimentos em C 21

Variáveis globais: são variáveis declaradas no início do programa principal (no corpo do main).

AsAs varivariááveis globaisveis globais podem ser manipuladas durante toda podem ser manipuladas durante toda a execua execuçção do programa, Assim qualquer alteraão do programa, Assim qualquer alteraçção que se ão que se fafaçça numa varia numa variáável global irvel global iráá refletir em todas as funrefletir em todas as funçções ões do do programa.programa.

17.1 17.1 -- FunFunçções e Procedimentos: ões e Procedimentos: VariVariáável Globalvel Global

A seguir A seguir éé mostrado um exemplo utilizando mostrado um exemplo utilizando varivariáável global vel global

Cuidado, pois ao se definir uma variável global, ela não poderá ser redeclarada em outra função do programa, porque isto acarreta um erro de compilação

Page 22: 17 - Funções e Procedimentos em C Programação · PDF fileFunções e Procedimentos em C 3 A forma de modularizar um programa em C é através de Funções e Procedimentos. Pode-se

Funções e Procedimentos em C 22

17.2 17.2 -- FunFunçções e Procedimentos: ões e Procedimentos: VariVariáável Globalvel Global

#include <stdio.h>int a; Função mudaA().

void mudaA(){

a = 4;printf(“MudaA, a = %d \n”,a);

}

Função Principal.main() { a = 2;

printf(“main, a = %d \n”,a);mudaA();printf(“main, a = %d \n”,a);

}

Exemplo 17.5 – Variável Global

Observe que a variável a foi declarada no corpo doprograma principal e não dentro da função mudaA, como no exemplo anterior

Quando uma variável édeclarada no corpo domain, ela não pode ser declarada dentro da função.

Page 23: 17 - Funções e Procedimentos em C Programação · PDF fileFunções e Procedimentos em C 3 A forma de modularizar um programa em C é através de Funções e Procedimentos. Pode-se

Funções e Procedimentos em C 23

17.2 17.2 -- FunFunçções e Procedimentos: ões e Procedimentos: VariVariáável Globalvel Global

#include <stdio.h>int a; Função mudaA().

void mudaA(){

a = 4;printf(“MudaA, a = %d \n”,a);

}

Função Principal.main() { a = 2;

printf(“main, a = %d \n”,a);mudaA();printf(“main, a = %d \n”,a);

}

Exemplo 17.5 – Escopo Global

main, a = 2Na tela

mudaA, a = 4Na tela

main, a = 4Na tela

O valor da variável a foi alterado em mudaA() e esta alteração foi passada para a variável a do main(). Mas,deve-se evitar o uso de variáveis globais

Page 24: 17 - Funções e Procedimentos em C Programação · PDF fileFunções e Procedimentos em C 3 A forma de modularizar um programa em C é através de Funções e Procedimentos. Pode-se

Funções e Procedimentos em C 24

Os conceitos de variáveis globais e locais determinam um termo denominado ESCOPO.

VariVariááveis que possuemveis que possuem Escopo GlobalEscopo Global são acessadas por são acessadas por todos as subprogramas que estão contidos em um programatodos as subprogramas que estão contidos em um programa..

Variáveis que possuem Escopo Local são acessadas somente por subprogramas que estão contidos no subprograma.

Depois de terminada a execuDepois de terminada a execuçção de uma funão de uma funçção ão (procedimento), todas as suas vari(procedimento), todas as suas variááveis locais são destruveis locais são destruíídas.das.

17.2 17.2 -- FunFunçções e Procedimentos: ões e Procedimentos: Escopo Local e GlobalEscopo Local e Global

Page 25: 17 - Funções e Procedimentos em C Programação · PDF fileFunções e Procedimentos em C 3 A forma de modularizar um programa em C é através de Funções e Procedimentos. Pode-se

Funções e Procedimentos em C 25

17.2 17.2 -- FunFunçções e Procedimentos: ões e Procedimentos: InstruInstruççãoão ReturnReturn

FunFunçções que retornam um valorões que retornam um valor

Na linguagem C existem várias funções que já estão programadas, como por exemplo a função sqrt(x ) que calcula a raiz quadrada de x, a função sin(x) que calcula o seno(x), etc.

Uma função pode ser responsável por fazer uma determi-nada tarefa e uma vez terminada esta tarefa, ela devolve, como resultado, apenas um valor.

A devolução do resultado é feita através do comando returnreturn, seguido do valor a ser devolvido.

Após o comando return return pode ser colocado qualquer expressão válida em C.

Page 26: 17 - Funções e Procedimentos em C Programação · PDF fileFunções e Procedimentos em C 3 A forma de modularizar um programa em C é através de Funções e Procedimentos. Pode-se

Funções e Procedimentos em C 26

17.2 17.2 -- FunFunçções e Procedimentos: ões e Procedimentos: InstruInstruçção Returnão Return

#include <stdio.h> Função mudaA().

int mudaA(int b){ b = b*b;

printf(“MudaA, a = %d \n”,b);return b;

} Função Principal.main() { int a;a = 2;printf(“main, a = %d \n”,a);a = mudaA(a);printf(“main, a = %d \n” ,a);

}

Exemplo 17.6 – ReturnTipo de retornoTipo de retorno

Tipo de ParâmetroTipo de Parâmetro

Valor a retornarValor a retornar

A variA variáável vel aa recebe o resultado darecebe o resultado dafunfunçção ão mudaAmudaA(a)(a)..

Page 27: 17 - Funções e Procedimentos em C Programação · PDF fileFunções e Procedimentos em C 3 A forma de modularizar um programa em C é através de Funções e Procedimentos. Pode-se

Funções e Procedimentos em C 27

17.2 17.2 -- FunFunçções e Procedimentos: ões e Procedimentos: InstruInstruçção Returnão Return

#include <stdio.h> Função mudaA().

int mudaA(int b){ b = b*b;

printf(“MudaA, a = %d \n”,b);return b;

} Função Principal.main() { int a;a = 2;printf(“main, a = %d \n” ,a);a = mudaA(a);printf(“main, a = %d \n” ,a);

}

Exemplo 17.6 – Return Observe que aqui estamos utilizando variáveis locais, O valorde a foi alterado em mudaA(), e o novo valor de a foi repassado para main() através do return.

MudaA, a = 4

Na tela

main, a = 2Na tela

main, a = 4

Na tela

Page 28: 17 - Funções e Procedimentos em C Programação · PDF fileFunções e Procedimentos em C 3 A forma de modularizar um programa em C é através de Funções e Procedimentos. Pode-se

Funções e Procedimentos em C 28

17.2 17.2 -- FunFunçções e Procedimentos: ões e Procedimentos: InstruInstruççãoão ReturnReturn

Uma função pode conter várias instruções return, return, mas mas apenas uma instruapenas uma instruççãoão return return éé executada.executada.

A devolução do resultado é feita através do comando returnreturn, seguido do valor a ser devolvido.

Após o comando return return pode ser colocado qualquer expressão válida em C.

A instrução returnreturn termina a execução da função (procedimento), e o controle do programa é devolvido ao local onde a função (procedimento) foi invocada.

Page 29: 17 - Funções e Procedimentos em C Programação · PDF fileFunções e Procedimentos em C 3 A forma de modularizar um programa em C é através de Funções e Procedimentos. Pode-se

Funções e Procedimentos em C 29

17.2 17.2 -- FunFunçções e Procedimentos: ões e Procedimentos: InstruInstruççãoão ReturnReturn

Exemplo 17.7 – Fazer um programa que solicite ao usuário dois números e apresente na tela o resultado da sua soma e do dobro de cada um deles. Utilize uma função para calcular a soma e outra para o dobro.

#include <stdlib.h>// Função que devolve a soma

de dois inteirosint soma (int a, int b){

return a+b ; }// Função que devolve o dobro

de qualquer inteiroint dobro (int x){

return 2*x ; }

// Função principal chama as demais.main(){int n, i, total;printf(“Introd. dois numeros”);scanf(“%d%d”,&n,&i);total=soma(n,i);printf(“%d+%d=%d\n”,n,i,total);printf(“2*%d=%d e

2*%d=%d\n”,n,dobro(n), i, dobro(i));

}

Page 30: 17 - Funções e Procedimentos em C Programação · PDF fileFunções e Procedimentos em C 3 A forma de modularizar um programa em C é através de Funções e Procedimentos. Pode-se

Funções e Procedimentos em C 30

17.2 17.2 -- FunFunçções e Procedimentos: ões e Procedimentos: InstruInstruççãoão ReturnReturn

OBS: Uma vez que a função dobro devolve um inteiro o seu resultado pode ser usado dentro de um printf, sendo escrito com o formato de inteiro (%d)

Ao executar este programa teremos na tela o seguinte:

Introd dois numeros: 4 74+7=112*4=8 e 2*7=14

Uma função pode ser invocada dentro de uma outra função. O resultado é o mesmo que se obteria se, em vez da chamada a função aí estivesse o resultado devolvido a esta.

Page 31: 17 - Funções e Procedimentos em C Programação · PDF fileFunções e Procedimentos em C 3 A forma de modularizar um programa em C é através de Funções e Procedimentos. Pode-se

Funções e Procedimentos em C 31

17.2 17.2 -- FunFunçções e Procedimentos: ões e Procedimentos: InstruInstruççãoão ReturnReturn

Exemplo 17.8 Qual seria a saída se acrescentássemos ao programa anterior a seguinte linha:

printf(“%d”,dobro(soma(dobro(2), 3)));

solução:dobro(2) 4soma(dobro(2), 3)) soma(4, 3)) 7dobro(soma(dobro(2), 3))) dobro(soma(4,3)) dobro(7) 14

Então o valor impresso na tela seria 14.

Isto é equivalente a colocar no programa anterior as seguintes linhas:a= dobro(2);b= soma(a, 3));c= dobro(b);printf(“%d”,c);

Page 32: 17 - Funções e Procedimentos em C Programação · PDF fileFunções e Procedimentos em C 3 A forma de modularizar um programa em C é através de Funções e Procedimentos. Pode-se

Funções e Procedimentos em C 32

17.2 17.2 -- FunFunçções e Procedimentos: ões e Procedimentos: Escopo/VetoresEscopo/Vetores

Exemplo 17.9 – Vetores. Fazer um programa, com duas funções sendo que a primeira deve gerar um vetor V com elementos aleatórios num dado intervalo [a,b] e a segunda deve imprimir os elementos do vetor.

#include <stdlib.h>#include <stdio.h>#include <time.h>// Função que atribui elementos // aleatórios para v em [a,b].void geraV(int v[], int n, int

a, int b){ int i;

srand(time(0)); for (i=0; i < n; i++)

v[i] = (rand()%(b-a+1))+a; }

// Função que imprime um vetor.void imprimeV(int v[], int n){int i;

for(i=0; i < n; i++)printf(" [%2d] ",v[i]);

printf("\n"); }// Função principal chama as demais.main(){ int v[10];// Gera vetor com valores em [a,b].geraV(v,10,1,6);imprimeV(v,10);

}

Page 33: 17 - Funções e Procedimentos em C Programação · PDF fileFunções e Procedimentos em C 3 A forma de modularizar um programa em C é através de Funções e Procedimentos. Pode-se

Funções e Procedimentos em C 33

17.2 17.2 -- FunFunçções e Procedimentos: Escopo/Vetoresões e Procedimentos: Escopo/Vetores

OBSERVAOBSERVAÇÇÕES sobre o Exemplo 17.9 ÕES sobre o Exemplo 17.9 –– VetoresVetores1) Quando a função main chama o procedimento geraV, através

da linha:geraV(v,10,1,6);

é passado para o procedimento o valor de n=10 e o intervalo a= 1 e b= 6.

2) O procedimento geraV gera os elementos do vetor v e o devolve para o main. Isto é feito sem usar o comando return. O novo valor de v é utilizado em main().

3) O valor de v retorna para a função main, pois no caso de vetores é passada a referência e não os valores (isto serámelhor entendido com o estudo de ponteiros.)

4) Se a variável v não fosse um vetor ela não retornaria para a função main. Para que ela retornasse seria necessário usar o return e não teríamos um procedimento e sim uma função.

Page 34: 17 - Funções e Procedimentos em C Programação · PDF fileFunções e Procedimentos em C 3 A forma de modularizar um programa em C é através de Funções e Procedimentos. Pode-se

Funções e Procedimentos em C 34

// Função Principal.main(){

float Vetor[60];int n, i, j;printf(“No. elementos de v: ");scanf("%d",&n);printf("Digite elementos de v:");for (i=0; i < n; i++)

scanf("%f",&Vetor[i]);ordenaVetor(Vetor, n);printf("Vetor Ordenado\n");for (i=0; i < n; i++)

printf("%.1f\n",Vetor[i]);system("pause");

}

17.2 17.2 -- FunFunçções e Procedimentos: ões e Procedimentos: Escopo/VetoresEscopo/Vetores

Exemplo 17.10 – Bubble Sort#include <stdio.h>#include <stdlib.h>// Usa o Bubble Sort Aperfeiçoado.void ordenaVetor(float v[], int n ){

int i,j;float tmp;

for (i=0; i < n-1; i++) for (j=0; j < n-i-1;j++)

if (v[j] > v[j+1]){ tmp = v[j];

v[j] = v[j+1];v[j+1] = tmp;

}}

Page 35: 17 - Funções e Procedimentos em C Programação · PDF fileFunções e Procedimentos em C 3 A forma de modularizar um programa em C é através de Funções e Procedimentos. Pode-se

Funções e Procedimentos em C 35

17.2 17.2 -- FunFunçções e Procedimentos: ões e Procedimentos: Escopo/VetoresEscopo/Vetores

OBSERVAOBSERVAÇÇÕESÕES sobre Exemplosobre Exemplo 17.10 17.10 –– BubbleBubble SortSort

1) Neste exemplo o vetor v é lido na função main e a seguir épassado para o procedimento ordenaVetor através da linha:

ordenaVetor(Vetor, n);

2) O procedimento ordenaVetor , ordena os elementos do vetor e o devolve para o main. Isto é feito sem usar o comando return, pois trata-se de um vetor.

3) A seguir o main, imprime o vetor ordenado.

4) Observe também que dentro do procedimento o vetor tem o nome de v e dentro do main o nome é vetor.

Page 36: 17 - Funções e Procedimentos em C Programação · PDF fileFunções e Procedimentos em C 3 A forma de modularizar um programa em C é através de Funções e Procedimentos. Pode-se

Funções e Procedimentos em C 36

// Imprime matriz.void printM(int A[][n]){ int i, j;

for (i=0; i < m; i++){ for (j=0; j < n; j++)

printf("[%2d]",A[i][j]);printf("\n"); }

}// Função Principal.main(){ int i, j;

int A[m][n];geraM(A,1,6);printM(A);

}

17.2 17.2 -- FunFunçções e Procedimentos: ões e Procedimentos: Escopo/MatrizesEscopo/Matrizes

#include <stdio.h>#include <stdlib.h>#include <time.h>const int m = 5;const int n = 4;// Gera matriz com elementos em [a,b].void geraM(int A[][n], int a, int b){ int i, j;

srand(time(0));for (i=0; i < m; i++)

for (j=0; j < n; j++)A[i][j] = (rand()%(b-a+1))+a;

}

Exemplo 17.11 – Matrizes

Page 37: 17 - Funções e Procedimentos em C Programação · PDF fileFunções e Procedimentos em C 3 A forma de modularizar um programa em C é através de Funções e Procedimentos. Pode-se

Funções e Procedimentos em C 37

17.2 17.2 -- FunFunçções e Procedimentos: ões e Procedimentos: Escopo/MatrizesEscopo/Matrizes

OBSERVAOBSERVAÇÇÕES ÕES sobre osobre o Exemplo 17.11Exemplo 17.11-- Matrizes Matrizes

1) Neste exemplo a matriz A é gerada aleatoriamente no procedimento geraM.

2) O procedimento geraM, devolve os elementos de A para o main. Isto é feito através das linhas:

a) void geraM(int A[][n], int a, int b) b) geraM(A,1,6);

Observe que: a linha (a) é o cabeçalho do procedimento geraM e nele estão declaradas: a matriz A (int A[][n]), a variável inteira a (int a) e a variável inteira b (int b). No caso da declaração da matriz énecessário estipular somente o número de colunas, que neste caso én.A linha (b) é a chamada do procedimento dentro do main e as variáveis que estão dentro do parêntese tem uma correspondência direta com as variáveis do cabeçalho.

Page 38: 17 - Funções e Procedimentos em C Programação · PDF fileFunções e Procedimentos em C 3 A forma de modularizar um programa em C é através de Funções e Procedimentos. Pode-se

Funções e Procedimentos em C 38

17.2 17.2 -- FunFunçções e Procedimentos: ões e Procedimentos: Escopo/MatrizesEscopo/Matrizes

3) A seguir o main, envia os elementos de A para o procedimento printM que o imprime. Isto é feito através das linhas:

void printM(int A[][n]), printM(A);

que são respectivamente, cabeçalho do procedimento e chamada do procedimento dentro do main.

4) Observe também que tudo isto é feito sem usar o comando return.

5) O return só pode ser usado quando se quer devolver um único valor.

Page 39: 17 - Funções e Procedimentos em C Programação · PDF fileFunções e Procedimentos em C 3 A forma de modularizar um programa em C é através de Funções e Procedimentos. Pode-se

Funções e Procedimentos em C 39

Unesp-Campus de Guaratinguetá

FIM

Aula 17Referências dos slides

Curso de Programação de ComputadoresProf. Aníbal Tavares

Profa. Cassilda RibeiroProf. Décio MourãoProf. Galeno Sena

17 17 -- FunFunçções e Procedimentosões e Procedimentos