Introdução a Lógica de Programação / Estrutura Sequencial (C)
Nesta guia você será introduzido à linguagem de programação C, dando um resumo e a tradução dos conceitos/comandos já estudados antes. Nas próximas guias teremos explicações mais longas e minuciosas.
1 - Introdução
Sobre a linguagem
A linguagem de programação C é uma das linguagens mais velhas, tendo sido criada na década de 70. Embora tenha os seus 50 anos de história e o seu uso simples, ela segue sendo uma das mais populares entre os programadores e a base para outras linguagens (Java, C++,C# e Python).
Usos de C
C é uma linguagem usada para a realização de tarefas que possuem um padrão, são imperativas, previsíveis e possuem uma estrutura. Portanto, softwares como Windows e Linux usam de C. Também é usado em robótica, telecomunicação e em jogos 3D.
Tipada ou não?
Essa linguagem é muito parecida com o portugol que utilizamos no VisualG, que precisa da declaração de explícita das variáveis, sendo portanto tipada.
Compiladores
Para conseguir escrever em C/C++ no Visual Studio Code, você precisará de um compilador.
Os computadores da escola já possuem um compilador:

Como saber se você tem um compilador ou não
No Visual Studio Code há compiladores compatíveis para as linguagens C/C++, que serão necessários para a realização dos exercícios.
Caso você não tenho certeza se o seu computador possui um compilador ou não, siga os passos abaixo para confirmar:
2 - Entre em um código qualquer e aperte Crtl+shift+’ — o que deve lhe mostrar isso:
3 - Em seguida, entre:
g++ -- version
eclang --version
, respectivamente dando enter em cada um deles;
4 - Caso o abaixo apareça, isso significa que sua máquina não possui um compilador e você precisará instalar;
Como instalar seu próprio compilador
A instalação segue os comandos do site oficial do VisualStudioCode: https://code.visualstudio.com/docs/cpp/config-mingw
1 - Entre no Visual Studio Code, instalando a extensão de C/C++ da Microsoft e O Code Runner;
(A primeira para a configuração da linguagem C e a segunda para que o seu código apropriadamente execute. Caso a segunda não for instalada, o código não irá aparecer).
Esses daqui:2 - Em seguida, faça download do compilador MSYS2, disponível neste site: https://www.msys2.org
3 - Configure o compilador como quiser, finalizando a instalação.
Como utilizar/configurar o seu compilador
Sites utilizados: https://code.visualstudio.com/docs/cpp/config-mingw e https://www.msys2.org
1 - Para começar a utilizar seu compilador, inicie o programa “ucrt64” (o com o símbolo marrom-verde) e entre o seguinte comando:
pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain
Aperte
enter
para instalar os pacotes necessários.2 - Digite “
Y
” para continuar a instalação (Essa parte pode demorar um pouco);3 - Após terminada a instalação, digite esse comando:
gcc --version
Que deve mostrar isso (significando que a instalação foi um sucesso):4 - Adicione a pasta de lixeira do compilador para o caminho do Windows;
4.1 - Digite “Configurações” na sua aba de pesquisa, a abra e digite: “Variáveis”. Isso deve aparecer:
4.2 - Selecione a segunda opção (Editar as variáveis [..] para sua conta), que deve abrir isso:
4.3 - Selecione a variável “Path” e clique em Editar.
4.4 - Você possui duas opções: Clicar no botão “Novo” e manualmente digitar o local onde está a pasta “bin” dentro da pasta “ucrt64”, ou clicar no botão de “Procurar…” e manualmente selecionar a pasta. Depois de qualquer uma das opções concluídas, clique “ok” na aba de Editar a variável e “ok” novamente na aba de Variáveis de Ambiente.
5 - Agora, para confirmar se a instalação foi ocorrida com sucesso e o “Path” está correto, acesse o prompt de comando do seu computador (acessado ao digitar “cmd” na barra de pesquisa) e digite os seguintes comandos (aqui eu digitei os comandos no mesmo diretório que instalei o compilador, mas não fará diferença):
gcc —version
g++ —version
gdb —version
6 - Teste: Os próximos passos são opcionais e podem ser realizados de uma maneira diferente!
Abra o painel de comando e digite os seguintes comandos:
mkdir projects
Cria uma pasta chamada “projects” no diretório.cd projects
Entra dentro da pasta “projects”.mkdir helloworld
Cria uma pasta “helloworld” dentro da pasta “projects”.cd helloworld
Entra dentro da pasta “helloworld”.code .
Automaticamente entra no VisualStudioCode na pasta atual.Clique no “Novo arquivo” e nomeie-o como quiser, adicionando .c no final do arquivo.
Em seguida, digite os seguintes comandos:
#include <stdio.h>
int main()
{
printf(”Hello World!”);
return 0;
}
Clique no botão de executar o código (clique na setinha se o seu padrão está como “debugg and run code” e então selecione a opção de “run code”). Então, selecione essa opção:
Ela será automaticamente dada como padrão após essa primeira escolha e não será necessário fazê-la novamente.
Seu código deve executar assim:
Bugs encontrados
Essa parte será dedicada à resolução de bugs encontrados por vocês. Aqui está alguns que eu tive que resolver:
1 - Quando utilizando o comando
scanf()
, o código não termina e executa infinitamente;Resolução: mudar a configuração do CodeRunner e da extensão Microsoft C;
Aperte ctrl+shift+p, digite “C Ui” e vá nas configurações do “compiler path”, colocando o mesmo path que colocamos na configuração do compilador.
Depois disso, vá nas configurações do VisualStudioCode (engrenagens próximo ao seu perfil), digite “Code runner”, ache essa configuração e a marque.
Lista dos exemplos
Todos os códigos mostrados aqui estão na pasta (compactada) abaixo. Caso você queria mexer no código e testar para compreender melhor a teoria lida aqui, sinta-se em casa!
2 - Sintaxe
2.1 - O básico
Como dito anteriormente, C possui uma sintaxe muito parecida com o Portugol. Para você entender melhor, aqui vai um exemplo:
#include <stdio.h>
int main() {
printf("Hello World!");
return 0;
}

Coisas que não mudaram do Visual G:
- Em comandos de “escreva” (printf), os caracteres precisam estar dentro de aspas para indicar que são caracteres, do contrário o computador irá ler como se fossem comandos/números;
- Os comandos precisam ter um “fimcomando” / “return 0” (como o “para” possui o “fimpara” ou o “se” possui o “fimse”);
- Aqui, a declaração de variável “inteiro” virou “int” do mesmo jeito que “escreva” virou “printf”;
Coisas que mudaram do Visual G:
- Agora cada comando dentro de um comando principal (int main()) precisa terminar em dois pontos e vírgula;
- A declaração de variável (inteiro, caracter, real) também funciona em comandos agora (int main()), embora seja opcional (aqui, o int main() diz para o computador que é esperado que ele receba/imprima valores inteiros);
- Nos comandos principais, os comandos que ficarem dentro precisam estar entre chaves {} (pense nos comandos de CSS);
- É preciso incluir o comando no “cabeçalho” do código
#include <stdio.h>
sempre que utilizamos os comandos básicos (int, printf, etc) e é obrigatório em qualquer código de C.
Observação:
Assim como no VisualG, os algoritmos em linguagem C também pulam linhas em branco (ou espaços no geral). Portanto, o código acima pode ser escrito assim:
int main(){printf("Hello World!");return 0;}
No entanto, por razões de compreensão na leitura, é sempre bom dar espaços entre comandos para facilitar a decodificação de bugs futuros.
2.2 - Variáveis
As variáveis que conhecemos possuem nomes diferentes no C:
Tipo de variável (Portugol/C) | O que realizam | Exemplo de comando |
---|---|---|
Inteiro | Variável guarda números inteiros; | num: inteiro |
Int | Variável guarda números inteiros; | int num; |
Real | Variável guarda números reais (vírgula); | num_real: real |
Float ou Double (Há uma diferença) | Variável guarda números reais (vírgula); | float num_real; |
Caractere | Variável guarda caracteres; | nome: caracter |
Char | Variável guarda caractere; | char nome; |
String | Variável guarda caracteres; | char nome[] = “Maria”; |
Observação: O comando“
Char
”
apenas suporta uma letra. Caso você tente colocar uma palavra maior que uma letra, ele apenas guardará a última letra. Por isso, temos a variável"String"
, que suporta mais do que uma letra.
Declaração de Variáveis
O sintaxe da declaração de variáveis é parecido;
C:
tipo NomeDaVariável;
int
idade;
//Dar um valor para a variável:
idade =
15
————————————————
Portugol:
NomeDaVariável: tipo
nome:
caracter
//Dar um valor para a variável:
nome ←
“
Maria
”
Para declarar múltiplas variáveis também;
C:
int
idade, peso;
//Apenas declaração;
int
idade = 15, peso = 50;
//Declaração e dar um valor ao mesmo tempo;
————————————————
Portugol:
nome, cidade:
caracter
nome ←
“
Maria
”
cidade ←
“
Uberaba
”
Imprimir variáveis
Porém, para imprimir as variáveis, há diferenças gritantes (Os comandos de Portugol “Início, Var, Fimalgoritmo” foram pulados para fins educativos, já que já o entendemos):
Portugol: nome:
caracter
//Declaração
nome ←
“
Maria
”
//Dando valor para a variável
escreval
(nome)
Resultado: Maria
//Apenas retiramos as aspas para indicar que o “nome” é um comando.
————————————————
C:
int main() {
char
nome[] = "Maria"
;
//Declaração
printf
(
”%s”
,nome);
//O equivalente à escreva
return 0;
}
Resultado: Maria
//Além das diferenças de declaração e de dar o valor, para “imprimir” uma variável possuímos comandos e sintaxes específicas.
Variável | Comando para imprimir | Exemplo |
---|---|---|
Int | %d ou %i | printf (” %d ”, num) ; |
Float | %f ou %F | printf (” %f ”, dizima) ; |
Double | %lf | printf (” %lf ”, dizima2) ; |
Char | %c | printf (” %c ”, letra) ; |
String | %s | printf (” %s ”, nome) ; |
Teste você mesmo: https://www.w3schools.com/c/tryc.php?filename=demo_data_types
Números reais (Float/Double)
Observe um exemplo de código C:
int
main()
{
float
myFloatNum = 3.5;
double
myDoubleNum = 19.99;
printf
(
"%f\n"
,
myFloatNum);
//O comando \n é o equivalente à quebrar uma linha
printf
(
"%lf"
,
myDoubleNum);
return
0;
}
Pergunta: Quantos dígitos depois da vírgula você acredita que serão imprimidos?
Provavelmente você pensou em um para o primeiro número e dois para o segundo; Entretanto, isso é o que irá ser imprimido:
3.500000
19.990000
Ao contrário do Portugol, em C as variáveis "float/double"
imprimem e carregam 6 dígitos após a vírgula.
Tipo de variável | Tamanho | Descrição |
---|---|---|
Float | 4 bytes | Guarda números fracionados, contendo um ou mais decimais. Suficiente para armazenar 6-7 dígitos. |
Double | 8 bytes | Guarda números fracionados, contendo um ou mais decimais. Suficiente para armazenar 15 dígitos. |
Portanto, para encurtar a quantidade de números após a vírgula, usamos esses comandos:
float
myFloatNum = 3.5;
printf
(
"%f\n"
, myFloatNum);
// Como padrão, 6 números aparecerão depois da vírgula
printf
(
"%.1f\n"
, myFloatNum);
// Mostrará apenas um digíto
printf
(
"%.2f\n"
, myFloatNum);
// Mostrará dois digítos
printf
(
"%.4f"
, myFloatNum);
// Mostrará quatro digítos
Resultado:
3.500000
3.5
3.50
3.5000
Constantes
Quando você não quer que outros (ou você mesmo) consigam mudar o valor de uma variável, usamos o comando de constante:
const
int
idade = 15
Fazendo isso, sua variável ficará permanente e apenas para leitura.
Para declarar uma variável constante, apenas a declaração em uma linha funcionará. Caso o contrário, dará erro:
const
int
idade = 15
const
int
idade
idade = 15
//
ERRO!
Declaração de variável constante
Tentar dar outro valor para a constante também dará erro:
const
int
idade = 15
idade = 17
//
ERRO
!
Dica: Para variáveis constantes, programadores normalmente declaram o nome em maiúsculo, para facilitar a leitura e o entendimento futuro da próprio programador ou de outros da mesma equipe.
Nomeação e escrita do C
Ao contrário do VisualG, que foi feito em portugol (ou seja, linguagem português-Brasil), o C foi escrito e feito em inglês. Portanto, palavras com acentuação e cedilha não serão aceitas pelo programa, fazendo-o dar erros de visualização não muito bonitos:


De acordo com vários sites, é possível retirar esse erros utilizando comandos e selecionando a nossa língua como português-Brasil. No entanto, não consegui seguir os tutoriais com sucesso e irei escrever sem os acentos ou cedilha. Caso você queira tentar você mesmo, aqui está os links:
https://programacaopratica.com.br/2019/09/17/acentuacao-de-caracteres-em-c-com-locale-h
2.3 Operadores Aritméticos e Relacionais
Aritméticos – O resultado da avaliação é do tipo numérico: inteiro ou real.
Operação | Operador | Descrição | Exemplo |
---|---|---|---|
Soma | + | Soma os números; | x + y |
Subtração | - | Subtrai os números; | x - y |
Multiplicação | * | Multiplica os números; | x * y |
Divisão | / | Divide os números; | x / y |
Resto | % | Retorna o resto da divisão; | x % y |
Incremento | ++ | Aumenta o valor por 1; | ++x |
Decréscimo | - - | Diminui o valor por 1; | —x |
Relacionais – Comparação realizada entre dois valores do mesmo tipo básico.
Operação | Operador | Descrição | Exemplo |
---|---|---|---|
Igual a | == | Retorna o valor 1 se as variáveis forem iguais; | x==y |
Diferente de | != | Retorna o valor 1 se as variáveis forem diferentes; | x!=y |
Maior que | > | Retorna o valor 1 se uma das variáveis for maior do que a outra | x>y |
Menor que | < | Retorna o valor 1 se uma das variáveis for menor do que a outra | x<y |
Maior ou igual a | >= | Retorna o valor 1 se uma das variáveis for maior ou igual a outra | x>=y |
Menor ou igual a | <= | Retorna o valor 1 se uma das variáveis for menor ou igual a outra | x<=y |
2.4 - Operadores Lógicos e de Declaração
Utilizaremos três operadores básicos para a formação de novas proposições lógicas compostas a partir de outras proposições lógicas simples.
Operação | Operador | Descrição | Exemplo |
---|---|---|---|
E | && | Retorna o valor 1 se ambas as afirmações forem verdadeiras; | x < 5 && x < 10 |
Ou | || | Retorna o valor 1 se uma das afirmações forem verdadeiras; | x < 5 || x < 4 |
Não | ! | Reverte o resultado da afirmação (se a afirmação der 1 o não reverte para 0, vice-versa) | !(x < 5 && x < 10) |
Utilizamos operadores de declaração como jeitos encurtados de declarar/mudar o valor de variáveis. É uma maneira mais rápida de escrever algo, mas não é obrigatória— apenas salva o seu tempo.
Operador | O mesmo que | Exemplo |
---|---|---|
= | x = 5 | x = 5 |
+= | x = x + 3 | x += 3 |
-= | x = x - 3 | x -= 3 |
*= | x = x * 3 | x *= 3 |
/= | x = x / 3 | x /= 3 |
%= | x = x % 3 | x %= 3 |
&= | x = x & 3 | x &= 3 |
|= | x = x | 3 | x |= 3 |
^= | x = x ^ 3 | x ^= 3 |
>>= | x = x >> 3 | x >>= 3 |
<<= | x = x << 3 | x <<= 3 |
2.5 - Ordem de Operações
Quando há mais do que uma operação, a linguagem C segue a seguinte ordem de operações:
()
- Parênteses;
*
,/
,%
- Multiplicação, Divisão, Módulo;
+
,-
Adição, Subtração;
>
,<
,>=
,<=
- Comparação;
==
,!=
- Equidade;
&&
- Lógico E
||
- Lógico OU
=
- Declaração
3 - Estrutura Condicional
Importante: Quando usamos as estruturas condicionais, precisamos usar #include <stdbool.h>
no cabeçalho do C, caso contrário dará erro.
3.1 - Se, se não, se senão: Sintaxe
if (condição) {
// bloco de código para ser executado caso a condição for verdadeira.
}
if (condição) {
// bloco de código para ser executado caso a condição for verdadeira.
} else {
// bloco de código para ser executado caso a condição for falsa.
}
if (condição1) {
// bloco de código para ser executado caso a condição1 for verdadeira.
} else if (condição2) {
// para ser executado caso a condição1 for falsa e condição 2 for verdadeira.
} else {
// para ser executado caso a condição1 for falsa e condição 2 for falsa.
}
if (condição) {
// bloco de código para ser executado caso a condição for verdadeira.
if (condição1) {
// bloco de código para ser executado caso a condição e condição1 for verdadeira.
}
}
Tradução: “If” = “se”, “Else” = “se não” e “Else If” = “senão se”.
Exemplos:
if (x > 10) {
printf("X é maior do que 10.")
}
if (x > 10) {
printf("X é maior do que 10.")
} else {
printf("X é menor do que 10.")
}
if (x > 10) {
printf("X é maior do que 10.")
} else if (x = 10) {
printf("X é igual a 10.")
} else {
printf("X é menor do que 10.")
}
if (x > 10) {
printf("X é maior do que 10.");
// Se dentro de um se
if (y > 20) {
printf("X é maior que 20 também.");
}
}
3.2 - Se e Operador lógico
Operador lógico E
int a = 200;
int b = 33;
int c = 500;
if (a > b && c > a) {
printf("Ambas as condições são verdadeiras\n");
}
Operador lógico OU
int a = 200;
int b = 33;
int c = 500;
if (a > b || a > c) {
printf("Pelo menos uma condição é verdadeira\n");
}
Operador lógico NÃO
int a = 33;
int b = 200;
if (!(a > b)) {
printf("A não é maior que B\n");
}
3.3 - Caso: Sintaxe
switch (variável) {
case x:
// bloco de código
break;
case y:
// bloco de código
break;
default: //outro caso
// bloco de código
}
O Comando Break
O comando break
automaticamente acaba com o comando, salvando o tempo que a máquina precisaria para verificar se os outros casos são verdadeiros ou não.
Pense assim: “break
”, em inglês, pode significar tanto quebra quanto intervalo — Break é um intervalo onde a máquina pode parar o comando e “relaxar” assim que o trabalho estiver pronto (ou seja, a condição seja encontrada).
Odefault
(outrocaso) é opcional na estruturaswitch
, e não precisa, obrigatoriamente, do comandobreak
(falaremos mais sobre ele nos próximos tópicos).
Tradução: “Switch” = “Troca, trocar”, “Default” = “Padrão” e “Case” = “caso”.
Exemplo:
int day = 4;
switch (day) {
case 6:
printf("Hoje é Sábado");
break;
case 7:
printf("Hoje é Domingo");
break;
default:
printf("Esperando o final de semana de novo...");
}
//Nesse caso sairá o "Esperando o final de[..]";
4 - Estruturas de Repetição
4.1 - Enquanto: Sintaxe
while (condição) {
// bloco de código a ser executado;
}
A estrutura de repetição while
repete um bloco de código enquanto uma condição for verdadeira.
int i = 0;
while (i < 5) {
printf("%d\n", i);
i++;
}
//Sairá os números: 1, 2, 3 e 4.
Teste você mesmo aqui: https://www.w3schools.com/c/tryc.php?filename=demo_while_loop
Contagem regressiva:
Não se esqueça de mudar a variável na condição, porque se não o código nunca vai terminar.
int countdown = 3;
while (countdown > 0) {
printf("%d\n", countdown);
countdown--;
}
printf("Feliz Ano Novo!!\n");
Se a condição do while
começar falsa, o bloco de código nunca será realizado.
4.2 - “Repita”: Sintaxe
do {
// bloco de código a ser executado;
}
while (condição);
O comando do/while
é uma variante do comando while
, onde ele irá executar o bloco de comando uma vez e depois verificar se a condição é verdadeira ou não.
Tradução: “Do” = “faça” e “While” = “enquanto”.
Exemplo:
int i = 0;
do {
printf("%d\n", i);
i++;
}
while (i < 5);
//Sairá os números: 1, 2, 3 e 4.
Mesmo que a condição em questão seja falsa desde o início, o código ainda será executado:
int i = 10;
do {
printf("i é %d\n", i);
i++;
} while (i < 5);
// Sairá "i é 10".
Esse comando possui diferenças do comando “repita”, embora sejam parecidos em sintaxe e uso. Do/While
é interessante de se usar quando você quer que uma coisa apareça pelo menos uma vez não importando a condição ser verdadeira ou falsa, como por exemplo um aviso ao usuário.
Um exemplo que estamos bem familiarizados com:
#include <stdio.h>
int main() {
int number;
do {
printf("Entre com um número positivo: ");
scanf("%d", &number);
} while (number > 0);
return 0;
}
O código acima irá pedir para o usuário entrar com um número positivo até ser digitado o número 0.
Iremos aprender melhor sobre o comando “scanf
” (o equivalente à leia) nos próximos tópicos.
4.3 - Para: Sintaxe
for (expressão 1; expressão 2; expressão 3) {
// bloco de código a ser executado;
}
Expressão 1 é executada (uma vez) antes da execução do bloco de código.
Expressão 2 é a condição para a execução do código.
Expressão 3 é executado (toda vez) depois que o código é considerado executado.
O exemplo abaixo irá contar os números até 4:
int i;
for (i = 0; i < 5; i++) {
printf("%d\n", i);
}
//Sairá: 1, 2, 3, 4
Expressão 1 Dá um valor à variável antes do loop começar;
Expressão 2 Define a condição para a execução do código. O bloco de código será executado enquanto a condição for verdadeira.
Expressão 3 É executado (toda vez) depois do código, aumentando o valor da variável por um.
Porém, caso você ache melhor, a expressão 1 e 3 não precisar ser colocada dentro dos parênteses do for
. Exemplo abaixo:
int i = 0;
for (; i < 5;) {
i++;
printf("%d\n", i);
}
//Sairá: 1, 2, 3, 4
É necessário dos “;” antes e depois da expressão 2 do for
.
Loop dentro de um Loop
int i, j;
// Loop de fora
for (i = 0; i <= 2; ++i) {
printf("Dentro: %d\n", i); // Executa 2 vezes
// Loop de dentro
for (j = 0; j <= 3; ++j) {
printf("Fora: %d\n", j); // Executa 6 vezes (2 * 3)
}
}
//ou
int i = 1, j = 1;
// Loop de fora
for (;i <= 2;) {
printf("Outer: %d\n", i); // Executa 2 vezes
++i
// Loop de dentro
for (;j <= 3;) {
printf(" Inner: %d\n", j); // Executa 6 vezes (2 * 3)
++j
}
}
5 - Array/Vetor
Sintaxe
int myNumbers[] = {num, num, num, num};
Quando criado um array
, evite colocar variáveis de tipo diferente do especificado para o vetor, caso contrário dará erro.
For
com Array
com tamanho específico:
int myNumbers[] = {25, 50, 75, 100};
int i;
for (i = 0; i < 4; i++) {
printf("%d\n", myNumbers[i]);
}
For
com Array
com tamanho variável:
int myNumbers[] = {25, 50, 75, 100};
int length = sizeof(myNumbers) / sizeof(myNumbers[0]);
int i;
for (i = 0; i < length; i++) {
printf("%d\n", myNumbers[i]);
}
5.1 Multidimensional Array/Matriz
Uma matriz é um tipo de vetor, com colunas e linhas.
int matriz[2][2] = { {1, 4, 2}, {3, 6, 8} };
O primeiro número entre colchetes ([]) significa o número de linhas e o segundo é o número de colunas. Os números entre chaves correspondem a linha 0 e linha 1:
Coluna 0 | Coluna 1 | Coluna 2 | |
Linha 0 | 1 | 4 | 2 |
Linha 1 | 3 | 6 | 8 |
Lembre-se: A primeira coluna/linha na linguagem C é sempre a coluna/linha 0.
6 - Comandos específicos
Break
Você já viu o comando break
quando utilizado para finalizar o comando switch
(caso). Ele também pode ser usado em loops
:
int i;
for (i = 0; i < 10; i++) {
if (i == 4) {
break;
}
printf("%d\n", i);
}
//Sairá: 1, 2, 3
Continue
O comando continue
quebra uma interação dentro do comando de repetição, assim que uma condição específica é verdadeira, para continuar o próximo loop:
int i;
for (i = 0; i < 10; i++) {
if (i == 4) {
continue;
}
printf("%d\n", i);
}
//Sairá: 1, 2, 3, 5, 6, 7, 8, 9
Scanf() - Leia
Sabemos que usamos printf()
para escrever coisas na tela do usuário.
Para recebermos valores do usuário, utilizamos o comando scanf()
:
int myNum;
printf("Escreva um numero: \n");
//Pegar e salvar o número que o usuário digitar;
scanf("%d", &myNum);
// Escrever o número digitado pelo usuário;
printf("Seu numero e: %d", myNum);
//Sairá:
//Escreva um numero:
//1
//Seu numero e: 1
A função scanf()
toma dois argumentos: o tipo da variável e a referência da operação, que armazena o endereço de memória da variável.
Nesse caso, o scanf()
espera um número inteiro ser digitado pelo usuário. Caso qualquer coisa que não seja o que o computador espera seja inserida, isso acontece:

Curiosidade: O número “32758” aparece em vez de algo como “0” por causa do jeito que o tipo das variáveis é operado pela linguagem C: 32758 é o número máximo para uma variável do tipo int
.
Scanf() - Múltiplos Inputs
Ao contrário do comando “leia” do VisualG, a função scanf()
consegue armazenar duas variáveis ao mesmo tempo:
int myNum;
char myChar;
printf("Digite um numero e uma letra e pressione enter: \n");
scanf("%d %c", &myNum, &myChar);
printf("Seu numero e: %d\n", myNum);
printf("Sua letra e: %c\n", myChar);
//Sairá:
//Digite um numero e uma letra e pressione enter:
//3 M
//Seu numero e: 3
//Sua letra e: M
Scanf() - Ler uma linha de texto
Em conjunto com as strings
, a função scanf()
também consegue ler grandes linhas de texto:
char firstName[30];
printf("Enter your first name: \n");
scanf("%s", firstName);
printf("Hello %s", firstName);
Nota: o string
não inclui palavras depois de um espaço, pois ele lê o espaço como o fim do comando.
Para resolver esse problema, precisamos utilizar esses comandos: fgets()
para ler uma linha de texto. A sintaxe deve seguir: variável, sizeof
(string_name), e stdin
:
char fullName[30];
printf("Digite seu nome inteiro: \n");
fgets(fullName, sizeof(fullName), stdin);
printf("Ola %s", fullName);
// Digite seu nome inteiro:
// Maria Cecília
// Ola Maria Cecília
Strings e String
Como já dito anteriormente, usamos string
quando queremos guardar mais do que uma só letra (char
).
char greetings[] = "Hello World!";
Ao contrário de várias linguagens de programação, o C não possui um tipo de variável específico para guardar texto- portanto, usamos um vetor (que é o string
), podendo ser escrito dessa forma:
char greetings[] = "Hello World!";
printf("%c", greetings[0]);
//Sairá: H
Nota: estamos usando o especificador “%c
" para imprimir apenas uma letra. Quando utilizamos o comandostring
normalmente, utilizamos o especificador próprio dele: “%s
".
Sabendo que strings
não são nada mais do que um vetor, podemos fazer todo tipo de coisa baseado nisso:
char greetings[] = "Hello World!";
greetings[0] = 'J';
printf("%s", greetings);
// Sairá Jello World! em vez de Hello World!
//Loopagem de uma string
char carName[] = "Volvo";
int i;
for (i = 0; i < 5; ++i) {
printf("%c\n", carName[i]);
}
//Sairá: V o l v o
Strings - Funções especiais
Utilizando do <string.h>
no cabeçalho de seu código, temos acesso à diferentes comandos com o string:
Contagem de strings:
char alfabeto[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
printf("%zu", strlen(alfabeto));
//Sairá: 26
Comando utilizados:strlen
e%zu
Combinação de strings:
char str1[20] = "Hello ";
char str2[] = "World!";
// Combinar str1 com str2, combinação armazenada na str1
strcat(str1, str2);
// Print str1
printf("%s", str1);
//Sairá: Hello World!
Comando utilizado: strcat
Copiar strings:
char str1[20] = "Hello World!";
char str2[20];
// Copy str1 to str2
strcpy(str2, str1);
// Print str2
printf("%s", str2);
Comando utilizado: strcpy
Comparação de strings:
char str1[] = "Oi";
char str2[] = "Oi";
char str3[] = "Ola";
printf("%d\n", strcmp(str1, str2)); // Retorna 0 (as strings são iguais)
printf("%d\n", strcmp(str1, str3)); // Retorna -4 (as strings não são iguais)
Comando utilizado: strcmp
7 - Prática
Faça todos os exercícios das listas 01 e 02 utilizando a linguagem C.
Copyleft 🄯 2025 - Professor Mauro Borges França.