ASPER
UNIBRATEC

Aula 8: Funções, Constantes e Macros

Exercício 1:

Enunciado:
Escreva a função EDivisivel(int a, int b). A função deverá retornar 1 se o resto
da divisão de a por b for zero. Caso contrário, a função deverá retornar zero.

Exercício 2:
Enunciado:

Escreva um programa que faça uso da função EDivisivel(int a, int b), criada na
página c720.html.
Organize o seu programa em três arquivos: o arquivo prog.c , conterá o programa
principal; o arquivo
func.c conterá a função; o arquivo func.h conterá o protótipo da função. Compile
os arquivos e gere o
executável a partir deles.

Exercício 3:
Enunciado:

Estude o seguinte programa e aponte o valor de cada variável sempre que
solicitado:

#include <stdio.h>
int num;
int func(int a, int b)
{
a = (a+b)/2; /* Qual e o valor de a apos a atribuicao? */
num -= a;
return a;
}

main()
{
int first = 0, sec = 50;
num = 10;
num += func(first, sec); /* Qual e o valor de num, first e sec */
/* antes e depois da atribuicao? */
printf("\n\nConfira! num = %d\tfirst = %d\tsec = %d",num, first, sec);
}

Exercício 4:
Enunciado:

Escreva um programa que leia um vetor de inteiros pelo teclado e o apresente na
tela. Crie uma função(void leVetor(int vet[], int dimensao)) para fazer a leitura
do vetor.

Exercício 5:
Enunciado:

Escreva uma macro que retorne 1 se o seu argumento for um número ímpar e 0 se
for um número par.


Exercício 6
Enunciado:

Escreva uma macro que receba dois parâmetros inteiros como entrada, e que resulto no maior valor. Ex: MAIOR(10,3) == 10

Exercicios adicionais:
Exercício 1:
Faça um programa que utilize os argumentos argv e argc. O programa deverá
receber dois números e apresentar a soma dos dois. Veja que para isto você
deverá ter também uma função que transforme uma string em um inteiro, pois o
tipo de argv é char; logo você irá receber strings e deverá transformá-las em
inteiros antes de somá-las.

Exercício 2: As séries de Fibonacci
Um problema tradicional é o de encontrar o enésimo termo da série de Fibonacci.
As series de Fibonacci são de grande importância matemática, e a lei básica é
que a partir do terceiro termo, todos os termos são a soma dos dois últimos. Os
primeiros termos da seqüência são: 1, 1, 2, 3, 5, 8, 13, 21, 34... O primeiro
e o segundo termos são 1. O terceiro termo é 2 (1+1). O quarto termo é 3 (1+2).
O quinto termo é 5 (2+3) ... Faça uma função que encontre o enésimo termo da
seqüência de Fibonacci. Use recursividade.

Exercício 3:
Verifique o programa abaixo e tente identificar problemas que irão ocorrer em
tempo de execução. (Você pode usar um debugger, ou colocar printf's para tentar
'ver' os valores das variáveis).
#define max(A,B) ((A>B) ? (A):(B))
#define min(A,B) ((A<B) ? (A):(B))
#define sqr(x) x*x
int main()
{
int a = 10 ,b = 50, minimo, maximo, quad;
int z = 5;
minimo = min(a,b);
maximo = max(a++,b++);
quad = sqr(z+1);
return 0;
}
Verifique o que acontece também, se mudarmos a linha de declarações do programa
int a = 10 ,b = 50, minimo, maximo, quad;
por
float a = 10 ,b = 50, minimo, maximo, quad;