3.1 Funções
Começamos com o seguinte exemplo:
Exemplo 3.1.1. Implemente um programa para estudar a expressão
para ,
e .
#include <stdio.h>
#include <math.h>
main (void)
{
double x = 1e2,y;
y=1+1/x;
y=pow(y,x);
printf("(1+1/%e)^%e=%f\n",x,x,y);
x=1e6;
y=1+1/x;
y=pow(y,x);
printf("(1+1/%e)^%e=%f\n",x,x,y);
x=1e10;
y=1+1/x;
y=pow(y,x);
printf("(1+1/%e)^%e=%f\n",x,x,y);
}
No solução do exemplo 3.1.1, as linhas 7, 12 e 17 são as mesmas, assim como
8, 13 e 18 e 9, 14 e 19. Para deixar o código mais sucinto e legível, convém
escrever essas linhas uma única vez e chamar sua execução cada vez que
desejarmos. Observe uma versão alternativa para o código do exemplo
3.1.1:
#include <stdio.h>
#include <math.h>
Euler_seq(double x)
{
double y;
y=1+1/x;
y=pow(y,x);
printf("(1+1/%e)^%e=%f\n",x,x,y);
}
main (void)
{
Euler_seq(1e2);
Euler_seq(1e6);
Euler_seq(1e10);
}
Nessa última versão, introduzimos a função Euler_seq(double x)
antes do ambiente main que entra um parâmetro x do tipo double e
executa as linhas de antes estavam repetidas. Dentro do ambiente main nós
chamamos a função pelo nome e dizemos qual é o double que vamos
passar.
As funções também podem retornar um valor. Observe uma outra versão
para o exemplo 3.1.1:
#include <stdio.h>
#include <math.h>
double Euler_seq(double x)
{
double y;
y=1+1/x;
return y=pow(y,x);
}
main (void)
{
double z=1e2;
printf("(1+1/%e)^%e=%f\n",z,z,Euler_seq(z));
z=1e6;
printf("(1+1/%e)^%e=%f\n",z,z,Euler_seq(z));
z=1e10;
printf("(1+1/%e)^%e=%f\n",z,z,Euler_seq(z));
}
Seguem algumas observações sobre funções:
- O nome da variável enviada para uma função não precisa ser
o mesmo nome do parâmetro de entrada no cabeçalho. Observe a
última versão do código do exemplo 3.1.1, onde a variável enviada
é z e a variável de entrada da funçao é x. Mas observe que elas
são do mesmo tipo.
- O cabeçalho não pode ser seguido de ponto-e-vírgula (;).
- Não se pode definir função dentro de outra função. No entanto,
pode-se invocar uma função dentro de outra função.
- Depois da instrução return pode se colocar qualquer expressão
válida em C, inclusive deixar sem nada (tipo void), desde que fique
coerente com o cabeçalho.
- Sempre que não fique indicado o tipo de retorno, o C assume o padrão
int.
- As variáveis definidas dentro das funções são chamadas de
variáveis locais e não podem ser chamadas de fora. Na última
versão do código do exemplo 3.1.1, y é uma variável local do tipo
double.
Exemplo 3.1.2. Escreva um programa que lê dois números inteiros
positivos e imprime o menor entre eles. Use a estrutura de função para
retornar o menor.
#include <stdio.h>
#include <math.h>
int menor(int a,int b)
{
if (a<=b) return a;
else return b;
}
main (void)
{
int x,y;
printf("Entre com dois números inteiros positivos\n");
scanf(" %d %d",&x,&y);
printf("O menor número entre eles é o %d\n",menor(x,y));
}