#include <stdio.h>
main()
{
float a, b;
printf("Introduza um número:\n");
scanf("%f", &a );
printf("Introduza outro número:\n");
scanf("%f", &b);
if( a > b )
printf("O máximo é %f.\n", a );
else
printf("O máximo é %f.\n", b );
}
#include <stdio.h>
main()
{
float trabalho; /* nota do trabalho */
float teste; /* nota do teste */
float freq; /* nota da frequência
*/
printf("Nota do trabalho:\n");
scanf("%f", &trabalho );
printf("Nota do teste:\n");
scanf("%f", &teste );
freq = trabalho*0.25 + teste*0.75;
if( freq >= 9.5 )
printf("Passaste com %f valores.\n", freq );
else
printf("Tens de ir a exame.\n");
}
A chave deste problema é testar se o valor que aparece dentro da raíz quadrada é negativo ou não. Se for negativo vai dar raízes complexas, senão vai dar raízes reais.
delta = b*b - 4ac
se delta < 0
Raízes Complexas
senão
Raízes Reais
O caso das raízes reais já tinha sido feito na aula teórica.
No caso de dar raízes complexas, as soluções vão
ser do tipo
a+bi e a-bi, em que a e b são
números reais. Moral da história: precisamos de variáveis
para os valores de a e b. Para não se confundir com
o a e b dos coeficientes do polinómio ax^2 + bx +
c, é melhor chamar outros nomes. Por exemplo, p e q.
Assim, se delta < 0 as raízes complexas serão p+qi
e p-qi. O esqueleto do programa é:
delta = b*b - 4ac
se delta < 0
/* Raízes Complexas */
p = -b / (2a)
q = sqrt( -delta ) / (2a)
...
senão
/* Raízes Reais */
...
O programa completo em C é:
#include <stdio.h>
#include <math.h>
main()
{
float a,b,c, /* coeficientes do polinómio de
grau 2 */
delta, /* b^2-4ac
*/
raiz1,
raiz2, /* raízes
no caso de serem soluções reais */
p,
/* parte real da raiz no caso de ser complexa */
q;
/* valor absoluto da parte imaginária */
printf("Introduza os coeficientes de um polinómio de grau
2\n");
printf("a = "); scanf("%f", &a );
printf("b = "); scanf("%f", &b );
printf("c = "); scanf("%f", &c );
delta = b*b - 4*a*c;
if( delta < 0 )
{
/* Raízes complexas */
p = -b / (2*a);
q = sqrt(-delta) / (2*a);
printf("As raízes são %f+%fi e %f-%fi\n",
p, q, p, q );
}
else
{
/* Raízes reais */
raiz1 = (-b + sqrt(delta)) / (2*a);
raiz2 = (-b - sqrt(delta)) / (2*a);
printf("As raízes são %f e %f \n", raiz1,
raiz2 );
}
}
Dados 3 números a, b, c, há 6 (3 factorial) ordens possíveis:
a b c
a c b
b a c
b c a
c a b
c b a
Há muitas maneiras de fazer este programa. Aqui vai uma delas.
(NOTA: é preciso ter cuidado com os números repetidos. Por
exemplo, se a pessoa introduzir os números 5, 3, 5, o computador
deverá escrever 3 5 5).
#include <stdio.h>
main()
{
int a,b,c;
printf("a = "); scanf("%d", &a);
printf("b = "); scanf("%d", &b);
printf("c = "); scanf("%d", &c);
if( (a<=b) && (b<=c) )
printf("Ordem crescente: %d %d %d\n", a, b, c);
else
if( (a<=c) && (c<=b) )
printf("Ordem crescente: %d %d %d\n", a,
c, b);
else
if( (b<=a) && (a<=c)
)
printf("Ordem crescente: %d
%d %d\n", b, a, c);
else
if( (b<=c) &&
(c<=a) )
printf("Ordem crescente:
%d %d %d\n", b, c, a);
else
if( (c<=a)
&& (a<=b) )
printf("Ordem
crescente: %d %d %d\n", c, a, b);
else
printf("Ordem
crescente: %d %d %d\n", c, b, a);
}
Aqui vai outra maneira de resolver o problema:
#include <stdio.h>
main()
{
int a, b, c;
printf("a = "); scanf("%d", &a);
printf("b = "); scanf("%d", &b);
printf("c = "); scanf("%d", &c);
if (a<=b)
{
if (c<=a)
printf("Ordem crescente: %d %d %d\n", c,
a, b);
else
if (c>=b)
printf("Ordem crescente: %d
%d %d\n", a, b, c);
else
printf("Ordem crescente: %d
%d %d\n", a, c, b);
}
else /* b < a */
{
if (c<=b)
printf("Ordem crescente: %d
%d %d\n", c, b, a);
else if (c>=a)
printf("Ordem crescente: %d
%d %d\n", b, a, c);
else
printf("Ordem crescente: %d
%d %d\n", b, c, a);
}
}
Ainda uma terceira solução para o problema:
Aqui, a ideia é primeiro ordenar os números e fazer um único printf no final. Ao ordenar garante-se que a variável a fica com o menor dos valores, b fica com o valor do meio e c fica com o maior valor. Para ordenar compara-se o valor de a com o de b e com o de c, trocando-se os valores se a for maior. Faz-se o mesmo para o b em relação a c. Para fazer a troca de valores entre duas variáveis é sempre necessário usar uma terceira variável que guarde temporariamente um dos valores.
Por exemplo: Se a=5 e b=3, vamos querer trocar os seus
valores. Se se fizer directamente a=b, perde-se o valor que a
tinha anteriormente (5). Bem como se perderia o valor de b (3) se
fizessemos b=a; Por isso temos que ter a variável de troca.
Assim, fazendo:
troca = b;
/* troca fica com o valor 3 */
b = a;
/* b passa a valer 5 e a vale também 5 */
a = troca;
/* a passa a valer 3 */
Está a troca de valores feita.
O programa completo em C é:
#include <stdio.h>
main()
{
int a, b, c, troca;
printf("a = "); scanf("%d", &a);
printf("b = "); scanf("%d", &b);
printf("c = "); scanf("%d", &c);
if (a>b)
{
troca = b;
b = a;
a = troca;
}
if (a>c)
{
troca = c;
c = a;
a = troca;
}
if (b>c)
{
troca = c;
c = b;
b = troca;
}
printf("Ordem crescente: %d %d %d\n", a, b, c );
}
#include <stdio.h>
main()
{
int x, absx;
printf("Introduz um número: ");
scanf("%d", &x);
if (x<0)
absx = -x;
else
absx = x;
printf("O valor absoluto é %d\n", absx);
}
#include <stdio.h>
main()
{
float largura, comprimento;
printf("Diz a largura: ");
scanf("%f", &largura);
printf("Diz o comprimento: ");
scanf("%f", &comprimento);
if (largura == comprimento)
printf("A figura é um quadrado ");
else
printf("A figura é um rectângulo ");
}
#include <stdio.h>
#define ANO 2010
#define MES 1
#define DIA 1
main()
{
int dia, mes, ano;
printf("Diz o dia de nascimento: ");
scanf("%d", &dia);
printf("Diz o mes de nascimento: ");
scanf("%d", &mes);
printf("Diz o ano de nascimento: ");
scanf("%d", &ano);
if ( (ano>ANO) || ( (ano==ANO) && ( (dia>=DIA) || (mes>=MES)
) ) )
printf("Data invalida");
else if ( (ano<ANO) && (dia==DIA) && (mes==MES)
)
printf("Terás %d anos no dia 01/01/2010, e estarás
de Parabéns!",ANO-ano);
else
printf("Terás %d anos no dia 01/01/2010",ANO-ano-1);
}
#include <stdio.h>
main()
{
int n1, n2, n3, n4, n5, n6, n7, n8, n9, n10;
int n_pares=0, n_impares=0, n_pos=0, n_neg=0;
printf("Diz o 1..º número inteiro");
scanf("%d", &n1);
if ( (n1%2)==0 )
n_pares++;
else
n_impares++;
if (n1>0)
n_pos++;
else
n_neg++;
printf("Diz o 2.º número inteiro");
scanf("%d", &n2);
if (n2 % 2 == 0) n_pares++;
else n_impares++;
if (n2 > 0) n_pos++;
else n_neg++;
printf("Diz o 3.º número inteiro");
scanf("%d", &n3);
if ( (n3%2)==0 )
n_pares++;
else
n_impares++;
if (n3>0)
n_pos++;
else
n_neg++;
/* ... repetindo sempre o mesmo para os restantes números
*/
printf("Resultados\n");
printf(" %d números pares\n",n_pares);
printf(" %d números impares\n",n_impares);
printf(" %d números positivos\n",n_pos);
printf(" %d números negativos\n",n_neg);
}
Repara que desta forma a escrita do programa torna-se repetitiva. Mais
tarde, irás aprender uma outra maneira muito mais elegante e eficaz
de resolver este exercício.
#include <stdio.h>
#define extras 160 /* contam como horas extras
as superiores a 160 */
/* 40 horas por semana * 4 semanas por mes = 160 */
main()
{
float horas, salario_hora, salario;
printf("Indique o n.º de horas que trabalhou este mes: ");
scanf("%f", &horas);
printf("Indique quanto ganha por hora (em escudos): ");
scanf("%f", &salario_hora);
if (horas>160.0)
salario = 2.0 * salario_hora * (horas - 160.0) + salario_hora
* 160.0;
else
salario = salario_hora * horas;
printf("O seu salário vai ser: %.2f", salario);
}