Faz um programa que calcule o máximo de 2 números reias. Os 2 números devem ser introduzidos pelo utilizador.
Resolução
#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 ); }
Imgina que a uma dada cadeira, a nota de frequência é obtida da seguinte forma: o trabalho tem peso 25% e o teste tem peso 75%. Faz um programa que calcula a vossa nota de frequência a essa cadeira. Se a nota de frequência for inferior a 9.5, o computador deve imprimir a mensagem: "tem de ir a exame". Caso contrário, imprime a mensagem: "Passaste com x valores".
Resolução
#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"); }
Modifica o programa que calcula as raízes de uma equação do segundo grau (dado na aula teórica) de modo a que apresente raízes complexas se for caso disso.
Resolução
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 ); } }
Faz um programa que pede ao utilizador 3 números e escrevo-os no ecrã por ordem crescente:
Resolução
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 ); }
Faz um programa em C que calcula o valor absoluto (módulo) de um número.
Resolução
#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); }
Faz um programa que, ao receber o valor da largura e do comprimento de uma figura geométrica, detecta se esta é um quadrado ou um rectângulo.
Resolução
#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 "); }
Faz um programa em C que receba uma data de nascimento e que calcule que idade a pessoa terá em 01/01/2010.
Resolução
#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); }
Faz um programa em C que receba 10 valores inteiros e que indique: Quantos são pares, quantos são ímpares, quantos são positivos e quantos são negativos.
Resolução
#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.
Faz um programa em C que calcule o salário de um empregado baseado no n.º de horas que trabalhou, e no seu salário por hora. Notas: As horas extrordinárias (> 40) são pagas a dobrar.
Resolução
#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) salario = 2 * salario_hora * (horas - 160) + salario_hora * 160; else salario = salario_hora * horas; printf("O seu salário vai ser: %.2f",salario); }