3

Variáveis

Variáveis e Entrada/Saída de Dados3.1

Nesta aula iremos ver os conceitos fundamentais sobre variáveis, além das técnicas de leitura e escrita de dados na linguagem C. Ao final da aula espera-se que o aluno consiga:

  • Declarar variáveis de forma correta.
  • Definir com precisão o tipo de cada variável.
  • Exibir o conteúdo das variáveis na tela.
  • Capturar dados fornecidos pelo usuário via teclado.
  • Determinar e compreender o escopo de uma variável.
  • Declarar e utilizar constantes.

Variáveis3.2

Toda informação processada por um programa de computador precisa estar armazenada na memória. Nossos dados, especificamente, são guardados dentro de estruturas denominadas variáveis. O conceito de variável pode variar conforme o campo de estudo; na matemática, por exemplo, ela é uma entidade capaz de representar um valor ou uma expressão em equações como $x^2 + 2x + 1 = 0$ ou funções como $f(x) = x^2$.

Já no contexto da computação, uma variável é uma posição de memória específica onde podemos armazenar um dado ou valor para modificá-lo durante a execução do programa. Quando realizamos a criação de uma variável e atribuímos a ela um valor, como no comando int x = 10;, o computador reserva um espaço físico associado a um endereço de memória único para guardar essa informação, conforme ilustrado na seguinte figura:

Memória
endereçovariávelconteúdo
119
120
121int x10
122
123
124

Dessa forma, o programa ganha a capacidade de recuperar esse valor a qualquer momento e utilizá-lo nas mais diversas operações lógicas e matemáticas, conforme exploraremos detalhadamente a seguir.

Nota

Pense na variável como uma "caixa" com nome na memória do computador. O nome permite que você encontre a caixa, e o tipo da variável define o tamanho e o que você pode guardar dentro dela.

Declarando uma variável3.2.1

Em linguagem C, a declaração de uma variável segue uma forma geral obrigatória para que o compilador saiba como gerenciar os dados:

tipo_da_variável nome_da_variável;

O tipo_da_variável define o conjunto de valores que ela pode armazenar e as operações que podem ser executadas. Já o nome_da_variável é o identificador utilizado pelo programador para referenciá-la. Internamente, o computador associa este nome ao endereço físico do espaço reservado na memória.

Por exemplo, para declarar uma variável destinada a números inteiros com o nome x, utilizamos:

int x;

Também é possível declarar múltiplas variáveis de um mesmo tipo simultaneamente, separando os nomes por vírgulas:

int x, y, z;

É fundamental que toda declaração de variáveis termine com o ponto e vírgula (;), operador utilizado para separar as instruções que compõem o programa.

Uma variável deve ser, obrigatoriamente, declarada antes de ser utilizada. Como o computador só reserva o espaço na memória no momento da declaração, não é possível manipular um dado sem que seu espaço tenha sido previamente garantido. Além disso, antes de acessar o conteúdo de uma variável, é necessário certificar-se de que um valor foi atribuído a ela. Considere o código a seguir:

#include <stdio.h>
#include <stdlib.h>

int main(){
    int x; // declara a variavel mas nao define o valor
    printf("x = %d\n", x); 

    x = 5; // define o valor de x como sendo 5
    printf("x = %d\n", x);

    system("pause");
    return 0;
}

Ao executar o código acima, a primeira saída será x = qualquer valor!, enquanto a segunda será x = 5.

Isso ocorre porque, na arquitetura dos computadores, não existe o conceito de memória "vazia". Toda posição de memória está sempre preenchida por uma sequência de bits (0s e 1s). Quando criamos uma variável, o sistema operacional apenas seleciona um espaço que não estava em uso e o entrega ao programa. O conteúdo que já estava lá, remanescente de processos anteriores, é o que chamamos de lixo de memória: dados sem qualquer significado útil para o seu programa atual.

Atenção

Nunca utilize o valor de uma variável sem antes atribuir um valor a ela. Confiar no "lixo de memória" resultará em comportamentos imprevisíveis e erros lógicos no seu software.

Dando um nome à nossa variável3.2.2

Quando criamos uma variável, o computador reserva um espaço físico na memória para armazenar o valor associado a ela. Para que possamos acessar esse dado sem precisar lidar com endereços numéricos complexos, atribuímos um nome ao qual o computador vincula o endereço de memória reservado.

Existem regras rigorosas para a escolha desses nomes na linguagem C que todo programador deve seguir:

  • Composição de caracteres: O nome de uma variável pode conter letras, números e o caractere underscore (_).
  • Início do nome: O identificador deve começar obrigatoriamente com uma letra ou com um underscore (_). Nunca deve começar com um número.
  • Sensibilidade a maiúsculas (Case-sensitive): A linguagem C diferencia letras maiúsculas de minúsculas. Isso significa que as palavras Soma, soma e SOMA são tratadas como três variáveis distintas e independentes.
  • Palavras-chave: Não é permitido utilizar palavras reservadas da linguagem como nomes de variáveis.

As palavras-chave formam a base da sintaxe de C e possuem funções específicas já definidas. A tabela abaixo apresenta as 32 palavras que você não deve usar para nomear suas variáveis:

autodoubleintstruct
breakelselongswitch
caseenumiftypeof
continuefloatreturnwhile
unionconstforshort
unsignedcharexternsigned
voiddefaultdosizeof
volatilegotoregisterstatic

Para facilitar a compreensão, vejamos alguns casos comuns de nomes válidos e inválidos:

Exemplos de Nomenclatura
Nomes Válidos:cont, Cont, Val_123, _teste, Int1, Cont1, XNomes Inválidos:comp! (caractere especial inválido), .var (ponto não permitido), int (palavra reservada), 1var (começa com número), Va-123 (hífen não permitido)
Sugestão Pedagógica

Procure sempre dar nomes significativos às suas variáveis, como idade, soma ou nota_final. Isso torna seu código muito mais legível e profissional do que usar apenas letras soltas como a, b ou x.

Definindo o tipo de nossa variável3.2.3

Como vimos anteriormente, o tipo de uma variável determina o conjunto de valores que ela pode armazenar e as operações que pode executar. A linguagem C oferece cinco tipos de dados básicos, conforme detalhado na tabela a seguir:

TipoBitsIntervalo de valores
char8-128 a 127
int32-2.147.483.648 a 2.147.483.647
float32$1,175494 \times 10^{-38}$ a $3,402823 \times 10^{+38}$
double64$2,225074 \times 10^{-308}$ a $1,797693 \times 10^{+308}$
void8sem valor

O tipo char3.2.3.1

O tipo char permite armazenar, em um único byte (8 bits), um número inteiro pequeno ou o código de um caractere pertencente à tabela ASCII. É fundamental lembrar que, ao atribuir um caractere, devemos utilizá-lo entre aspas simples:

char c = 'a';
char n = 10;
Atenção

As aspas simples informam ao compilador que estamos lidando com um caractere literal e não com o nome de outra variável.

O tipo int3.2.3.2

O tipo int é utilizado para armazenar números inteiros sem parte fracionária. Seu tamanho depende da arquitetura do processador, sendo tipicamente de 32 bits em sistemas modernos:

int n = 1459;

Na linguagem C, os tipos char e int podem ser inicializados em três bases numéricas diferentes:

  • Decimal: É a base padrão (ex.: 125).
  • Octal: O valor deve ser precedido pelo dígito 0. Utiliza dígitos de 0 a 7. Exemplo: int x = 044; (equivale a 36 em decimal).
  • Hexadecimal: O valor deve ser precedido por 0x ou 0X. Utiliza dígitos de 0 a 9 e letras de A a F. Exemplo: int y = 0x44; (equivale a 68 em decimal).

A seguir, apresentamos um exemplo de aplicação dessas bases no código:

#include <stdio.h>
#include <stdlib.h>

int main(){
    int a = 125;   // valor em decimal
    int b = 0435;  // valor em octal, equivale a 285
    int c = 0x1FA; // valor em hexadecimal, equivale a 506

    printf("Valor de a: %d\n", a);
    printf("Valor de b: %d\n", b);
    printf("Valor de c: %d\n", c);

    system("pause");
    return 0;
}

Os tipos float e double3.2.3.3

Os tipos float e double são utilizados para armazenar números reais (ponto flutuante). A principal diferença entre eles reside na precisão: o float possui precisão simples, enquanto o double oferece dupla precisão, sendo ideal para cálculos que exigem maior rigor matemático ou intervalos numéricos muito grandes.

Padrão Americano

Em números reais, a separação da parte decimal é feita obrigatoriamente por ponto, e não por vírgula.

Exemplos:

float f = 5.25;
double d = 15.673;

Também é possível utilizar a notação científica, onde a letra e ou E representa o expoente na base 10:

double x = 5.0e10; // equivale a 50.000.000.000

O tipo void3.2.3.4

Por fim, o tipo void representa a ausência de valor. Ele é utilizado exclusivamente para declarar funções que não retornam resultados ou para definir ponteiros genéricos. É importante destacar que a linguagem C não permite a declaração de variáveis comuns do tipo void.

Os modificadores de tipo de uma variável3.2.4

Além dos cinco tipos básicos, a linguagem C oferece quatro modificadores de tipos que, ao serem aplicados antes da declaração (com exceção do tipo void), alteram o significado e a capacidade de armazenamento da variável para adequá-la às necessidades específicas do programa. Os modificadores são:

  • signed
  • unsigned
  • short
  • long

O modificador signed3.2.4.1

Este modificador determina que uma variável dos tipos char ou int poderá armazenar tanto valores positivos quanto negativos. Como este é o comportamento padrão da linguagem para esses tipos, o uso do termo signed é raro na prática. Exemplos:

signed char x;
signed int y;

O modificador unsigned3.2.4.2

Ao contrário do anterior, o unsigned estabelece que a variável (tipos char ou int) armazenará apenas valores positivos e o zero. Ao remover a necessidade de reservar um bit para o sinal (positivo/negativo), a capacidade de armazenamento para valores positivos dobra. Por exemplo, um char comum armazena de -128 a 127; já um unsigned char armazena de 0 a 255. Exemplos:

unsigned char x;
unsigned int y;

O modificador short3.2.4.3

O modificador short força a variável do tipo int a ocupar apenas 16 bits, criando um "inteiro pequeno", independentemente da arquitetura do processador utilizado. Exemplo:

short int i;

O modificador long3.2.4.4

O modificador long garante que uma variável int tenha, no mínimo, 32 bits, assegurando um "inteiro grande". Quando aplicado ao tipo double, ele aumenta a precisão decimal da variável. Exemplos:

long int n;
long double d;

Usando mais de um modificador ao mesmo tempo3.2.4.5

A linguagem C permite combinar modificadores sobre um mesmo tipo básico. Isso possibilita, por exemplo, criar um inteiro que seja simultaneamente grande (32 bits) e sem sinal, expandindo consideravelmente o limite superior de valores positivos:

unsigned long int m;

Tipos e combinações de modificadores possíveis3.2.5

A tabela a seguir consolida todas as combinações permitidas entre tipos básicos e modificadores, detalhando o espaço ocupado em memória e o intervalo de valores suportado:

TipoBitsIntervalo de valores
char8-128 a 127
unsigned char80 a 255
signed char8-128 a 127
int32-2.147.483.648 a 2.147.483.647
unsigned int320 a 4.294.967.295
signed int32-2.147.483.648 a 2.147.483.647
short int16-32.768 a 32.767
unsigned short int160 a 65.535
signed short int16-32.768 a 32.767
long int32-2.147.483.648 a 2.147.483.647
unsigned long int320 a 4.294.967.295
signed long int32-2.147.483.648 a 2.147.483.647
float32$1,175494 \times 10^{-38}$ a $3,402823 \times 10^{+38}$
double64$2,225074 \times 10^{-308}$ a $1,797693 \times 10^{+308}$
long double80/96/128*$3,4 \times 10^{-4932}$ a $3,4 \times 10^{+4932}$
Nota

Os valores de bits e intervalos podem variar levemente dependendo do compilador e da arquitetura do sistema (como sistemas de 16, 32 ou 64 bits). Os valores apresentados acima referem-se aos padrões mais comuns encontrados em ambientes de desenvolvimento modernos como o Code::Blocks.

Escrevendo suas variáveis na tela3.2.6

A função printf() é uma das ferramentas fundamentais de saída e escrita de dados na linguagem C. Seu nome deriva da expressão em inglês print formatted (escrita formatada). Basicamente, essa função exibe na saída de vídeo um conjunto de valores, caracteres ou sequências de texto, seguindo um formato previamente estabelecido. A sintaxe geral da função é:

printf("tipos de saída", lista de variáveis)

A função printf() trabalha com dois parâmetros de entrada principais:

  • "tipos de saída": Um conjunto de caracteres que define tanto o formato dos dados que serão exibidos (máscaras) quanto o texto literal.
  • lista de variáveis: Um conjunto de nomes de variáveis, separados por vírgulas, cujos valores serão inseridos nos locais indicados pelos formatos.

Embora a regra geral preveja uma lista de variáveis, a função printf() pode ser utilizada apenas para exibir mensagens de texto simples. Nesses casos, o texto deve estar obrigatoriamente entre aspas duplas, como demonstrado na seguinte código:

#include <stdio.h>
#include <stdlib.h>

int main(){
    printf("Esse texto sera escrito na tela");
    system("pause");
    return 0;
}

Para exibir dados variáveis, utilizamos especificadores que definem como a saída deve ser formatada. Cada especificador de formato é precedido pelo sinal de %, e deve existir exatamente um especificador para cada variável da lista. A correspondência entre o formato e a variável ocorre estritamente pela ordem em que aparecem no comando.

Diferença crucial

Ao contrário da função scanf(), o comando printf() não exige o símbolo & na frente do nome das variáveis. Se você utilizar o & dentro do printf(), o programa exibirá o endereço de memória da variável em vez do valor guardado nela.

Abaixo, a tabela apresenta os tipos de saída mais comuns suportados pela linguagem:

FormatoDescrição
%cEscrita de um único caractere (char)
%d ou %iEscrita de números inteiros (int ou char)
%uEscrita de números inteiros sem sinal (unsigned)
%fEscrita de números reais (float ou double)
%sEscrita de cadeias de caracteres (strings)
%pEscrita de um endereço de memória
%e ou %EEscrita em notação científica

Observe abaixo alguns exemplos de como formatar diferentes tipos de dados. Note que o caractere \n é uma sequência de escape utilizada para saltar para a próxima linha:

#include <stdio.h>
#include <stdlib.h>

int main(){
    int x = 10;
    // Escrita de um valor inteiro
    printf("%d\n", x);

    float y = 5.0;
    // Escrita de um valor inteiro e outro real sem espaço
    printf("%d%f\n", x, y);

    // Adicionando espaço entre os valores para melhor leitura
    printf("%d %f\n", x, y);

    system("pause");
    return 0;
}

A flexibilidade do printf() permite que o programador intercale texto e variáveis livremente, criando sentenças completas e amigáveis para o usuário, conforme demonstrado abaixo:

#include <stdio.h>
#include <stdlib.h>

int main(){
    int x = 10;
    printf("Total = %d\n", x);
    printf("%d caixas\n", x);
    printf("Total de %d caixas\n", x);

    system("pause");
    return 0;
}

Lendo suas variáveis do teclado3.2.7

A função scanf() é uma das principais ferramentas para a entrada e leitura de dados na linguagem C. Seu nome deriva da expressão scan formatted (leitura formatada). Essencialmente, ela captura do teclado um conjunto de valores e caracteres, organizando-os de acordo com um formato específico definido pelo programador. A sintaxe geral da função é:

scanf("tipos de entrada", lista de variáveis)

A função scanf() recebe dois parâmetros fundamentais:

  • "tipos de entrada": Uma sequência de caracteres que define o formato (máscara) dos dados que serão capturados.
  • lista de variáveis: Os nomes das variáveis que armazenarão os valores lidos. Cada nome de variável deve ser obrigatoriamente precedido pelo operador de endereço &.

Os tipos de entrada determinam como o dado deve ser interpretado. Cada especificador começa com o símbolo %, e deve haver uma correspondência exata entre o número de formatos e o número de variáveis na lista, seguindo a mesma ordem de aparição.

Regra de Ouro

Na linguagem C, é obrigatório colocar o símbolo & antes do nome de cada variável no scanf(). Isso ocorre porque a função precisa saber o endereço de memória da variável para poder gravar o valor lido diretamente nela.

Abaixo, a tabela detalha os tipos de entrada mais utilizados:

FormatoDescrição
%cLeitura de um único caractere (char)
%d ou %iLeitura de números inteiros (int ou char)
%fLeitura de números reais (float)
%sLeitura de cadeias de caracteres (strings)

Vejamos agora alguns exemplos práticos de leitura de dados:

#include <stdio.h>
#include <stdlib.h>

int main(){
    int x, z;
    float y;

    // Leitura de um valor inteiro
    scanf("%d", &x);

    // Leitura de um valor real
    scanf("%f", &y);

    // Leitura de um valor inteiro e outro real simultaneamente
    scanf("%d%f", &x, &y);

    // Leitura de dois valores inteiros (com ou sem espaço no formato)
    scanf("%d%d", &x, &z);
    scanf("%d %d", &x, &z);

    system("pause");
    return 0;
}

No exemplo acima, formatos como "%d%d" e "%d %d" são equivalentes, pois o scanf() ignora espaços em branco entre os tipos de entrada. Ao fornecer os dados, o usuário pode optar por digitar um valor e apertar ENTER para cada um, ou digitar todos os valores separados por espaços e pressionar ENTER apenas ao final.

No entanto, o scanf() ignora apenas espaços em branco. Se o programador inserir qualquer outro caractere entre os formatos, o usuário será obrigado a digitá-lo exatamente da mesma forma para que a leitura funcione:

#include <stdio.h>
#include <stdlib.h>

int main(){
    int dia, mes, ano;
    // Leitura formatada como data: os caracteres '/' sao obrigatorios na digitacao
    scanf("%d/%d/%d", &dia, &mes, &ano);

    system("pause");
    return 0;
}

Nesse caso, se o usuário não digitar as barras (/), o programa não conseguirá separar os valores corretamente.

Constantes3.2.8

Diferente de uma variável, que permite a modificação de seu conteúdo durante a execução, uma constante armazena um dado com a garantia de que ele permanecerá inalterado até o fim do programa. Por esse motivo, é obrigatória a atribuição de um valor no momento da declaração, já que não haverá outra oportunidade para modificá-lo. Na linguagem C, existem duas formas principais de criar constantes: através do comando #define e da palavra-chave const. Além disso, a linguagem conta com constantes predefinidas conhecidas como sequências de escape.

Valor literal3.2.8.1

Um valor literal é a representação direta de um dado no código-fonte, ou seja, um valor expresso por ele mesmo e não pelo nome de uma variável. Na instrução int n = 10;, o número 10 é o literal.

Assim como as variáveis, os literais possuem tipos. Por padrão, um número real como 10.5 é tratado como double. Para forçar um literal a assumir um tipo ou precisão específica, utilizamos sufixos de tipo (caracteres adicionados ao final do valor), conforme detalhado na tabela abaixo:

SufixoTipo CorrespondenteExemplo
"sem sufixo"double ou int10.5 ou 10
"f" ou "F"float3.14F
"l" ou "L"long double ou long int123456.789L ou 123L
"u" ou "U"unsigned int453U
"ul" ou "UL"unsigned long int123456789UL

O comando define3.2.8.2

O #define é uma diretiva de compilação que cria uma constante simbólica. Sua sintaxe é:

#define nome_da_constante valor_da_constante

Ao utilizar o #define, o compilador substitui todas as ocorrências do nome pelo valor definido antes mesmo de iniciar a tradução para código de máquina. Exemplo:

#define PI 3.1415

O comando const3.2.8.3

A outra forma de definir uma constante é utilizando o prefixo const antes da declaração de uma variável comum. Isso transforma a variável em um item de "apenas leitura":

const tipo_da_constante nome_da_constante = valor_da_constante;

Diferente do #define, esta constante possui um tipo de dado definido e segue as mesmas regras de escopo das variáveis. Exemplo:

const float PI = 3.1415;

As sequências de escape3.2.9

As sequências de escape (ou códigos de barra invertida) são constantes predefinidas que permitem enviar comandos de controle não gráficos para a tela ou outros dispositivos de saída. Elas são essenciais para formatar a exibição de textos.

A tabela abaixo relaciona as sequências mais utilizadas:

CódigoComando / Significado
\aSom de alerta (bip)
\nNova linha (new line)
\tTabulação horizontal (tab)
\'Imprime apóstrofe
\"Imprime aspas
\\Imprime barra invertida
\0Caractere nulo (finaliza a cadeia de caracteres)

A utilização dessas constantes no printf() permite o controle refinado do que é mostrado ao usuário, como exemplificado abaixo:

#include <stdio.h>
#include <stdlib.h>

int main(){
    printf("Hello World\n");           // Pula uma linha ao final
    printf("Hello\nWorld\n");         // Pula uma linha no meio do texto
    printf("Hello \\ World\n");       // Imprime uma barra invertida
    printf("\"Hello World\"\n");       // Imprime o texto entre aspas
    system("pause");
    return 0;
}
Dica Pedagógica

Use #define para valores globais que nunca mudam em todo o projeto (como o valor de PI) e const quando precisar de uma constante com escopo restrito a uma função ou bloco específico.

Questões3.3

1. O conceito de variável é fundamental para a programação. De acordo com o texto, uma variável na computação difere ligeiramente de uma variável matemática. Assinale a alternativa que define corretamente uma variável no contexto da linguagem C.

  • A) É apenas uma abstração matemática para resolver equações de segundo grau, sem relação física com o computador.
  • B) É uma posição de memória específica, associada a um endereço físico, reservada para armazenar um dado que pode ser modificado durante a execução.
  • C) É um valor constante gravado no disco rígido que não pode ser alterado após a compilação do programa.
  • D) É um comando do processador utilizado para limpar o "lixo de memória" antes da execução do código.

2. A escolha de nomes para variáveis (identificadores) segue regras estritas na linguagem C. Analise a lista de declarações abaixo e identifique quais são INVÁLIDAS, justificando o erro com base nas regras apresentadas (início de nome, caracteres permitidos, palavras reservadas).

int 1contador;      // (A)
float valor_total;  // (B)
char return;        // (C)
int _media;         // (D)
double nota-final;  // (E)
int SOMA;           // (F)

3. Analise o seguinte trecho de código e responda:

#include <stdio.h>
#include <stdlib.h>

int main(){
    int x;
    printf("Valor de x: %d", x);
    return 0;
}

O texto menciona que a memória do computador nunca está "vazia". Com base nisso, o que será impresso na tela ao executar este código? O valor será sempre zero? Explique o conceito de "lixo de memória".

4. Sobre os tipos de dados e seus modificadores, julgue as afirmações a seguir como Verdadeiras (V) ou Falsas (F):

  • ( ) O tipo char armazena apenas números inteiros pequenos e códigos de caracteres da tabela ASCII, ocupando geralmente 1 byte.
  • ( ) O modificador unsigned dobra a capacidade de armazenamento de números positivos de uma variável do tipo int, pois elimina a necessidade do bit de sinal.
  • ( ) Declarar uma variável como short int garante que ela ocupará 64 bits de memória, independentemente da arquitetura.
  • ( ) A linguagem C permite atribuir um caractere a uma variável char utilizando aspas duplas, como em char c = "A";.
  • ( ) O tipo void pode ser usado para declarar variáveis genéricas que armazenam qualquer valor, como em void x = 10;.

5. A linguagem C suporta a inicialização de variáveis inteiras utilizando bases numéricas diferentes (Decimal, Octal e Hexadecimal). Observe o código abaixo e determine qual será o valor impresso em decimal para as variáveis a, b e c.

int main(){
    int a = 10;
    int b = 010;
    int c = 0x10;
    
    printf("%d, %d, %d", a, b, c);
    return 0;
}
  • A) 10, 10, 10
  • B) 10, 8, 16
  • C) 10, 1, 10
  • D) 10, 12, 20

6. As funções printf() e scanf() são essenciais para a interação com o usuário. Existe uma diferença sintática crucial entre elas no que tange ao uso do operador & (e comercial).

  • a) Explique por que o scanf() exige o uso do & antes do nome da variável (ex: scanf("%d", &x)), enquanto o printf() geralmente não o utiliza.
  • b) O que acontece se o programador esquecer de colocar o & no scanf()?
  • c) Se utilizarmos o & dentro de um printf() (ex: printf("%d", &x)), o que será exibido na tela?

7. O código abaixo contém erros relacionados à formatação de entrada e saída. Identifique e corrija as linhas problemáticas para que o programa leia um inteiro e um float, e depois os imprima corretamente.

int main(){
    int idade;
    float altura;

    // Erro na linha abaixo
    scanf("%f %d", &idade, &altura); 

    // Erro na linha abaixo
    printf("Idade: %d - Altura: %d", idade, altura);
    
    return 0;
}

8. Sobre constantes e sequências de escape, analise o código a seguir e descreva exatamente como será a saída visual no terminal (considere quebras de linha e tabulações).

#include <stdio.h>
#define VALOR 100

int main(){
    printf("Item:\tPreco:\n");
    printf("A\\B\t%d\n", VALOR);
    printf("\"FIM\"");
    return 0;
}

9. Diferencie as duas formas de declaração de constantes apresentadas no texto: #define e const. Qual delas é processada antes da compilação propriamente dita e qual possui um tipo de dado associado e alocado em memória?

Próximos passos3.4

No próximo capítulo, Operações com Variáveis, aprenderemos a manipular os dados armazenados nas variáveis. Veremos como realizar cálculos matemáticos básicos, operações de incremento/decremento e como utilizar operadores relacionais para melhorar a expressividade do nosso código.