Linguagem C. Funções

Documentos relacionados
C++ - Funções. Forma geral das funções C++

Permite modularidade (dividir programa em partes): Facilita a depuração (debug) e portabilidade.

#include <stdio.h> main() { int i; // Cabeçalho for (i = 1; i <=20; i++) putchar( * ); putchar( \n ); puts( Numeros entre 1 e 5 );

Módulo 7. Funções. Algoritmos e Estruturas de Dados I C++ (Rone Ilídio)

Aula 07 Introdução à Programação Subprogramas

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: funções

Linguagem de Programação I. Aula 10 Funções

Suponha um conjunto habitacional, com várias famílias... imagina se todas elas morassem em uma única casa?

Linguagem C Funções. André Tavares da Silva.

Linguagem de Programação C

LINGUAGEM C: FUNÇÕES FUNÇÃO 04/07/2017. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.

Suponha um conjunto habitacional, com várias famílias... imagina se todas elas morassem em uma única casa?

Faculdade de Computação

Modularidade - Funções e Procedimentos

Introdução à Computação

Capítulo 1: Introdução à Linguagem C. Pontifícia Universidade Católica Departamento de Informática

Linguagem C Controle do Fluxo de Execução. Lógica de Programação

Linguagem C: Introdução

Introdução à Programação Aula 09. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

LINGUAGEM C: FUNÇÕES FUNÇÃO 08/01/2018. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.

Linguagem C: Elementos fundamentais

INF1007: Programação 2. 0 Revisão. 06/08/2015 (c) Dept. de Informática - PUC-Rio 1

Introdução a Programação de Jogos

Linguagem C. André Tavares da Silva.

Introdução à Linguagem C

ALGORITMOS E ESRUTRA DE DADOS I. Ponteiros Passagem por Valor e Referência Alocação de Memória

Linguagem C. Comandos de Decisão

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO

Modularidade - Fun ções e Procedimentos

Algoritmos e Programação

Faculdade Anglo-Americano Curso de Ciência da Computação Linguagem de Programação. Lista de Exercícios 1

Aula 5 Oficina de Programação Introdução ao C. Profa. Elaine Faria UFU

3.1 - Funções para manipular dados de entrada e saída padrão

Programação: Vetores

Características da Linguagem C

Capítulo 2 Operadores. A função scanf()

UNIVERSIDADE DO VALE DO RIO DOS SINOS - UNISINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS - CENTRO 06. Funções, variáveis, parâmetros formais

PROGRAMAÇÃO DE COMPUTADORES V - TCC Modulo 6 : Funções Escopo de Variáveis: Globais x Locais Aura - Erick

Introdução à Linguagem C Variáveis e Expressões

Sub Rotinas. Estrutura de Dados. Prof. Kleber Rezende

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

5 - COMANDOS DE CONTROLE DE PROGRAMA Em C existem os comandos de decisões, os comandos de iteração (ou de laços) e os comandos de desvios.

Sintaxe. Observações: #include <stdio.h> #include <conio.h> void main ( ) { int num, dobro; clrscr ( ); printf ( Digite i um número: );

Linguagem C. Programação Estruturada. Modularização (Funções) Prof. Luis Nícolas de Amorim Trigo

Linguagem C. Prof.ª Márcia Jani Cícero

#include <stdio.h> Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C

Subprogramas. (ou Sub-rotinas) em C: Procedimentos e Funções. 2015/1 Programação Básica de Computadores (INF 09325)

Programação Estruturada

Módulo 1. Introdução. AEDS I C++ (Rone Ilídio)

Aula 03 -Introdução àlinguagc Programação: Estrutura-Repetição. OPL e IC1 Prof: Anilton Joaquim da Silva

ponteiros INF Programação I Prof. Roberto Azevedo

Tipos Básicos. Operadores de Incremento e Decremento. Operador Sizeof. Estruturas de Dados Aula 2: Estruturas Estáticas

Aula 15 - Aula sobre Funções e Procedimentos

FUNÇÕES EM C Material adaptado da profa Silvana Maria Affonso de Lara

Lista de Exercícios Revisão de Lógica. 01. Desenvolva um programa em C que receba três valores numéricos inteiros e mostre a soma desses três números.

MC-102 Aula 13. Instituto de Computação Unicamp. 29 de Setembro de 2016

Tipos de Dados, Variáveis e Entrada e Saída em C. DCC 120 Laboratório de Programação

Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Segunda Aula Prática - 3 de setembro de 2010

Computação 2. Diego Addan Aula 3. Funções

Transcrição:

Linguagem C Funções

Funções Uma função é um conjunto de instruções desenhadas para cumprir uma tarefa particular Funções dividem grandes tarefas de computação em tarefas menores Permitem que todos os outros programadores C a utilizem em seu programas Funções apropriadas podem ocultar detalhes de operações de parte do programa Ex: printf() Evita que o programador tenha que escrever o mesmo código repetidas vezes O grande princípio de linguagens estruturadas é o de dividir um programa em funções

Chamando uma função Você já escreveu programas que chamam funções printf(), scanf(), getchar() Outras funções podem ser escritas por nós int main() int n; printf( Digite um numero: "); scanf("%d", &n); printf( O quadrado do numero e %d.\n, (n*n)); getchar ();

Funções simples Um programa pode conter uma ou mais funções, das quais uma deve ser main() /* Celsius.C */ /* Mostra a escrita da função celsius() */ float celsius(float); /* Protótipo ou declaração da função */ int main() float c, f; printf("digite a temperatura em graus Fahrenheit: "); scanf("%f", &f); c = celsius(f); /* Chamada à função */ printf("celsius = %.2f\n", c); printf("pressione [ENTER] para finalizar."); getchar(); getchar(); /* celsius() */ /* Definição da função */ float celsius( float fahr) float c; c = (fahr - 32.0) * 5.0/9.0; return c;

Funções simples Um programa pode conter uma ou mais funções, das quais uma deve ser main() /* Celsius.C */ /* Mostra a escrita da função celsius() */ float celsius(float); /* Protótipo ou declaração da função */ int main() float c, f; printf("digite a temperatura em graus Fahrenheit: "); scanf("%f", &f); c = celsius(f); /* Chamada à função */ printf("celsius = %.2f\n", c); printf("pressione [ENTER] para finalizar."); getchar(); getchar(); /* celsius() */ /* Definição da função */ float celsius( float fahr) float c; c = (fahr - 32.0) * 5.0/9.0; return c;

O protótipo de uma função Uma função não pode ser chamada sem antes ter sido declarada A declaração de uma função é dita protótipo da função Instrução geralmente alocada no início do programa Estabelece o tipo da função e os argumentos que ele recebe O protótipo da função permite que o compilador verifique a sintaxe de chamada à função float celsius(float); Essa declaração informa que a função de nome celsius() é do tipo float e recebe como argumento um valor float

Protótipo externo e local Há duas formas de declarar funções em C A mais usada é denominada protótipo externo É escrita antes de qualquer função A declaração é feita uma única vez e é visível para todas as funções do programa A outra forma é denominada protótipo local É escrita no corpo de todas as funções que a chamam, antes de sua chamada

Exemplo Protótipo local /* Celsius1.C */ /* Mostra a escrita da função celsius() */ int main() float celsius(float); /* Protótipo local */ float c, f; printf("digite a temperatura em graus Fahrenheit: "); scanf("%f", &f); c = celsius(f); /* Chamada à função */ printf("celsius = %.2f\n", c); printf("pressione [ENTER] para finalizar."); getchar(); getchar(); /* celsius() */ /* Definição da função */ float celsius( float fahr) float c; c = (fahr - 32.0) * 5.0/9.0; return c;

O tipo de uma função O tipo de uma função é definido pelo tipo de valor que ela retorna por meio do comando return Os tipos de funções em C são os mesmos tipos que o das variáveis, exceto quando a função não retorna valor algum void O tipo de uma função é determinado pelo valor que ela retorna via comando return, e não pelo tipo de argumentos que ela recebe

O comando return O comando return termina a execução da função e retorna o controle para a instrução seguinte do código de chamada Se, após a palavra return, houver uma expressão, o valor desta é retornado à função que chama Esse valor é convertido para o tipo da função, especificado no seu protótipo A sintaxe de uma instrução return obedece uma das três formas return; return expressão; return(expressão);

O comando return Podemos eliminar a variável declarada no corpo da função celsius() e colocar a expressão de cálculo diretamente /* celsius() */ /* Definição da função */ float celsius( float fahr) return(fahr - 32.0) * 5.0/9.0; Funções do tipo void podem ter um comando return desacompanhado de expressão Nesse caso, o comando return serve para terminar a execução da função Em funções do tipo void, o comando return não é obrigatório Um função sem comando return termina quando encontra a chame de fechamento ()

O comando return O valor de retorno de uma função é acessado, na instrução de chamada, pelo nome da função de parênteses, contendo ou não argumentos c = celsius(f); /* Chamada à função */ Esse valor pode, então, ser atribuído a uma variável ou fazer parte de alguma expressão

/* minusculo() */ /* converte para minusculo se for maiusculo */ unsigned char minusculo(unsigned char ch) if(ch >= 'A' && ch <= 'Z') /* se maiusculo? */ return(ch + 'a'-'a'); /* devolve convertido */ else return(ch); /* devolve sem converter*/ int main() unsigned char ch ; ch=getche(); /* le um caractere */ printf("%c", minusculo(ch)); printf("\npressione [ENTER] para finalizar."); getchar(); Funções com mais de um comando return Várias instruções return podem fazer parte de uma função, porém somente uma será executada /* Minusculo.C */ #include <conio.h> /* para getche() */

Limitação do comando return Vários valores podem ser passados para uma função como argumentos Entretanto, não é permitido o retorno de mais de um valor por meio do comando return O comando return pode retornar somente um único valor para a função que chama

A definição de uma função O código C que descreve o que a função faz é denominado definição da função Sua forma geral é a seguinte tipo nome (declaração dos parâmetros instruções; A primeira linha é o cabeçalho da definição da função A definição de qualquer função C começa com o nome do tipo da função, o mesmo de seu protótipo

Parâmetros de uma função As variáveis que receberão as informações enviadas a uma função são chamadas parâmetros A função deve declarar essas variáveis entre parênteses, no cabeçalho de sua definição ou antes das chaves Os parâmetros podem ser utilizados livremente no corpo da função /* Outra sintaxe de declaração de parâmetros */ float celsius(fahr) float fahr; /* Declaração de parâmetros */ return(fahr - 32.0) * 5.0/9.0; Variáveis que não fazem parte dos parâmetros de uma função não podem ser declaradas em seu cabeçalho

Passagem de argumentos por valor No exemplo anterior, a função cria uma nova variável para receber o valor passado Sua declaração indica que o valor enviado será armazenado na variável fahr, criada quando a função inicia sua execução e destruída quando ela termina A função copia o valor enviado por main() na variável fahr, criada por ela. Isso se chama passagem de argumento por valor No próximo exemplo, uma função recebe um número inteiro como argumento e retorna seu valor absoluto

Exemplo /* Abs.C */ int abs(int); /* protótipo */ int main() int x=10; printf("%d\t%d\t%d\n", abs(0), abs(-3), abs(x)); printf("pressione [ENTER] para finalizar."); getchar(); /* abs() */ /* Calcula o valor absoluto de um número*/ int abs( int n) return ( n > 0 )? n : -n;

Funções que retornam nada: tipo void /* moldtext.c */ /* envolve um texto por uma moldura */ void linha(int); /* protótipo */ int main() linha(20); printf("\xdb UM PROGRAMA EM C \xdb\n"); linha(20); printf("pressione [ENTER] para finalizar."); getchar(); /* linha() */ /* desenha uma linha solida na tela, 20 caracteres */ void linha(int n) int j; for(j=1; j<=n; j++) printf("\xdb"); printf("\n");

Funções que recebem nada e retornam nada /* DoisBeep.C */ /* testa a funcao doisbeep */ #include <conio.h> void doisbeep(void); /* protótipo */ int main() doisbeep(); printf("digite um caractere: "); getche(); doisbeep(); printf("\npressione [ENTER] para finalizar."); getchar(); /* doisbeep() */ /* toca o auto-falante duas vezes */ void doisbeep() int k; printf("\x7"); for(k=1;k<5000;k++); printf("\x7");

Eliminando o protótipo de funções As funções definidas antes de serem chamadas não necessitam de protótipo /* Celsius3.C */ /* Mostra a escrita da função celsius() */ /* celsius() */ /* Definição da função */ float celsius( float fahr) float c; c = (fahr - 32.0) * 5.0/9.0; return c; int main() float c, f; printf("digite a temperatura em graus Fahrenheit: "); scanf("%f", &f); c = celsius(f); /* Chamada à função */ printf("celsius = %.2f\n", c); printf("pressione [ENTER] para finalizar."); getchar(); getchar();

Eliminando o protótipo de funções do tipo int, char e void Em linguagem C, se uma função for do tipo int, char ou void, não é obrigatória a sua declaração Se você omitir a declaração da função, a linguagem C assume por padrão que a função é do tipo int main() int x=10; printf("%d\t%d\t%d\n", abs(0), abs(-3), abs(x)); printf("pressione [ENTER] para finalizar."); getchar(); /* abs() */ /* Calcula o valor absoluto de um número*/ abs( int n) return ( n > 0 )? n : -n;

Eliminando o protótipo de funções do tipo int, char e void /* moldtext.c */ /* envolve um texto por uma moldura */ main() linha(20); printf("\xdb UM PROGRAMA EM C \xdb\n"); linha(20); printf("pressione [ENTER] para finalizar."); getchar(); /* linha() */ /* desenha uma linha solida na tela, n caracteres */ linha(int n) int j; for(j=1; j<=n; j++) printf("\xdb"); printf("\n");

Eliminando o protótipo de funções do tipo int, char e void Bons programadores escrevem os protótipo de todas as suas funções.

Calculando a área de uma esfera Uma função do tipo não inteira deve, obrigatoriamente, ser declarada /* Esfera.C */ /* calcula a area da esfera */ const float PI=3.14159; float area(float); /* protótipo */ int main() float raio; printf("digite o raio da esfera: "); scanf("%f",&raio); printf("a area da esfera e' %.2f\n",area(raio)); printf("pressione [ENTER] para finalizar."); getchar(); getchar(); /* area() */ /* retorna a area da esfera */ float area(float r) /* definicao da funcao */ return( 4 * PI * r * r);

Vários argumentos /* Retangulos.C */ /* Desenha cômodos de uma casa */ void retangulo( int, int); /* protótipo */ int main() printf("sala\n"); retangulo(22,12); printf("cozinha\n"); retangulo(16,16); printf("banheiro\n"); retangulo(6,8); printf("quarto\n"); retangulo(12,12); printf("\n"); printf("tecle [ENTER] para finalizar."); getchar(); /* retangulo() */ /* Desenha um retângulo na tela */ void retangulo( int largura, int altura) int j, k; largura /=2; altura /=4; for( j=1; j<= altura; j++) printf("\t\t"); for(k=1; k <= largura; k++) printf("\xdb"); printf("\n");

Horas e minutos um novo uso de scanf() /* Minuts.C */ /* calcula a diferenca entre dois tempos */ /* solicita hora:minutos */ int minutos(int, int); /* protótipo */ int main() int minsl, mins2; int hora, min; printf("digite a primeira hora (hora:min): "); scanf("%d:%d",&hora,&min); /* novo uso de scanf hh:mm */ minsl=minutos(hora, min); printf("digite a segunda hora (hora:min): "); scanf("%d:%d",&hora,&min); mins2=minutos(hora, min); printf("a diferenca e' %d minutos.",mins2-minsl); printf("\ntecle [ENTER] para finalizar."); getchar(); getchar(); /* minutos() */ /* retorna hora em minutos */ int minutos(int h, int m) return(h*60 + m);

Várias funções no mesmo programa Você pode escrever quantas funções quiser em um programa Em C, não é permitido definir uma função dentro de outra As funções são módulos independentes O exemplo a seguir modifica o programa moldtext.c Criaremos a função espacos() que imprime um número de espaços em branco

Várias funções no mesmo programa /* Centraliza.C */ /* Centraliza um texto com moldura */ void linha(int); /* protótipo */ void espacos(int); /* protótipo */ int main() espacos(30); linha(20); espacos(30); printf("\xdb UM PROGRAMA EM C \xdb\n"); espacos(30); linha(20); printf("tecle [ENTER] para finalizar."); getchar(); /* linha() */ /* desenha uma linha solida na tela, 20 caracteres */ void linha(int n) int j; for(j=1; j<=n; j++) printf("\xdb"); printf("\n"); /* espacos() */ /* Imprime espacos em branco */ void espacos(int n) int i; for(i=0; i<n ; i++) printf(" ");

Chamando funções usadas como argumento de outras funções /* Multifunc.C */ /* Calcula a soma dos quadrados de dois números */ float somasqr(float, float);/* protótipo */ float sqr(float); /* protótipo */ float soma(float, float);/* protótipo */ int main() float a,b; printf("digite dois numeros: "); scanf("%f%f", &a, &b); printf("a soma dos quadrados e' %f\n", somasqr(a,b)); printf("tecle [ENTER] para finalizar."); getchar(); getchar(); /* somasqr()*/ /*Calcula a soma dos quadrados de dois números */ float somasqr(float m, float n) return soma( sqr(m), sqr(n) ) ; /* sqr() */ /* Calcula o quadrado de um número */ float sqr(float z) return z*z; /* soma() */ /* Calcula a soma de dois números */ float soma(float m, float n) return m+n ;

Funções recursivas Uma função é dita recursiva quando for definida por seus próprios termos quando dentro dela há uma instrução de chamada para si própria

Funções recursivas /* Fatorial.C */ /* Mostra o uso de funções recursivas */ long fatorial(int); /* Protótipo */ int main() int n; do printf("digite um numero positivo (ou negativo para terminar): "); scanf("%d",&n); if( n < 0 ) break; /* Termina se no. negativo */ printf("o fatorial de %d e' %d.\n",n, fatorial(n)); while (1); printf("tecle [ENTER] para finalizar."); getchar(); getchar(); /* fatorial() */ /* Calcula o fatorial de um número. Recursiva */ long fatorial (int n) return( (n==0)? (long)1 : (long)n* fatorial(n-1));

Funções recursivas O código gerado por uma função recursiva exige a utilização de mais memória, o que torna a execução mais lenta Não é difícil criar funções recursivas O difícil é reconhecer as situações nas quais a recursão é apropriada Três pontos devem ser levados em conta Definir o problema em termos recursivos n! = n * (n-1)! Encontrar a condição básica A função fatorial(), quando chamada, verifica se n é igual a zero Cada vez que a função é chamada recursivamente, ela deve estar mais próxima de satisfazer a condição básica A cada chamada, o valor de n estará mais próximo de zero