Formatação de Saída e Arte ASCII
A manipulação de strings e caracteres de escape, como tabulações e quebras de linha, é essencial para formatar a saída no console. O uso de strings multilinha simplifica a impressão de padrões gráficos ou arte ASCII, evitando múltiplas chamadas de função.
#include <stdio.h>
int main(void) {
const char *figures =
" O \t O \n"
" /|\\ \t /|\\ \n"
" / \\ \t / \\ \n";
printf("%s", figures);
return 0;
}
Validação Geométrica e Estruturas Condicionais
Para determinar se três segmentos de reta podem formar um triângulo, aplicamos a desigualdade triangular. A soma de quaisquer dois lados deve ser estritamente maior que o terceiro lado. O uso de variáveis booleanas torna a intenção do código mais clara.
#include <stdio.h>
#include <stdbool.h>
int main(void) {
double side1, side2, side3;
if (scanf("%lf %lf %lf", &side1, &side2, &side3) == 3) {
bool isValid = (side1 + side2 > side3) &&
(side1 + side3 > side2) &&
(side2 + side3 > side1);
if (isValid) {
printf("Os segmentos formam um triangulo valido.\n");
} else {
printf("Os segmentos nao formam um triangulo.\n");
}
}
return 0;
}
Leitura de Caracteres e Limpeza de Buffer
Ao ler caracteres individuais, é comum encontrar problemas com o buffer de entrada, onde o caractere de nova linha (\n) é consumido inadvertidamente. Utilizar a diretiva de espaço em branco no scanf ignora automaticamente quaisquer espaços ou quebras de linha pendentes, garantindo uma lietura limpa e corrigindo erros lógicos comuns em condições compostas.
#include <stdio.h>
int main(void) {
char reviewHabits, codingPractice;
printf("Voce revisou o conteudo apos a aula? (s/n): ");
scanf(" %c", &reviewHabits);
printf("Voce praticou escrevendo codigo? (s/n): ");
scanf(" %c", &codingPractice);
if ((reviewHabits == 's' || reviewHabits == 'S') &&
(codingPractice == 's' || codingPractice == 'S')) {
printf("Excelente! A consistencia e a chave do sucesso.\n");
} else {
printf("Tente dedicar mais tempo a pratica e revisao.\n");
}
return 0;
}
Aritmética de Inteiros Longos e Conversão de Tempo
Ao trabalhar com valores numéricos grandes, como a conversão de bilhões de segundos para anos, é crucial utilizar tipos de dados adequados, como long long, para evitar estouro de inteiro (overflow). O uso de macros para constantes de tempo melhora a legibilidade e a manutenção do código.
#include <stdio.h>
#define SECONDS_PER_MINUTE 60
#define MINUTES_PER_HOUR 60
#define HOURS_PER_DAY 24
#define DAYS_PER_YEAR 365
int main(void) {
long long totalSeconds = 1000000000LL;
long long secondsPerYear = SECONDS_PER_MINUTE * MINUTES_PER_HOUR *
HOURS_PER_DAY * DAYS_PER_YEAR;
int years = totalSeconds / secondsPerYear;
printf("Um bilhao de segundos equivale a aproximadamente %d anos.\n", years);
return 0;
}
Processamento Contínuo de Dados e Conversão de Temperatura
Loops controlados por EOF (End Of File) são ideais para processar um fluxo contínuo de entradas até que o usuário sinalize o fim dos dados. A fórmula de conversão de Celsius para Fahrenheit é aplicada iterativamente a cada valor lido.
#include <stdio.h>
int main(void) {
double celsius, fahrenheit;
while (scanf("%lf", &celsius) == 1) {
fahrenheit = (celsius * 9.0 / 5.0) + 32.0;
printf("%.2f C corresponde a %.2f F\n", celsius, fahrenheit);
}
return 0;
}
Funções Matemáticas e Cálculo de Área
A fórmula de Heron permite calcular a área de um triângulo conhecendo apenas o comprimento de seus lados. É fundamental validar se o valor dentro da raiz quadrada é positivo antes de invocar a função sqrt da biblioteca matemática, prevenindo erros de domínio e resultados indefinidos (NaN).
#include <stdio.h>
#include <math.h>
int main(void) {
int sideA, sideB, sideC;
double semiPerimeter, areaSquared, area;
while (scanf("%d %d %d", &sideA, &sideB, &sideC) == 3) {
semiPerimeter = (sideA + sideB + sideC) / 2.0;
areaSquared = semiPerimeter * (semiPerimeter - sideA) *
(semiPerimeter - sideB) * (semiPerimeter - sideC);
if (areaSquared > 0) {
area = sqrt(areaSquared);
printf("Lados: %d, %d, %d | Area: %.3f\n", sideA, sideB, sideC, area);
} else {
printf("Lados invalidos para formacao de triangulo.\n");
}
}
return 0;
}