Correção dos Exercícios - Aula 6
(1190 total de palavras neste texto) (3370 vizualização(ões)) 
Exercícios
1) Escreva um programa que, dadas as constantes a, b e c de uma equação do segundo grau, calcule o delta e, se possível, calcule
as raízes x' e x''.
#include <stdio.h>
#include <math.h>
main()
{
int a, b, c, delta;
float x1, x2;
printf("*** Equação do Segundo Grau ***\n");
printf("Digite a: ");
scanf("%d", &a); getchar();
printf("Digite b: ");
scanf("%d", &b); getchar();
printf("Digite c: ");
scanf("%d", &c); getchar();
delta= (b*b)-(4*a*c); /* Calcula o delta */
if (delta < 0)
{
printf("Delta: %d\n", delta);
printf("Delta negativo!\n");
return 0; /* pára por aqui mesmo */
}
x1= (-b + sqrt(delta))/(2*a); /* sqrt retorna a raiz quadrada de um número */
x2= (-b - sqrt(delta))/(2*a);
printf("Delta: %d\n", delta);
printf("Raízes:\n");
printf("x1: %.2f, x2: %.2f\n", x1, x2);
return 0;
}
OBS: Aqui usamos uma função que ainda não tinhamos visto: a sqrt(), que retorna a raiz quadrada de um número. Mas o propósito era fazer
vocês baterem cabeça... Agora, pelo menos, vocês não esquecem que sqrt() retorna a raiz quadrada de um número.
Para compilar, digite o seguinte comando:
$ gcc delta.c -o delta -lm
Esse -lm significa que você quer ligar seu programa a uma biblioteca. Forma geral: -lnome_biblioteca. m é a biblioteca math.h.
Sem esse -lm, seu programa não compila. (isso para o gcc, no Linux. Para outros compiladores, consulte o manual).
2) Dada a nota de um aluno, faça um programa que calcule a média e imprima se o aluno foi aprovado sem exame (>= 7), se ficou de exame (>= 4
e < 7) ou se reprovou direto (< 4).
OBS: Desculpem, o enunciado está incorreto! O correto seria dada a nota da prova e do trabalho... Mas, vamos resolver... Pelo menos vocês
terão mais um exemplo... A prova e o trabalho tem o mesmo peso.
#include <stdio.h>
main()
{
float prova, trab, media;
printf("Digite a nota da prova: ");
scanf("%f", &prova); getchar();
printf("Digite a nota do trabalho: ");
scanf("%f", &trab); getchar();
media= (trab+prova)/2;
if (media >= 7)
printf("Aprovado direto (sem exame)\n");
else
if ((media < 7) && (media >= 4))
printf("Ficou de exame\n");
else
printf("Dançou, neném... Reprovado!\n");
return 0;
}
Prometo ter mais atenção na hora de fazer o enunciado dos exercícios...
3) Faça um programa que leia o login e a senha de um usuário e imprima se ele está logado ou se tem acesso negado. OBS: Deve-se usar a função
de comparação entre strings, strcmp(string1, string2), que retorna 0 se as duas strings forem iguais. Para poder se logar, o nome de
usuário será "linuxdicas" e a senha "h56yu89".
Pessoal, me perdoem outra vez... Pelo seguinte: ao ler uma string com fgets(), além de armazenar a string e o caractere nulo (\0), é
armazenado também o caractere de quebra de linha. Portanto, fgets() com strcmp(), no caso de comparar uma string lida com uma string
pré-definida, não trabalhará de acordo, por causa do bendito caractere de quebra de linha. Vocês podem optar por dois caminhos:
O que eu considero o melhor, no caso deste exercício, e mais seguro, é usar fgets() com a função de comparação de strings strncmp(). A
função strncmp() possui três argumentos: as duas strings que serão comparadas e um número inteiro, que determina quantos caracteres
serão comparados entre as duas strings. Por exemplo, "linuxdicas" tem 10 caracteres, então deve-se colocar strncmp(login, "linuxdicas",
10), que só vai comparar a palavra "linuxdicas", sem nada de caracteres de quebra de linha indesejados...
O outro caminho, mais suscetível a falhas no software, é usar gets() com strcmp() (com gets() funciona, porque gets() não armazena o
caractere de nova linha junto com a string). Mas, você sabe do risco...
Você deve estar pensando: caramba, eu me mato prá fazer o exercício e depois o bragil fala que o enunciado tá errado?
Não se preocupe!! Nesta aula você deve sair sabendo usar o if, o else e o switch. Na aula sobre matrizes e strings é que nós
temos que nos preocupar com essas funções...
#include <stdio.h>
#include <string.h>
main()
{
char login[15];
char senha[15];
printf("Login: ");
fgets(login, 14, stdin);
printf("Senha: ");
fgets(senha, 14, stdin);
if ((strncmp(login,"linuxdicas", 10) == 0) && (strncmp(senha,"h56yu89", 7) == 0))
printf("Login efetuado com sucesso!\n");
else
printf("Acesso negado!\n");
return 0;
}
4) Escreva um programa que leia a velocidade que um carro passou pelo radar e calcule a sua multa. Considere a tabela a seguir:
| Velocidade |
Multa |
| >= 100 Km/h |
R$ 600,00 |
| < 100 Km/h e >= 80 Km/h |
R$ 300,00 |
| < 80 Km/h e > 60 Km/h |
R$ 120,00 |
#include <stdio.h>
main()
{
int veloc;
float multa;
printf("Digite a velocidade do automóvel (em Km/h): ");
scanf("%d", &veloc);
if (veloc >= 100)
multa= 600;
else
if ((veloc < 100) && (veloc >= 80))
multa= 300;
else
if ((veloc < 80) && (veloc > 60))
multa= 120;
else
multa= 0;
if (multa > 0)
printf("Multa: %.2f\n", multa);
else
printf("Não recebeu multa.\n");
return 0;
}
5) Faça um programa de calculadora similar ao exemplo da aula, mas que faça cálculos bit a bit, com operadores and, or, not,
xor, deslocamento para esquerda e para a direita.
#include <stdio.h>
main()
{
int n1, n2;
char op;
printf("*** Calculadora Bit-a-Bit ***\n");
printf("Digite o primeiro operando: ");
scanf("%d", &n1); getchar();
printf("\nA:and, O:or, N:not, X:xor\nE:deslocamento para esquerda, D:deslocamento para direita\n");
printf("Digite o operador: ");
scanf("%c", &op); getchar();
if (op != 'N') /* como a operação NOT é unária, não precisa do segundo operando */
{
printf("Digite o segundo operando: ");
scanf("%d", &n2); getchar();
}
switch(op)
{
case 'A':
printf("%d AND %d= %d\n", n1, n2, n1 & n2);
break;
case 'O':
printf("%d OR %d= %d\n", n1, n2, n1 | n2);
break;
case 'N':
printf("NOT %d= %d\n", n1, ~n1);
break;
case 'E':
printf("%d << %d= %d\n", n1, n2, n1 << n2);
break;
case 'D':
printf("%d >> %d= %d\n", n1, n2, n1 >> n2);
break;
default:
printf("Operador Inválido: %c\n", op);
break;
}
return 0;
}
Pessoal, me desculpem pelos erros... Bem, pelo menos agora vocês sabem como comparar strings lidas com fgets() com strings pré-definidas,
sabem também que para usar a math.h precisa compilar com a opção -lm para ligar o código do programa à biblioteca.
Bem, apesar de tudo, o objetivo era fazer vocês exercitarem if, else e switch.
Falow!!
bragil
Powered by txt2tags |