Você está na página 1de 124

14/11/22, 09:41 Linguagem C: recursos básicos

Linguagem C: recursos básicos


Prof. Paulo Vidal

Descrição 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.

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

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 1/124
14/11/22, 09:41 Linguagem C: recursos básicos

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

Módulo 1 Módulo 2

Tipos básicos de dados Operadores e controle de


fluxo
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.

Módulo 3

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 2/124
14/11/22, 09:41 Linguagem C: recursos básicos

Estruturas de dados
homogêneas e heterogêneas
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.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 3/124
14/11/22, 09:41 Linguagem C: recursos básicos

1 - Tipos básicos de dados


Ao final deste módulo, você será capaz de identificar os tipos básicos de dados e os tipos de
operadores em um programa.

Variáveis
Para manipular dados dos mais diversos tipos, é necessário poder armazená-los

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 4/124
14/11/22, 09:41 Linguagem C: recursos básicos

na memória e poder referenciá-los quando for preciso. É por isso que foi criado o
conceito de variável.

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.

Tamanho em
Tipo Tamanho em bytes
bytes

char 1 -128 a 127

unsigned char 1 0 a 255

signed char 1 -128 a 127

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 5/124
14/11/22, 09:41 Linguagem C: recursos básicos

Tamanho em
Tipo Tamanho em bytes
bytes

-2.147.483.648 a
int 4
2.147.483.647 

unsigned int 4 0 a 4.294.967.295

-2.147.483.648 a
signed int 4
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

-2.147.483.648 a
long int 4
2.147.483.647 

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 6/124
14/11/22, 09:41 Linguagem C: recursos básicos

Tamanho em
Tipo Tamanho em bytes
bytes

-2.147.483.648 a
signed long int 4
2.147.483.647  

unsigned long int 4 0 a 4.294.967.295

Seis dígitos de
float 4
precisão

Dez dígitos de
double 8
precisão

Dez dígitos de
long double 10
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

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 7/124
14/11/22, 09:41 Linguagem C: recursos básicos

tipos float e double serão apresentados juntos. Isso ocorre porque ambos
possuem uma certa similaridade:

char expand_more

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).

N −1
−1 ∗ 2
(1) valor mínimo =

N −1
2 − 1
(2) valor máximo =

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 8/124
14/11/22, 09:41 Linguagem C: recursos básicos

8−1
−1 ∗ 2 = −128
Assim, para o tipo char, o valor mínimo = e o valor

8−1
2 = 127
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

N
2 − 1
(4) valor máximo =

8
2 − 1 = 255
Então, o valor máximo = .

int expand_more

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).

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 9/124
14/11/22, 09:41 Linguagem C: recursos básicos

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 expand_more

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.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 10/124
14/11/22, 09:41 Linguagem C: recursos básicos

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;

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 11/124
14/11/22, 09:41 Linguagem C: recursos básicos

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 O caractere "_" é contado Op


conter somente letras e como uma letra. nom
dígitos. letr

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.

O 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

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 12/124
14/11/22, 09:41 Linguagem C: recursos básicos

um valor a ela em uma única instrução. Veja os exemplos a seguir:

LINGUAGEM C
content_copy LINGUAGEM C
content_copy

1 int numero; 1 int num = -13;


2 numero = -13; 2 int a1 = 4, i2
3 char c = ‘n’,

Forma 1: Definir a variável e depois atribuir valor. 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:

scanf() printf()

Para leitura de variáveis Para exibição do resultado


pelo teclado (dispositivo de do programa na tela
entrada de dados). (dispositivo de saída de
dados), mais
close especificamente pelo

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 13/124
14/11/22, 09:41 Linguagem C: recursos básicos

prompt de comando do
sistema operacional.

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
< stdio.h >

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.

Exemplo 1
info_outlineTUTORIAL
d content_copyCOPIAR
C Input

1 #include <stdio.h>
2 int main() {
3 float salario = 6500.4567;
4 printf("%s = R$ %.2f", "Sala
5 // Imprime: Salario = R$ 650
6 }

Console

play_arrow Executar
https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 14/124
14/11/22, 09:41 Linguagem C: recursos básicos
play_arrow Executar

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.

code 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().

code 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().

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 15/124
14/11/22, 09:41 Linguagem C: recursos básicos

Linha 3
code
Definição da variável chamada salário (tipo float) e
atribuição inicial com o valor 6500.4567.

code 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.

code Linha 5

As duas barras // significam início de comentário.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 16/124
14/11/22, 09:41 Linguagem C: recursos básicos

code 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" Y
É o especificador de formato que É o nome da variável que armazenará
define o tipo utilizado. 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.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 17/124
14/11/22, 09:41 Linguagem C: recursos básicos

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.

Exemplo 2
info_outlineTUTORIAL
d content_copyCOPIAR
C Input

1 #include <stdio.h>
2 int main() {
3 int nr = 0;
4 printf("Digite um valor inte
5 scanf("%d", &nr);
6 printf("%s = %d", "Numero",
7 }
8 Console
play_arrow Executar

Vamos à explicação do código, focando os itens novos.

code Linha 3

Definição da variável nr (tipo int) para armazenar o valor a


ser lido e sua atribuição inicial com zero.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 18/124
14/11/22, 09:41 Linguagem C: recursos básicos

code Linha 4

O comando printf("Digite um valor inteiro: ") imprime a


mensagem "Digite um valor inteiro: " na tela.

code 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 &.

code 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:

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html#
ifi d % ( d ti ) ( i d t lh 19/124
14/11/22, 09:41 Linguagem C: recursos básicos
• 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

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 20/124
14/11/22, 09:41 Linguagem C: recursos básicos

ESPECIFICAÇÃO TIPO

%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

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 21/124
14/11/22, 09:41 Linguagem C: recursos básicos

ESPECIFICAÇÃO TIPO

%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.

Bytes armazenados
Tipo Faixa de valores
na memória

-2.147.483.648 a
int 4
2.147.483.647 

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 22/124
14/11/22, 09:41 Linguagem C: recursos básicos

Bytes armazenados
Tipo Faixa de valores
na memória

short int  2 -32.768 a 32.767

-2.147.483.648 a
long int  4
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.

Exemplo 3
info_outlineTUTORIAL
d content_copyCOPIAR
C Input

1 #include <stdio.h>
2 int main()
3 {

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 23/124
14/11/22, 09:41 Linguagem C: recursos básicos

4 int nr_int = 0;
5 short int nr_short_int =
6 long int nr_long_int = 0;
7 printf("Digite um valor ti Console
play_arrow Executar
8 scanf("%d",&nr_int);
9 printf("Digite um valor ti
10 scanf("%hi",&nr_short_int
11 printf("Digite um valor ti
12 scanf("%ld",&nr_long_int);
13 printf("Numero = %d \n", n

Novamente, vamos analisar as linhas do código:

code 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.

code Linha 7

Após a definição, é impressa a frase “Digite um valor tipo


int:” na linha 7 usando o comando printf().

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 24/124
14/11/22, 09:41 Linguagem C: recursos básicos

code 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.

code Linha 9

É impressa a frase “Digite um valor tipo short int: ” usando o


comando printf().

code 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

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html#
d â t é t & id d iá l 25/124
14/11/22, 09:41 Linguagem C: recursos básicos
segundo parâmetro é o caractere & seguido da variável
nr_short_ int, informando que variável vai receber o valor.

code Linha 11

É impressa a frase “Digite um valor tipo long int: ” usando o


comando printf().

code 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.

code Linhas 13, 14 e 15

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html#
A li h 13 14 15 i i iá i d fi id 26/124
14/11/22, 09:41 Linguagem C: recursos básicos
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.

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()


https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 27/124
14/11/22, 09:41 Linguagem C: recursos básicos

Além dos especificadores comuns, você pode usar outros especificadores


apenas para o comando printf(), descritos no quadro a seguir.

ESPECIFICADOR SAÍDA

Ponto flutuante com X casas


%.Xf ou %.Xlf
decimais

Número em notação científica


%.Xe ou %.XE
com X casas decimais

Primeiros X caracteres
%.Xs
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().

Exemplo 4
info_outlineTUTORIAL
d content_copyCOPIAR
https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 28/124
14/11/22, 09:41 Linguagem C: recursos básicos

C Input

1 #include <stdio.h>
2 int main () {
3 printf("Raio do circulo = %.
4 printf("Raio do circulo = %.
5 printf("Primeiro nome de Pau
6 printf("20%% de 200 = %d\n",
7 }
Console
play_arrow Executar

Vejamos a explicação do código!

flag Linha 3

O formato %.2f especifica que o valor deve ter duas casas


decimais. Assim, o valor é aproximado para 123.57.

flag Linha 4

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html#
O ifi d % 3E d t ú d ibid 29/124
14/11/22, 09:41 Linguagem C: recursos básicos
O especificador %.3E denota que o número deve ser exibido
no formato de notação científica, seguindo a fórmula

E
N = M x2
, sendo M (Mantissa) e E (Expoente).

+2
1, 236x10
O valor 1.236E+002 é igual a . O número 3 no

formato %.3E 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”.

flag Linha 6

Aparece o especificador 20%%, que resulta na string 20%.

A utilização de constantes
https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 30/124
14/11/22, 09:41 Linguagem C: recursos básicos

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 expand_more

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. expand_more

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.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 31/124
14/11/22, 09:41 Linguagem C: recursos básicos

Testaremos as duas formas, começando pela diretiva #define.

Exemplo 5
info_outlineTUTORIAL
d content_copyCOPIAR
C Input

1 #include <stdio.h>
2 #define PI 3.14159
3 int main () {
4 printf ("Valor de PI: %.2f "
5 }

Console
play_arrow Executar

Agora, vamos executar com a palavra reservada const.

Exemplo 5
info_outlineTUTORIAL
d content_copyCOPIAR
C Input

1 #include <stdio.h>
2 int main () {
3 const double PI = 3.1415; //
4 printf ("Valor de PI %.2f ",
5 }

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 32/124
14/11/22, 09:41 Linguagem C: recursos básicos

Console
play_arrow Executar

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:

#define const

Quando utilizado o #define, Com o uso da palavra const,


o que ocorre é a mudança, não houve a substituição.
durante a compilação, da Na realidade, foi criada uma
palavra PI por 3.1415. Em área de memória durante a
outras palavras, na execução para a variável PI,
compilação, a linha printf close e o conteúdo dessa variável
seria transformada em: vale 3.1415. O que o
“printf ("Valor de PI: %.2f ", modificador const faz é
3.1415);”. Veja que a palavra bloquear qualquer alteração
PI foi substituída pelo valor nessa área de memória.
3.1415.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 33/124
14/11/22, 09:41 Linguagem C: recursos básicos

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.

Constante octal correspondente ao


'\0141'
caractere 'a'.

Nova linha (New line). Posiciona o


'\n'
cursor no início da nova linha.

Retorno do cursor. Posiciona o


'\r'
cursor no início da linha atual.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 34/124
14/11/22, 09:41 Linguagem C: recursos básicos

Caractere Descrição

Tabulação horizontal. Move o cursor


'\t' para a próxima parada de
tabulação. 

Alerta; faz soar a campainha do


'\a'
sistema.

Null, caractere que, em C, encerra


'\0'
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.

Exemplo 5
info_outlineTUTORIAL
d content_copyCOPIAR
C Input

1 #include <stdio.h>
2 int main () {
3 const char ch1 = 'B' , c
4 printf("O valor de ch1 =
5 }

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 35/124
14/11/22, 09:41 Linguagem C: recursos básicos

Console
play_arrow Executar

video_library 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.

Falta pouco para atingir seus objetivos.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 36/124
14/11/22, 09:41 Linguagem C: recursos básicos

Vamos praticar alguns conceitos?

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;

Parabéns! 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.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 37/124
14/11/22, 09:41 Linguagem C: recursos básicos

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

Parabéns! A alternativa C está correta.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 38/124
14/11/22, 09:41 Linguagem C: recursos básicos

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


Ao final deste módulo, você será capaz de aplicar as técnicas básicas de controle de fluxo na
resolução de problemas.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 39/124
14/11/22, 09:41 Linguagem C: recursos básicos

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

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 40/124
14/11/22, 09:41 Linguagem C: recursos básicos

Operador Descrição Exemplo

a = 10 (variável
= Atribuição recebe valor 10); b =
5;

soma = a + b; (soma
+ Adição
= 15)

- Subtração sub = a – b; (sub = 5)

mult = a*b; (mult =
* Multiplicação
50)

/ Divisão div = a/b; (div = 2)

resto = a%b; (resto =
% Resto da divisão
0)

Tabela: Operadores aritméticos.

Elaborada por: Paulo Vidal.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 41/124
14/11/22, 09:41 Linguagem C: recursos básicos

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+
2 */-+
1

6 / 2 + 11 %
11 / % * + 
3 * 4 

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.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 42/124
14/11/22, 09:41 Linguagem C: recursos básicos

Expressão Valor Ordem

1 + (2 - 3) 0 -+

(24 - 3) * 5 105 -*

(4 - 2 * 6) / 4
-1 *-/+
+1

6 / ((2 + 11)
24 +%/*
% 3) * 4

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.

Exemplo 1
info_outlineTUTORIAL
d content_copyCOPIAR
C Input

1 #include <stdio.h>
2 int main(){
3 int nr;
https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 43/124
14/11/22, 09:41 Linguagem C: recursos básicos

4 printf("Digite o valor em me
5 scanf("%d", &nr);
6 printf(" %d m = %d cm \n", n
7 }
Console
play_arrow Executar

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.

Exemplo 2
info_outlineTUTORIAL
d content_copyCOPIAR
C Input

1 #include <stdio.h>
2 int main() {
3 float a, b, c, media;
4 printf("Digite o primeiro n
5 scanf("%f", &a);
6 printf("Digite o segundo nr
7 scanf("%f", &b);
8 printf("Digite o terceiro n Console
play_arrow Executar
https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 44/124
14/11/22, 09:41 Linguagem C: recursos básicos
play_arrow Executar
9 scanf("%f", &c);
10 media = (a + b + c)/3;
11 printf("Media = %.3f\n", me
12 }

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.

Exemplo 3
info_outlineTUTORIAL
d content_copyCOPIAR
C Input

1 #include <stdio.h>
2 #define PI 3.141592
3 int main () {
4 float raio, area;
5 printf ("Digite o raio do ci
6 scanf ("%f", &raio);
7 area = (raio*raio)*PI;
8 printf ("Área do seu circulo Console
play_arrow Executar
9 }

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 45/124
14/11/22, 09:41 Linguagem C: recursos básicos

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:

Linguagem C
content_copy

1 i = i + 1;
2 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:

+= -= *=

At ib i ã
https://stecine.azureedge.net/repositorio/00212ti/02576/index.html#
di ã At ib i ã bt ã At i 46/124
14/11/22, 09:41 Linguagem C: recursos básicos
Atribuição por adição Atribuição por subtração Atri

A tabela a seguir apresenta alguns exemplos e a sua expressão equivalente.

Atribuição
Instrução equivalente
aritmética

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;

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 47/124
14/11/22, 09:41 Linguagem C: recursos básicos

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.

Exemplo 4
info_outlineTUTORIAL
d content_copyCOPIAR
C Input

1 #include <stdio.h>
2 int main(){
3 int i = 1, j = 1, valor = 1
4 int div10 = 20, resto = 20;
5 printf("i = %d\n", i += 1);
6 printf("j = %d\n", j -= val
7 printf("num = %d\n", num *=
8 printf("div10 = %d\n", div1 Console
play_arrow Executar
9 printf("resto = %d\n", rest
10 }

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.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 48/124
14/11/22, 09:41 Linguagem C: recursos básicos

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 PÓS (nome_variavel++


ou - - nome_variavel) ou nome_variavel- -)
O valor será incrementado ou O valor será incrementado ou
decrementado na instrução em que a decrementado na próxima instrução.
variável estiver contida.

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.

Exemplo 5
info_outlineTUTORIAL
d content_copyCOPIAR
C Input

1 #include <stdio.h>
2 int main(){
3 int i = 0, j = 0;
4 printf("%d\n", ++i); //Im
5 printf("%d\n", j++); //Im
6 printf("%d\n", --i); //Im
7 printf("%d\n", j--); //Im
8 } Console
play_arrow Executar

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 49/124
14/11/22, 09:41 Linguagem C: recursos básicos

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).

Linguagem C
content_copy

1 int i=1, j=1, valor=1, num=1, k=1;

Entretanto, podemos substituir por:

Linguagem C
content_copy

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 50/124
14/11/22, 09:41 Linguagem C: recursos básicos

1 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.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 51/124
14/11/22, 09:41 Linguagem C: recursos básicos

A
A ||
A B !A &&
B
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.

Exemplo 6
info_outlineTUTORIAL
d content_copyCOPIAR
C Input

1 #include <stdio.h>
2 int main(){

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 52/124
14/11/22, 09:41 Linguagem C: recursos básicos

3 int A = 0, D = 123;
4 float B = 0.1;
5 char C = 0;
6 printf("!A = %d e !B = %d \n
7 printf("B && C = %d e C || D Console
8 } play_arrow Executar

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.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 53/124
14/11/22, 09:41 Linguagem C: recursos básicos

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).

Digite sua resposta aqui

Exibir soluçãoexpand_more

O resultado é:

a) 1

b) 1

Sugestão de programa para resolver os itens acima:

#include < stdio.h >

   int main(void){

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 54/124
14/11/22, 09:41 Linguagem C: recursos básicos

      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?

X é maior que
> Maior que X>Y
Y?

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 55/124
14/11/22, 09:41 Linguagem C: recursos básicos

Operador Nome Exemplo Significado

Maior ou X é maior ou
>= X >= Y
igual que igual a Y?

X é menor que
< Menor que X < Y
Y?

Menor ou X é menor ou
<= X <= Y
igual que igual a Y?

X é diferente
!= Diferente X != Y
de Y?

Tabela: Operadores relacionais.

Elaborada por: Paulo Vidal.

O resultado de uma comparação (ou operação lógica) será:

0 1

Se a condição testada for close Se a condição testada for


falsa. verdadeira.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 56/124
14/11/22, 09:41 Linguagem C: recursos básicos

A precedência dos operadores lógicos e relacionais é apresentada a seguir.

> >= < <=

== !=

&&

||

Os operadores relacionais podem ser aplicados a expressões simples ou


complexas.

Exemplo

5 > 2, resultado 1.

6 ! 6, resultado 0.

A >= B, resultado depende dos valores de A e B.

(x + y) < (a*b-c), resultado depende dos valores dos operandos.

Chegou a hora de executarmos mais um programa.

Exemplo 7
info_outlineTUTORIAL
d content_copyCOPIAR
C Input

1 #include <stdio.h>
2 int main() {
3 int A = 102;
4 float B = 102.0;
5 char C = 'a';
https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 57/124
14/11/22, 09:41 Linguagem C: recursos básicos

6 int D = 50;
7 printf("A é maior ou igual
8 printf("A é diferente de B? Console
play_arrow Executar
9 printf("C é maior que D? %d
10 }

Vamos entender o que aconteceu?

code Linha 7

A expressão A >= B é verdadeira, pois os valores de A e B


são iguais, portanto, a saída é 1.

code Linha 8

A expressão A != B é falsa, pois os valores de A e B são


iguais, portanto, a saída é 0.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 58/124
14/11/22, 09:41 Linguagem C: recursos básicos

Linha 9
code
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:

call_split loop
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;
https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 59/124
14/11/22, 09:41 Linguagem C: recursos básicos

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 é:

Pseudocódigo
content_copy

1 if (condição)
2 instrução1;
3 [ else
4 instrução2; ]

Sintaxe da instrução if-else.

A instrução if-else funciona da seguinte maneira:

Funcionamento da instrução if-else

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 60/124
14/11/22, 09:41 Linguagem C: recursos básicos

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.

Exemplo 8
info_outlineTUTORIAL
d content_copyCOPIAR
C Input

1 #include<stdio.h>
2 int main()
3 {
4 int num;
5 printf("Digite o valor intei
6 scanf("%d", &num);
7 if ((num % 2) == 0)
8 printf("%d é numero par\ Console
play_arrow Executar
9 }

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.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 61/124
14/11/22, 09:41 Linguagem C: recursos básicos

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:

Exemplo 8 com else


info_outlineTUTORIAL
d content_copyCOPIAR
C Input

1 #include<stdio.h>
2 int main()
3 {
4 int num;
5 printf("Digite o valor inte
6 scanf("%d", &num);
7 if ((num % 2) == 0)
8 printf("%d é numero par Console
play_arrow Executar
9 else
10 printf("%d é numero ímp
11 }

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.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 62/124
14/11/22, 09:41 Linguagem C: recursos básicos

Nosso próximo exemplo é de um programa que verifique se um número lido é


divisível por 2 e por 5.

Exemplo 9
info_outlineTUTORIAL
d content_copyCOPIAR
C Input

1 #include <stdio.h>
2 int main() {
3 int num = 0;
4 printf("Digite um numero in
5 scanf("%d", &num);
6 if ( ((num % 2) == 0) && ((
7 printf("%d é divisível
8 else Console
play_arrow Executar
9 printf(" %d não é divis
10 }

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
https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 63/124
14/11/22, 09:41 Linguagem C: recursos básicos

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.

Linguagem C
content_copy

1 if(condição) {
2 Instrução;
3 }
4 else {
5 if(condição)
6 Instrução;
7 else
8 if (condição)
9 Instrução; (...)
10 else
11 Instrução;
12 }

Sintaxe da instrução if-else.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 64/124
14/11/22, 09:41 Linguagem C: recursos básicos

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:

1. Se o número é divisível por 2 e 5;

2. Se o número é divisível por 2, e não por 5;

3. Se o número não é divisível por 2, mas é por 5;

4. 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.

Exemplo 10
info_outlineTUTORIAL
d content_copyCOPIAR
C Input

1 #include <stdio.h>
2 int main()
3 {
4 int num=0;
5 printf("Digite um numero i
6 scanf("%d", &num);
7 if (((num % 2) == 0) && ((
8 printf("%d é divisivel Console
play_arrow Executar
9 else if (((num % 2) == 0)
10 printf(" %d é divisive
11 else if (((num % 2) != 0)
12 printf(" %d não é divi

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 65/124
14/11/22, 09:41 Linguagem C: recursos básicos

13 else
14 i f(" %d ã é di i

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:

Linguagem C
content_copy

1 switch (expressão)
2 {
3 case constante 1:
4 sequência de instruções 1;
5 [break;]
6 case constante 2:
7 sequência de instruções 2;
8 [break;]
9 (...)
10 case constante n:
11 sequência de instruções n; [
12 break;]
13 [default: instruções; ]
14 }

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 66/124
14/11/22, 09:41 Linguagem C: recursos básicos

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:

switch if

Compara apenas Compara qualquer


igualdades. close expressão lógica ou
relacional.

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.

Exemplo 11
info_outlineTUTORIAL
d content_copyCOPIAR
https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 67/124
14/11/22, 09:41 Linguagem C: recursos básicos

C Input

1 int main()
2 {
3 float num1, num2;
4 int opcao = 0;
5
6 printf("Entre com o primei
7 scanf("%f", &num1);
8 printf("Entre com o segund Console
play_arrow Executar
9 scanf("%f", &num2);
10 printf("Digite: \n");
11 printf("1 - Calcular a som
12 printf("2- Calcular a mult
13 printf("Opcao escolhida: "
14 scanf("%d", &opcao);

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:

Pseudocódigo
content_copy

1 condição ? expressão1 : expressão2

Sintaxe do operador ternário.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 68/124
14/11/22, 09:41 Linguagem C: recursos básicos

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?

Exemplo 12
info_outlineTUTORIAL
d content_copyCOPIAR
C Input

1 #include <stdio.h>
2 int main ()
3 {
4 int numero;
5 printf("Digite um numero: \n
6 scanf("%d", &numero);
7 numero >= 0 ? numero++ : num
8 printf("O novo valor de nume Console
play_arrow Executar
9 }

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--).

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 69/124
14/11/22, 09:41 Linguagem C: recursos básicos

Poderíamos fazer o mesmo teste empregando o if-else, como no código a


seguir:

Exemplo 13
info_outlineTUTORIAL
d content_copyCOPIAR
C Input

1 #include <stdio.h>
2 int main ()
3 {
4 int numero;
5 printf("Digite um numero: \
6 scanf("%d", &numero);
7 if (numero >= 0)
8 numero++; Console
play_arrow Executar
9 else
10 numero--;
11 printf("O novo valor de
12 }

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.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 70/124
14/11/22, 09:41 Linguagem C: recursos básicos

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 é:

Pseudocódigo
content_copy

1 for (inicialização; condição; incremento)


2 comando(s);
3

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.

Exemplo 14
info_outlineTUTORIAL
d content_copyCOPIAR
C Input

1 #include <stdio.h>

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 71/124
14/11/22, 09:41 Linguagem C: recursos básicos

2 main()
3 {
4 int n;
5 for ( n=1; n <= 5; n++)
6 printf("N = %d \n", n);
7 } Console
play_arrow Executar

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.

Exemplo 15
info_outlineTUTORIAL
d content_copyCOPIAR
C Input

1 #include <stdio.h>
2 int main()
3 {
4 int n;
5 for (n=1; n<=20; n++)
6 if (! (n%2) )

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 72/124
14/11/22, 09:41 Linguagem C: recursos básicos

7 printf("
Console
8 } play_arrow Executar

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:

Pseudocódigo
content_copy

1 while (condição)
2 {
3 instrução1;
4 instrução2;
5 .........
6 instruçãoN;
7 }

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 73/124
14/11/22, 09:41 Linguagem C: recursos básicos

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.

Exemplo 16
info_outlineTUTORIAL
d content_copyCOPIAR
C Input

1 #include<stdio.h>
2 int main() {
3 int n = 0;
4 while (n <= 5) {
5 printf("n = %d\n", n
6 n++;
7 }

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 74/124
14/11/22, 09:41 Linguagem C: recursos básicos

8 } Console
play_arrow Executar

Os dois comandos dentro do while formam um bloco, iniciado e finalizado por


{...}. Estes comandos serão executados enquanto a condição (n <=5) for
verdadeira.

Agora, vamos executar um programa que soma dois números inteiros lidos pelo
teclado. Após imprimir a soma, existe uma opção de permanecer ou sair do
programa usando o comando while. Lembre-se de colocar no campo de entrada
os valores que devem ser carregados nas variáveis.

Os valores a serem inseridos devem estar na mesma linha, separados por


espaço. A última sequência de valores deve finalizar com o valor 2, que
corresponde a situação de não desejar continuar.

Exemplo 17
info_outlineTUTORIAL
d content_copyCOPIAR
C Input

1 #include<stdio.h>
2 int main() {
3 int n1, n2, soma, resposta
4 resposta = 1;
5 while(resposta == 1) {
6 printf("Digite val
7 scanf("%d", &n1);

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 75/124
14/11/22, 09:41 Linguagem C: recursos básicos

8 printf("Digite val Console


9 scanf("%d", &n2);
play_arrow Executar
10 soma = n1 + n2;
11 printf("Soma:%
12 printf("Deseja
13 scanf("%d", &resposta)
14 } /*fim while*/

Comando do-while

A instrução ou o laço do-while difere dos laços anteriores porque o teste da


condição é realizado no fim do bloco de instruções do laço e não antes, como
acontece com os laços while e for. O laço termina quando a condição se torna
falsa. A sintaxe do comando é:

Pseudocódigo
content_copy

1 do
2 {
3 instrução; // ou um conjunto de instruções
4 } while(condição);

Sintaxe do do-while.

Agora, vamos alterar o programa anterior para realizar a soma de dois números
inteiros, lidos pelo teclado, utilizando do-while. Após imprimir a soma, criar uma
opção de permanecer ou sair do programa.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 76/124
14/11/22, 09:41 Linguagem C: recursos básicos

Os valores a serem inseridos devem estar na mesma linha, separados por


espaço. A última sequência de valores deve finalizar com o valor 2, que
corresponde a situação de não desejar continuar.

Exemplo 18
info_outlineTUTORIAL
d content_copyCOPIAR
C Input

1 #include<stdio.h>
2 int main() {
3 int n1, n2, soma, resposta
4 do
5 {
6 printf("Digite valor d
7 scanf("%d", &n1);
8 printf("Digite valor d Console
play_arrow Executar
9 scanf("%d", &n2);
10 soma = n1 + n2;
11 printf("Soma: %d\n", s
12 printf("Deseja continu
13 scanf("%d", &resposta)
14 while ((resposta != 1)

Vamos analisar algumas linhas do programa para entender melhor como a


instrução funciona:

flag Linha 4

O comando do-while é iniciado.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 77/124
14/11/22, 09:41 Linguagem C: recursos básicos

flag Linhas 12 e 13

Permitem ao usuário escolher uma das duas opções.

flag Linhas 14 a 18

Como o usuário pode digitar qualquer caractere além do 1


ou 2, faz-se necessário avisar com a mensagem de alerta
"Opção inválida!!!”. Assim, o usuário digita novamente a
opção desejada. Esse cenário está codificado no loop while.
A condição ((resposta != 1) && (resposta != 2)) tem o
operador diferente != e o operador && (e). O valor digitado
na variável resposta é comparado. Se for diferente de 1 e de
2, a mensagem de alerta é emitida. Enquanto não for
digitado o 1 ou o 2, permanece dentro do loop while.

flag Linha 19

Termina o comando do-while. Foi criada a condição


(resposta == 1), isso significa que, enquanto o usuário

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html#
di it ã 1 ã d ti 78/124
14/11/22, 09:41 Linguagem C: recursos básicos
digitar a opção 1, a execução do programa continua.

Atividade discursiva
Vamos praticar? Escreva um programa que conte o número de dígitos de um
número inteiro positivo. Você pode utilizar o emulador do exemplo 17 para testar
seu código. Para isso, basta apagar o exemplo e inserir o novo código.

Digite sua resposta aqui

Exibir soluçãoexpand_more

#include

int main(){

   int n, num;

   int contador = 0;

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 79/124
14/11/22, 09:41 Linguagem C: recursos básicos

   printf("Digite um número inteiro positivo: ");

   scanf("%d", &num);

   n = num;

   do {

      n = n / 10;

      contador ++;

   } while (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:

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html#
Linguagem C
content_copy Linguagem C
content_copy 80/124
14/11/22, 09:41 Linguagem C: recursos básicos
Linguagem C
content_copy Linguagem C
content_copy
1 #include <stdio 1 #include <stdio
2 int main(){ 2 int main(){
3 for( ; ; 3 while(1) /
4 printf 4 printf
5 } 5 }

Exemplo com o for. 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 expand_more

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 81/124
14/11/22, 09:41 Linguagem C: recursos básicos

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<=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 expand_more

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.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 82/124
14/11/22, 09:41 Linguagem C: recursos básicos

Comando continue expand_more

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:

video_library 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.

Falta pouco para atingir seus objetivos.


https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 83/124
14/11/22, 09:41 Linguagem C: recursos básicos

Vamos praticar alguns conceitos?

Questão 1

Considerando o funcionamento das estruturas de repetição, qual das opções


abaixo é falsa?

A condição dentro de um laço while e do...while tem que ser


A
colocada sempre dentro de parênteses.

Os laços while e for executam sempre, pelo menos uma vez, o


B
corpo do laço.

O laço do...while executa sempre, pelo menos uma vez, o


C
corpo do laço.

Os laços do.. while e while necessitam de uma instrução de


D
parada para serem interrompidos.

Em todos os laços, a condição é sempre testada pelo menos


E
uma vez.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 84/124
14/11/22, 09:41 Linguagem C: recursos básicos

Parabéns! 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 do comando é 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);

 }

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 85/124
14/11/22, 09:41 Linguagem C: recursos básicos

A 12345

B 531

C 4210

D 54321

E 12354

Parabéns! 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.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 86/124
14/11/22, 09:41 Linguagem C: recursos básicos

3 - Estruturas de dados homogêneas e heterogêneas


Ao final deste módulo, você será capaz de aplicar as 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.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 87/124
14/11/22, 09:41 Linguagem C: recursos básicos

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 é:

Linguagem C
content_copy

1 tipo nome [tamanho];

Sintaxe vetores unidimensionais.

Onde:

tipo nome tamanho


É um tipo básico de É o nome pelo qual o É o número de
dados. vetor será referenciado. elementos que o vetor

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 88/124
14/11/22, 09:41 Linguagem C: recursos básicos

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:

Linguagem C
content_copy

1 int numeros [1000]; /* vetor de 1000 inteiros */


2 float notas [65]; /* vetor de 65 números reais */
3 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.
https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 89/124
14/11/22, 09:41 Linguagem C: recursos básicos

O que acontece na memória quando criamos um


vetor?
Observe o exemplo:

Linguagem C
content_copy

1 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.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 90/124
14/11/22, 09:41 Linguagem C: recursos básicos

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;

vetor[5] = vetor[0]*3;

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 91/124
14/11/22, 09:41 Linguagem C: recursos básicos

vetor[2] = vetor[0] + vetor[5];

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:

Linguagem C
content_copy

1 char vogal[5] = {‘a’, ‘e’, ‘i’, ‘o’, ‘u’};

Atribuição de valores em vetor.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 92/124
14/11/22, 09:41 Linguagem C: recursos básicos

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.

Linguagem C
content_copy

1 for (i = 0; i < n; i++)


2 x[i] = 0;

Atribuição de valores com o for.

Na atribuição usando chaves, se forem colocados k < n valores, então somente


os k primeiros elementos receberão algum valor.

Se o tipo for int, float ou double, os restantes receberão 0. Por exemplo, a


instrução int x[5] = {1,2}; resultará em:

Vetor da instrução int x[5] = {1,2};.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 93/124
14/11/22, 09:41 Linguagem C: recursos básicos

Se o tipo for char, os restantes receberão valores vazios (corresponde a 0).

O programa a seguir lê um número inteiro e gera um vetor de cinco valores


consecutivos a partir do número lido.

Exemplo 1
info_outlineTUTORIAL
d content_copyCOPIAR
C Input

1 #include <stdio.h>
2 #define DIM 5
3
4 int main (void) {
5 int vetor[DIM];
6 unsigned int i, num;
7 printf ("Este programa
8 printf ("Digite o nume Console
play_arrow Executar
9 scanf("%d", &num );
10 /* Geração do conjunto
11 for (i = 0 ; i < DIM ;
12 vetor[i] = num ++;
13 /* Impressão do conjun
14 for (i = 0; i < DIM ;

Vamos analisar as linhas:

code Linha 2

Define a constante DIM (dimensão do vetor) com valor 5.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 94/124
14/11/22, 09:41 Linguagem C: recursos básicos

code Linha 5

Define a variável vetor com tamanho da constante DIM.

code Linha 9

Faz a leitura da variável num.

code Linha 12

Atribui ao vetor os valores consecutivos de num.

code Linha 14

O laço for executa a repetição de printf().

Observe que o índice i do vetor[i] inicia com 0 (zero) até o


valor de DIM-1.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 95/124
14/11/22, 09:41 Linguagem C: recursos básicos

code Linha 15

Imprime os valores do vetor na tela.

Strings
String é um conjunto de caracteres terminado por um caractere nulo e
armazenado em um vetor. O caractere nulo é representado como ’\0’ (código
ASCII = 0).

String Caracteres

“Paulo”, “torta” close ‘A’, ‘b’, ‘1’

Para armazenar uma string, é necessário declarar um vetor de caracteres,


reservando um espaço para o caractere delimitador. A sintaxe de declaração e
atribuição inicial é igual às regras de vetor. Existem três formas de inicializar o
vetor com uma string:

Sem chaves Com chaves Sem tamanho


https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 96/124
14/11/22, 09:41 Linguagem C: recursos básicos

char vetor[6] = “aluno”; char vetor[6] = {‘a’, ‘l’, ‘u’, char vetor[ ] = “aluno”;
‘n’, ‘o’};

Atenção

A terceira forma não precisa colocar o tamanho do vetor, pois o compilador vai
armazenar com o tamanho da palavra mais o caractere /0 na última posição.
A
string está armazenada como: vetor[0] = ‘a’, vetor[1] = ‘l’ , vetor[2] = ‘u’ , vetor[3] =
‘n’, vetor[4] = ‘o’, vetor[5] = ‘\0’.

Vamos praticar? O programa a seguir imprime o tamanho do vetor e o conteúdo


de cada posição do vetor.

Exemplo 2
info_outlineTUTORIAL
d content_copyCOPIAR
C Input

1 #include <stdio.h>
2 int main() {
3 //O tamanho do vetor depend
4 char frase[ ] = "Estou gost
5
6 //número de caracteres da s
7 printf("Tamanho de frase =
8 Console
play_arrow Executar
9 for (int i = 0; i < sizeof(
10 printf("frase[%d]='%c'\
11 //Note que o último car
12 }

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 97/124
14/11/22, 09:41 Linguagem C: recursos básicos

O programa a seguir imprime a frase “Bom dia” com as funções printf() e puts().

Exemplo 3
info_outlineTUTORIAL
d content_copyCOPIAR
C Input

1 #include <stdio.h>
2 int main()
3 {
4 char texto[15] = "Bom dia";
5 printf("%s\n", texto);
6 puts(texto);
7 puts("Bom dia");
8 } Console
play_arrow Executar

Apesar de o vetor ter a dimensão muito maior do que o número de caracteres


úteis, a função printf() escreve somente os caracteres não nulos. A função puts
pula linha automaticamente.

Matrizes

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 98/124
14/11/22, 09:41 Linguagem C: recursos básicos

Até o momento, vimos como podíamos trabalhar com vetores com uma única
dimensão. Vamos agora aprender como usar vetores com mais de uma
dimensão.

A declaração de vetores unidimensionais não é mais do que um caso particular


da declaração de vetores com qualquer número de dimensões. A declaração de
um vetor com n dimensões é realizada por meio da seguinte sintaxe:

Linguagem C
content_copy

1 tipo nome [dim1][dim2][dim3]...[dimN],

Sintaxe de vetor com n dimensões.

Onde dimN é o tamanho da dimensão N.

Deve-se tomar cuidado com armazenamento de matrizes multidimensionais


porque a memória necessária para guardar esses dados é igual a:

Fórmula 1

sizeof(tipo)*dim1*dim2*dim3*...*dimN

Por exemplo, a declaração int matriz[3][5]; define uma matriz de 3 linhas por 5
colunas. Usando a Fórmula 1, o espaço ocupado na memória pela matriz é de
sizeof(int) * 3 * 5. Considerando que o tipo inteiro ocupe 4 bytes: (4 bytes) * 3 *
5 = 60 bytes. A matriz é armazenada na memória linha a linha.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 99/124
14/11/22, 09:41 Linguagem C: recursos básicos

A tabela a seguir ilustra o armazenamento da matriz declarada, assumindo que


cada número inteiro ocupa 4 bytes e que a matriz está armazenada a partir do
endereço 1000.

Endereço de
Valor armazenado
memória

1000 m[0][0]

1004 m[0][1]

1008 m[0][2]

1012 m[1][0]

1016 m[1][1]

1020 m[1][2]

1024 m[2][0]

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 100/124
14/11/22, 09:41 Linguagem C: recursos básicos

Endereço de
Valor armazenado
memória

1028 m[2][1]

1032 m[2][2]

Tabela: Matriz m.

Elaborada por: Paulo Vidal.

Cada elemento é acessado por meio dos índices correspondentes para cada
dimensão. Sintaxe de acesso a um elemento:

Linguagem C
content_copy

1 nome [índice1][índice2]...[índiceN]

Sintaxe de índices.

Para facilitar o entendimento, veja o exemplo:

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 101/124
14/11/22, 09:41 Linguagem C: recursos básicos

Exemplo de índice.

Então, no exemplo exposto, temos o elemento na linha 0 e coluna 1 da matriz m.

Atribuição inicial de valores

A atribuição inicial de valores pode ser feita entre chaves ou com o laço for:

C
content_copy C
content_copy

1 int m[2][3] = { 1 for (i = 0; i <


2 int m[2][3] = 2 for (j = 0
3 int m[2][2][4 3 m[i][j

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 102/124
14/11/22, 09:41 Linguagem C: recursos básicos

Exemplos usando chaves. Exemplos usando comando for


para inicializar o valor 0 em todos
os elementos de m[2][3].

Observe novamente o exemplo com for e note que o segundo for e o comando
de atribuição “m[i][j]=0;” estão dentro do for externo.

Leitura e escrita de uma matriz


Vamos iniciar com um exemplo. Nele, temos um programa que faz a leitura e
escrita de uma matriz.

Os elementos da matriz devem ser digitados na mesma linha, separados por


espaço.

Exemplo 4
info_outlineTUTORIAL
d content_copyCOPIAR
C Input

1 #include <stdio.h>
2 #define NRLINHAS 3
3 #define NRCOLUNAS 5
4
5 int main ( ) {
6 int M[NRLINHAS][NRCOLUNAS]

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 103/124
14/11/22, 09:41 Linguagem C: recursos básicos

7 printf("Insira os elemento Console


play_arrow Executar
8 for (int i=0; i < NRLINHAS
9 for (int j=0; j < NRCO
10 printf("m%d%d: \n"
11 scanf("%d", &M[i][
12 }
13

Agora, vamos analisar a lógica do programa.

code Linhas 2 e 3

Definem as constantes: NRLINHAS(número de linhas) e


NRCOLUNAS(número de colunas) da matriz.

code Linha 6

Define a variável matriz de inteiros com três linhas e cinco


colunas.

code Linhas 9 a 13

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html#
F i ã d l t d ti l ái 104/124
14/11/22, 09:41 Linguagem C: recursos básicos
Fazem a inserção dos elementos da matriz pelo usuário por
meio de 15 iterações, sendo i o índice da linha e j o índice da
coluna.

Existem 15 iterações quando o programa é executado e estão descritas abaixo:

Iteração 1: i = 0 e j = 0 (lê M[0][0])

Iteração 2: i = 0 e j = 1 (lê M[0][1])

Iteração 3: i = 0 e j = 2 (lê M[0][2])

Iteração 4: i = 0 e j = 3 (lê M[0][3])

Iteração 5: i = 0 e j = 4 (lê M[0][4])

Iteração 6: i = 1 e j = 0 (lê M[1][0])

Iteração 7: i = 1 e j = 1 (lê M[1][1])

Iteração 8: i = 1 e j = 2 (lê M[1][2])

Iteração 9: i = 1 e j = 3 (lê M[1][3])

Iteração 10: i = 1 e j = 4 (lê M[1][4])

Iteração 11: i = 2 e j = 0 (lê M[2][0])

Iteração 12: i = 2 e j = 1 (lê M[2][1])

Iteração 13: i = 2 e j = 2 (lê M[2][2])

Iteração 14: i = 2 e j = 3 (lê M[2][3])

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 105/124
14/11/22, 09:41 Linguagem C: recursos básicos

Iteração 15: i = 2 e j = 4 (lê M[2][4])

As linhas 15 a 18 fazem a impressão dos elementos da matriz pelo usuário por


meio de 15 iterações, sendo i o índice da linha e j o índice da coluna.

video_library Utilizando vetores e matrizes


No vídeo a seguir, apresentaremos exemplos do emprego de vetores e matrizes.

Estruturas de dados heterogêneas


Até aqui estudamos sobre as variáveis simples, isto é, variáveis dos tipos char,
int, float ou double e como armazenar conjuntos de valores relacionados em
vetores que tinham a capacidade de conter vários elementos do mesmo tipo.
Agora, veremos como armazenar elementos que contêm tipos diferentes de
dados. As estruturas (structs) em C permitem colocar, em uma única entidade,
elementos de tipos diferentes.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 106/124
14/11/22, 09:41 Linguagem C: recursos básicos

Uma estrutura pode conter elementos com qualquer tipo de


dados válidos em C. Trata-se de um conjunto de uma ou mais
variáveis, também chamadas de campos ou membros,
agrupadas sob um único nome, de modo a facilitar a sua
referência.

Vamos supor que pretendamos representar em uma aplicação os principais


dados dos usuários. Uma possível solução seria a declaração de variáveis
individuais para cada uma das características a representar, como os exemplos
a seguir:

Linguagem C
content_copy

1 int idade;
2 char sexo, estado_civil;
3 char Nome[60];
4 int dia_nascimento;
5 char mes_nascimento[12];
6 int ano_nascimento;

Declaração de variáveis individuais.

No entanto, essa solução não é a mais aconselhável, pois nada nos diz que as
variáveis estão relacionadas entre si. Para resolver isso, podemos criar uma

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 107/124
14/11/22, 09:41 Linguagem C: recursos básicos

estrutura de dados para agregar esses dados. Ela é chamada de registro (ou
struct, em inglês). Vejamos sua sintaxe:

Linguagem C
content_copy

1 struct nome_estrutura {
2 tipo1 campo1, campo2;
3 ...
4 tipoN campo;
5 } ;

Sintaxe do struct.

Podemos, por exemplo, definir a estrutura de um aluno chamada Aluno


utilizando os mesmos valores apresentados anteriormente, mas, agora,
agrupados em uma struct.

Linguagem C
content_copy

1 struct Aluno {
2 char Nome[60];
3 int idade;
4 char sexo, estado_civil;
5 int dia_nascimento;
6 char mes_nascimento[12];
7 int ano_nascimento;
8 } ;
9

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 108/124
14/11/22, 09:41 Linguagem C: recursos básicos

Sintaxe do struct.

A definição da estrutura Aluno (struct Aluno) indica simplesmente que, a partir


daquele momento, o compilador passa a conhecer outro tipo, chamado struct
Aluno, que é composto por um vetor com 60 caracteres, variáveis inteiras e char.

Atenção
Aluno não é uma variável, mas sim o nome pelo qual é conhecida essa nova
definição de tipo de dados.

Declaração de variáveis do tipo estrutura

Para declarar uma variável do tipo struct Aluno, apresentada anteriormente,


basta indicar qual o tipo (struct Aluno) seguido do nome das variáveis. Veja um
exemplo:

Linguagem C
content_copy

1 struct Aluno aluno1, aluno2, Alunos[100];

Declaração de variável do tipo struct.

Em que:

aluno1 e aluno2 Alunos


https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 109/124
14/11/22, 09:41 Linguagem C: recursos básicos

São variáveis do tipo struct Aluno. É um vetor de 100 elementos, sendo


cada um deles uma estrutura do tipo
struct Aluno.

Também é possível declarar as variáveis junto da estrutura, como apresentado


na sintaxe abaixo:

Pseudocódigo
content_copy

1 struct nome_estrutura {
2 tipo1 campo1, campo2;
3 ...
4 tipoN campo;
5 } v1,v2, ...,vn ;
6

Declaração de variável com struct.

Em seguida, temos um exemplo de definição de uma estrutura e declaração de


variáveis.

Linguagem C
content_copy

1 struct aluno {
2 char Nome[60];
3 int idade;
https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 110/124
14/11/22, 09:41 Linguagem C: recursos básicos

4 char sexo, estado_civil;


5 int dia_nascimento;
6 char mes_nascimento[12];
7 int ano_nascimento;
8 } aluno1, aluno2;

Declaração de variável com struct.

Normalmente, os elementos da estrutura têm alguma relação semântica. Por


exemplo, uma estrutura com os elementos associados a um aluno (nome, curso
etc.).

Definição de estrutura com typedef


O typedef é um recurso que permite definir um novo nome para um tipo de dado
já existente. A sintaxe é:

Pseudocódigo
content_copy

1 typedef tipo novo_nome;

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 111/124
14/11/22, 09:41 Linguagem C: recursos básicos

Sintaxe de typedef.

Vamos a um exemplo! No código a seguir, definimos aluno como:

Linguagem C
content_copy

1 typedef struct t_aluno {


2 char nome [40];
3 char curso [40];
4 } aluno;

Exemplo de uso do typedef.

Agora é possível declarar a struct Aluno apenas referenciando o tipo aluno.

Linguagem C
content_copy

1 //Declaração de duas variáveis do tipo aluno


2 aluno joao, maria;
3

Declaração de duas variáveis.

Inicialização dos campos de uma estrutura

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 112/124
14/11/22, 09:41 Linguagem C: recursos básicos

Uma estrutura pode ser inicializada quando é declarada por meio da seguinte
sintaxe:

Sem typedef Com typedef


struct nome_estrutura var = {valor1, nome_estrutura var = {valor1, valor2,...,
valor2,..., valorN}; valorN};

No código a seguir, os vetores nome e curso são inicializados na declaração.

Linguagem C
content_copy

1 #include<stdio.h>
2 typedef struct t_aluno {
3 char nome[40];
4 char curso[40];
5 } aluno;
6
7 int main() {
8 aluno joao = {“Joao da Silva”, “Curso de Programação”}
9 }

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 113/124
14/11/22, 09:41 Linguagem C: recursos básicos

Acessando elementos da estrutura

O acesso a um elemento de uma estrutura segue esta sintaxe:

Pseudocódigo
content_copy

1 nome_variavel_estrutura.nome_elemento

Sintaxe para acesso a um elemento de estrutura.

Vamos ver mais um exemplo, em que o programa nos permite imprimir os


elementos da struct.

Exemplo 5
info_outlineTUTORIAL
d content_copyCOPIAR
C Input

1 #include<stdio.h>
2 typedef struct t_aluno {
3 char nome[40];
4 char curso[22];
5 } aluno;
6 int main() {
7 aluno joao = {"Joao da Silva
8 printf("%s - %s", joao.nome, Console
play_arrow Executar
9 }

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 114/124
14/11/22, 09:41 Linguagem C: recursos básicos

Vamos analisar as linhas:

flag Linhas 2 a 5

Define a estrutura aluno.

flag Linha 7

Define a variável joao, do tipo aluno, e inicializa os dois


campos.

flag Linha 8

Imprime os dois campos da estrutura.

Agora é com você! Construa um programa que:


https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 115/124
14/11/22, 09:41 Linguagem C: recursos básicos

1. Por meio da instrução typedef, defina um tipo aluno a partir de uma estrutura
contendo os elementos nome (até 40 caracteres) e nota.

2. Na função main, receba os dados de 5 alunos, armazene-os em um vetor e


imprima-os na tela:

a. Os dados dos alunos devem estar no formato: Fulano tirou 7.3

b. A média da turma deve estar no formato: Média da turma = 6.2

c. Os valores reais são impressos com uma casa decimal.

Obs.: Você pode utilizar o emulador do último exemplo para testar seu código.
Para isso, basta apagar o exemplo e inserir o novo código.

Digite sua resposta aqui

Exibir soluçãoexpand_more

#include

#define TAMANHO 5

typedef struct t_aluno {

      char nome[41];

      float nota;

} aluno;

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 116/124
14/11/22, 09:41 Linguagem C: recursos básicos

int main()

      aluno alunos[TAMANHO];

      float soma = 0;

      for(int i = 0; i < TAMANHO; i++)

      {

         printf("Digite o nome do aluno %d: \n", i + 1);

         scanf(" %[^\n]", alunos[i].nome);

         printf("Digite a nota do aluno %d: \n", i + 1);

         scanf("%f", &alunos[i].nota);

      }

for(int i = 0; i < TAMANHO; i++)

         printf("%s tirou %.1f\n", alunos[i].nome,


alunos[i].nota);

         soma += alunos[i].nota;

   printf("Media da turma = %.1f", soma / TAMANHO);

video_library Utilizando structs


No vídeo a seguir, apresentaremos exemplos de emprego das structs em C, o
uso do typedf e combinar os vetores com structs.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 117/124
14/11/22, 09:41 Linguagem C: recursos básicos

Falta pouco para atingir seus objetivos.

Vamos praticar alguns conceitos?

Questão 1

Interprete o código abaixo e marque a opção que corresponde a que o


programa realiza.

#include <stdio.h>

#include <stdlib.h>

int main(){

      int i;

      char palavras[3][30];

      for(i=0; i<3; i++) {

         printf("Informe palavra %d: ",i+1);

         scanf("%s", &palavras[i]);

      }

      for(i=2; i>=0; i--)

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 118/124
14/11/22, 09:41 Linguagem C: recursos básicos

         printf("%s
",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.

O programa lê três palavras e imprime em ordem inversa às


D
palavras.

E O programa lê e imprime a concatenação de três palavras.

Parabéns! 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

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 119/124
14/11/22, 09:41 Linguagem C: recursos básicos

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

as estruturas em C são usadas para armazenar tipos de


A
dados homogêneos, empregando o tipo matriz.

as estruturas em C são empregadas quando precisamos


B armazenar dados que não têm relação semântica, mas que
são todos do mesmo tipo primitivo de dados.

uma estrutura é um conjunto de uma ou mais variáveis, que


C podem ser de tipos diferentes, agrupadas sob um único nome,
de forma a facilitar a sua referência.

a definição de uma estrutura (struct) é baseada no tipo de


D dado chamado vetor (array) e permite armazenar dados
heterogêneos.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 120/124
14/11/22, 09:41 Linguagem C: recursos básicos

quando precisamos definir a diagonal de uma matriz


E quadrada, usamos o tipo de dados struct para armazenar a
matriz.

Parabéns! 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.

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
https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 121/124
14/11/22, 09:41 Linguagem C: recursos básicos

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.

headset Podcast
Ouça o podcast. Nele, falamos como os recursos básicos da linguagem C
podem ser utilizados para a resolução de problemas.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 122/124
14/11/22, 09:41 Linguagem C: recursos básicos

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.

Explore +
Para saber mais sobre as estruturas empregadas neste estudo, pesquise sobre
Linguagem C Programação Descomplicada.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 123/124
14/11/22, 09:41 Linguagem C: recursos básicos

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 124/124

Você também pode gostar