tipo_de_retorno nome_da_função (def_parâmetro, def_parâmetro, ...)Por exemplo, uma função para calcular o valor médio de dois números, poderia ser definida da seguinte forma:
{
variáveis_locaisinstruções
}
float average(float a, float b)Esta função poderia depois ser chamada da função main() como se mostra no exemplo seguinte:
{
float ave;ave = (a + b) / 2;
return ave;
}
void main(void)Repare-se na instrução de return na função, que além de a terminar é também a responsável pela definição do valor de retorno da mesma.
{
float a=5, b=15, result;result = average(a, b);
printf("Média = %f\n", (double)result);
}
A palavra void também deverá ser usada no lugar dos parâmetros se a função não tiver nenhum. Um exemplo:
void squares(void)Na chamada de funções sem argumentos é sempre obrigatório utilizar parêntesis, sem nada lá dentro, como se vê acima.
{
int k;for (k=1; k<=10; k++)
printf("%d\n", k*k);
}void main(void)
{
squares();
}
Para arrays unidimensionais a passagem como parâmetro de uma função pode ser feita como no exemplo seguinte:
float average(int size, float list[])No cabeçalho da função diz-se que o segundo argumento é um array de float's. Note-se que não é preciso especificar a dimensão quando da passagem como parâmetro. Compete ao programador .
{
int k;
float sum = 0.0;for (k=0; k<size; k++)
sum += list[k];
return sum / size;
}
Na passagem de arrays multidimensionais é necessários indicar todas as dimensões com exceção da primeira. Exemplo:
void print_table(int x_size, int y_size, float table[][5]);O parâmetro table é visto como um array de primeira dimensão desconhecida - chamemos-lhe n. Assim table é um array de n x 5. Novamente, compete ao programador . O carácter '\t' é o carácter tab.
{
int i, j;for (i = 0; i < xsize; i++) {
for (j = 0; j < y_size; j++)
printf("\t%f", (double) table[i][j]);
printf("\n");
}
}
Se a função que se chama estiver definida antes da chamada isso é suficiente. No caso contrário é necessário declarar, a nível global e antes da chamada, um protótipo da função. Um protótipo não é mais do que o cabeçalho da função seguido de ;. Estritamente não é necessário indicar no protótipo os nomes dos parâmetros, mas apenas os seus tipos (no entanto considera-se boa prática indicar também os nomes).
Embora não haja exigências quanto ao local de declaração dos protótipos (a não ser que tem de ser antes das chamadas) é de toda a conveniência agrupar os protótipos de todas as funções do programa (com a excepção de main) perto do seu início. Isso tornará a leitura e interpretação do programa bastante mais fácil.
Exemplo de protótipo:
int strlen(char s[]);O protótipo anterior indica que a função strlen() retorna um inteiro e aceita um parâmetro que é um array de caracteres (string).
2. Escreva um programa que leia texto do teclado, linha a linha, até chegar ao fim de texto (Ctrl-D ou Ctrl-Z). O programa deverá escrever uma estatística do texto lido: nº de palavras, número de linhas em branco, nº total de linhas, nº de letras. O programa deverá usar funções separadas para cada uma das suas tarefas. (Pode usar a função gets() de <stdio.h> para ler uma linha de texto do teclado - consulte o manual - por ex. o man do unix).
3. Escreva um programa que calcule o salário semanal de um trabalhador.
As entradas são o número de horas usadas na semana e uma valorização
da hora. Até 40 h/semana usa-se a valorização dada.
Acima de 40h e até 60h há um bónus de 50% para essa
horas. Acima de 60h há um bónus de 100% para essas horas. Use
uma função para fazer os cálculos.
Exercício extra de aula:
Faça um programa em C que simule o jogo da forca. O programa principal deve ler a palavra de entrada, ler cada caracter de entrada e chamar uma função para verificar se o caracter lido pertence à palavra de entrada. Caso o caracter esteja presente na palavra de entrada, ele deve ser colocado na palavra de saída
(que no inicio pode estar com *s). Caso o caracter não esteja na palavra, o usuário deve ser informado até o limite de 5 erros. Após isso o usuário é considerado enforcado. O usuário ganha o jogo se preencher a palavra correta antes de 5 erros.
Observação: Informe sempre o usuário sobre o seu status atual. Por exemplo: letras já inseridas, status atual da sua palavra, número de erros, etc...