Buscar

resp_Aula08

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 6 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 6, do total de 6 páginas

Prévia do material em texto

Exercício 1: 
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. 
Solução: 
int EDivisivel(int a, int b) 
{ 
if (a%b) /* Se houver resto, nao e' divisivel */ 
return 0; 
else / * Nao havendo resto, e' divisivel */ 
return 1; 
} 
Exercício 2: 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. 
Solução: 
a) conteúdo do arquivo func.c 
int EDivisivel(int a, int b) 
{ 
if (a%b) /* Se houver resto, nao e' divisivel */ 
return 0; 
else / * Nao havendo resto, e' divisivel */ 
return 1; 
} 
b) conteúdo do arquivo func.h 
int EDivisivel(int a, int b); 
c) conteúdo do arquivo prog.c 
#include <stdio.h> 
#include "func.h" 
void main() 
{ 
int a, b; 
printf (" Entre com dois números inteiros para testar se o primeiro e'
divisivel pelo segundo: "); 
scanf("%d %d", &a, &b); 
if(Edivisivel(a,b)) 
printf("O primeiro numero e' divisivel pelo segundo"); 
else 
printf("O primeiro numero nao e' divisivel pelo segundo"); 
} 
Obviamente, para que este programa possa ser compilado e executado, você
deverá montar um projeto no seu ambiente de compilação. No DevC++ isto é feito
da seguinte forma:
1 - File -> New Project;
2 - Escolha as opcoes Console Application e C Project -> OK;
3 - Escolha um nome para o seu projeto, algo como MeuProjeto;
4 - Escolha a pasta onde voce armazenara o seu projeto (pode ser a mesma onde
voce esta armazenando seus arquivos .c).
5 - Remova o arquivo fonte Untitled1 do seu projeto (o Dev acrescenta este
arquivo por default ao projeto). Para fazer isto, va na janela da esquerda,
clique sobre Untitled1 com o botao direito do mouse e escolha a opcao Remove
from Project;
6 - Adicione os seus arquivos .c ao projeto: clique sobre o simbolo do seu
projeto na janela da esquerda usando o botao direito do mouse e escolha o
arquivo com seu programa principal . Faca isto novamente, adicionando o arquivo
funcao.c . Nao e' necessario adicionar func.h ao projeto, pois ele ja e'
adicionado com o #include "func.h" 
7 - Agora e' so compilar, linkar e executar: Compile Project e Run Project .
Exercício 3: 
Estude o seguinte programa e aponte o valor de cada variável sempre que solicitado: 
Solução: 
#include <stdio.h> 
int num; 
int func(int a, int b) 
{ 
/* a = 0 */ 
a = (a+b)/2; 
/* a = 25 e num = 10 */ 
num -= a; 
/* a = 25 e num = -15 */ 
return a; 
} 
int main() 
{ 
int first = 0, sec = 50; 
num = 10; 
/* first = 0 
sec = 50 
num = 10 */ 
num += func(first, sec); /* LINHA ### num = -15 + 25 ok? */ 
/* first = 0 
sec = 50 
num = 10 */ 
printf("\n\nConfira!! num = %d\tfirst = %d\t sec = %d\n",num, first, sec); 
return 0;
} 
Comentários: no início do programa first=0, sec=50, num=10. Ao se chegar na
linha marcada com ###, a função func deve ser avaliada. Dentro de func, num tem
seu valor alterado para -15 e esta alteração se reflete no programa principal
pelo fato de num ser uma variável global. O retorno de func é igual a 25 e,
assim, ao retornar de func, teremos o operador += avaliado e o resultado,
armazenado em num sera' 10. Este programa mostra claramente que o comportamento
de variáveis globais é difícial de ser acompanhado, pois estas variáveis podem
estar sendo modificadas dentro de funções. Para saber se a variável é 
modificada ou não devemos seguir o código da função chamada linha a linha! 
Exercício 4: 
Escreva uma função que receba duas variáveis inteiras e "zere" o valor das
variáveis. Use o que você aprendeu nesta página para fazer a implementação 
Solução: 
Para modificar o conteúdo de uma variável de uma função é necessário passar o
endereço da variável para a função, conforme é feito abaixo: 
#include <stdio.h> 
void Zera(int *a, int *b) 
{ 
*a=*b=0; 
} 
int main() 
{ 
int a, b; 
printf("Digite dois numeros inteiros: "); 
scanf("%d %d", &a, &b); 
printf("\nNumeros digitados: %d, %d",a,b); 
Zera(&a,&b); /* passando os endereços de a e b para a função */ 
printf("\n\nOs numeros agora valem %d e %d",a,b); 
return 0; 
} 
Extras:
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. 
Solução: 
#include <stdio.h> 
#include <stdlib.h> 
int main (int argc, char *argv[]) 
{ 
int numa, numb; 
if (argc !=3) 
printf(" Para usar, voce tem que passar dois parametros \n"); 
else 
{ 
if ( ((numa = atoi(argv[1])) == 0) || 
((numb = atoi(argv[2])) == 0) ) 
printf("\n\nArgumentos invalidos!! \n"); 
else 
printf("\n\nA soma de %d e %d eh %d\n\n",numa, numb, numa+numb); 
} 
return 0;
} 
Comentários: 
Para a transformação dos números que estavam em argv[] para int, usou-se a
função atoi() da biblioteca stdlib.h, que recebe um argumento do tipo char * e
retorna o int correspondente, caso a string represente um número. Caso o valor
retornado por atoi seja nulo, indica que o argumento passado foi inválido. 
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. 
Solução: 
#include <stdio.h> 
int fib(int n) 
{ 
if (n>2) return fib(n-1)+fib(n-2); 
else return 1; 
} 
int main() 
{ 
int n, fibon; 
printf("\n\nEntre com um numero: "); 
scanf("%d", &n); 
fibon = fib(n); 
printf("\nO termo %d da serie de Fibonacci e: %d\n", n, fibon);
return 0; 
} 
3: 
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. 
Solução: 
#include <stdio.h> 
#define MAX 10 /* dimensão do vetor */ 
void levetor(int *vet, int dimensao); /* protótipo de levetor */ 
int main() 
{ 
int i; 
int vet[MAX]; 
levetor(vet, MAX); /* Para passar um vetor como parametro e' necessario 
apenas passar o endereco de seu primeiro elemento */ 
printf("Os numeros lidos foram \n"); 
for (i=0; i<MAX; i++) printf("%d ", vet[i]); 
return 0; 
} 
void levetor(int *vet, /* Endereco de inicio do vetor */ 
int dimensao ) /* tamanho do vetor */ 
{ 
int i; 
printf("Digite os %d valores a serem armazenados no vetor ", dimensao); 
for (i=0 ; i < dimensao ; i++) scanf("%d",(vet+i)); 
}
4: 
Escreva uma macro que retorne 1 se o seu argumento for um número ímpar e 0 se
for um número par.
Solução:
#define EPAR(x) ((x)%2) ? 1 : 0
Comentários: repare o uso dos parênteses, que permite que expressões do tipo
EPAR(a+b) sejam possíveis.
5:
Escreva uma função que receba duas strings como argumentos e troque o conteúdo
da primeira string com o conteúdo da segunda. 
Solução: 
#include <stdio.h> 
#include <string.h> 
#define STRMAX 50 
void troca_string (char *str_a, char *str_b) 
{ 
char strtemp[STRMAX]; /* string temporaria usada para a troca */ 
strcpy (strtemp, str_a); 
strcpy (str_a, str_b); 
strcpy (str_b, strtemp); 
} 
int main () 
{ 
char string1[STRMAX], string2[STRMAX]; 
printf ("Entre com a primeira string:"); 
gets (string1); 
printf ("\nEntre com a segunda string: "); 
gets (string2); 
troca_string (string1, string2); 
printf ("\nA primeira string agora e: %s\nA segunda string agora e: %s",
string1, string2);
return 0; 
}

Materiais relacionados

Perguntas relacionadas

Materiais recentes

37 pág.
Funções - JavaScript _ MDN

IFRJ - Instituto Federal De Educacao Ciencia E Tecnologia Do Rio De Janeiro Campus Eng Paulo De Frontin

User badge image

Érika

Perguntas Recentes