Você está na página 1de 65

17/10/2022 17:51 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 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

Tipos básicos de dados


Identificar os tipos básicos de dados e os tipos de operadores em um programa.

Módulo 2

Operadores e controle de fluxo


Aplicar as técnicas básicas de controle de fluxo na resolução de problemas.

Módulo 3

Estruturas de dados homogêneas e heterogêneas


Aplicar as estruturas de dados homogêneas e heterogêneas.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 1/65
17/10/2022 17:51 Linguagem C: recursos básicos

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


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

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 2/65
17/10/2022 17:51 Linguagem C: recursos básicos

Tamanho em
Tipo Tamanho em bytes
bytes

char 1 -128 a 127

unsigned char 1 0 a 255

signed char 1 -128 a 127

-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 

-2.147.483.648 a
signed long int 4
2.147.483.647  

unsigned long int 4 0 a 4.294.967.295

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.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 3/65
17/10/2022 17:51 Linguagem C: recursos básicos

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

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

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

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.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 4/65
17/10/2022 17:51 Linguagem C: recursos básicos

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.

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;

extension

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 O caractere "_" é contado O primeiro caractere do Letras maiúsculas e
conter somente letras e como uma letra. nome deve sempre ser uma minúsculas são
dígitos. letra. consideradas caracteres
diferentes.

wb_incandescent

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 5/65
17/10/2022 17:51 Linguagem C: recursos básicos

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 um valor a ela em uma única instrução. Veja os exemplos a seguir:

LINGUAGEM C content_copy

1 int numero;
2 numero = -13;

Forma 1: Definir a variável e depois atribuir valor.

LINGUAGEM C content_copy

1 int num = -13;


2 int a1 = 4, i2 = 0;
3 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:

scanf()

Para leitura de variáveis pelo teclado (dispositivo de entrada de dados).


close

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.

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 >

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 6/65
17/10/2022 17:51 Linguagem C: recursos básicos

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

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

null

null

play_arrow

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

C d i tf() tê â t ibid it ti i id l d
https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 7/65
17/10/2022 17:51 Linguagem C: recursos básicos
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.

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.

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

Exemplo 2
info_outlineTUTORIAL
d content_copyCOPIAR
C

1 #include <stdio.h>
2 int main() {
3 int nr = 0;

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 8/65
17/10/2022 17:51 Linguagem C: recursos básicos

4 printf("Digite um valor inteiro: \n");


5 scanf("%d", &nr);

null

null

play_arrow

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

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 9/65
17/10/2022 17:51 Linguagem C: recursos básicos

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
long int
%li

%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

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 10/65
17/10/2022 17:51 Linguagem C: recursos básicos

usados no nosso próximo programa.

Bytes armazenados na
Tipo Faixa de valores
memória

-2.147.483.648 a
int 4
2.147.483.647 

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

1 #include <stdio.h>
2 int main()
3 {
4 int nr_int = 0;
5 short int nr_short_int = 0;
6 long int nr_long_int = 0;

null

null

play_arrow

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.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 11/65
17/10/2022 17:51 Linguagem C: recursos básicos

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.

N li h 15 i t d i t \ id O d i tf() i i f N l d iá l l
https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 12/65
17/10/2022 17:51 Linguagem C: recursos básicos
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()


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
C

1 #include <stdio.h>
2 int main () {
3 printf("Raio do circulo = %.2f\n", 123.56713);
4 printf("Raio do circulo = %.3E\n", 123.56713);
5 printf("Primeiro nome de Paulo Cesar: %.5s\n","Paulo Cesar");
6 i tf("20%% d 200 %d\ " 40)

null

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 13/65
17/10/2022 17:51 Linguagem C: recursos básicos

null

play_arrow

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

E
N = M x2
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).

+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”.

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

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 14/65
17/10/2022 17:51 Linguagem C: recursos básicos

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.

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

Exemplo 5
info_outlineTUTORIAL
d content_copyCOPIAR
C

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

null

null

play_arrow

Agora, vamos executar com a palavra reservada const.

Exemplo 5 info_outlineTUTORIAL
d content_copyCOPIAR
C

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

null

null

play_arrow

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

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 15/65
17/10/2022 17:51 Linguagem C: recursos básicos

possível verificar nenhuma diferença. A mudança ocorre durante o processo de compilação e execução. Entenda:

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

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

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 cursor no


'\n'
início da nova linha.

Retorno do cursor. Posiciona o cursor no


'\r'
início da linha atual.

Tabulação horizontal. Move o cursor


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

'\a' Alerta; faz soar a campainha do sistema.

Null, caractere que, em C, encerra um


'\0'
conjunto de caracteres.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 16/65
17/10/2022 17:51 Linguagem C: recursos básicos
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

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

null

null

play_arrow

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.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 17/65
17/10/2022 17:51 Linguagem C: recursos básicos

playlist_play
Vem que eu te explico!
Os vídeos a seguir abordam os assuntos mais relevantes do conteúdo que você acabou de estudar.

Módulo 1 - Vem que eu te explico!

Variáveis – explicar o conceito de variáveis.

Módulo 1 - Vem que eu te explico!

A utilização de constantes.

emoji_events

Falta pouco para atingir seus objetivos.


Vamos praticar alguns conceitos?

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 18/65
17/10/2022 17:51 Linguagem C: recursos básicos

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;

Responder

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

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 19/65
17/10/2022 17:51 Linguagem C: recursos básicos

Responder

starstarstarstarstar

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.

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

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

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 20/65
17/10/2022 17:51 Linguagem C: recursos básicos

Operador Descrição Exemplo

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

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

* Multiplicação mult = a*b; (mult = 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.

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.

Expressão Valor Ordem

1 + (2 - 3) 0 -+

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 21/65
17/10/2022 17:51 Linguagem C: recursos básicos

Expressão Valor Ordem

(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

1 #include <stdio.h>
2 int main(){
3 int nr;
4 printf("Digite o valor em metros: \n");
5 scanf("%d", &nr);
6 printf(" %d m = %d cm \n", nr, nr*100);

null

null

play_arrow

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

1 #include <stdio.h>
2 int main() {
3 float a, b, c, media;
4 printf("Digite o primeiro nr: \n");
5 scanf("%f", &a);
6 printf("Digite o segundo nr: \n");

null
https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 22/65
17/10/2022 17:51 Linguagem C: recursos básicos

null

play_arrow

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

1 #include <stdio.h>
2 #define PI 3.141592
3 int main () {
4 float raio, area;
5 printf ("Digite o raio do circulo em cm: ");
6 scanf ("%f", &raio);

null

null

play_arrow

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:

+= -= *= /=

Atribuição por adição Atribuição por subtração Atribuição por multiplicação Atribuição por divisão

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 23/65
17/10/2022 17:51 Linguagem C: recursos básicos

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 = num * (1 +
num *= 1 + k;
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.

Exemplo 4
info_outlineTUTORIAL
d content_copyCOPIAR
C

1 #include <stdio.h>
2 int main(){
3 int i = 1, j = 1, valor = 1, num = 1, k = 1;
4 int div10 = 20, resto = 20;
5 printf("i = %d\n", i += 1);
6 printf("j = %d\n", j -= valor);

null

null

play_arrow

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# 24/65
17/10/2022 17:51 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 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.

Exemplo 5
info_outlineTUTORIAL
d content_copyCOPIAR
C

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

null

null

play_arrow

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;

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 25/65
17/10/2022 17:51 Linguagem C: recursos básicos

Entretanto, podemos substituir por:

Linguagem C
content_copy

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.

A && A ||
A B !A
B B

0 0 1 0 0

0 1 1 0 1

1 0 0 0 1

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 26/65
17/10/2022 17:51 Linguagem C: recursos básicos

A && A ||
A B !A
B B

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

1 #include <stdio.h>
2 int main(){
3 int A = 0, D = 123;
4 float B = 0.1;
5 char C = 0;
6 i tf("!A %d !B %d \ " !A !B)

null

null

play_arrow

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

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 27/65
17/10/2022 17:51 Linguagem C: recursos básicos

Digite sua resposta aqui

Exibir soluçãoexpand_more

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?

Maior ou igual X é maior ou


>= X >= Y
que igual a Y?

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

Menor ou igual X é menor ou


<= X <= Y
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á:

Se a condição testada for falsa.


close

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 28/65
17/10/2022 17:51 Linguagem C: recursos básicos

Se a condição testada for verdadeira.

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

> >= < <=

== !=

&&

||

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

extension

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

1 #include <stdio.h>
2 int main() {
3 int A = 102;
4 float B = 102.0;
5 char C = 'a';
6 int D = 50;

null

null

play_arrow

Vamos entender o que aconteceu?

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 29/65
17/10/2022 17:51 Linguagem C: recursos básicos

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ão iguais, 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:

call_split
Estruturas de decisão

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

Pseudocódigo content_copy

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 30/65
17/10/2022 17:51 Linguagem C: recursos básicos

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

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

1 #include<stdio.h>
2 int main()
3 {
4 int num;
5 printf("Digite o valor inteiro:\n");
6 scanf("%d", &num);

null

null

play_arrow

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:

Exemplo 8 com else


info_outlineTUTORIAL
d content_copyCOPIAR
C

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 31/65
17/10/2022 17:51 Linguagem C: recursos básicos

1 #include<stdio.h>
2 int main()
3 {
4 int num;
5 printf("Digite o valor inteiro:\n");
6 scanf("%d", &num);

null

null

play_arrow

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.

Exemplo 9
info_outlineTUTORIAL
d content_copyCOPIAR
C

1 #include <stdio.h>
2 int main() {
3 int num = 0;
4 printf("Digite um numero inteiro: \n");
5 scanf("%d", &num);
6 if ( (( % 2) 0) && (( % 5) 0) )

null

null

play_arrow

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.

Linguagem C
content_copy

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 32/65
17/10/2022 17:51 Linguagem C: recursos básicos

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.

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

1 #include <stdio.h>
2 int main()
3 {
4 int num=0;
5 printf("Digite um numero inteiro: \n");
6 scanf("%d" &num);

null

null

play_arrow

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
https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 33/65
17/10/2022 17:51 Linguagem C: recursos básicos

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 }

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

Compara apenas igualdades.


close

if

Compara qualquer 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
C

1 int main()
2 {
3 float num1, num2;
4 int opcao = 0;
5
6 i tf("E t i i \ ")

null

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 34/65
17/10/2022 17:51 Linguagem C: recursos básicos

null

play_arrow

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.

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

1 #include <stdio.h>
2 int main ()
3 {
4 int numero;
5 printf("Digite um numero: \n");
6 scanf("%d", &numero);

null

null

play_arrow

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:

Exemplo 13
info_outlineTUTORIAL
d content_copyCOPIAR
C

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

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 35/65
17/10/2022 17:51 Linguagem C: recursos básicos

3 {
4 int numero;
5 printf("Digite um numero: \n");
6

null

null

play_arrow

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

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

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

null

null
https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 36/65
17/10/2022 17:51 Linguagem C: recursos básicos

play_arrow

verified

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

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

null

null

play_arrow

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 }

Sintaxe do while.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 37/65
17/10/2022 17:51 Linguagem C: recursos básicos

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

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

null

null

play_arrow

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

1 #include<stdio.h>
2 int main() {
3 int n1, n2, soma, resposta;
4 resposta = 1;
5 while(resposta == 1) {
6 i tf("Di it l d 1 \ ")

null
https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 38/65
17/10/2022 17:51 Linguagem C: recursos básicos

null

play_arrow

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.

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

1 #include<stdio.h>
2 int main() {
3 int n1, n2, soma, resposta;
4 do
5 {
6 i tf("Di it l d 1 \ ")

null

null

play_arrow

Vamos analisar algumas linhas do programa para entender melhor como a instrução funciona:

Linha 4

O comando do-while é iniciado.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 39/65
17/10/2022 17:51 Linguagem C: recursos básicos

Linhas 12 e 13

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

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.

Linha 19

Termina o comando do-while. Foi criada a condição (resposta == 1), isso significa que, enquanto o usuário 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

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:

Linguagem C
content_copy

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

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 40/65
17/10/2022 17:51 Linguagem C: recursos básicos

3 for( ; ; ) //For eterno


4 printf('Loop infinito!!!');
5 }

Exemplo com o for.

Linguagem C
content_copy

1 #include <stdio.h>
2 int main(){
3 while(1) //While sempre verdadeiro
4 printf('Loop infinito!!!');
5 }

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

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.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 41/65
17/10/2022 17:51 Linguagem C: recursos básicos

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

playlist_play
Vem que eu te explico!
Os vídeos a seguir abordam os assuntos mais relevantes do conteúdo que você acabou de estudar.

Módulo 2 - Vem que eu te explico!

Tipos de operadores lógicos

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 42/65
17/10/2022 17:51 Linguagem C: recursos básicos

Módulo 2 - Vem que eu te explico!

Operadores lógicos

Módulo 2 - Vem que eu te explico!

Comandos de controle de fluxo

emoji_events

Falta pouco para atingir seus objetivos.


Vamos praticar alguns conceitos?

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.
https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 43/65
17/10/2022 17:51 Linguagem C: recursos básicos

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.

Responder

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 12345

B 531

C 4210

D 54321

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 44/65
17/10/2022 17:51 Linguagem C: recursos básicos

E 12354

Responder

starstarstarstarstar

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.

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.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 45/65
17/10/2022 17:51 Linguagem C: recursos básicos

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:

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.

report_problem

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:

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 46/65
17/10/2022 17:51 Linguagem C: recursos básicos
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. 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;

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

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 47/65
17/10/2022 17:51 Linguagem C: recursos básicos

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.

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};.

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

1 #include <stdio.h>
2 #define DIM 5
3
4 int main (void) {
5 int vetor[DIM];
6 i d i t i

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 48/65
17/10/2022 17:51 Linguagem C: recursos básicos

null

null

play_arrow

Vamos analisar as linhas:

Linha 2

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

Linha 5

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

Linha 9

Faz a leitura da variável num.

Linha 12

Atribui ao vetor os valores consecutivos de num.

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.

Linha 15

Imprime os valores do vetor na tela.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 49/65
17/10/2022 17:51 Linguagem C: recursos básicos

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

“Paulo”, “torta”

close
Caracteres

‘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

char vetor[6] = “aluno”;

Com chaves

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

Sem tamanho

char vetor[ ] = “aluno”;

report_problem

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

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 50/65
17/10/2022 17:51 Linguagem C: recursos básicos

1 #include <stdio.h>
2 int main() {
3 //O tamanho do vetor depende do valor de inicialização
4 char frase[ ] = "Estou gostando de programar em C";
5
6 //número de caracteres da string + 1 (\0) retornado pela função sizeof()

null

null

play_arrow

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

Exemplo 3
info_outlineTUTORIAL
d content_copyCOPIAR
C

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

null

null

play_arrow

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
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],

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 51/65
17/10/2022 17:51 Linguagem C: recursos básicos

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

Rotacione a tela. screen_rotation

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.

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]

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:

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 52/65
17/10/2022 17:51 Linguagem C: recursos básicos

Linguagem C content_copy

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

Sintaxe de índices.

Para facilitar o entendimento, veja o exemplo:

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

1 int m[2][3] = {{1,2,3},{4,5,6}};


2 int m[2][3] = {1,2,3,4,5,6};
3 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 content_copy

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


2 for (j = 0; j < 3; j++)
3 m[i][j] = 0;

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 53/65
17/10/2022 17:51 Linguagem C: recursos básicos

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

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

null

null

play_arrow

Agora, vamos analisar a lógica do programa.

Linhas 2 e 3

Definem as constantes: NRLINHAS(número de linhas) e NRCOLUNAS(número de colunas) da matriz.

Linha 6

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

Linhas 9 a 13
F i ã d l t d ti l ái i d 15 it õ d i í di d li h j í di d l
https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 54/65
17/10/2022 17:51 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])

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.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 55/65
17/10/2022 17:51 Linguagem C: recursos básicos

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.

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

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 56/65
17/10/2022 17:51 Linguagem C: recursos básicos

5 int dia_nascimento;
6 char mes_nascimento[12];
7 int ano_nascimento;
8 } ;
9

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.

report_problem

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

São variáveis do tipo struct Aluno.

Alunos

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

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 57/65
17/10/2022 17:51 Linguagem C: recursos básicos

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

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.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 58/65
17/10/2022 17:51 Linguagem C: recursos básicos

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


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

Sem typedef

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

Com typedef

nome_estrutura var = {valor1, valor2,..., 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 }

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

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 59/65
17/10/2022 17:51 Linguagem C: recursos básicos

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

1 #include<stdio.h>
2 typedef struct t_aluno {
3 char nome[40];
4 char curso[22];
5 } aluno;
6 i t i () {

null

null

play_arrow

Vamos analisar as linhas:

Linhas 2 a 5

Define a estrutura aluno.

Linha 7

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

Linha 8

Imprime os dois campos da estrutura.

Agora é com você! Construa um programa que:

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

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 60/65
17/10/2022 17:51 Linguagem C: recursos básicos

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

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.

playlist_play
Vem que eu te explico!
Os vídeos a seguir abordam os assuntos mais relevantes do conteúdo que você acabou de estudar.

Módulo 3 - Vem que eu te explico!

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 61/65
17/10/2022 17:51 Linguagem C: recursos básicos
Estruturas de dados homogêneas

Módulo 3 - Vem que eu te explico!

Estrutura de dados heterogêneas

Módulo 3 - Vem que eu te explico!

Strings

emoji_events

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;

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 62/65
17/10/2022 17:51 Linguagem C: recursos básicos

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

         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.

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.

Responder

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.

as estruturas em C são empregadas quando precisamos armazenar dados que não têm relação semântica, mas que são
B
todos do mesmo tipo primitivo de dados.

uma estrutura é um conjunto de uma ou mais variáveis, que podem ser de tipos diferentes, agrupadas sob um único nome, de
C
forma a facilitar a sua referência.

https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 63/65
17/10/2022 17:51 Linguagem C: recursos básicos

a definição de uma estrutura (struct) é baseada no tipo de dado chamado vetor (array) e permite armazenar dados
D
heterogêneos.

E quando precisamos definir a diagonal de uma matriz quadrada, usamos o tipo de dados struct para armazenar a matriz.

Responder

starstarstarstarstar

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.

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.

00:00 10:23
speed
1x

Referências
https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 64/65
17/10/2022 17:51 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.

picture_as_pdf Baixar conteúdo

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

Você também pode gostar