
AULA 25 · 22/10
Lógica e Linguagem de Programação
Primeira aula em C
Do Portugol Studio para uma linguagem usada fora da sala de aula.
#include <stdio.h>
Prof. Vitor Hugo LopesCST em Sistemas para Internet · IFRS Campus Porto Alegre
00—Abertura
Hoje a gente troca de linguagem
A lógica continua.
A forma de escrever muda.
Portugol Studio→C
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS02 / 48
00—Abertura
O caminho de hoje
1estrutura do programa
2primeiro código
3tipos
4printf
5scanf
6operadores
7decisões
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS03 / 48
01—O que muda quando chegamos ao C
O que continua e o que muda
Continua igual
pensar passo a passo
usar variáveis e expressões
tomar decisões
testar valores
Muda em C
o código precisa ser compilado
informamos formatos como %d e %f
várias instruções terminam com ;
maiúsculas e minúsculas são diferentes
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS04 / 48
01—O que muda quando chegamos ao C
A estrutura mínima
programa.porPortugol Studio
programa
{
funcao inicio()
{
}
}
programa.cC
#include <stdio.h>
int main(void) {
return 0;
}
A execução começava em inicio. Em C, ela começa em main. As chaves { } continuam marcando um bloco de código.
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS05 / 48
01—O que muda quando chegamos ao C
O que significa cada linha
programa.cC
#include <stdio.h>1
int main(void) {2
return 0;3
}4
1#include <stdio.h>
permite usar entrada e saída.
2int main(void)
é onde o programa começa.
3return 0;
informa que o programa terminou normalmente.
4{ ... }
delimita o corpo da função.
Não precisa decorar agora: esta estrutura é o ponto de partida dos nossos programas.
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS06 / 48
01—O que muda quando chegamos ao C
Escrever, compilar, executar
arquivo .c
o código que escrevemos
compilador
analisa e traduz
executável
o programa que roda
aviso
não impede, mas indica algo suspeito
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS07 / 48
01—O que muda quando chegamos ao C
Três detalhes que vão aparecer o tempo todo
01
; no fim
Instruções terminam com ponto e vírgula.
02
printf ≠ Printf
Maiúsculas e minúsculas são diferentes.
03
"Olá" e 'A'
Texto usa aspas duplas; um caractere usa aspas simples.
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS08 / 48
02—Primeiro programa
Olá, mundo
ola.cC
#include <stdio.h>
int main(void) {
printf("Olá, mundo!\n");
return 0;
}
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS09 / 48
02—Primeiro programa
O que o printf fez
printf("Olá, mundo!\n");
1printf
chama a função de saída
2"..."
o texto que será mostrado
3\n
muda para a próxima linha
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS10 / 48
02—Primeiro programa
Vamos quebrar o código
01
tirar o ;
error: expected ';' after expression
erro02
escrever Printf
error: call to undeclared function 'Printf'
erro03
tirar o \n
Funciona, mas a saída fica na mesma linha do terminal.
compilaAtividade: compile o programa e troque “Olá, mundo!” por uma frase sua.
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS11 / 48
03—Tipos e variáveis
Os tipos que vamos usar hoje
Portugol Studio
C
Guarda
Exemplo
inteiro
int
número inteiro
19
real
float
número com parte decimal
1.75
caracter
char
um caractere
'M'
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS12 / 48
03—Tipos e variáveis
Declarando variáveis
variaveis.porPortugol Studio
inteiro idade = 19
real altura = 1.75
caracter turno = 'M'
variaveis.cC
int idade = 19;
float altura = 1.75;
char turno = 'M';
tipo→nome→valora ordem continua a mesma. A novidade é o ;
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS13 / 48
03—Tipos e variáveis
Texto não é char
char letra = 'A'; // um caractere
printf("Aula de C\n"); // um texto
'A'
char guarda um caractere.
"Aula de C"
Palavra ou frase precisa de outra estrutura: veremos em vetores e cadeias de caracteres.
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS14 / 48
03—Tipos e variáveis
Variável precisa ter valor antes de ser usada
1 · declarar
int idade;
cria a variável.
→
2 · atribuir
idade = 19;
coloca um valor nela.
→
3 · usar
printf("%d\n", idade);
agora é seguro mostrar.
Usar uma variável local antes de atribuir um valor pode produzir comportamento indefinido.
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS15 / 48
04—Saída com printf
Por que aparecem %d, %f e %c?
O printf recebe um texto e precisa saber como encaixar cada valor nesse texto.
printf("Idade: %d\n", idade);
No Portugol Studio, escreva identificava o tipo sozinho. Em C, o texto de formato diz como cada valor deve ser interpretado.
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS16 / 48
04—Saída com printf
Os formatos de hoje
Formato
Pense em
Usado com
Exemplo
%f
ponto flutuante
float
1.750000
%.2f
real com 2 casas
float
1.75
O % avisa que ali entra um valor. A letra diz como mostrá-lo.
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS17 / 48
04—Saída com printf
Lendo um printf
printf("Idade: %d anos\n", idade);
"Idade: texto fixo
%dlugar reservado para um inteiro
anosmais texto fixo
\npróxima linha
idadevalor que entra no lugar de %d
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS18 / 48
04—Saída com printf
Mais de um valor
printf("%c tem %d anos e %.2f m\n", inicial, idade, altura);
O printf associa pela ordem: primeiro formato com o primeiro valor, segundo com o segundo, e assim por diante.
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS19 / 48
04—Saída com printf
%f e %.2f
float preco = 12.5;
printf("%f\n", preco); // 12.500000
printf("%.2f\n", preco); // 12.50
printf("%.1f\n", preco); // 12.5
saída
12.500000
12.50
12.5
O .2 não altera o valor guardado. Ele só controla como o número aparece na tela.
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS20 / 48
04—Saída com printf
Outros dois códigos úteis
printf("Bateria: 80%%\n");
Código
Resultado
%%
mostra o símbolo % (um % sozinho começaria um formato)
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS21 / 48
04—Saída com printf
O formato precisa combinar com o valor
float altura = 1.75;
printf("%d\n", altura); // errado
printf("%.2f\n", altura); // correto
warning: format specifies type 'int' but the argument has type 'float'
Não é só uma formatação feia: o formato diz “vou receber um inteiro”, mas o valor enviado é real. O resultado deixa de ser confiável.
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS22 / 48
04—Saída com printf
Sua vez
Declare e mostre, uma informação por linha:
int
a carga da bateria, com %
float
o preço, com duas casas decimais
char
a primeira letra da marca
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS23 / 48
05—Entrada com scanf
De leia para scanf
Portugol Studio
leia(idade)
→
O objetivo é o mesmo: ler um valor e guardá-lo numa variável. Em C, informamos o tipo do valor e onde ele será guardado.
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS24 / 48
05—Entrada com scanf
Lendo um scanf
scanf("%d", &idade);
1scanf
chama a função de entrada
2"%d"
espera que a pessoa digite um inteiro
3&idade
indica onde esse inteiro será guardado
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS25 / 48
05—Entrada com scanf
Por que existe o &?
scanf("%d", &idade);
&idade = endereço da caixa idade
“guarde aqui”
valor digitado pela pessoa
O scanf precisa modificar a variável, por isso recebe o endereço dela. Hoje basta lembrar: na variável que estamos lendo, o scanf usa &.
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS26 / 48
05—Entrada com scanf
Programa completo: ler e mostrar
#include <stdio.h>
int main(void) {
int idade;
printf("Digite sua idade: ");
scanf("%d", &idade);
printf("Você tem %d anos.\n", idade);
return 0;
}
execução
Digite sua idade: 19
Você tem 19 anos.
teclado→scanf→idade→printf→tela
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS27 / 48
05—Entrada com scanf
Formatos na entrada
Variável
scanf
int idade
scanf("%d", &idade);
float altura
scanf("%f", &altura);
char inicial
scanf(" %c", &inicial);
Assim como no printf, o formato precisa combinar com o tipo da variável.
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS28 / 48
05—Entrada com scanf
O espaço antes de %c
scanf("%d", &idade);
scanf(" %c", &inicial);
Depois da idade, fica um Enter na entrada. Sem o espaço, o %c leria esse Enter como se fosse o caractere.
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS29 / 48
05—Entrada com scanf
printf e scanf lado a lado
printf
scanf
função
mostra um valor
lê um valor
formato
diz como mostrar
diz o que esperar
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS30 / 48
05—Entrada com scanf
Sua vez
Leia o ano de nascimento e mostre: Em 2026, você completa X anos.
Pistas
✓int ano;
✓%d
✓&ano
✓2026 - ano
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS31 / 48
06—Operadores
A divisão depende dos tipos
printf("%d\n", 7 / 2);
printf("%d\n", 7 % 2);
printf("%.1f\n", 7 / 2.0);
Antes de executar: quais são as três saídas?
Inteiro / inteiro produz um inteiro. Se um dos valores for real, a parte decimal é preservada. % é o resto da divisão.
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS32 / 48
06—Operadores
A média que perde a parte decimal
int n1 = 7;
int n2 = 8;
printf("%.1f\n", (n1 + n2) / 2.0);
Com / 2, a conta daria 7. Guardar em float depois não recupera a parte decimal descartada: a divisão precisa ser real desde o começo.
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS33 / 48
06—Operadores
Operadores lógicos
Os relacionais continuam iguais
> < >= <= == !=
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS34 / 48
06—Operadores
Sua vez
Leia duas notas inteiras e mostre a média com uma casa decimal.
Antes de programar
Qual será o resultado para 7 e 8?
Pense também
Onde precisa aparecer um valor real?
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS35 / 48
07—Decisão
A mesma decisão nas duas linguagens
nota.porPortugol Studio
se (nota >= 7) {
escreva("Aprovado\n")
} senao {
escreva("Ainda não\n")
}
nota.cC
if (nota >= 7) {
printf("Aprovado\n");
} else {
printf("Ainda não\n");
}
A estrutura é praticamente a mesma: condição entre parênteses e blocos entre chaves.
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS36 / 48
07—Decisão
Três caminhos
if (nota >= 7) {
printf("Aprovado\n");
} else if (nota >= 5) {
printf("Recuperação\n");
} else {
printf("Reprovado\n");
}
As condições são testadas de cima para baixo. Quando uma é verdadeira, os demais caminhos não executam.
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS37 / 48
07—Decisão
Teste antes de executar
Preencha a saída no papel antes de rodar. O — indica que a condição nem chega a ser testada.
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS38 / 48
07—Decisão
Uma condição com &&
if (idade >= 16 && ingresso == 'S') {
printf("Entrada liberada\n");
} else {
printf("Entrada negada\n");
}
Em C, 'S' e 's' são caracteres diferentes.
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS39 / 48
07—Decisão
= e ==
x == 5
pergunta se x vale 5
if (x = 5) { // errado: atribui 5
/* ... */
}
warning: using the result of an assignment as a condition
Esse erro compila: 5 é diferente de zero, então a condição é sempre verdadeira. É um aviso que não deve ser ignorado.
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS40 / 48
07—Decisão
Sua vez
Leia uma nota real e mostre Aprovado, Recuperação ou Reprovado.
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS41 / 48
08—switch
Quando o switch ajuda
if
bom para intervalos
nota >= 7
switch
bom para opções exatas
1, 2 ou 3
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS42 / 48
08—switch
Um menu com switch
switch (opcao) {
case 1:
printf("Pedidos\n");
break;
case 2:
printf("Carrinho\n");
break;
case 3:
printf("Perfil\n");
break;
default:
printf("Opção inválida\n");
}
Portugol Studio → C
escolha→switch
caso→case
pare→break
caso contrario→default
O break encerra o caso atual.
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS43 / 48
08—switch
Sem break, a execução continua
switch (opcao) {
case 1:
printf("Pedidos\n");
break;
case 2:
printf("Carrinho\n");
// sem break
case 3:
printf("Perfil\n");
break;
default:
printf("Opção inválida\n");
}
Opção 2: o que aparece?
Sem break no caso 2, C continua no caso 3 e só para no break dele. No Portugol Studio, o pare cumpria esse papel.
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS44 / 48
09—Fechamento
Cinco perguntas rápidas
1Para que serve %d?
2Qual formato usamos com float no scanf?
3Por que scanf recebe &idade?
4Quanto vale 9 / 2 com dois inteiros?
5Qual é a diferença entre = e ==?
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS45 / 48
09—Fechamento
O mapa da tradução
Portugol Studio
C
funcao inicio()
int main(void)
escolha / caso
switch / case
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS46 / 48
09—Fechamento
O que mudou de verdade
o programa passa por um compilador;
entrada e saída usam textos de formato;
tipos precisam combinar com %d, %f e %c;
scanf precisa do endereço da variável;
a lógica das decisões continua a mesma.
LÓGICA E LINGUAGEM DE PROGRAMAÇÃO · CST EM SISTEMAS PARA INTERNET · IFRS47 / 48


Obrigado
Dúvidas, críticas, sugestões?
vitor.silva@poa.ifrs.edu.br