Logo Passei Direto
Buscar

Linguagem C recursos básicos

Ferramentas de estudo

Questões resolvidas

Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Questões resolvidas

Prévia do material em texto

Linguagem C: recursos básicos
Tipos básicos de dados, operadores aritméticos, lógicos e relacionais. Estruturas de decisão (if e switch) e
estruturas de repetição (for, while e do-while). Estruturas de dados homogêneas com vetores e strings.
Estrutura de dados heterogênea tipo struct.
Prof. Paulo Vidal
1. Itens iniciais
Propósito
A linguagem C é muito utilizada no desenvolvimento de jogos, editores de imagem e vídeo, sistemas de
automação, na robótica e na programação total ou parcial de sistemas operacionais. O aprendizado da
linguagem C permite atuar em diversas áreas, abrindo um leque de possibilidades de emprego no mercado.
Preparação
Você poderá executar os códigos diretamente na página, utilizando as ferramentas disponibilizadas ao longo
do conteúdo, ou no seu próprio computador utilizando um compilador ou um ambiente de desenvolvimento
integrado (IDE). Para o sistema operacional Windows, pode ser utilizado o CodeBlocks, DevC++ e Genny. Para
Linux, pode ser utilizado o GCC.
Objetivos
Identificar os tipos básicos de dados e os tipos de operadores em um programa.
Aplicar as técnicas básicas de controle de fluxo na resolução de problemas.
Aplicar as estruturas de dados homogêneas e heterogêneas.
Introdução
Os recursos básicos da Linguagem C fornecem as ferramentas iniciais de programação, permitindo que sejam
elaborados programas de baixa e média complexidade. Inicialmente, serão apresentados os tipos básicos de
dados, como int, char e float, que podem ser empregados para armazenar variáveis. Também serão
apresentados os tipos de operadores definidos na linguagem C: aritméticos, lógicos e relacionais. 
Vamos aprender a elaborar programas por meio da aplicação de técnicas básicas de controle de fluxo na
resolução de problemas, como estruturas de decisão (if e switch) e estruturas de repetição (for, while e do-
while). 
Veremos também como utilizar algumas estruturas de dados homogêneas, como vetores, strings e matrizes. E
finalizaremos nosso estudo conhecendo as estruturas de dados heterogêneas tipo struct. 
• 
• 
• 
1. Tipos básicos de dados
Variáveis
Para manipular dados dos mais diversos tipos, é necessário poder armazená-los na memória e poder
referenciá-los quando for preciso. É por isso que foi criado o conceito de variável.
Dica
Uma variável é um espaço reservado na memória, que possui um nome (identificador) para facilitar a
referência, onde seu conteúdo pode ser alterado durante a execução do programa. 
As variáveis podem ser de diversos tipos, apresentados na tabela a seguir, que contém todos os tipos básicos
definidos no padrão ANSI (American National Standards Institute), o espaço em bytes que o tipo ocupa na
memória e a faixa de valores que o tipo utiliza.
Tipo Tamanho em bytes Tamanho em bytes 
char 1 -128 a 127 
unsigned char 1 0 a 255 
signed char 1 -128 a 127 
int 4 -2.147.483.648 a 2.147.483.647 
unsigned int 4 0 a 4.294.967.295 
signed int 4 -2.147.483.648 a 2.147.483.647 
short int 2 -32.768 a 32.767 
unsigned short int 2 0 a 65.535 
signed short int 2 -32.768 a 32.767 
long int 4 -2.147.483.648 a 2.147.483.647 
signed long int 4 -2.147.483.648 a 2.147.483.647 
unsigned long int 4 0 a 4.294.967.295 
Tipo Tamanho em bytes Tamanho em bytes 
float 4 Seis dígitos de precisão 
double 8 Dez dígitos de precisão 
long double 10 Dez dígitos de precisão 
Tabela: Tipos básicos de dados. Elaborada por: Paulo Vidal.
Na tabela é possível observar que existem quatro tipos de variável: char, int, float e double. A seguir, veremos
mais detalhes sobre eles. Perceba que, a seguir, os tipos float e double serão apresentados juntos. Isso ocorre
porque ambos possuem uma certa similaridade:
char
O tipo char armazena um caractere de 1 byte de tamanho, bem como valores positivos e negativos.
Caracteres são armazenados em códigos e, normalmente, é utilizado o código ASCII (American
Standard Code for Information Interchange).
O tipo char usa 8 bits para armazenar 256 valores, isto é, 28 valores. Como está definido na
linguagem que o tipo char deve ter números positivos e negativos, é necessário usar 1 bit para
representar o sinal, sobrando 7 bits para representar 128 (=27) caracteres.
Como se calculam os valores mínimos e máximos de um tipo de N bits com sinal (signed)?
São calculados pelas fórmulas (1) e (2).
(1) valor mínimo = 
(2) valor máximo = 
Assim, para o tipo char, o valor mínimo = e o valor máximo = .
O signed char possui as mesmas características do char.
O conceito de unsigned (sem sinal) é aplicado para caracteres e inteiros. Como o tipo char precisa de
1 byte (N = 8 bits) de armazenamento, usaremos as fórmulas (3) e (4) abaixo:
(3) valor mínimo = 0
(4) valor máximo = 
Então, o valor máximo = 
int
O tipo int armazena um número inteiro que ocupa 4 bytes (ou N = 32 bits) na memória e a faixa de
valores está representada na tabela de tipos básicos de dados, sendo bastante abrangente ao
compreender valores inteiros negativos e positivos, incluindo o número zero. Os valores mínimos e
máximos são calculados pelas fórmulas (1) e (2).
Os tipos signed int e unsigned int precisam de 4 bytes de armazenamento e usam o conceito de
inteiro com sinal e sem sinal explicado acima.
Os tipos short int, signed short int e unsigned short int precisam de 2 bytes de armazenamento e,
também usam o conceito de inteiro com sinal e sem sinal. Podem ser empregados para armazenar
valores pequenos, como a idade de uma pessoa.
Os três últimos tipos de inteiros são da classe com valores altos (long), como: long int, signed long int
e unsigned long int e utilizam 32 bits de armazenamento. Devem ser usados, por exemplo, em
cálculos de projetos de engenharia que utilizam maiores ordem de grandeza.
float e double
Quando você precisa fazer operações com números reais, podem ser usados três tipos: float, double
e long double.
As variáveis declaradas do tipo float, double e long double são utilizadas para armazenar valores
numéricos com parte fracionária. São também frequentemente denominadas reais ou de ponto
flutuante (Exemplos: 2.12, 0.0000024573, 1.0).
A diferença entre uma variável do tipo float, tipo double ou long double é o número de bytes que
reserva para armazenar o valor. A dimensão do float é normalmente de 4 bytes, do double é de 8
bytes, e do long double é de 10 bytes.
Pode-se dizer que esses três tipos armazenam números com precisão simples (float) ou com dupla
precisão (double ou long double). Um float é representado por uma parte inteira e por outra decimal,
separadas por um ponto (e não por uma vírgula, como é utilizado no Brasil).
Observando a tabela do tipos básicos de dados, os três tipos para reais diferem também pelo grau de
precisão por meio do número de bits alocados para a parte decimal.
Declarações de variáveis
Uma das primeiras ações que o programador deve fazer na construção de um programa é definir (ou declarar)
as variáveis, de modo que o compilador possa reservar espaço na memória para o valor a ser armazenado. A
forma geral de uma declaração é: 
tipo lista_de_variaveis;
Exemplo
int i;unsigned int a, b, c;char opcao;char opcao;char opcao;double salario; 
Todas as variáveis em C devem ser declaradas antes de serem usadas. Ao declarar as variáveis em C, é
importante seguir algumas regras:
 
O nome da variável deve conter somente letras e dígitos.
O caractere "_" é contado como uma letra.
O primeiro caractere do nome deve sempre ser uma letra.
Letras maiúsculas e minúsculas são consideradas caracteres diferentes.
Palavras reservadas não podem ser usadas como nomes de variáveis.
Dica
É boa prática escolher um nome da variável que signifique o que ela deve armazenar e indique a função
da variável. Por exemplo: imposto, valor, soma2nrs, total, nome, raio, salario_base. Veja que os nomes
das variáveis não possuem acento. 
Atribuições de valores às variáveis
Depois que você declarou a variável, esta pode receber valores por meio do operador de atribuição “=” que
indica que o valor à direita será atribuído à variável.goto
	Comando break
	Comando continue
	Controlando o fluxo em um programa
	Conteúdo interativo
	Vem que eu te explico!
	Tipos de operadores lógicos
	Conteúdo interativo
	Operadores lógicos
	Conteúdo interativo
	Comandos de controle de fluxo
	Conteúdo interativo
	Verificando o aprendizado
	3. Estruturas de dados homogêneas e heterogêneas
	Estruturas de dados homogêneas
	Vetores unidimensionais
	tipo
	nome
	tamanho
	Como um vetor é armazenado na memória?
	Atenção
	O que acontece na memória quando criamos um vetor?
	vetor[0] = 120
	vetor[5] = vetor[0]*3
	vetor[2] = vetor[0] + vetor[5]
	Atribuição inicial de valores no vetor
	Conteúdo interativo
	Linha 2
	Linha 5
	Linha 9
	Linha 12
	Linha 14
	Linha 15
	Strings
	Sem chaves
	Com chaves
	Sem tamanho
	Atenção
	Conteúdo interativo
	Conteúdo interativo
	Matrizes
	Atribuição inicial de valores
	Leitura e escrita de uma matriz
	Conteúdo interativo
	Linhas 2 e 3
	Linha 6
	Linhas 9 a 13
	Utilizando vetores e matrizes
	Conteúdo interativo
	Estruturas de dados heterogêneas
	Atenção
	Atenção
	Declaração de variáveis do tipo estrutura
	aluno1 e aluno2
	Alunos
	Definição de estrutura com typedef
	Inicialização dos campos de uma estrutura
	Sem typedef
	Com typedef
	Acessando elementos da estrutura
	Conteúdo interativo
	Linhas 2 a 5
	Linha 7
	Linha 8
	Utilizando structs
	Conteúdo interativo
	Vem que eu te explico!
	Estruturas de dados homogêneas
	Conteúdo interativo
	Estrutura de dados heterogêneas
	Conteúdo interativo
	Strings
	Conteúdo interativo
	Definição de estrutura com typedef
	Conteúdo interativo
	Verificando o aprendizado
	4. Conclusão
	Considerações finais
	Podcast
	Conteúdo interativo
	Explore +
	ReferênciasO valor inicial pode ser atribuído de duas formas. A primeira forma é definir a variável e depois atribuir um
valor a ela. A segunda é definir a variável e atribuir um valor a ela em uma única instrução. Veja os exemplos a
seguir: 
c
int numero; 
 numero = -13; 
Forma 1: Definir a variável e depois atribuir valor.
c
int num = -13;
 int a1 = 4, i2 = 0;
 char c = ‘n’, letra2 = ‘b’; 
Forma 2: Definir a variável atribuindo valor.
Lendo e imprimindo variáveis com scanf() e printf()
Para seguirmos nas seções seguintes, é preciso entender como funciona duas funções:
• 
• 
• 
• 
• 
As funções de entrada e saída estão inseridas na biblioteca stdio. Para usá-las, precisamos inserir no
programa a interface stdio.h, por meio da diretiva #include 
A função printf()
A função printf() (abreviatura de print formatted) permite imprimir variáveis e strings com formatação por meio
do uso de especificadores de formato iniciados pelo símbolo %, localizados dentro da string a ser impressa.
 
Vamos executar nosso primeiro código? O programa a seguir imprime a frase “Salario = R$ 6500.46”. Clique no
botão Executar e veja o resultado.
Conteúdo interativo
esse a versão digital para executar o código.
Observe que no nosso primeiro programa existe uma numeração de 1 a 6 que representa cada linha do
programa. Vamos à explicação de cada uma.
Linha 1
Inclusão da diretiva #include da biblioteca stdio.h de funções de entrada e saída para que possamos
usar a função printf().
Linha 2
Função principal main() na qual constam os comandos do programa. Segue-se à função o símbolo {,
que indica o início do bloco de comandos que serão executados dentro da função main().
Linha 3
Definição da variável chamada salário (tipo float) e atribuição inicial com o valor 6500.4567.
Linha 4
Comando printf() com três parâmetros: mensagem a ser exibida no monitor; uma string a ser inserida
na mensagem; e valor da variável salário a ser inserida na mensagem.
A mensagem "%s = R$ %.2f" é colocada entre aspas duplas, composta de:
• especificador %s (s de string), (vereremos mais detalhes adiante);
• string “= R$”;
• %.2f – o símbolo % seguido de .2f, indicando que o valor tipo float terá duas casas decimais.
scanf() 
Para leitura de variáveis pelo teclado
(dispositivo de entrada de dados).
printf() 
Para exibição do resultado do programa
na tela (dispositivo de saída de dados),
mais especificamente pelo prompt de
comando do sistema operacional.
Linha 5
As duas barras // significam início de comentário.
Linha 6
O símbolo } significa fim da função main().
A função scanf()
A função scanf() da biblioteca stdio permite ler a entrada do teclado utilizando a seguinte sintaxe:
scanf("%X", &Y)
 
Onde:
 
"%X" : É o especificador de formato que define o tipo utilizado.
Y : É o nome da variável que armazenará o valor, devendo ser sempre precedida de &.
Agora vamos ler os dados digitados? O programa a seguir mostra o uso da função scanf() e imprime um
número inteiro lido do teclado.
 
Uma observação: para executar o código diretamente no conteúdo, é necessário que no campo entrada você
coloque os valores a serem lidos antes de iniciar a execução. Trata-se de uma pequena restrição, mas é fácil
contorná-la.
Conteúdo interativo
esse a versão digital para executar o código.
Vamos à explicação do código, focando os itens novos.
Linha 3
Definição da variável nr (tipo int) para armazenar o valor a ser lido e sua atribuição inicial com zero.
Linha 4
O comando printf("Digite um valor inteiro: ") imprime a mensagem "Digite um valor inteiro: " na tela.
Linha 5
O comando scanf("$d", &nr) tem dois parâmetros: "%d" é o especificador de formato que define o tipo
inteiro utilizado e nr é o nome da variável que armazenará o valor, devendo ser sempre precedida de
&.
• 
• 
Linha 6
Comando printf() com três parâmetros: mensagem a ser exibida no monitor; uma string a ser inserida
na mensagem; e valor da variável nr a ser inserida na mensagem.
O formato da mensagem "%s = %d" é colocado entre aspas duplas, composto de:
• especificador %s (s de string), (veremos mais detalhes adiante);
• caractere “= ”;
• especificador %d – o símbolo % seguido do caractere d, indicando que o valor a ser inserido é tipo 
int.
Especificadores de formatos comuns
Especificadores são códigos de controle usados na formatação da leitura e escrita indicando os tipos de
valores usados nas funções printf() e scanf().
 
O formato é composto do símbolo %, seguido de uma letra ou um caractere especial, que indica o tipo a ser
usado, apresentado na tabela a seguir.
ESPECIFICAÇÃO TIPO
%c char
%d signed int
%i (signed) int
%u unsigned int
%hi short int
%hu unsigned short int
%l ou %ld ou %li long int
%lu unsigned long
%f float
%lf double
%e ou %E notação científica
%x ou %X hexadecimal
%s string
%p ponteiro
Tabela: Especificadores de formatos comuns.
Elaborada por: Paulo Vidal.
Antes de apresentar nosso próximo programa, vamos lembrar as características de três tipos de dados que
vimos no início do conteúdo que serão usados no nosso próximo programa.
Tipo Bytes armazenados na memória Faixa de valores
int 4 -2.147.483.648 a 2.147.483.647 
Tipo Bytes armazenados na memória Faixa de valores
short int 2 -32.768 a 32.767
long int 4 -2.147.483.648 a 2.147.483.647 
Tabela: Três tipos de dados inteiros.
Elaborada por: Paulo Vidal.
Agora, seguiremos para o programa. O objetivo é imprimir três valores inteiros do tipo int, short int e long int,
após serem lidos do teclado. Lembre-se de colocar os valores a serem lidos no campo entrada, e como serão
três entradas, você precisará digitar três valores na mesma linha separados por espaço. Sugerimos que,
primeiramente, você utilize o valor 10.000 e, em uma segunda execução, utilize 100.000.
 
Os valores a serem inseridos devem estar na mesma linha, separados por espaço.
Conteúdo interativo
esse a versão digital para executar o código.
Novamente, vamos analisar as linhas do código:
Linhas 4, 5 e 6
As linhas 4, 5 e 6 definem três variáveis chamadas nr_int, nr_short_int e nr_long_int com as
características apresentadas na tabela Três tipos de dados inteiros.
Linha 7
Após a definição, é impressa a frase “Digite um valor tipo int:” na linha 7 usando o comando printf().
Linha 8
É executado o comando scanf() para ler a variável. A função scanf() recebe dois parâmetros
separados por uma vírgula. O primeiro parâmetro é o especificador de formato "%d", indicando que o
valor a ser lido deve ser do tipo int. O segundo parâmetro é o caractere & seguido da variável nr_int,
informando que a variável vai receber o valor.
Linha 9
É impressa a frase “Digite um valor tipo short int: ” usando o comando printf().
Linha 10
É executado o comando scanf() para ler a variável. A função scanf() recebe dois parâmetros
separados por uma vírgula. O primeiro parâmetro é o especificador de formato "%hi", indicando que o
valor a ser lido deve ser do tipo short int. O segundo parâmetro é o caractere & seguido da variável
nr_short_ int, informando que variável vai receber o valor.
Linha 11
É impressa a frase “Digite um valor tipo long int: ” usando o comando printf().
Linha 12
É executado o comando scanf() para ler a variável. A função scanf() recebe dois parâmetros
separados por uma vírgula. O primeiro parâmetro é o especificador de formato "%ld", indicando que o
valor a ser lido deve ser do tipo long int. O segundo parâmetro é o caractere & seguido da variável
nr_long_ int, informando que variável vai receber o valor.
Linhas 13, 14 e 15
As linhas 13, 14 e 15 imprimem as variáveis definidas. Observe que os especificadores de formato são
os mesmos empregados no comando scanf(), o "%d","%hi" e "%ld", adequados a cada tipo de valor.
Nas linhas 13 e 14 aparece o caractere \n (new line) depois do especificador, o que significa próxima
linha. O comando printf() imprime a frase Numero =, o valor da variável e o cursor pula para a próxima
linha.
Na linha 15, existem dois caracteres \n seguidos.O comando printf() imprime a frase Numero =, o
valor da variável e o cursor pula as duas próximas linhas.
Na primeira execução, colocando o valor lido 10000 para cada variável, a saída é 10000 para as três variáveis,
pois esse valor está dentro da faixa dos 3 tipos.
 
Como o valor lido é 100000, a saída será 100000 para as duas variáveis do tipo int e long int, pois esse valor
está dentro da faixa de valores de cada tipo.
Comentário
Na variável nr_short_int, o resultado foi -31072. Isso porque, na tabela Três tipos de dados inteiros, o
valor 100000 está fora da faixa de valores da variável short int, em que o armazenamento usa apenas 2
bytes de memória. 
Especificadores de formatos específicos do printf()
Além dos especificadores comuns, você pode usar outros especificadores apenas para o comando printf(),
descritos no quadro a seguir.
ESPECIFICADOR SAÍDA
%.Xf ou %.Xlf Ponto flutuante com X casas decimais
%.Xe ou %.XE Número em notação científica com X casas decimais
%.Xs Primeiros X caracteres da string
%% Imprime %
Tabela: Especificadores para a função printf().}
Elaborada por: Paulo Vidal.
Agora, vamos executar um programa que mostra o emprego dos formatos da tabela Especificadores para a
função printf().
Conteúdo interativo
esse a versão digital para executar o código.
Vejamos a explicação do código!
 
Linha 3
O formato %.2f especifica que o valor deve ter duas casas decimais. Assim, o valor é aproximado para
123.57.
Linha 4
O especificador %.3E denota que o número deve ser exibido no formato de notação científica,
seguindo a fórmula , sendo M (Mantissa) e E (Expoente).
O valor é igual a . O número 3 no formato E representa o número de
casas decimais da mantissa.
O terceiro resultado é a impressão da string “Primeiro nome de Paulo Cesar: Paulo”, em que o formato
%.5s diz ao printf() para imprimir os cinco primeiros caracteres da string “Paulo Cesar”.
Linha 6
Aparece o especificador 20%%, que resulta na string 20%.
A utilização de constantes
Constante é um nome (ou identificador) que assume um valor fixo durante toda a execução de um programa.
Existem duas formas de declarar uma constante: 
Por meio da diretiva de pré-compilação #define
Neste caso, a constante é chamada de constante simbólica e é, geralmente, declarada em letras
maiúsculas para diferenciar-se de variáveis. Por exemplo:
#define PI 3.1415 
A diretiva #define informa ao pré-processador que o símbolo que a segue deve ser substituído pelo
valor que aparece depois dele. O que ocorre na prática é que, ao compilar o código, o pré-
processador vai verificar no código as ocorrências da palavra PI e substituí-las por 3.1415.
Por meio do modificador de acesso const.
Neste caso, a variável pode apenas receber um valor inicial, não podendo ser alterada durante a
execução do programa. Por exemplo:
const int PI = 3.1415; 
const é um modificador de acesso. Assim, a constante declarada dessa forma é realmente uma
variável, existindo fisicamente na memória.
Testaremos as duas formas, começando pela diretiva #define.
Conteúdo interativo
esse a versão digital para executar o código.
Agora, vamos executar com a palavra reservada const.
Conteúdo interativo
esse a versão digital para executar o código.
Ao analisar os dois programas, você pode ficar na dúvida sobre o que ocorreu de diferente. Quanto à
execução do programa, neste caso, não foi possível verificar nenhuma diferença. A mudança ocorre durante o
processo de compilação e execução. Entenda:
E como definimos a constante do tipo char? 
Uma constante do tipo char possui um único caractere escrito entre aspas simples, como em 'a', podendo
participar normalmente de expressões aritméticas. O valor que entra na expressão é o do código usado para
representar o caractere, como mostra a tabela a seguir. 
Caractere Descrição 
'a' Caractere a. 
'A' Caractere A. 
'\0141' Constante octal correspondente ao caractere 'a'. 
'\n' Nova linha ( New line ). Posiciona o cursor no início da nova linha. 
#define 
Quando utilizado o #define, o que ocorre é a
mudança, durante a compilação, da palavra
PI por 3.1415. Em outras palavras, na
compilação, a linha printf seria transformada
em: “printf ("Valor de PI: %.2f ", 3.1415);”. Veja
que a palavra PI foi substituída pelo valor
3.1415. 
const 
Com o uso da palavra const, não houve a
substituição. Na realidade, foi criada
uma área de memória durante a
execução para a variável PI, e o
conteúdo dessa variável vale 3.1415. O
que o modificador const faz é bloquear
qualquer alteração nessa área de
memória. 
Caractere Descrição 
'\r' Retorno do cursor. Posiciona o cursor no início da linha atual. 
'\t' Tabulação horizontal. Move o cursor para a próxima parada de tabulação. 
'\a' Alerta; faz soar a campainha do sistema. 
'\0' Null , caractere que, em C, encerra um conjunto de caracteres. 
Tabela: Exemplos de constantes com caracteres e seu significado. Elaborada por: Paulo Vidal.
Perceba que o caractere 'n' é diferente do caractere especial '\n' (New Line). No próximo código, vamos
utilizar constantes como caracteres. 
Conteúdo interativo
esse a versão digital para executar o código.
Entradas e saídas na Linguagem C
No vídeo a seguir, abordaremos as funções scanf e printf, além dos diversos tipos de dados.
Conteúdo interativo
Acesse a versão digital para assistir ao vídeo.
Vem que eu te explico!
Os vídeos a seguir abordam os assuntos mais relevantes do conteúdo que você acabou de estudar.
Variáveis – explicar o conceito de variáveis.
Conteúdo interativo
Acesse a versão digital para assistir ao vídeo.
A utilização de constantes.
Conteúdo interativo
Acesse a versão digital para assistir ao vídeo.
Verificando o aprendizado
Questão 1
Segundo as regras de definição de variáveis, indique qual das variáveis abaixo tem nome incorreto.
A
int idade;
B
int num_cliente;
C
float a1b2c3;
D
float 7a2b3c;
E
char letra1;
A alternativa D está correta.
Pelas regras de criação de nomes de variáveis, o primeiro caractere não pode ser um dígito, e sim uma letra
ou um caractere underscore.
Questão 2
A função scanf() tem a finalidade de fazer leitura de uma variável pelo teclado. Considerando que a variável 
num seja do tipo inteiro (int), qual opção abaixo é verdadeira?
A
scanf("%f", &num);
B
scanf("%lf", &num);
C
scanf("%d", &num);
D
scanf("%c", &num);
E
scanf("%p", &num);
A alternativa C está correta.
O especificador de formato indica o tipo de dado que será carregado na variável. Para que sejam lidos
números inteiros, deve ser utilizado o especificado %d.
2. Operadores e controle de fluxo
Operadores 
Um operador em uma linguagem de programação é um símbolo que diz ao compilador ou interpretador para
executar operações matemáticas, relacionais ou lógicas e produzir o resultado final. Operadores são usados
para compor uma expressão. Uma expressão é uma fórmula na qual operandos são vinculados uns aos outros
pelo uso de operadores para calcular determinado valor. 
Neste módulo, explicaremos o conceito de vários tipos de operadores da linguagem C: 
aritméticos e de atribuição;
de incremento e decremento;
atribuição múltipla;
lógicos e relacionais.
Operadores aritméticos
Operadores aritméticos são usados para operações matemáticas. O quadro a seguir descreve cada um deles
usados na linguagem C.
Operador Descrição Exemplo 
= Atribuição a = 10 (variável recebe valor 10); b = 5; 
+ Adição soma = a + b; (soma = 15) 
- Subtração sub = a – b; (sub = 5) 
* Multiplicação mult = a*b; (mult = 50) 
/ Divisão div = a/b; (div = 2) 
% Resto da divisão resto = a%b; (resto = 0) 
Tabela: Operadores aritméticos. Elaborada por: Paulo Vidal.
Quando dois ou mais operadores se encontram em uma expressão, as operações são efetuadas uma de cada
vez respeitando algumas regras de precedência. No caso dos operadores aritméticos, as regras são as
mesmas da matemática, como exemplificado na próxima tabela.
Expressão Valor Ordem 
1 + 2 - 3 0 + - 
24 - 3 * 5 9 * - 
4 - 2 * 6 / 4 + 1 2 * / - +6 / 2 + 11 % 3 * 4 11 / % * + 
• 
• 
• 
• 
Tabela: Exemplos de expressões aritméticas. Elaborada por: Paulo Vidal.
A ordem de precedência dos operadores pode ser quebrada utilizando-se os parênteses, que possuem a mais
alta precedência, apresentada na tabela a seguir.
Expressão Valor Ordem 
1 + (2 - 3) 0 - + 
(24 - 3) * 5 105 - * 
(4 - 2 * 6) / 4 + 1 -1 * - / + 
6 / ((2 + 11) % 3) * 4 24 + % / * 
Tabela: Precedência de operadores aritméticos. Elaborada por: Paulo Vidal.
Vamos mostrar alguns exemplos de programas usando operadores aritméticos, começando por um programa
que lê um valor de uma distância em metros e imprime seu correspondente em centímetros.
Conteúdo interativo
esse a versão digital para executar o código.
Na linha 6, é usado o operador de multiplicação “*” na expressão nr*100. A expressão é o segundo parâmetro
da função printf(). 
O próximo programa lê 3 números reais e imprime a média aritmética deles. Obs.: a média deve conter 3 casas
decimais. Você vai precisar digitar três valores na mesma linha separados por espaço.
Conteúdo interativo
esse a versão digital para executar o código.
A linha 10 mostra a expressão da média e a linha 11, sua impressão. 
No terceiro exemplo, o programa calcula a área de um círculo e usa o conceito de constante.
Conteúdo interativo
esse a versão digital para executar o código.
Observe que o valor da área possui duas casas decimais e é arredondado para 314.16. 
A área do círculo é igual a π (PI) x raio2, assim, é necessário definir duas variáveis (raio e área) na linha 4 e a
constante PI na linha 2. 
A linha 7 mostra a codificação da fórmula da área e a linha 8, a instrução printf() para sua exibição na tela.
Operadores de atribuição aritmética
Muitas vezes, deseja-se alterar o valor de uma variável realizando alguma operação aritmética com ela. Por
exemplo:
c
i = i + 1; 
 val = val * 2; 
Para realizar tais operações, são utilizados operadores de atribuição aritmética. São instruções da linguagem
C para aperfeiçoar a atribuição aritmética. Os operadores são:
 
+= : Atribuição por adição
- = : Atribuição por subtração
*= : Atribuição por multiplicação
/= : Atribuição por divisão
%= : Atribuição por módulo (resto)
A tabela a seguir apresenta alguns exemplos e a sua expressão equivalente.
Atribuição aritmética Instrução equivalente 
i += 1; i = i + 1; 
j -= valor; j = j - valor; 
val *= 2; val = val * 2; 
num *= 1 + k; num = num * (1 + k); 
div10 /= 10; div10 = div10 / 10; 
resto %= 4; resto = resto % 4; 
Tabela: Exemplos de atribuição aritmética. Elaborada por: Paulo Vidal.
O próximo programa mostra a impressão na tela dos exemplos de atribuição aritmética da tabela anterior.
Conteúdo interativo
esse a versão digital para executar o código.
As expressões com atribuições aritméticas estão inseridas no comando printf() como segundo parâmetro, pois
a execução de cada expressão resulta em um valor a ser impresso.
Operadores de incremento e decremento
O operador que incrementa (++) ou decrementa (--) uma variável em 1 (uma) unidade. Existem duas variações
para este operador: 
• 
• 
• 
• 
• 
PRÉ (++nome_variavel ou - -
nome_variavel)
O valor será incrementado ou decrementado na
instrução em que a variável estiver contida.
PÓS (nome_variavel++ ou nome_variavel-
-)
O valor será incrementado ou decrementado na
próxima instrução.
Nosso próximo programa mostra o uso dos operadores. Ao lado de cada comando printf(), existe um
comentário mostrando o valor impresso da variável.
Conteúdo interativo
esse a versão digital para executar o código.
Perceba que, quando o operador é utilizado após a variável (j++), o valor original é impresso e, em seguida, a
operação é realizada.
Operador de atribuição múltipla
O operador de atribuição “=” pode ser utilizado para atribuir um valor a múltiplas variáveis em uma única
instrução. A sintaxe do operador é: var_1 = [ var_2 = … ] expressão; 
Os identificadores var_1, var_2, … são variáveis e a expressão é válida. No programa do exemplo 4, foram
declaradas as seguintes variáveis, em que todas receberam o valor inicial 1 (um).
c
int i=1, j=1, valor=1, num=1, k=1; 
Entretanto, podemos substituir por:
c
 int i = j = valor = num = k = 1; 
As atribuições múltiplas ocorrem da direita para a esquerda. No trecho de código acima, o valor 1 é atribuído
primeiro a k, depois a num, depois a val, depois a j e, por último, a i. 
O operador de atribuição possui a mesma precedência dos operadores de atribuição aritmética. 
Operadores lógicos
A linguagem C possui quatro tipos de dados (int, float, char e double), não existindo nenhum tipo que permita
representar os valores lógicos (verdadeiro e falso). Existem, contudo, linguagens que disponibilizam um tipo
específico para representar valores lógicos (Ex.: tipo boolean, em PASCAL, o qual pode receber os valores
TRUE e FALSE).
 
&& e (and)
|| ou (or)
! não (not)
A tabela a seguir mostra um exemplo de uso de cada operador.
• 
• 
• 
A B !A A &;&; B A || B 
0 0 1 0 0 
0 1 1 0 1 
1 0 0 0 1 
1 1 >; 0 1 1 
Tabela: Operadores lógicos. Elaborada por: Paulo Vidal.
A tabela apresenta o uso de apenas dois operandos, A e B, mas podemos construir expressões maiores. 
Verifique quais são as saídas do programa a seguir.
Conteúdo interativo
esse a versão digital para executar o código.
A tabela Operadores lógicos apresenta valores 0 e 1 aplicados aos operadores. Entretanto, observe que nas
linhas 3 e 4, as variáveis B e D receberam valores diferentes de zero, com tipos diferentes, isto é, você pode
colocar valores diferentes de 1 que, na linguagem C, correspondem a verdadeiro. 
Na linha 6, temos a operação !A é igual a um, pois o operador inverte o valor de A. No caso de !B será igual 0,
pois como B é diferente de zero (verdadeiro), então !0.1 = 0. 
A linha 7 apresenta expressões com os operadores && e ||. Colocando os valores nas variáveis B, C e D, e
realizando passo a passo cada expressão, temos:
B &;&; C = 0.1 &;&; 0 = 0;
C || D = 0 || 123 = 1.
Atividade discursiva
Considerando M = 1, N = 0 e K = 1, qual é o valor das expressões abaixo? Em dúvida? Então, que tal você
escrever um programa em C que realize o cálculo? 
a) !M && N || K; 
b) (K && M) || (!M). 
Chave de resposta
O resultado é:
a) 1
b) 1
Sugestão de programa para resolver os itens acima:
• 
• 
#include 
 int main(void){
 int M = 0, N = 0, K =1;
 char C = 0; int D = 123;
 printf("%d \n", !M && N || K);
 printf("%d \n", (K && M) || (!M) );
}
Operadores relacionais
A linguagem C possui um conjunto de seis operadores relacionais, os quais podem ser usados na avaliação de
expressões. Sua finalidade consiste no estabelecimento de relações entre os operandos. O quadro a seguir
apresenta os operadores relacionais:
Operador Nome Exemplo Significado 
== Igualdade X == Y X é igual a Y? 
>; Maior que X >; Y X é maior que Y? 
>;= Maior ou igual que X >;= Y X é maior ou igual a Y? 
\lt Menor que X \lt Y X é menor que Y? 
\lt= Menor ou igual que X \lt= Y X é menor ou igual a Y? 
!= Diferente X != Y X é diferente de Y? 
Tabela: Operadores relacionais. Elaborada por: Paulo Vidal.
O resultado de uma comparação (ou operação lógica) será:
 
0: Se a condição testada for falsa.
1: Se a condição testada for verdadeira.
A precedência dos operadores lógicos e relacionais é apresentada a seguir.
> >= ; 2, resultado 1.6 ! 6, resultado 0.A >;= B, resultado depende dos valores de A e B. (x + y) \lt (a*b-c),
resultado depende dos valores dos operandos. 
Chegou a hora de executarmos mais um programa. 
Conteúdo interativo
esse a versão digital para executar o código.
Vamos entender o que aconteceu?
Linha 7
A expressão A >= B é verdadeira, pois os valores de A e B são iguais, portanto, a saída é 1.
Linha 8
A expressão A != B é falsa, pois os valores de A e B sãoiguais, portanto, a saída é 0.
Linha 9
A expressão C > D é verdadeira, pois o valor de ‘a’ é 97 no código ASCII, portanto, a saída é 1.
Comandos de controle de fluxo
Vimos anteriormente os operadores lógicos e relacionais. Esses operadores são bastante utilizados nos
comandos de controle de fluxo da linguagem C que estudaremos agora. Os comandos de controle de fluxo
são divididos em:
 
Estruturas de decisão
Estruturas de repetição
Estruturas de decisão
Estruturas que permitem direcionar o fluxo lógico para blocos distintos de instruções conforme uma condição
de controle. Veremos os comandos:
if-else;
switch-case;
operador ? (operador interrogação).
• 
• 
• 
• 
• 
Comando if-else
A instrução if-else permite indicar em que circunstâncias deve ser executada determinada instrução ou
determinado conjunto de instruções, ou seja, você executa um trecho selecionado do código de acordo com o
resultado do teste de uma condição. A sua sintaxe é:
plain-text
if (condição)
 instrução1;
 [ else 
 instrução2; ] 
Sintaxe da instrução if-else.
A instrução if-else funciona da seguinte maneira:
Funcionamento da instrução if-else
Observe que, na sintaxe apresentada, a componente else está entre colchetes ([]) porque é opcional. Essa
instrução permite que um bloco de instruções não seja executado em um programa, bastando que a condição
necessária para a sua execução nunca se verifique. 
Vamos ver como a instrução if funciona na prática com um programa que lê um número inteiro e verifica se é
um número par.
Conteúdo interativo
esse a versão digital para executar o código.
O objetivo do programa é dizer se um número inteiro lido é um número par. Para saber, precisamos dividir o
número por 2 e verificar o valor do resto. Se o resto é zero, o número é par. Essa condição está codificada na
linha 7 pelo comando if. 
Nessa linha, a condição (num % 2) == 0 retorna um valor, que será 1, se ela for verdadeira (número par) ou 0,
se for falsa (número ímpar). Caso seja verdadeira, o teste da condição será executado na linha 8 do programa
que contém o printf. 
Nosso último exemplo está incompleto. Podemos melhorá-lo e imprimir uma mensagem caso o valor lido seja
ímpar. Para isso, devemos acrescentar na linha 9 a alternativa de usar o else. O comando if-else fica assim:
Conteúdo interativo
esse a versão digital para executar o código.
Lembre-se de que você deve apenas incluir o código na linha 9. Observe que o else termina com um ponto e
vírgula. 
Nosso próximo exemplo é de um programa que verifique se um número lido é divisível por 2 e por 5.
Conteúdo interativo
esse a versão digital para executar o código.
A linha 6 mostra a condição do if, onde é calculado o resto da divisão do número por 2 e, também, por 5
empregando o operador &&. Se os dois valores forem verdadeiros, então a condição será verdadeira e o
comando na linha 7 será executado; senão, o printf() será executado na linha 9. Como se pode observar nos
exemplos acima, pela sintaxe da instrução if-else, apenas uma instrução pode seguir o if ou o else. 
Caso se deseje que um conjunto de instruções seja realizado, quer no if quer no else, estas devem ser escritas
entre { } de modo que esse conjunto de instruções forme apenas um único bloco de instruções. Assim, um 
bloco é um conjunto de duas ou mais instruções delimitadas por chaves.
Uso de comandos if aninhados
Existem situações em que o teste de uma condição não é suficiente para tomar uma decisão. Pode ser
necessário testar mais do que uma condição. Assim, a linguagem C padrão também permite o uso de
comandos if aninhados, conforme a sintaxe a seguir.
c
if(condição) {
 Instrução; 
 }
 else {
 if(condição) 
 Instrução; 
 else 
 if (condição) 
 Instrução; (...) 
 else 
 Instrução; 
 } 
Sintaxe da instrução if-else.
 
 
No último exemplo, o teste era feito para testar se o número era divisível por 2 e por 5. Entretanto, podemos
ter situações em que queremos verificar outras situações. Por exemplo:
Se o número é divisível por 2 e 5;
Se o número é divisível por 2, e não por 5;
Se o número não é divisível por 2, mas é por 5;
Se o número não é divisível por 2 e nem por 5.
Podemos testar todas essas situações utilizando o conceito de if aninhados. O próximo exemplo mostra esse
conceito. Usaremos o conceito de if aninhados para lermos um número e verificarmos as quatro situações
apresentadas. 
1. 
2. 
3. 
4. 
Conteúdo interativo
esse a versão digital para executar o código.
Comando switch-case
O segundo comando de decisão é o switch-case. A instrução switch-case adapta-se particularmente à
tomada de decisões em que o número de possibilidades é elevado (em geral maior que 2, se não usamos if-
else), de forma a reduzir a complexidade de if-else consecutivos e encadeados. Veja a sintaxe do switch-case:
c
switch (expressão)
 {
 case constante 1: 
 sequência de instruções 1; 
 [break;]
 case constante 2: 
 sequência de instruções 2; 
 [break;]
 (...)
 case constante n: 
 sequência de instruções n; [
 break;]
 [default: instruções; ]
 } 
Esta instrução compara a expressão com todas as constantes. Caso seja verdadeira, ela executa as
sequências de comandos daquela constante. Caso todas as alternativas sejam falsas, o comando default é
executado, se existir, porque é opcional. 
A instrução break é opcional, mas é importante, uma vez que interrompe a execução da sequência de
comandos daquela condição. 
Caso não seja colocado o break, todas as instruções seguintes serão executadas.
Você pode estar se perguntando: qual é a diferença entre o switch e o if? Entenda:
Nosso próximo exemplo será um programa que lê dois números reais e executa a soma ou multiplicação deles,
de acordo com a opção escolhida (digitar 1 – para soma ou 2 – para multiplicação). Os valores a serem
inseridos devem estar na mesma linha, separados por espaço.
Conteúdo interativo
esse a versão digital para executar o código.
O operador ternário?
O operador ternário é uma alternativa para substituir o if…else, em algumas situações, por ser um comando
simples. Veja a sintaxe:
switch 
Compara apenas igualdades.
if 
Compara qualquer expressão lógica
ou relacional. 
python
condição ? expressão1 : expressão2 
Sintaxe do operador ternário.
 
A condição é testada, e, se o resultado for verdadeiro, o resultado de toda a expressão é o valor devolvido por
expressão1. Se o resultado for falso, o resultado de toda a expressão é o valor devolvido por expressão2.
Vamos ao exemplo de uso do operador?
Conteúdo interativo
esse a versão digital para executar o código.
Observe a linha 8 que emprega o operador ?: numero >= 0 ? numero++ : numero--; 
Neste código, se o número for maior ou igual a zero (numero >= 0), a variável numero será incrementada
(numero++), caso contrário, será decrementada de uma unidade (numero--). 
Poderíamos fazer o mesmo teste empregando o if-else, como no código a seguir:
Conteúdo interativo
esse a versão digital para executar o código.
Estruturas de repetição
As estruturas de repetição, também chamadas de laço (loop, em inglês), são utilizadas para que um conjunto
de instruções seja executado até que ocorra uma condição de parada, isto é, haverá uma repetição de
instruções até que seja atingida determinada condição. 
As estruturas de repetição usadas na linguagem C são: for, while e do-while. Normalmente, o comando for
diferencia-se dos restantes (while e do-while) por ter condições predefinidas, ou seja, o número de vezes a
ser executado já é conhecido. 
Nesta seção, também abordaremos os desvios incondicionais. 
Comando for
O comando for permite que determinada instrução, ou conjunto de instruções, seja repetida por um número
conhecido de repetições. A sintaxe é:
plain-text
for (inicialização; condição; incremento) 
 comando(s); 
 
Sintaxe do for.
 
Na inicialização é atribuído um valor inicial para a variável que irácontrolar o laço. A condição determina
quando o laço deve ser encerrado. Incremento indica o quanto a variável controladora é incrementada. Vamos
testar? Execute o código a seguir que imprime números inteiros de 1 a 5.
Conteúdo interativo
esse a versão digital para executar o código.
Recomendação
Altere o programa do exemplo 13 e faça com que imprima um número diferente de linhas. 
Vamos a outro exemplo? Execute o código abaixo que imprime os números pares entre 1 e 20.
Conteúdo interativo
esse a versão digital para executar o código.
Observe que os números são impressos um ao lado do outro. No comando printf() existe um espaço após o
especificador %d e não tem o \n.
Comando while
O comando while executa uma instrução ou um bloco de instruções enquanto determinada condição for
verdadeira. Veja sua sintaxe:
plain-text
while (condição)
 {
 instrução1;
 instrução2;
 .........
 instruçãoN;
 } 
Sintaxe do while.
 
Como é seu funcionamento?
Funcionamento da instrução while.
Note que quando o while possui várias instruções, temos que colocar o símbolo { no início e o símbolo } no
final do bloco de comando. 
Vamos executar o exemplo anterior, que imprime números inteiros de 1 a 5, usando o comando while? Veja a
seguir.
Conteúdo interativo
esse a versão digital para executar o código.
Os dois comandos dentro do while formam um bloco, iniciado e finalizado por {...}. Estes comandos serão
executados enquanto a condição (n 0);
 printf("O número %d tem %d dígitos\n", num, contador);
}
Loop infinito
O loop infinito é uma situação de exceção, pois, como o próprio nome diz, o programa roda infinitamente,
devido ao laço executar sem parar. Se quiser testar os programas citados a seguir, tome cuidado, pois eles
vão ficar rodando até serem forçados externamente a parar. A forma para fazer isso depende do software de
desenvolvimento e do sistema operacional, bastando, na maioria dos casos, fechar a janela do terminal/
prompt. Caso não consiga pará-lo, é preciso reiniciar o computador. Veja os exemplos:
c
#include 
 int main(){ 
 for( ; ; ) //For eterno 
 printf('Loop infinito!!!'); 
 } 
Exemplo com o for.
c
#include 
 int main(){ 
 while(1) //While sempre verdadeiro 
 printf('Loop infinito!!!'); 
 } 
Exemplo com while.
 
Desvios incondicionais
Os desvios incondicionais permitem o desvio do fluxo lógico de execução das instruções sem a utilização de
uma condição de controle. São eles: 
Comando goto
Esta instrução é muito pouco utilizada, pois torna os códigos difíceis de compreender à medida que
aumenta a complexidade do programa. O exemplo abaixo faz o mesmo que o exemplo do laço for
mostrado anteriormente. O programa que utiliza o for é mais fácil de entender.
Execute o código abaixo e analise!
Observando a instrução goto acima, verifica-se que se n\lt=10, volta para o rótulo (chamado loop1)
acima, executando as instruções outra vez até que a condição do if seja falsa.
Comando break
A instrução break pode ser tanto usada para terminar um teste case dentro de um bloco switch,
quanto para interromper a execução de um laço.
Quando esta instrução é utilizada dentro de um laço for, ele é imediatamente interrompido e o
programa continua a execução na instrução seguinte ao comando for.
No trecho de programa abaixo, o laço for deve ler 50 números inteiros positivos. No entanto, se for
digitado um número negativo, o laço for é interrompido imediatamente sem que o número seja
impresso.
Comando continue
A instrução continue é parecida com a instrução break. A diferença é que a instrução continue
simplesmente interrompe a execução da iteração corrente, passando para a próxima iteração do laço,
se houver uma.
No trecho do programa abaixo, o laço for lê 50 números inteiros; caso o número seja negativo, um
novo número é lido. Veja o exemplo:
Controlando o fluxo em um programa
No vídeo a seguir, apresentaremos programas que empregam as estruturas de controle de fluxo: decisão e
repetição. 
Conteúdo interativo
Acesse a versão digital para assistir ao vídeo.
Vem que eu te explico!
Os vídeos a seguir abordam os assuntos mais relevantes do conteúdo que você acabou de estudar.
Tipos de operadores lógicos
Conteúdo interativo
Acesse a versão digital para assistir ao vídeo.
Operadores lógicos
Conteúdo interativo
Acesse a versão digital para assistir ao vídeo.
Comandos de controle de fluxo
Conteúdo interativo
Acesse a versão digital para assistir ao vídeo.
Verificando o aprendizado
Questão 1
Considerando o funcionamento das estruturas de repetição, qual das opções abaixo é falsa?
A
A condição dentro de um laço while e do...while tem que ser colocada sempre dentro de parênteses.
B
Os laços while e for executam sempre, pelo menos uma vez, o corpo do laço.
C
O laço do...while executa sempre, pelo menos uma vez, o corpo do laço.
D
Os laços do.. while e while necessitam de uma instrução de parada para serem interrompidos.
E
Em todos os laços, a condição é sempre testada pelo menos uma vez.
A alternativa B está correta.
A sintaxe do comando (ou laço) while é: while (condição) comando;. E a sintaxe do comando for é: for
(condição) comando;. Logo que se inicia a execução docomando é feito um teste da condição. Se a
condição for falsa, não executa o corpo do comando. Portanto, os laços nem sempre executam o corpo
uma vez.
Questão 2
Analise o programa abaixo e considere que o valor lido para a variável num seja 5. Qual das opções apresenta
a saída correta após a execução do comando for?
 
#include 
int main(){
 int num;
 printf("Entre com um número inteiro: ");
 scanf("%d", &num);
 for(int i = num; i > 0; i--){
 printf("%d ", i);
 }
}
 
A
1 2 3 4 5
B
5 3 1
C
4 2 1 0
D
5 4 3 2 1
E
1 2 3 5 4
A alternativa D está correta.
Observe que no comando for a variável i inicia com um valor inicial (i = num), pelo enunciado o valor 5, e
depois vai sendo decrementada (i--), portanto, imprimindo os valores 5 4 3 2 1.
3. Estruturas de dados homogêneas e heterogêneas 
Estruturas de dados homogêneas
Depois de você ter conhecido quais são os tipos básicos de dados em C (char, int, float, double, entre outros),
onde apenas um valor é armazenado em uma variável ou constante, mostraremos agora como processar
conjuntos de dados ou valores do mesmo tipo. 
Um conjunto de dados do mesmo tipo é chamado de estrutura de dados homogênea.
A seguir, vamos descrever três tipos: vetor (ou array), matrizes e strings.
Vetores unidimensionais
Conjunto de elementos consecutivos do mesmo tipo, que podem ser acessados individualmente a partir de
um único nome e um índice. A forma geral da declaração de vetores unidimensionais é: 
c
tipo nome [tamanho]; 
Sintaxe vetores unidimensionais.
 
Onde:
tipo
É um tipo básico de dados.
nome
É o nome pelo qual o vetor será referenciado.
tamanho
É o número de elementos que o vetor contém.
Obs.: O tamanho do vetor é constante.
Uma coisa importante que deve ser notada é que o tamanho do vetor é constante. A seguir, veja alguns
exemplos de como devemos declarar vetores:
c
int numeros [1000]; /* vetor de 1000 inteiros */
 float notas [65]; /* vetor de 65 números reais */
 char nome [40];/* vetor de 40 caracteres */ 
Vetores unidimensionais.
 
Como um vetor é armazenado na memória?
bytes, ocupado por um vetor de tipo qualquer é igual a: espaço total do vetor = tamanho *
sizeof(tipo_do_vetor) ou espaço total do vetor = sizeof(nome_do_vetor). 
A função sizeof(nome da variável ou tipo do vetor) retorna o tamanho em bytes.
Atenção
Em C, não há verificação de limites em vetores. O programador deverá ter cuidado para que não
ultrapasse o fim de um vetor. 
O que acontece na memória quando criamos um vetor?
Observe o exemplo:
c
int vetor[6]; 
Criação de um vetor.
 
O que a instrução do exemplo significa? A instrução criou uma variável vetor que pode armazenar até 6
valores do tipo inteiro, como ilustrado a seguir:
Vetor.
Como houve apenas a definição do vetor, ele não contém valores armazenados. O primeiro índice do vetor
começa com 0 (endereço de memória é 1000) e o último é 5 (endereço de memória é 1020). 
A cada atribuição descrita a seguir, será modificado o valor interno do vetor.
vetor[0] = 120
Veja o vetor!
vetor[5] = vetor[0]*3
Veja o vetor!
vetor[2] = vetor[0] + vetor[5]
Veja o vetor!
Atribuição inicial de valores no vetor
A atribuição inicial de valores pode ser feita colocando valores dentro de um conjunto entre chaves. Dessa
forma, temos a seguinte sintaxe: tipo nome[n] = {valor_1, valor_2, …, valor_n}; 
Veja um exemplo: 
c
char vogal[5] = {‘a’, ‘e’, ‘i’, ‘o’, ‘u’}; 
Atribuição de valores em vetor.
 
Como é um vetor do tipo char, a inicialização do conjunto é entre chaves, cada caractere é separado por
vírgula e fica entre aspas simples.
A segunda forma de atribuição inicial de valores pode ser feita usando estrutura de repetição, como, por
exemplo, o comando for. No exemplo a seguir, o vetor é inicializado com o valor 0 para todos os n elementos
de x.
c
for (i = 0; ivalores
A atribuição inicial de valores pode ser feita entre chaves ou com o laço for:
c
int m[2][3] = {{1,2,3},{4,5,6}};
 int m[2][3] = {1,2,3,4,5,6};
 int m[2][2][4] = {{ {1 , 2, 3, 4} , {5 , 6, 7, 8} }, { {9,10,11,12} , {13,14,15,16} } }; 
Exemplos usando chaves.
 
c
for (i = 0; ialunos[TAMANHO];
 float soma = 0;
 for(int i = 0; i 
#include \ltstdlib.h> 
int main(){ 
 int i; 
 char palavras[3][30]; 
 for(i=0; i=0; i--) 
 printf("%s\n",palavras[i]); 
}
 
Assinale a opção correta:
A
O programa lê e imprime duas palavras.
B
O programa lê e imprime a concatenação das duas palavras.
C
O programa lê e imprime três palavras.
D
O programa lê três palavras e imprime em ordem inversa às palavras.
E
O programa lê e imprime a concatenação de três palavras.
A alternativa D está correta.
A variável palavras é uma matriz de char, ou seja, permite armazenar strings em cada linha da matriz. Pelo
tamanho da matriz, temos 3 linhas com 30 caracteres cada. Para cada linha, é lida uma string no primeiro
for e impressa no segundo for. Observe que o segundo for inicia a variável i com o valor dois e vai
subtraindo. A variável i é o índice do vetor. Então, as palavras são impressas em ordem inversa.
Questão 2
Com relação ao tipo de dados estrutura (struct, na linguagem C), podemos afirmar que
A
as estruturas em C são usadas para armazenar tipos de dados homogêneos, empregando o tipo matriz.
B
as estruturas em C são empregadas quando precisamos armazenar dados que não têm relação semântica,
mas que são todos do mesmo tipo primitivo de dados.
C
uma estrutura é um conjunto de uma ou mais variáveis, que podem ser de tipos diferentes, agrupadas sob um
único nome, de forma a facilitar a sua referência.
D
a definição de uma estrutura (struct) é baseada no tipo de dado chamado vetor (array) e permite armazenar
dados heterogêneos.
E
quando precisamos definir a diagonal de uma matriz quadrada, usamos o tipo de dados struct para armazenar
a matriz.
A alternativa C está correta.
As estruturas ou os registros permitem colocar, em uma única entidade, elementos de tipos diferentes, ou
seja, armazenam dados heterogêneos. Em C, a estrutura se dá criando uma struct que possuirá elementos
de diversos tipos primitivos de dados, os quais, normalmente, possuem relação semântica entre si, ou seja,
eles referenciam informações ou características de uma pessoa, de um objeto etc.
4. Conclusão
Considerações finais
Neste conteúdo, vimos que a linguagem C apresenta quatro tipos de dados básicos: char, int, float e double.
Podemos declarar variáveis para cada tipo, armazenando valores, de acordo com a finalidade do programa. Os
números inteiros são representados pelo tipo int e as variáveis reais são representadas pelo float e double. As
variáveis do tipo char armazenam caracteres. A leitura e a escrita de valores podem ser realizadas por meio
das funções scanf() e printf(), respectivamente, utilizando os formatos para cada tipo. Por exemplo: %d para 
int, e %f para float. 
O teste de condições pode ser realizado por meio das instruções if-else e switch. Na instrução if-else, a
condição é avaliada e, caso seja verdadeira, é executada a instrução associada ao if. A componente else é
executada quando a condição devolve o valor lógico falso. A instrução switch adapta-se particularmente à
tomada de decisões em que o número de possibilidades é elevado (em geral, maior que 2, se não usamos o if-
else), de modo a reduzir a complexidade de if-else consecutivos e encadeados. Já as instruções de repetição 
while, for e do-while executam uma ou mais instruções enquanto determinada condição for verdadeira. 
Os tipos de dados homogêneos são definidos pelos vetores, e os elementos de um vetor são sempre
armazenados em posições contíguas de memória. O índice do primeiro elemento de um vetor é sempre 0 e o
último é n - 1. As matrizes são vetores que possuem mais de uma dimensão. Por sua vez, o tipo de dados 
struct é uma coleção de variáveis, de tipos diversos ou não, agrupadas sob um único nome. As variáveis que
compõem a estrutura são os seus membros, elementos ou campos. 
Podcast
Ouça o podcast. Nele, falamos como os recursos básicos da linguagem C podem ser utilizados para a
resolução de problemas. 
Conteúdo interativo
Acesse a versão digital para ouvir o áudio.
Explore +
Para saber mais sobre as estruturas empregadas neste estudo, pesquise sobre Linguagem C Programação
Descomplicada.
Referências
DAMAS, L. Linguagem C. 10. ed. Rio de Janeiro: LTC, 2007.
 
SCHILDT, H. C Completo e Total. 3. ed. revista e atualizada. São Paulo: Makron Books, 1997.
	Linguagem C: recursos básicos
	1. Itens iniciais
	Propósito
	Preparação
	Objetivos
	Introdução
	1. Tipos básicos de dados
	Variáveis
	Dica
	char
	int
	float e double
	Declarações de variáveis
	Exemplo
	Dica
	Atribuições de valores às variáveis
	Lendo e imprimindo variáveis com scanf() e printf()
	A função printf()
	Conteúdo interativo
	Linha 1
	Linha 2
	Linha 3
	Linha 4
	Linha 5
	Linha 6
	A função scanf()
	Conteúdo interativo
	Linha 3
	Linha 4
	Linha 5
	Linha 6
	Especificadores de formatos comuns
	Conteúdo interativo
	Linhas 4, 5 e 6
	Linha 7
	Linha 8
	Linha 9
	Linha 10
	Linha 11
	Linha 12
	Linhas 13, 14 e 15
	Comentário
	Especificadores de formatos específicos do printf()
	Conteúdo interativo
	Linha 3
	Linha 4
	Linha 6
	A utilização de constantes
	Por meio da diretiva de pré-compilação #define
	Por meio do modificador de acesso const.
	Conteúdo interativo
	Conteúdo interativo
	Conteúdo interativo
	Entradas e saídas na Linguagem C
	Conteúdo interativo
	Vem que eu te explico!
	Variáveis – explicar o conceito de variáveis.
	Conteúdo interativo
	A utilização de constantes.
	Conteúdo interativo
	Verificando o aprendizado
	2. Operadores e controle de fluxo
	Operadores
	Operadores aritméticos
	Conteúdo interativo
	Conteúdo interativo
	Conteúdo interativo
	Operadores de atribuição aritmética
	Conteúdo interativo
	Operadores de incremento e decremento
	PRÉ (++nome_variavel ou - - nome_variavel)
	PÓS (nome_variavel++ ou nome_variavel- -)
	Conteúdo interativo
	Operador de atribuição múltipla
	Operadores lógicos
	Conteúdo interativo
	Atividade discursiva
	Operadores relacionais
	Exemplo
	Conteúdo interativo
	Linha 7
	Linha 8
	Linha 9
	Comandos de controle de fluxo
	Estruturas de decisão
	Comando if-else
	Conteúdo interativo
	Conteúdo interativo
	Conteúdo interativo
	Uso de comandos if aninhados
	Conteúdo interativo
	Comando switch-case
	Conteúdo interativo
	O operador ternário?
	Conteúdo interativo
	Conteúdo interativo
	Estruturas de repetição
	Comando for
	Conteúdo interativo
	Recomendação
	Conteúdo interativo
	Comando while
	Conteúdo interativo
	Conteúdo interativo
	Comando do-while
	Conteúdo interativo
	Linha 4
	Linhas 12 e 13
	Linhas 14 a 18
	Linha 19
	Atividade discursiva
	Loop infinito
	Desvios incondicionais
	Comando

Mais conteúdos dessa disciplina