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.