No momento, você está visualizando Entenda como funciona a estrutura da Linguagem C

Entenda como funciona a estrutura da Linguagem C

A linguagem C é uma das mais importantes e influentes da história da computação. Além disso, mesmo tendo sido criada na década de 1970, ela continua amplamente utilizada, servindo, inclusive, como base para muitas outras linguagens modernas, como C++, Java e até Python. Por esse motivo, compreender a estrutura de um programa em C é fundamental não apenas para quem deseja aprender essa linguagem, mas também para quem quer dominar os princípios essenciais da programação.

Por que a linguagem C é importante ?

Aprender a estrutura de um programa em C é importante porque ela ajuda o programador a entender como o computador executa instruções de forma organizada e eficiente. A linguagem C se comunica diretamente com o hardware por meio de instruções de baixo nível, mas ainda mantém características de uma linguagem de alto nível. Assim, o estudo da linguagem ensina conceitos essenciais, como tipos de dados, funções, controle de fluxo e manipulação de memória.

Além disso, muitos sistemas operacionais, compiladores e softwares de alto desempenho são escritos em C. Portanto, compreender como um programa em C é estruturado fornece uma base sólida para entender como as máquinas realmente funcionam e como o software se conecta ao hardware.

Estrutura de um programa em C

Um programa em C segue uma estrutura simples, porém lógica. Ele normalmente é composto por quatro partes principais: bibliotecas, funções, variáveis e instruções. A espinha dorsal de qualquer programa é a função principal, chamada main(), pois é nela que a execução realmente começa. Vejamos o exemplo abaixo.

Linguagem C
    #include <stdio.h>

int main() {    
    printf("Olá, mundo!\n"); 
    return 0;  
}
    
  

Esse é o exemplo clássico do “Olá, mundo!” e, por isso, costuma ser o primeiro programa que a maioria dos alunos escreve ao aprender qualquer linguagem de programação.

Inclusão de bibliotecas

A primeira linha do programa utiliza #include <stdio.h>. Ela indica ao compilador que deve incluir o conteúdo da biblioteca padrão de entrada e saída, responsável por funções como printf() e scanf(). O uso do símbolo # mostra que se trata de uma diretiva de pré-processamento, ou seja, algo que é executado antes mesmo da compilação.

Sem bibliotecas, o C seria bem limitado, pois grande parte das suas funcionalidades vem dessas coleções de funções prontas. Existem várias bibliotecas disponíveis, como math.h (para funções matemáticas), string.h (para manipulação de strings) e stdlib.h (para gerenciamento de memória e utilidades diversas).

A função principal main

Todo programa em C deve conter uma função chamada main. É nela que a execução começa.
Assim quando o sistema operacional carrega o programa na memória, ele procura essa função para saber onde iniciar.

A função main pode ser escrita de duas formas válidas

Linguagem C
    int main() { ... }
    
  
Linguagem C
    int main(void) { ... }
    
  

Ambas são equivalentes na maioria dos casos. 

Declarando variáveis

Dentro de main(), podemos criar variáveis para armazenar informações da seguinte forma

Linguagem C
    int idade = 25;
float altura = 1.75;
char inicial = 'M';
    
  

As variáveis precisam ser declaradas com um tipo (como int, float, char, etc.). Uma das características do C é que o tipo deve ser conhecido no momento da compilação, pois o compilador precisa saber quanto espaço reservar na memória.

Comandos e instruções

O corpo de uma função em C é formado por comandos e instruções que são executados linha a linha. Além disso, cada instrução precisa terminar com ponto e vírgula (;), o que é obrigatório e ajuda o compilador a identificar onde um comando termina. Para ilustrar, abaixo temos um exemplo de soma de dois valores.

Linguagem C
    int x = 10;
int y = 20;
int soma = x + y;
printf("A soma é: %d\n", soma);
    
  

Estruturas de controle

As estruturas de controle são elementos fundamentais em C, pois permitem alterar o fluxo de execução de um programa, ou seja, decidir quais instruções serão executadas e quantas vezes. Sem elas, o código seguiria sempre uma sequência linear, de cima para baixo, o que limitaria sua utilidade. Podemos dividir essas estruturas em dois grandes grupos: estruturas condicionais e estruturas de repetição.

Estruturas condicionais

Existem três principais estruturas condicionais: if, else e switch. Além disso, as duas primeiras, dependendo do problema a ser solucionado, costumam trabalhar juntas.

O IF ELSE e ELSE IF

As estruturas condicionais, como if, else if e else, permitem que o programa execute blocos de código diferentes conforme certas condições sejam verdadeiras ou falsas.

Linguagem C
    int nota = 7;

if (nota >= 6) {
    printf("Aprovado!\n");
} else {
    printf("Reprovado!\n");
}
    
  

Nesse trecho, primeiramente, o programa verifica se a variável nota é maior ou igual a 6. Se isso acontecer, a mensagem exibida será “Aprovado!”. Caso contrário, o sistema imprime “Reprovado!”.

O comando SWITCH

A estrutura switch, usada quando há várias condições possíveis para um mesmo valor. Veja!

Linguagem C
    int opcao = 2;

switch (opcao) {
    case 1:
        printf("Opção 1 selecionada\n");
        break;
    case 2:
        printf("Opção 2 selecionada\n");
        break;
    default:
        printf("Opção inválida\n");
}
    
  

O switch compara o valor de opcao com cada case. Em seguida, quando encontra uma correspondência, executa o bloco correspondente. Além disso, o comando break evita que o programa continue executando os casos seguintes.

Estruturas de repetição

As estruturas de repetição, ou laços, permitem executar um mesmo bloco de código várias vezes, até que uma condição seja satisfeita.

O comando FOR

O comando for é bastante utilizado quando o número de repetições é conhecido. Por exemplo, no trecho abaixo, a variável i inicia em 1 e é incrementada até chegar a 5. Como resultado, o programa imprime os números de 1 a 5 na tela.

Linguagem C
    for (int i = 1; i <= 5; i++) {
    printf("Contagem: %d\n", i);
}
    
  
O comando WHILE

O laço while repete um bloco enquanto uma condição for verdadeira. No exemplo apresentado abaixo note que enquanto o contador for menor que 3 uma mensagem é mostrada na tela após isso, o programa encerra.

Linguagem C
    int contador = 0;
while (contador < 3) {
    printf("Repetição %d\n", contador);
    contador++;
}
    
  

Essas estruturas dão poder e flexibilidade à linguagem, permitindo que programas realizem tomadas de decisão, percorram dados, processem listas e executem tarefas complexas de forma controlada e eficiente.

Comentários de código

Os comentários não são executados. Servem para explicar o código, tornando-o mais legível. Existem duas formas de adicionar comentários.

Linguagem C
    // Comentário de linha única

/*
   Comentário de múltiplas linhas
*/
    
  

Dessa maneira, usar comentários de forma inteligente é uma boa prática, especialmente em códigos mais longos e complexos.

Como fazer uma calculadora em C

Diante do conteúdo apresentado até aqui, vamos entender como fazer uma calculadora usando esses conceitos. Para isso, desenvolveremos uma calculadora em linguagem C que será capaz de realizar as quatro operações básicas: adição, subtração, multiplicação e divisão. 

Definindo a estrutura principal e menu

Vamos então definir a estrutura principal junto com o menu que será mostrado ao usuário.

Linguagem C
    #include <stdio.h>

int main(){

    int opcao;
    float resultado, num1, num2;

    //MENU CALCULADORA
    printf("=====CALCULADORA====\n");
    printf("1 - Soma\n");
    printf("2 - Subtracao\n");
    printf("3 - Multiplicacao\n");
    printf("4 - Divisao\n");
    printf("0 - Sair\n");
    printf("Escolha uma opcao: ");
    scanf("%d", &opcao);
}
    
  

O trecho apresentado acima, inicia com a função main que atua como o ponto de entrada da execução, começando pela alocação de memória através da declaração de variáveis: um inteiro (opcao) destinado ao controle de fluxo do menu e variáveis de ponto flutuante (num1, num2, resultado) para processar operações aritméticas com precisão decimal. Além da definição de dados, a função constrói a camada de interação visual utilizando múltiplos comandos printf para exibir um menu textual hierarquizado, que orienta o usuário sobre as funcionalidades disponíveis (subtração, multiplicação, divisão e saída).

O bloco se encerra com a instrução scanf, que suspende a execução para capturar a entrada do teclado e armazená-la na variável opcao, preparando o estado do programa para as estruturas de decisão lógica que serão implementadas na sequência.

Verifica se a opcão é válida

O próximo passo é ler os valores que o usuário vai digitar para realização do cálculo, porém, só faz sentido ler se o valor armazenado na variável opcao for diferente de 0. Nesse sentido, iremos adicionar um bloco condicional para verificar isso e, se o valor armazenado em opcao estiver entre 1 a 4 então seguiremos com a leitura dos números. Abaixo podemos verificar como ficará.

Linguagem C
    #include <stdio.h>

int main(){

    int opcao;
    float resultado, num1, num2;

    //MENU CALCULADORA
    printf("=====CALCULADORA====\n");
    printf("1 - Soma\n");
    printf("2 - Subtracao\n");
    printf("3 - Multiplicacao\n");
    printf("4 - Divisao\n");
    printf("0 - Sair\n");
    printf("Escolha uma opcao: ");
    scanf("%d", &opcao);
  
    if(opcao!=0){
       printf("Digite o primeiro numero: ");
       scanf("%f", &num1);
       printf("Digite o segundo numero: ");
       scanf("%f", &num2);
    }
}
    
  

Note que, essa condicional vai verificar se o valor selecionado pelo usuário é algumas das operações apresentadas no menu, se for ele lê dois valores pois esses serão parte da operação aritmética que será feita. Caso contrário ele não lê pois certamente o usuário digitou zero e quer finalizar o programa.

Implementando a lógica de operações

O objetivo agora é implementar uma estrutura que reconheça qual operação o usuário quer fazer e pegue os valores armazenados nas variáveis num1 e num2 e aplique a operação em cima deles armazenando o valor na variável resultado. Para isso, utilizaremos a estrutura condicional switch.

Linguagem C
    #include <stdio.h>

int main(){

    int opcao;
    float resultado, num1, num2;

    //MENU CALCULADORA
    printf("=====CALCULADORA====\n");
    printf("1 - Soma\n");
    printf("2 - Subtracao\n");
    printf("3 - Multiplicacao\n");
    printf("4 - Divisao\n");
    printf("0 - Sair\n");
    printf("Escolha uma opcao: ");
    scanf("%d", &opcao);
  
    if(opcao!=0){
       printf("Digite o primeiro numero: ");
       scanf("%f", &num1);
       printf("Digite o segundo numero: ");
       scanf("%f", &num2);
    }

    switch(opcao){

       case 1:
          resultado = num1 + num2;
          printf("O resultado do calculo e: %.2f\n", resultado);
       break;
       case 2:
          resultado = num1 - num2;
          printf("O resultado do calculo e: %.2f\n", resultado);
       break;
       case 3:
          resultado = num1 * num2;
          printf("O resultado do calculo e: %.2f\n", resultado);
       break;

       case 4:
          if(num2 !=0){
              resultado = num1 / num2;
              printf("O resultado do calculo e: %.2f\n", resultado);
          }else{
              printf("Erro! Nao e possivel dividir por zero\n");
          }
       break;
       case 0:
              printf("Encerrando programa..\n");
       break;
    }
}
    
  

O trecho acima implementa o núcleo de processamento lógico da calculadora, utilizando a estrutura de controle de fluxo switch para gerenciar a tomada de decisão baseada no valor da variável opcao. Essa estrutura avalia a entrada do usuário e direciona a execução para o bloco (case) correspondente, onde as operações aritméticas elementares (soma, subtração e multiplicação) são calculadas e exibidas com formatação de precisão dupla.

Um ponto crítico de robustez do algoritmo é observado no case 4 (divisão), onde uma validação condicional aninhada (if/else) é inserida para verificar se o divisor é diferente de zero, prevenindo erros matemáticos e falhas de execução. Por fim, o uso sistemático do comando break em cada segmento assegura o encerramento imediato da estrutura após a execução da tarefa escolhida, evitando o processamento indesejado dos casos subsequentes.

Código completo com implementação do laço

Por fim, iremos implementar um laço de repetição afim de que todo esse processo se repita até que o usuário digite 0 e o programa se encerre. Por isso, usaremos o comando do while e sua condicional será enquanto a variável opção for diferente de zero.

Linguagem C
    #include <stdio.h>

int main(){

    int opcao;
    float resultado, num1, num2;
    do{
        //MENU CALCULADORA
        printf("=====CALCULADORA====\n");
        printf("1 - Soma\n");
        printf("2 - Subtracao\n");
        printf("3 - Multiplicacao\n");
        printf("4 - Divisao\n");
        printf("0 - Sair\n");
        printf("Escolha uma opcao: ");
        scanf("%d", &opcao);
  
        if(opcao!=0){
           printf("Digite o primeiro numero: ");
           scanf("%f", &num1);
           printf("Digite o segundo numero: ");
           scanf("%f", &num2);
        }

        switch(opcao){
           case 1:
              resultado = num1 + num2;
              printf("O resultado do calculo e: %.2f\n", resultado);
           break;
           case 2:
              resultado = num1 - num2;
              printf("O resultado do calculo e: %.2f\n", resultado);
           break;
           case 3:
              resultado = num1 * num2;
              printf("O resultado do calculo e: %.2f\n", resultado);
           break;
           case 4:
              if(num2 !=0){
                  resultado = num1 / num2;
                  printf("O resultado do calculo e: %.2f\n", resultado);
              }else{
                  printf("Erro! Nao e possivel dividir por zero\n");
              }
           break;
           case 0:
              printf("Encerrando programa..\n");
           break;
        }
    }while(opcao!=0);

    return 0;
}
    
  

Execução do algoritmo

Clique na imagem abaixo para observar a execução desse código

Assista o curso completo de Linguagem C

A linguagem C possui inúmeros recursos que a torna uma ferramenta extremante poderosa e eficiente para resolver problemas da computação. Diante disso, esse artigo teve como objetivo expor alguns conceitos elementares para o estudo e compreensão da linguagem. Por isso, para executar os códigos que foram apresentados acima e ter uma experiência prática, recomendo a leitura do artigo Como instalar o CodeBlocks tanto no Windows como no Linux. Além disso, caso prefira, é possível assistir vídeos da playlist "Linguagem C" do canal Descomplicando Algoritmos.

Deixe um comentário