/*
* a4_p1: Faz pequenas operacoes aritmeticas
*
* Input: Uma operacao e dois operandos
* Output: Resultado da operacao
*/
#include<stdio.h>
main()
{
char operacao;
double op1, op2;
printf("Qual a operacao (+ - * /)? ");
scanf("%c", &operacao);
printf("Quais os dois operandos? ");
scanf("%lf%lf", &op1, &op2);
switch (operacao)
{
case '+': /* adicao */
printf("%lf + %lf = %lf\n", op1, op2, op1+op2);
break;
case '-': /* subtraccao */
printf("%lf - %lf = %lf\n", op1, op2, op1-op2);
break;
case '*': /* multiplicacao */
printf("%lf * %lf = %lf\n", op1, op2, op1*op2);
break;
case '/': /* divisao */
printf("%lf / %lf = %lf\n", op1, op2, op1/op2);
break;
}
}
/*
* a4_p2: Faz pequenas operacoes aritmeticas
* (com base em a4_p1, mas, evita divisao por zero)
* Input: Uma operacao e dois operandos
* Output: Resultado da operacao
*/
#include<stdio.h>
main()
{
char operacao;
double op1, op2;
printf("Qual a operacao (+ - * /)? ");
scanf("%c", &operacao);
printf("Quais os dois operandos? ");
scanf("%lf%lf", &op1, &op2);
switch (operacao)
{
case '+': /* adicao */
printf("%lf + %lf = %lf\n", op1, op2, op1+op2);
break;
case '-': /* subtraccao */
printf("%lf - %lf = %lf\n", op1, op2, op1-op2);
break;
case '*': /* multiplicacao */
printf("%lf * %lf = %lf\n", op1, op2, op1*op2);
break;
case '/': /* divisao */
if (op2 == 0)
printf("Operacao invalida\n");
else
printf("%lf / %lf = %lf\n", op1, op2, op1/op2);
break;
}
}
/*
* a4_p3: Da um parecer qualitativo
* a uma classificacao numerica
* Input: Nota em valores (numero inteiro de 0 a 20)
* Output: Parecer qualitativo
* (Mau, Medíocre, Suficiente, Bom, Muito Bom)
*/
#include <stdio.h>
main()
{
int nota;
printf("Introduz a classificacao: ");
scanf("%d", ¬a);
switch(nota)
{
case 0:
case 1:
case 2:
case 3:
case 4:
printf("Mau\n");
break;
case 5:
case 6:
case 7:
case 8:
case 9:
printf("Mediocre\n");
break;
case 10:
case 11:
case 12:
case 13:
printf("Suficiente\n");
break;
case 14:
case 15:
case 16:
case 17:
printf("Bom\n");
break;
case 18:
case 19:
case 20:
printf("Muito Bom\n");
break;
}
}
Obs: Claro que este programa poderia ter sido feito com instruções if-else. Mas foi feito com a instrução switch-case para perceberes melhor o seu modo de funcionamento. O que aconteceria se não tivesses usado os breaks e introduzisses uma classificação, p/ exemplo, de apenas 3 valores? Pensa no assunto.
/*
* a4_p4: UAlg 10x
*
* Input:
* Output: Escreve a mesma frase 10 vezes
*/
#include <stdio.h>
main()
{
int n; /* contador para o numero de vezes */
n = 1;
while (n <= 10)
{
printf("Universidade do Algarve\n");
n = n + 1;
}
}
/*
* a4_p5: Grande contador
*
* Input:
* Output: Escreve no ecra os numeros de 1 a 10000
*/
#include <stdio.h>
main()
{
int n; /* contador */
n = 1;
while (n <= 10000)
{
printf("%05d\n", n);
n = n + 1;
}
}
Obs: Repara no modo como foi formatado o output. Na instrução printf, em vez do habitual %d aparece %05d. Desta forma os números que mandamos escrever no ecrã surgem alinhados à direita num campo de 5 dígitos preenchido com zeros à esquerda. Se puséssemos apenas %5d acontecia o mesmo mas sem o preenchimento com zeros à esquerda.
Experimenta redireccionar o output para um ficheiro de texto para que possas ver bem as diferenças na forma de apresentar os primeiros números. Para isso, ao executares o programa, deverás fazer o que se chama redireccionamento de saída. Se o programa executável se chamar "a4_p5" e quiseres criar um ficheiro chamado "numeros.txt" faz assim:
a4_p5 > numeros.txt
Agora vê o conteúdo de numeros.txt
/*
* a4_p6: Tabuada
*
* Input: Numero inteiro (o multiplicando)
* Output: Tabuada desse numero
*/
#include <stdio.h>
main()
{
int a; /* multiplicando */
int b; /* multiplicador */
printf("Introduza um numero: ");
scanf("%d", &a);
b = 1;
while (b <= 10)
{
printf("%d x %d = %d\n", a, b, a*b);
b = b + 1;
}
}
Obs: Como poderias formatar a apresentação dos números no ecrã de modo a surgirem todos alinhadinhos à direita? (Lê as observações do programa 5)
/*
* a4_p7: Conta quantos digitos tem um numero inteiro
*
* Input: Um valor numerico inteiro
* Output: Numero de digitos que o constitui
*/
<pre>
#include <stdio.h>
main()
{
int n_inicial; /* numero a avaliar */
int n_digitos; /* contador de digitos */
int n; /* variavel de manobra p/ nao perder n_inicial*/
printf("Introduza um numero inteiro: ");
scanf("%d",&n_inicial);
if( n_inicial == 0 )
n_digitos = 1;
else
{
if( n_inicial < 0 )
n = - n_inicial;
else
n = n_inicial;
n_digitos = 0;
while (n != 0)
{
n = n / 10;
n_digitos = n_digitos + 1;
}
}
printf("%d tem %d digitos", n_inicial, n_digitos);
}
/*
* a4_p8: Conta zeros e uns de um valor binario
*
* Input: Um valor numerico binario
* Output: Numero de zeros e de uns que ele possui
*/
#include <stdio.h>
main()
{
unsigned long n_binario; /* valor a avaliar */
int uns; /* contador de 1s */
int zeros; /* contador de 0s */
int resto; /* resto da divisao */
int i; /* contador p/ o ciclo */
printf("Introduza um valor binario de oito digitos (so zeros e uns): ");
scanf("%ld", &n_binario);
zeros = 0;
uns = 0;
i = 8;
while ( i > 0 )
{
resto = n_binario % 10;
if (resto == 0)
zeros = zeros + 1;
if (resto == 1)
uns = uns + 1;
n_binario = n_binario / 10;
i = i - 1;
}
printf("Tem %d zeros e %d uns.\n", zeros, uns);
}
Obs: Podes melhorar este programa para, no caso de o utilizador introduzir um valor não binário, apresentar uma mensagem a indicar "Numero inválido".