Programação I

2006/2007

1ºano

Ficha de Trabalho nº7

Tema: Funções em C

 

Tópicos:             Funções e procedimentos em C

                                               Cabeçalho e corpo de uma função

                                               Parâmetros

                                               Valor de retorno e variáveis locais

                                               Protótipos de funções

 

Exercícios resolvidos

Exercício 1

#include <stdio.h>

linha()

 {

  int i;

 for(i=1; i<=20; i++)  putchar(‘*’);

 putchar(‘\n’);

}

main(){

{

 int i;

 linha();

 puts(“Números entre 1 e 5”);

 linha();

 for(i=1; i<=5; i++) printf(“%d\n”,i);

 linha();

}

 

Exercício 2

#include <stdio.h>

float pot(float x, int n)

 {

 float res; 

  int i;

 for(i=1, res=1.0; i<=n; i++)  res *= x;

 return res;

}

main(){

{

 printf(“%f %f %f”, pot(2.0,4), pot(1.234,3), pot(3.0,0));

}

 

 

Exercícios a resolver:

 

Exercício 3

a)      Altere o exercício nº1 de forma a que o número de asteriscos entre como parâmetro da função.

b)      Altere a função da alínea anterior de forma a que a função tenha agora dois parâmetros: o carácter que deve ser escrito e o número de vezes que este deve ser repetido.

 

Exercício 4

Escreva uma função que verifique se um determinado ano é ou não bissexto (um ano diz-se bissexto se for divisível por 4 mas não por 100, ou então também o será se for divisível por 400).

 

Exercício 5

 

a)      Reformule o programa criado no exercício 4 da ficha de trabalho nº6 definindo uma função para o cálculo do factorial.

b)      Implemente a mesma função, sem fazer uso de qualquer estrutura de iteração.

c)      Acrescente agora ao programa uma outra função que permita determinar o número de combinações possíveis para as chaves do totoloto.

Nota: o número de combinações de p elementos dum total de n é dado pela seguinte fórmula

 

Exercício 6

 

a)      Implemente em linguagem C a seguinte função matemática

          | 1               se x=1

f(x)=  | x+f(x-1)    se x>1

 

b)      Implemente agora a função

              |    x                 se y=1

g(x,y)=   |    x+g(x,y-1)   se y>1

 

c)      Construa um pequeno programa que faça uso dessas funções.

 

 

 

Exercício 7

 

a)      Implemente uma função que aceite como parâmetro uma letra do alfabeto [a-z, A-Z] e faça a sua conversão de minúscula para maiúscula e vice-versa.

b)      Construa agora um programa que faça a referida conversão tantas vezes quantas o utilizador desejar.

 

Exercício 8

 

a)      Pretende-se que implemente num único ficheiro o conjunto de funções que se segue, para a gestão de um acumulador de valores inteiros, tendo o cuidado de manter o valor acumulado inacessível a funções que não pertençam a esse ficheiro.

Adiciona            – Aceita como parâmetro, um valor a somar ao valor acumulado.

Subtrai              – Aceita como parâmetro, um valor a subtrair ao val. acumulado.

Escreve              – Aceita como parâmetro, um valor a atribuir ao val. acumulado.

Limpa                – Coloca o valor acumulado a zero.

Le                      – Devolve o valor acumulado.

 

b)      Defina uma função main num outro ficheiro, incluindo-lhe o código necessário para que o programa utilize todas as funções de gestão do acumulador.

 

Exercícios extra-aulas

 

Exercício 9

Implemente um programa que leia dois valores para duas variáveis inteiras e recorra a uma função para trocar os seus conteúdos, mostrando de seguida os seus valores alterados.

 

Exercício 10

Escreva um programa capaz de ler inteiros até ser introduzido o valor zero. No final o programa deverá apresentar qual o maior e menor número introduzidos (o valor zero não conta). Para tal recorra a uma função responsável por actualizar o maior e o menor valor armazenados, que será invocada após a leitura de cada valor. A mesma deverá ter três parâmetros: um deles representa um dos números lidos, e os outros dois representam o maior e menor.