Fundamentos de Entrada, Saída e Lógica de Controle em C

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;
}

Tags: C stdio math controle-de-fluxo entrada-e-saida

Publicado em 7-16 03:46