Escolar Documentos
Profissional Documentos
Cultura Documentos
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
Módulo 2
Módulo 3
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.
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
unsigned char 1 0 a 255
-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
unsigned short int 2 0 a 65.535
-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
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)?
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 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:
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
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.
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;
LINGUAGEM C content_copy
scanf()
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.
• string “= R$”;
• %.2f – o símbolo % seguido de .2f, indicando que o valor tipo float terá duas casas decimais.
Linha 5
Linha 6
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 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
null
null
play_arrow
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:
• caractere “= ”;
• especificador %d – o símbolo % seguido do caractere d, indicando que o valor a ser inserido é tipo int.
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
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
Bytes armazenados na
Tipo Faixa de valores
memória
-2.147.483.648 a
int 4
2.147.483.647
-2.147.483.648 a
long int 4
2.147.483.647
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
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.
ESPECIFICADOR SAÍDA
Primeiros X caracteres
%.Xs
da string
%% Imprime %
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
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
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:
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
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 é um modificador de acesso. Assim, a constante declarada dessa forma é realmente uma variável, existindo fisicamente na memória.
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
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.
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.
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.
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.
A utilização de constantes.
emoji_events
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
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.
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.
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
soma = a + b; (soma =
+ Adição
15)
resto = a%b; (resto =
% Resto da divisão
0)
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.
1+2-3 0 +-
24 - 3 * 5 9 * -
4-2*6/4
2 */-+
+1
6 / 2 + 11 %
11 / % * +
3 * 4
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.
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
(24 - 3) * 5 105 -*
(4 - 2 * 6) / 4
-1 *-/+
+1
6 / ((2 + 11)
24 +%/*
% 3) * 4
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
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.
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
i += 1; i = i + 1;
val *= 2; val = val * 2;
num = num * (1 +
num *= 1 + k;
k);
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
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.
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
https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 25/65
17/10/2022 17:51 Linguagem C: recursos básicos
Linguagem C
content_copy
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.
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 && 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
A tabela apresenta o uso de apenas dois operandos, A e B, mas podemos construir expressões maiores.
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:
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
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:
== Igualdade X == Y X é igual a Y?
X é maior que
> Maior que X>Y
Y?
X é menor que
< Menor que X < Y
Y?
X é diferente
!= Diferente X != Y
de Y?
https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 28/65
17/10/2022 17:51 Linguagem C: recursos básicos
== !=
&&
||
extension
Exemplo
5 > 2, resultado 1.
6 ! 6, resultado 0.
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
https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 29/65
17/10/2022 17:51 Linguagem C: recursos básicos
Linha 7
Linha 8
Linha 9
A expressão C > D é verdadeira, pois o valor de ‘a’ é 97 no código ASCII, portanto, a saída é 1.
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;
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; ]
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:
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.
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 }
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:
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
if
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
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.
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
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--).
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.
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
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
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
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
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.
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
Linguagem C
content_copy
1 #include <stdio.h>
2 int main(){
3 while(1) //While sempre verdadeiro
4 printf('Loop infinito!!!');
5 }
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:
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.
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.
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.
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.
https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 42/65
17/10/2022 17:51 Linguagem C: recursos básicos
Operadores lógicos
emoji_events
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.
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;
scanf("%d", &num);
}
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
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
https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 45/65
17/10/2022 17:51 Linguagem C: recursos básicos
Onde:
tipo
nome
tamanho
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
Vetores unidimensionais.
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.
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).
vetor[0] = 120;
vetor[5] = vetor[0]*3;
https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 47/65
17/10/2022 17:51 Linguagem C: recursos básicos
Veja um exemplo:
Linguagem C
content_copy
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
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:
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
Linha 2
Linha 5
Linha 9
Linha 12
Linha 14
Observe que o índice i do vetor[i] inicia com 0 (zero) até o valor de DIM-1.
Linha 15
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
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
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
https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 51/65
17/10/2022 17:51 Linguagem C: recursos básicos
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.
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.
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.
Exemplo de índice.
C content_copy
C content_copy
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.
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
Linhas 2 e 3
Linha 6
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.
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
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;
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.
Linguagem C
content_copy
Em que:
aluno1 e aluno2
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
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;
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.).
Pseudocódigo content_copy
Sintaxe de typedef.
Linguagem C
content_copy
https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 58/65
17/10/2022 17:51 Linguagem C: recursos básicos
Linguagem C content_copy
Sem typedef
Com typedef
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 }
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
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
Linhas 2 a 5
Linha 7
Linha 8
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.
https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 60/65
17/10/2022 17:51 Linguagem C: recursos básicos
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.
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.
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
Strings
emoji_events
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];
scanf("%s", &palavras[i]);
}
printf("%s
",palavras[i]);
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.
https://stecine.azureedge.net/repositorio/00212ti/02576/index.html# 65/65