Resolução de Algoritmos Clássicos Utilizando a Linguagem C

  1. Cálculo de Série Alternada de Frações

O objetivo é calcular o valor da seguinte sequência matemática: 1/1 - 1/2 + 1/3 - 1/4 + ... + 1/99 - 1/100.

#include <stdio.h>

int main() {
    double resultado = 0.0;
    
    for (int denominador = 1; denominador <= 100; denominador++) {
        double termo = 1.0 / denominador;
        
        if (denominador % 2 != 0) {
            resultado += termo;
        } else {
            resultado -= termo;
        }
    }
    
    printf("O valor acumulado da serie eh: %.10f\n", resultado);
    return 0;
}

Análise da Implementação:

  • Uso de Ponto Flutuante: A variável resultado é declarada como double. Operações de divisão que geram casas decimais exigem tipos de ponto flutuante. O uso de inteiros causaria truncamento (ex: 1/2 resultaria em 0), invalidando o cálculo.
  • Controle de Sinal: Em vez de multiplicar por -1 a cada iteração, utilizamos o operador de módulo (%) para verificar se o denominador é par ou ímpar, adicionando ou subtraindo o termo de forma direta.
  1. Comparação de Valores Inteiros

Receber dois números inteiros do usuário e determinar qual é o maior, ou se são iguais.

#include <stdio.h>

int main() {
    int valorX, valorY;
    
    printf("Digite dois numeros inteiros separados por espaco: ");
    if (scanf("%d %d", &valorX, &valorY) != 2) {
        printf("Entrada invalida.\n");
        return 1;
    }

    if (valorX > valorY) {
        printf("%d e maior que %d\n", valorX, valorY);
    } else if (valorX < valorY) {
        printf("%d e menor que %d\n", valorX, valorY);
    } else {
        printf("%d e igual a %d\n", valorX, valorY);
    }
    
    return 0;
}

  1. Identificação de Múltiplos de Três

Exibir todos os números múltiplos de 3 no intervalo de 1 a 100.

Estratégia Otimizada: Em vez de iterar por todos os números e usar o operador de módulo para verificar a divisibilidade, podemos inicializar o loop diretamente no primeiro múltiplo e incrementar o contader com o próprio valor do múltiplo (passo 3).

#include <stdio.h>

int main() {
    printf("Multiplos de 3 no intervalo de 1 a 100:\n");
    
    for (int multiplo = 3; multiplo <= 100; multiplo += 3) {
        printf("%d ", multiplo);
    }
    printf("\n");
    
    return 0;
}

  1. Classificação de Triângulos

Ler três valores inteiros representando os lados de um triângulo e classificar a forma geométrica.

Lógica de Validação:

  • Para ser um triângulo válido, a soma de quaisquer dois lados deve ser estritamente maior que o terceiro lado. A condição de falha é mais simples de escrever: se a soma de dois lados for menor ou igual ao terceiro, não é triângulo.
  • Equilátero: Todos os três lados são idênticos.
  • Isósceles: Pelo menos dois lados são iguais.
  • Escaleno: Todos os lados possuem medidas diferentes.
#include <stdio.h>

int main() {
    int l1, l2, l3;
    
    printf("Insira os comprimentos dos tres lados: ");
    scanf("%d %d %d", &l1, &l2, &l3);

    if (l1 + l2 <= l3 || l1 + l3 <= l2 || l2 + l3 <= l1) {
        printf("Os valores fornecidos nao formam um triangulo.\n");
    } else {
        if (l1 == l2 && l2 == l3) {
            printf("Classificacao: Triangulo Equilatero\n");
        } else if (l1 == l2 || l2 == l3 || l1 == l3) {
            printf("Classificacao: Triangulo Isosceles\n");
        } else {
            printf("Classificacao: Triangulo Escaleno\n");
        }
    }
    
    return 0;
}

  1. Geração de Tabela de Multiplicação

Imprimir a tabuada de 1 a 9 utilizando estrutuars de repetição aninhadas.

Abordagem: Utilizaremos laços while para demonstrar uma alternativa aos tradicionais laços for. O laço externo controla as linhas (multiplicando) e o laço interno controla as colunas (multiplicador), limitendo a coluna ao valor da linha atual para formar o formato triangular da tabuada.

#include <stdio.h>

int main() {
    int linha = 1;
    
    while (linha <= 9) {
        int coluna = 1;
        
        while (coluna <= linha) {
            printf("%dx%d=%-4d", linha, coluna, linha * coluna);
            coluna++;
        }
        
        printf("\n");
        linha++;
    }
    
    return 0;
}

Tags: linguagem C Algoritmos Lógica de Programação Estruturas de Controle Operadores Aritméticos

Publicado em 6-30 20:51