Correção Exercícios - Aula 7
1) Faça um programa que imprima o maior e o menor
número de uma sequência de 10 números lidos do
teclado.
#include <stdio.h>
/* Faça um teste de mesa deste programa em um papel e entenda você mesmo.
As variáveis maior e menor são inicializadas com o menor inteiro possível e o
maior inteiro possível, respectivamente.
*/
main()
{
int num, maior= -32767, menor= 32767;
register int i; /* olha o register aí... Você lembra pra que serve ? */
for (i=0; i<10; i++)
{
printf("Digite um número inteiro: ");
scanf("%d", &num);
getchar();
if (num >= maior)
maior= num;
if (num <= menor)
menor= num;
}
printf("Maior número: %d\n", maior);
printf("Menor número: %d\n", menor);
return 0;
}
2) Faça um programa que leia as seguintes
informações de 50 vacas: seu nome, seu peso, sua idade e a
quantidade de litros de leite que cada uma dá por dia. Imprima o
nome da vaca mais velha e da vaca que mais produz leite.
#include <stdio.h>
#include <string.h>
main()
{
char nome[15], maisvelha[15], maisleite[15];
float peso= 0;
int idade= 0, velha= 0, flag= 0, litros, mais= 0;
register int i; /* vamos usar uma variável register para controlar o laço. */
for (i=0; i<50; i++)
{
do
{
printf("Digite o nome da vaca: ");
fgets(nome, 14, stdin);
printf("Digite o peso da %s: ", nome);
scanf("%f", &peso); getchar();
printf("Digite a idade da %s: ", nome);
scanf("%d", &idade); getchar();
printf("Digite a produção diária, em litros, da %s: ", nome);
scanf("%d", &litros);
if ((peso <= 0) || (idade <= 0) || (litros <= 0))
{
printf("Tem certeza que a %s é deste mundo?? Redigite os dados...\n", nome);
flag= 1;
}
} while(flag==1); /* barra os engraçadinhos... */
/* Se o cara digitou informações válidas, avante... */
if (idade > velha)
{
strcpy(maisvelha, nome); /* armazena nome da mais velha encontrada até este instante */
velha= idade;
}
if (litros > mais)
{
strcpy(maisleite, nome);
mais= litros;
}
}
printf("Vaca mais velha: %s. Sua idade é: %d anos\n", maisvelha, velha);
printf("Vaca mais produtiva: %s. Sua produção é: %d litros/dia\n", maisleite, mais);
return 0;
}
OBS: Usamos a função strcpy()
para copiar uma string em outra, já que a
atribuição não funciona em strings. Se você
não conseguiu fazer
por causa disso, não se preocupe... mas, fala sério,
você poderia ter pesquisado para saber como fazer... Agora, se
você pesquisou e
conseguiu fazer, parabéns!!
3) Faça um programa que
leia um número e calcule o seu fatorial, lembrando que o fatorial
de um número é: número *
fatorial(número-1). Por
exemplo, fatorial de 5: 5*4*3*2*1= 120; fatorial de 1: 1; fatorial de
0: 1.
#include <stdio.h>
main()
{
int num, aux, fat= 1;
printf("Digite um número inteiro: ");
scanf("%d", &num); getchar();
aux= num;
if (aux > 0)
{
while (aux > 1)
{
fat= fat*aux;
aux--;
}
}
printf("Fatorial de %d: %d\n", num, fat);
return 0;
}
OBS: Existem mil e um jeitos de se calcular fatorial... Invente um!
(isto não é comercial do Neston...). Quem conseguiu fazer
de outra forma, poste no fórum... quanto mais exemplos, melhor.
4) Faça um programa que dados leia 10 caracteres e
conte quantos caracteres 'a' aparecem (somente minúsculo).
#include <stdio.h>
/* esse é melzinho na chupeta... */
main()
{
char ch;
int cont_a= 0, cont= 0; /* é importante sempre inicializar o contador */
while (cont < 10) /* condição de parada do laço */
{
cont++; /* contador de controle do laço */
printf("%d: Digite um caractere: ", cont);
scanf("%c", &ch); getchar();
if (ch == 'a') /* se for o 'a', conta. */
cont_a++; /* contador de caracteres 'a' */
}
printf("O caractere 'a' aparece %d vezes.\n", cont_a);
return 0;
}
5) Faça um programa que imprima a sequência
de Fibonacci: 0 1 1 2 3 5 8 13 21 31 ... Como você pode ver,
cada número é a soma dos dois números anteriores. O
programa primeiro vai ler um número, que será a
quantidade de iterações do laço.
#include <stdio.h>
main()
{
int i, n;
long a=0, b=1, aux;
printf("Digite o número de iterações: ");
scanf("%d", &n);
for (i=1; i<=n; i++)
{
aux= a;
a= b;
b= aux + a;
printf("%ld ", aux);
}
return 0;
}
Pessoal,
façam o teste de mesa dos exercícios para poderem
entender melhor o funcionamento dos algoritmos. Para quem não
sabe, teste de mesa é colocar todas as variáveis no papel
e simular a execução do programa, atualizando o valor das
variáveis a cada passo. Por exemplo, no exercício 5,
supondo-se que o usuário tenha digitado 5, a
execução seria:
| Iteração |
a |
b |
aux |
i |
n |
| - |
0 |
1 |
- |
1 |
5 |
| 1 |
1 |
1 |
0 |
2 |
5 |
| 2 |
1 |
2 |
1 |
3 |
5 |
| 3 |
2 |
3 |
1 |
4 |
5 |
| 4 |
3 |
5 |
2 |
5 |
5 |
| 5 |
5 |
8 |
3 |
6 |
5 |
A primeira linha da tabela é das
inicializações. Veja que Iteração
é '-' e aux também. As próximas linhas são
as iterações. Faça as contas na mão e
vá colocando os valores, para várias entradas diferentes.
Você entenderá melhor o funcionamento dos algoritmos.
Falow!
bragil