Você está na página 1de 78

Linguagem C

Profa . Rose Yuri Shimizu

Rose (RYSH) Linguagem C 1 / 72


Roteiro

1 Linguagem C

2 Programas C

3 Variáveis - Tipos e Identificadores

4 Saídas

5 Operadores Aritméticos

6 Constantes

7 Entradas

Rose (RYSH) Linguagem C 2 / 72


Linguagem C

O C nasceu na década de 70;


Inventado por Dennis Ritchie, reescreveu o sistema operacional UNIX;
Originalmente UNIX foi implementado em assembly;
É derivado de uma outra linguagem: o B, criado por Ken Thompson;
É uma linguagem de programação genérica;
Utilizada para a criação de programas diversos como processadores de
texto, planilhas eletrônicas, sistemas operacionais, programas para a
automação industrial, gerenciadores de bancos de dados, etc.

Rose (RYSH) Linguagem C 3 / 72


Roteiro

1 Linguagem C

2 Programas C

3 Variáveis - Tipos e Identificadores

4 Saídas

5 Operadores Aritméticos

6 Constantes

7 Entradas

Rose (RYSH) Linguagem C 4 / 72


Programas C - Estrutura básica

stdio.h:
▶ É um cabeçalho da biblioteca (coleção de funções/informações) padrão
do C (libc) - C11
▶ “Cabeçalho padrão de entrada/saída”;
▶ Exemplos: leitura do teclado e impressão na tela, definições de
constantes, variáveis e tipos.
Função main: principal - início de execução do programa
TODA INSTRUÇÃO TERMINA COM “;”
1 #i n c l u d e < s t d i o . h>
2
3 i n t main ( ) {
4 ...
5 r e t u r n 0 ; // p a d r a o C : r e t u r n 0 s u c e s s o e nao−z e r o e r r o .
6 }
7

Rose (RYSH) Linguagem C 5 / 72


Programas C - Estrutura básica

Função de Saída - Escrita na tela


Função “printf” é a responsável por mostrar a saída na tela:
man printf
man 3 printf
Imprime tudo que está entre aspas dupla “ ”
1
2 p r i n t f ( " Al ô t o d o mundo\n" ) ;
3

Caractere de escape: \n nova linha e indica fim de linha.

Rose (RYSH) Linguagem C 6 / 72


Programas C - Estrutura básica
Vamos praticar
Digite o código:
1 #i n c l u d e < s t d i o . h>
2
3 i n t main ( )
4 {
5 p r i n t f ( " Ol á Mundo ! \ n" ) ;
6 return 0;
7 }
8

Salvar como “primeiro_programa.c”


Compilar
▶ gcc primeiro_programa.c -o primeiro_programa
▶ gcc é o compilador: traduz o código fonte escrito em linguagem C em
linguagem de máquina
Executar
▶ ./primeiro_programa
Rose (RYSH) Linguagem C 7 / 72
Roteiro

1 Linguagem C

2 Programas C

3 Variáveis - Tipos e Identificadores

4 Saídas

5 Operadores Aritméticos

6 Constantes

7 Entradas

Rose (RYSH) Linguagem C 8 / 72


Variáveis
Uma variável é uma informação que é usada dentro de um programa
C;
É um símbolo representativo capaz de representar números, letras,
palavras;
1 c = ’A ’ ;
2 num = 1 2 3 ;
3 myVariable = 5;
4

As variáveis precisam ser declaradas e inicializadas.


Rose (RYSH) Linguagem C 9 / 72
Variáveis

Antes de usar, as variáveis precisam ser declaradas:


▶ Para saber o tipo do dado armazenado
▶ Para saber o espaço (bytes) que precisa ser alocado na memória
⋆ Cada tipo ocupa um número específico de bytes
▶ O nome e o endereço (localização na memória) não mudam mas, o
valor pode mudar
▶ Quando o programa (processo) entra em execução
⋆ As variáveis são alocadas em um espaço reservado na memória
⋆ Pilha de execução: tamanho limitado
ANTES DE USAR, TEM QUE DECLARAR

Rose (RYSH) Linguagem C 10 / 72


Variáveis

Rose (RYSH) Linguagem C 11 / 72


Variáveis

Sintaxe: tipo nome_variavel;


1 #i n c l u d e < s t d i o . h>
2
3 i n t main ( ) {
4 int x ;
5 x = 9;
6
7 char l e t r a ;
8 letra = ’p ’ ;
9
10 return 0;
11 }
12

Rose (RYSH) Linguagem C 12 / 72


Variáveis
Tipos de dados em C
int: armazena números inteiros;
char:
▶ Armazena caracteres
▶ É um símbolo (uma letra do alfabeto, um dígito, um símbolo de
pontuação, etc)
▶ Cada caractere (ocupa 1 byte) é associado um valor (256 possibilidades
- 28 )
▶ Representado entre apóstrofes (’)
⋆ ’C’, ’a’, ’5’, ’$’
⋆ ’5’ é um caractere, e não um inteiro 5
float(precisão simples) e double(precisão dupla):
▶ Armazena números reais (números com o ponto decimal);
▶ Armazenados em 3 partes: o bit de sinal, mantissa e o expoente;
▶ A mantissa tem apenas um dígito para a esquerda do ponto decimal.
Desta forma, 3634.1 é escrito como 3.6341e3, e 0.0000341 é escrito
3.41e-5.

Rose (RYSH) Linguagem C 13 / 72


Variáveis
Representação de Números - Sistema binário
Representar números na base 2;
101b = 1 ∗ 22 + 0 ∗ 21 + 1 ∗ 20 = 5d
A quantidade de bits(n) indica quantos números podem ser
representados: 2n números distintos:
Decimal Binário (2 bits → 22 = 4 → 0-3) 3 bits → 23 = 8 → 0-7
0 00 000
1 01 001
2 10 010
3 11 011
4 - 100
5 - 101
6 - 110
7 - 111
1 BYTE: grupo de 8 bits
Portanto, quanto mais números queremos representar, mais bits são
necessário.
Rose (RYSH) Linguagem C 14 / 72
Variáveis
Representação de Caracteres
Cada caractere é representado por 8 bits → 1 byte
Cada caractere → número;
Segue a tabela ASCII

Rose (RYSH) Linguagem C 15 / 72


Variáveis
Tipos de dados: representação em bits
Tipo Tamanho Intervalo
char 8 bits -128 - 127
short 16 bits -32768 - 32767
unsigned short 16 0 to 65535
int 32 bits -2147483648 - 2147483647
unsigned int 32 0 to 4294967295
long 64 bits -9223372036854775808 -
9223372036854775807
long long 64 bits -9223372036854775808 -
9223372036854775807
unsigned long long int 64 0 to 18446744073709551615
float 32 bits -1.17549e-38 - 3.40282e+38
double 64 bits -2.22507e-308 - 1.79769e+308
float: 6 dígitos de precisão decimal
double: 15 dígitos de precisão decimal

Rose (RYSH) Linguagem C 16 / 72


Variáveis
Tipos de dados na memória

Figura: https://xerxes.cs.manchester.ac.uk/comp251/kb/images/variables.png

Rose (RYSH) Linguagem C 17 / 72


Variáveis

Identificadores/Nomes das variáveis


DEVE COMEÇAR com uma letra ou com ’_’;

Seguido de qualquer sequência de letras, digitos, e ’_’;


▶ hora_inicio, tempo, var1 são nomes de variáveis válidos;
▶ 3horas, total$ e azul-claro são nomes inválidos.

Maiúsculas ̸= Minúsculas → case sensitive;

Não são permitidos nomes ou palavras reservadas da linguagem (char,


const, continue, default, do, double, else, etc.)

Rose (RYSH) Linguagem C 18 / 72


Variáveis
Declaração de variáveis e Atribuição (inicialização)
Exemplos:
1 i n t main ( )
2 {
3 // D e c l a r a c a o de v a r i a v e i s
4 i n t pera ;
5 char qualidade ;
6 f l o a t peso ;
7
8 // I n i c i a l i z a c a o de v a r i a v e i s p o r a t r i b u i c a o
9 pera = 3;
10 q u a l i d a d e = ’A ’ ;
11 peso = 0 . 6 5 3 ;
12
13 // I n i c i a l i z a c a o na d e c l a r a c a o
14 i n t maca = 1 ;
15 }

Valores às variáveis usando o operador de atribuição (=).


Rose (RYSH) Linguagem C 19 / 72
Variáveis
Compatibilidade de dados na atribuição de valor Se tentarmos colocar
um valor diferente do tipo esperado da variável? Alguns casos:
Declaramos um int e colocamos um char
▶ Os literais de caracteres são, nativamente, do tipo int;
1 /∗ ASCII ( man a s c i i ) ∗/
2 i n t num = ’A ’ ;
3 p r i n t f ( "%d\n" , num ) ; //A??
4

Declaramos um int e colocamos um float


▶ 77.33 → 77: perde-se a parte decimal.
Overflow - declaramos um short e colocamos um valor maior
que o máximo
▶ Valor incorreto
▶ Fiquem atentos a capacidade de cada tipo, senão pode computar
incorretamente mesmo com a lógica correta do programa.

Rose (RYSH) Linguagem C 20 / 72


Resumo

TODA INSTRUÇÃO TERMINA COM ;

ANTES DE USAR, TEM QUE DECLARAR

Linguagem fortemente tipada

Variáveis, associadas:
▶ Um tipo: quantos bytes ocupa, e como ela deve ser interpretada
▶ Um nome: um identificador
▶ Um endereço: o endereço do byte menos significativo do local da
memória associado a variável
▶ Um valor: o conteúdo da variável

Rose (RYSH) Linguagem C 21 / 72


Exercício - Variáveis - Quais são os erros?
1 #i n c l u d e < s t d i o . h>
2 i n t main ( )
3 {
4 // D e c l a r a c a o de v a r i a v e i s
5 i n t b e i j a −f l o r ;
6 i n t pera ;
7 f l o a t 9p ;
8 f l o a t peso
9 char A;
10
11 // I n i c i a l i z a c a o de v a r i a v e i s p o r a t r i b u i c a o
12 pera = 3;
13 A = ’A ’ ;
14 A = "B" ;
15 peso = 0 ,653;
16
17 // I n i c i a l i z a c a o na d e c l a r a c a o
18 i n t maca = 1 ;
19
20 return 0;
21 }
Rose (RYSH) Linguagem C 22 / 72
Exercício - Preencha a tabela abaixo com os valores
assumidos por todas as variáveis no decorrer do código.
1 #i n c l u d e < s t d i o . h>
linha A B C
2 i n t main ( )
3 { 5
4 // D e c l a r a c a o de v a r i a v e i s 6
5 i n t A; 7
6 f l o a t B;
10
7 char C;
8
11
9 // I n i c i a l i z a c a o de v a r i a v e i s 12
por a t r i b u i c a o 14
10 A = 68; 15
11 B = 9.9;
12 C = ’p ’ ; 16
13
14 C = A; Vamos assumir que:
15 A = B; - variável não existe
16
17 return 0; ? variável existe, mas sem
18 } valor
Rose (RYSH) Linguagem C 23 / 72
Exercício - Preencha a tabela abaixo com os valores
assumidos por todas as variáveis no decorrer do código.
1 #i n c l u d e < s t d i o . h>
linha A B C
2 i n t main ( )
3 { 5 ? - -
4 // D e c l a r a c a o de v a r i a v e i s 6
5 i n t A; 7
6 f l o a t B;
10
7 char C;
8
11
9 // I n i c i a l i z a c a o de v a r i a v e i s 12
por a t r i b u i c a o 14
10 A = 68; 15
11 B = 9.9;
12 C = ’p ’ ; 16
13
14 C = A; Vamos assumir que:
15 A = B; - variável não existe
16
17 return 0; ? variável existe, mas sem
18 } valor
Rose (RYSH) Linguagem C 24 / 72
Exercício - Preencha a tabela abaixo com os valores
assumidos por todas as variáveis no decorrer do código.
1 #i n c l u d e < s t d i o . h>
linha A B C
2 i n t main ( )
3 { 5 ? - -
4 // D e c l a r a c a o de v a r i a v e i s 6 ? ? -
5 i n t A; 7 ? ? ?
6 f l o a t B;
10
7 char C;
8
11
9 // I n i c i a l i z a c a o de v a r i a v e i s 12
por a t r i b u i c a o 14
10 A = 68; 15
11 B = 9.9;
12 C = ’p ’ ; 16
13
14 C = A; Vamos assumir que:
15 A = B; - variável não existe
16
17 return 0; ? variável existe, mas sem
18 } valor
Rose (RYSH) Linguagem C 25 / 72
Exercício - Preencha a tabela abaixo com os valores
assumidos por todas as variáveis no decorrer do código.
1 #i n c l u d e < s t d i o . h>
linha A B C
2 i n t main ( )
3 { 5 ? - -
4 // D e c l a r a c a o de v a r i a v e i s 6 ? ? -
5 i n t A; 7 ? ? ?
6 f l o a t B;
10 68 ? ?
7 char C;
8
11
9 // I n i c i a l i z a c a o de v a r i a v e i s 12
por a t r i b u i c a o 14
10 A = 68; 15
11 B = 9.9;
12 C = ’p ’ ; 16
13
14 C = A; Vamos assumir que:
15 A = B; - variável não existe
16
17 return 0; ? variável existe, mas sem
18 } valor
Rose (RYSH) Linguagem C 26 / 72
Exercício - Preencha a tabela abaixo com os valores
assumidos por todas as variáveis no decorrer do código.
1 #i n c l u d e < s t d i o . h>
linha A B C
2 i n t main ( )
3 { 5 ? - -
4 // D e c l a r a c a o de v a r i a v e i s 6 ? ? -
5 i n t A; 7 ? ? ?
6 f l o a t B;
10 68 ? ?
7 char C;
8
11 68 9.9 ?
9 // I n i c i a l i z a c a o de v a r i a v e i s 12
por a t r i b u i c a o 14
10 A = 68; 15
11 B = 9.9;
12 C = ’p ’ ; 16
13
14 C = A; Vamos assumir que:
15 A = B; - variável não existe
16
17 return 0; ? variável existe, mas sem
18 } valor
Rose (RYSH) Linguagem C 27 / 72
Exercício - Preencha a tabela abaixo com os valores
assumidos por todas as variáveis no decorrer do código.
1 #i n c l u d e < s t d i o . h>
linha A B C
2 i n t main ( )
3 { 5 ? - -
4 // D e c l a r a c a o de v a r i a v e i s 6 ? ? -
5 i n t A; 7 ? ? ?
6 f l o a t B;
10 68 ? ?
7 char C;
8
11 68 9.9 ?
9 // I n i c i a l i z a c a o de v a r i a v e i s 12 68 9.9 ‘p’
por a t r i b u i c a o 14
10 A = 68; 15
11 B = 9.9;
12 C = ’p ’ ; 16
13
14 C = A; Vamos assumir que:
15 A = B; - variável não existe
16
17 return 0; ? variável existe, mas sem
18 } valor
Rose (RYSH) Linguagem C 28 / 72
Exercício - Preencha a tabela abaixo com os valores
assumidos por todas as variáveis no decorrer do código.
1 #i n c l u d e < s t d i o . h>
linha A B C
2 i n t main ( )
3 { 5 ? - -
4 // D e c l a r a c a o de v a r i a v e i s 6 ? ? -
5 i n t A; 7 ? ? ?
6 f l o a t B;
10 68 ? ?
7 char C;
8
11 68 9.9 ?
9 // I n i c i a l i z a c a o de v a r i a v e i s 12 68 9.9 ‘p’
por a t r i b u i c a o 14 68 9.9 ‘D’
10 A = 68; 15
11 B = 9.9;
12 C = ’p ’ ; 16
13
14 C = A; obs.: pela tabela ascii
15 A = B; 48 ‘0’ 49 ‘1’ 50 ‘2’ ... 57 ‘9’
16 return 0;
17 } 65 ‘A’ 66 ‘B’ 67 ‘C’ ... 90 ‘Z’

Rose (RYSH) Linguagem C 29 / 72


Exercício - Preencha a tabela abaixo com os valores
assumidos por todas as variáveis no decorrer do código.
1 #i n c l u d e < s t d i o . h>
linha A B C
2 i n t main ( )
3 { 5 ? - -
4 // D e c l a r a c a o de v a r i a v e i s 6 ? ? -
5 i n t A; 7 ? ? ?
6 f l o a t B;
10 68 ? ?
7 char C;
8
11 68 9.9 ?
9 // I n i c i a l i z a c a o de v a r i a v e i s 12 68 9.9 ‘p’
por a t r i b u i c a o 14 68 9.9 ‘D’
10 A = 68; 15 9 9.9 ‘D’
11 B = 9.9;
12 C = ’p ’ ; 16
13
14 C = A; obs.: pela tabela ascii
15 A = B; 48 ‘0’ 49 ‘1’ 50 ‘2’ ... 57 ‘9’
16
17 return 0; 65 ‘A’ 66 ‘B’ 67 ‘C’ ... 90 ‘Z’
18 }
Rose (RYSH) Linguagem C 30 / 72
Exercício - Preencha a tabela abaixo com os valores
assumidos por todas as variáveis no decorrer do código.
1 #i n c l u d e < s t d i o . h>
linha A B C
2 i n t main ( )
3 { 5 ? - -
4 // D e c l a r a c a o de v a r i a v e i s 6 ? ? -
5 i n t A; 7 ? ? ?
6 f l o a t B;
10 68 ? ?
7 char C;
8
11 68 9.9 ?
9 // I n i c i a l i z a c a o de v a r i a v e i s 12 68 9.9 ‘p’
por a t r i b u i c a o 14 68 9.9 ‘D’
10 A = 68; 15 9 9.9 ‘D’
11 B = 9.9;
12 C = ’p ’ ; 16 9 9.9 ‘D’
13
14 C = A; obs.: pela tabela ascii
15 A = B; 48 ‘0’ 49 ‘1’ 50 ‘2’ ... 57 ‘9’
16
17 return 0; 65 ‘A’ 66 ‘B’ 67 ‘C’ ... 90 ‘Z’
18 }
Rose (RYSH) Linguagem C 31 / 72
Roteiro

1 Linguagem C

2 Programas C

3 Variáveis - Tipos e Identificadores

4 Saídas

5 Operadores Aritméticos

6 Constantes

7 Entradas

Rose (RYSH) Linguagem C 32 / 72


Função printf()

Pode ser utilizado para imprimir na tela mensagens e valores;


Imprimir mensagens:
1 // i m p r i m e t u d o que e s t a e n t r e a s p a s d u p l a
2 p r i n t f ( " A l o mundo\n" ) ;
3

\n nova linha e fim de linha.


Imprimir mensagens com valores de variáveis:
1 int X = 3;
2 int Y = 2;
3
4 // |−−−−−−−−−−−−−−−−−|
5 p r i n t f ( "X v a l e %d e Y v a l e %d\n" , X , Y) ;
6 // |−−−−−−−−|
7

Rose (RYSH) Linguagem C 33 / 72


Função printf()

Tudo que está entre aspas dupla será impresso na tela;


Especificadores de formato: tipo do dado que será substituído pelo
valor da variável
man 3 printf
Tipo Especificador
int %d
long %ld
char %c
float %f
double %lf

Rose (RYSH) Linguagem C 34 / 72


Função printf()
1 #i n c l u d e < s t d i o . h>
2
3 i n t main ( ) {
4 i n t a = 10;
5 float c = 3.12;
6 double d = 555121.42;
7
8 char l e t r a ;
9 letra = ’e ’ ;
10
11 printf ( " I n t e i r o %d \n" , a ) ;
12 printf ( " C a r a c t e r e %c \n" , l e t r a ) ;
13 printf ( " F l o a t %f \n" , c ) ;
14 printf ( " Double % l f \n" , d ) ;
15 printf ( " E x p r e s s o e s %c = %d + %d \n" , b , a , a ) ;
16
17 p r i n t f ( " Ola Mundo ! \ n" ) ;
18 p r i n t f ( "%c %d\n" , e , e ) ;
19 return 0;
20 }

Rose (RYSH) Linguagem C 35 / 72


Função printf()

Relembrando
Salvar como “meu_programa.c”
Compilar
▶ gcc meu_programa.c -o meu_programa
▶ gcc é o compilador: traduz o código fonte escrito em linguagem C em
linguagem de máquina
Executar
▶ ./meu_programa

Rose (RYSH) Linguagem C 36 / 72


Roteiro

1 Linguagem C

2 Programas C

3 Variáveis - Tipos e Identificadores

4 Saídas

5 Operadores Aritméticos

6 Constantes

7 Entradas

Rose (RYSH) Linguagem C 37 / 72


Operadores Aritméticos em C
Operador de Atribuição =:
▶ Este é o operador usado para transferir o resultado de uma expressão
para uma variável. Por exemplo:
⋆ soma = a + b;
⋆ pi = 3.1415;
⋆ letra = ’f’;
⋆ Atenção: (soma = a + b) ̸= (a + b = soma)
Operadores Aritméticos:
Operador Exemplo
+ (adição) x=y+1
- (subtração) x=y-1
/ (divisão) x = y/z
* (multiplicação) x = y*10
% (resto) x = y%4
++ (mais um) ++x → x = x + 1
−− (menos um) −−x → x = x - 1

Rose (RYSH) Linguagem C 38 / 72


Operadores Aritméticos em C

Expressão aritmética - Precedência dos operadores


1 ()
2 ++ −−
3 ∗/%
4 +−
5 =
Exemplo:
▶ a ∗ b/c + 30 − + + e
▶ (((a ∗ b)/c) + 30) − (+ + e)

Rose (RYSH) Linguagem C 39 / 72


Operadores Aritméticos em C
Vamos praticar
1 Faça um algoritmo com duas variáveis inteiras, com os valores 12 e
33, imprima seus valores e a soma deles na tela .
2 Faça um algoritmo que imprima a mensagem “Programar é fácil!”.
3 Faça um algoritmo com uma variável do tipo caractere para cada letra
do seu nome e imprima a mensagem: “Meu nome é Fulano”. Sendo
que o seu nome deve ser impresso através do conteúdo das variáveis.
Desenvolvimento de Programa
1 Leia e interprete o problema;
2 Separe:
⋆ Dados e valores;
⋆ Ações;
3 Desenvolva o algoritmo: pense no passo a passo para a resolução;
4 Implemente o programa.

Rose (RYSH) Linguagem C 40 / 72


Vamos praticar 1

20 + 5 × 9
10

Rose (RYSH) Linguagem C 41 / 72


Vamos praticar 1

20 + 5 × 9
10

1 #i n c l u d e < s t d i o . h>
2
3 i n t main ( )
4 {
5 p r i n t f ( "%d\n" ,(20+5∗9) / 1 0 ) ;
6 return 0;
7 }
8

Rose (RYSH) Linguagem C 41 / 72


Vamos praticar 2

a×4
+ p × 6 (a valendo 3 e p valendo 23)
2

Rose (RYSH) Linguagem C 42 / 72


Vamos praticar 2

a×4
+ p × 6 (a valendo 3 e p valendo 23)
2

1 #i n c l u d e < s t d i o . h>
2
3 i n t main ( )
4 {
5 i n t a =3;
6 i n t p =23;
7 p r i n t f ( "%d\n" , ( a ∗ 4 ) /2+p ∗ 6 ) ;
8 return 0;
9 }
10

Rose (RYSH) Linguagem C 42 / 72


Vamos praticar

a = a + 1 (a valendo 111)

Rose (RYSH) Linguagem C 43 / 72


Vamos praticar

a = a + 1 (a valendo 111)

1 #i n c l u d e < s t d i o . h>
2
3 i n t main ( )
4 {
5 i n t a =111;
6 a=a +1;
7 // a++;
8 // a+=1;
9 p r i n t f ( "%d \n" , a ) ;
10 return 0;
11 }
12

Rose (RYSH) Linguagem C 43 / 72


Vamos praticar

b = b/3 (b valendo 9)

Rose (RYSH) Linguagem C 44 / 72


Vamos praticar

b = b/3 (b valendo 9)

1 #i n c l u d e < s t d i o . h>
2
3 i n t main ( )
4 {
5 i n t b =9;
6 b=b / 3 ;
7 // b /=3;
8 p r i n t f ( "%d \n" , b ) ;
9 return 0;
10 }
11

Rose (RYSH) Linguagem C 44 / 72


Vamos praticar

b = b + 2 (b valendo 9)

Rose (RYSH) Linguagem C 45 / 72


Vamos praticar

b = b + 2 (b valendo 9)

1 #i n c l u d e < s t d i o . h>
2
3 i n t main ( )
4 {
5 i n t b =9;
6 b=b +2;
7 // b+=2;
8 p r i n t f ( "%d \n" , b ) ;
9 return 0;
10 }
11

Rose (RYSH) Linguagem C 45 / 72


Vamos praticar

a
b× (a valendo -13 e b valendo 7)
2

Rose (RYSH) Linguagem C 46 / 72


Vamos praticar

a
b× (a valendo -13 e b valendo 7)
2

1 #i n c l u d e < s t d i o . h>
2
3 i n t main ( )
4 {
5 i n t a=−13;
6 i n t b =7;
7 p r i n t f ( "%d \n" , b ∗ ( a / 2 ) ) ;
8 return 0;
9 }
10

Rose (RYSH) Linguagem C 46 / 72


Operações aritméticas com inteiros
1 #i n c l u d e < s t d i o . h>
2
3 i n t main ( )
4 {
5 float x ,y;
6 x =5/2;
7 y =2/5;
8 p r i n t f ( "%f %f \n" , x , y ) ;
9 return 0;
10 }
11

Saída: 2.000000 0.000000


Observe:
▶ 5/2 retornou 2 ao invés de 2.5
▶ 2/5 retornou 0 ao invés de 0.4
Como 5 e 2 são constantes do tipo inteiro, a divisão é convertida para
inteiro, ignorando a parte decimal.

Rose (RYSH) Linguagem C 47 / 72


Operações aritméticas com reais
1 #i n c l u d e < s t d i o . h>
2
3 i n t main ( )
4 {
5 float x ,y;
6 x =5.0/2;
7 y =2/5.0;
8 p r i n t f ( "%f %f \n" , x , y ) ;
9 return 0;
10 }
11

Saída: 2.500000 0.400000


Observe:
▶ 5/2 retornou 2.5
▶ 2/5 retornou 0.4
Basta um dos números da expressão ser constante do tipo real, para a
divisão resultar em um número real.
Rose (RYSH) Linguagem C 48 / 72
Operações aritméticas atribuídas a uma variável inteira
1 #i n c l u d e < s t d i o . h>
2
3 i n t main ( ) {
4 int x , y ;
5 x =5.0/2.0;
6 p r i n t f ( "%d\n" , x ) ;
7 // p r i n t f ("% f \n " , ( f l o a t ) x ) ;
8
9 x =5 −2.1;
10 p r i n t f ( "%d\n" , x ) ;
11 // p r i n t f ("% f \n " , ( f l o a t ) y ) ;
12
13 return 0;
14 }

Todas as saídas serão igual a 2


Observe:
▶ 5.0/2.0 retorna 2 ao invés de 2.5
▶ 5 − 2.1 retorna 2 ao invés de 2.9
Como a variável x é do tipo inteiro, qualquer operação será convertida
para inteiro, ignorando a parte decimal.
Rose (RYSH) Linguagem C 49 / 72
Roteiro

1 Linguagem C

2 Programas C

3 Variáveis - Tipos e Identificadores

4 Saídas

5 Operadores Aritméticos

6 Constantes

7 Entradas

Rose (RYSH) Linguagem C 50 / 72


Constantes x Variáveis

São números ou caracteres cujos valores não mudam;


Assim como variáveis, constantes também tem tipos (int, char, etc.);
Podem ser utilizadas diretamente:
▶ 2 e 9 são constantes e não precisa ser declarada;
▶ Obs.: ’a’ é a variável, então precisa ser declarada;
1 int a;
2 a = 2+9;
3

Podem ser declaradas através do modificador de acesso const:


1 c o n s t f l o a t num_pi = 3 . 1 4 1 5 9 ;
2 int a , b;
3 a = 10 + num_pi ;
4 b = pi + a ;
5

Rose (RYSH) Linguagem C 51 / 72


Constantes x Variáveis
Diretiva #define <nome> <valor>
1 #i n c l u d e < s t d i o . h>
2 /∗ C o m p i l a c a o : eh f e i t o um p r e −p r o c e s s a m e n t o que
s u b s t i t u i t o d a r e f e r e n c i a do nome no c o d i g o
s u b s t i t u i c a o d a s macros p e l o s s e u s v a l o r e s ∗/
3
4 // d e c l a r a c a o da c o n s t a n t e
5 #d e f i n e ICMS 0 . 1 8
6
7 i n t main ( )
8 {
9 f l o a t preco_produto , valor_icms ;
10 preco_produto = 150;
11 v a l o r _ i c m s = p r e c o _ p r o d u t o ∗ ICMS ;
12 p r i n t f ( " V a l o r do i c m s %f \n" , v a l o r _ i c m s ) ;
13 return 0;
14 }
15

Rose (RYSH) Linguagem C 52 / 72


Roteiro

1 Linguagem C

2 Programas C

3 Variáveis - Tipos e Identificadores

4 Saídas

5 Operadores Aritméticos

6 Constantes

7 Entradas

Rose (RYSH) Linguagem C 53 / 72


Função scanf

Função “scanf” é a responsável por ler a entrada do teclado;


Ler do teclado e gravar o valor nas variáveis;
O que será lido é definido através dos especificadores de formato:
▶ %d int
▶ %ld long int
▶ %c char
▶ %f float
▶ %lf double (dupla precisão)
As variáveis são passadas por referência: pelo endereço da variável;
O endereço é obtido pelo símbolo &

Rose (RYSH) Linguagem C 54 / 72


Função scanf

Rose (RYSH) Linguagem C 55 / 72


Função scanf
Exemplos de entradas

Rose (RYSH) Linguagem C 56 / 72


Função scanf
1 #i n c l u d e < s t d i o . h>
2
3 i n t main ( ) {
4 // D e c l a r a c a o de v a r i a v e i s
5 float y;
6 int x ;
7
8 // I n i c i a l i z a c a o de v a r i a v e i s p e l a e n t r a d a p a d r a o
9 s c a n f ( "%f %d" , &y , &x ) ;
10
11 // S a i d a
12 p r i n t f ( " Voce d i g i t o u %f %d\n" , y , x ) ;
13 return 0;
14 }

1 s c a n f ( "%d %d" ,&a ,&b ) ;


2 //^ nao pode t e r e s p a c o e n t r e o u l t i m a e n t r a d a e o
fecha aspas
3

Rose (RYSH) Linguagem C 57 / 72


Função scanf
Leiam o manual das funções: man scanf
Lê a entrada até consumir todos os tipos indicados na função
Espaços em branco, tab e nova linha serão “ignorados”
Por exemplo:
▶ No código: scanf(“%d %d”,&a,&b);
▶ Esta entrada irá funcionar:
⋆ 23 <enter>
⋆ 34 <enter>
▶ Esta entrada irá funcionar: 23 34 <enter>
Um caractere deverá corresponder exatamente o próximo caractere
de entrada. Exemplo:
▶ No código: scanf(“Numero %d”, &a);
▶ Esta entrada irá funcionar: Numero 23 <enter>
▶ Esta entrada não irá funcionar:
23 <enter>, ou esta, Num 23 <enter>

Rose (RYSH) Linguagem C 58 / 72


Função printf e scanf
printf
A função printf() só precisa do valor da variável para imprimi-la. Acessa
diretamente o dado pelo nome da variável.
1 int x ;
2 x = 10;
3 p r i n t f ( "%d" , x ) ;
4

scanf
A função scanf() precisa saber o endereço da variável para gravar dados
dentro dela. Acessa o endereço através do operador &.
1 int x ;
2 s c a n f ( "%d" , &x ) ;
3

Rose (RYSH) Linguagem C 59 / 72


Função scanf - formatando a entrada
Lendo um número fixo de inteiro: %w d
1 #i n c l u d e < s t d i o . h>
2 i n t main ( )
3 {
4 int x , y ;
5 s c a n f ( "%3d %2d" ,&x ,& y ) ;
6 p r i n t f ( "%d %d\n" , x , y ) ;
7 return 0;
8 }
9

Execução 1: 345 78
▶ scanf : irá ler os 3 digitos de 345 e os 2 digitos de 78
▶ printf : 345 78
Execução 2: 2654 87
▶ scanf : irá ler os 3 digitos 265 e gravar na variável x e o 4 será a
próxima entrada e gravada em y
▶ printf : 265 4

Rose (RYSH) Linguagem C 60 / 72


Vamos praticar

Rose (RYSH) Linguagem C 61 / 72


Área do círculo

1 #i n c l u d e < s t d i o . h>
2
3 i n t main ( ) {
4 // D e c l a r a c a o de v a r i a v e i s
5 double r a i o ;
6
7 // I n i c i a l i z a c a o de v a r i a v e i s p e l a e n t r a d a p a d r a o
8 s c a n f ( "% l f " ,& r a i o ) ;
9
10 // S a i d a
11 p r i n t f ( "A=%.4 l f \n" , r a i o ∗ r a i o ∗ 3 . 1 4 1 5 9 ) ;
12
13 return 0;
14 }
15

Rose (RYSH) Linguagem C 62 / 72


Vamos praticar

Rose (RYSH) Linguagem C 63 / 72


Média

1 #i n c l u d e < s t d i o . h>
2
3 i n t main ( ) {
4 // D e c l a r a c a o de v a r i a v e i s
5 double a , b ;
6
7 // I n i c i a l i z a c a o de v a r i a v e i s p e l a e n t r a d a p a d r a o
8 s c a n f ( "% l f " ,& a ) ;
9 s c a n f ( "% l f " ,&b ) ;
10
11 // S a i d a
12 p r i n t f ( "MEDIA = %.5 l f \n" , ( a ∗ 3 . 5 + 7 . 5 ∗ b ) / 1 1 ) ;
13
14 return 0;
15 }
16

Rose (RYSH) Linguagem C 64 / 72


Vamos praticar

Rose (RYSH) Linguagem C 65 / 72


Volume

1 #i n c l u d e < s t d i o . h>
2
3 i n t main ( ) {
4 // D e c l a r a c a o de v a r i a v e i s
5 int R;
6
7 // I n i c i a l i z a c a o de v a r i a v e i s p e l a e n t r a d a p a d r a o
8 s c a n f ( "%d" , &R) ;
9
10 // S a i d a
11 p r i n t f ( "VOLUME = %.3 l f \n" , ( 4 . 0 / 3 ) ∗ 3 . 1 4 1 5 9 ∗R∗R∗R) ;
12
13 return 0;
14 }
15

Rose (RYSH) Linguagem C 66 / 72


Vamos praticar

Obs: Módulo de um número - função abs() - inclua o cabeçalho stdlib.h

Rose (RYSH) Linguagem C 67 / 72


Volume
1 #i n c l u d e < s t d i o . h>
2 #i n c l u d e < s t d l i b . h>
3
4 i n t main ( ) {
5 // D e c l a r a c a o de v a r i a v e i s
6 i n t A, B, C, maior ;
7
8 // I n i c i a l i z a c a o de v a r i a v e i s p e l a e n t r a d a p a d r a o
9 s c a n f ( "%d%d%d" , &A , &B , &C) ;
10
11 // I n i c i a l i z a c a o de v a r i a v e l p o r a t r i b u i c a o
12 m a i o r = ( ( A+B)+a b s (A−B) ) / 2 ;
13 m a i o r = ( ( m a i o r+C)+a b s ( maior−C) ) / 2 ;
14
15 // S a i d a
16 p r i n t f ( "%d eh o m a i o r \n" , m a i o r ) ;
17
18 return 0;
19 }
20

Rose (RYSH) Linguagem C 68 / 72


Vamos praticar

Faça o algoritmo que leia um caractere e imprima o seu minúsculo.

Dica:
▶ ‘A’ é o decimal 65 na tabela ASCII
▶ ‘a’ é o decimal 97 na tabela ASCII
Entrada:
▶ A entrada é composta por um caractere maiúsculo.
Saída:
▶ Seu programa deve imprimir uma linha contendo o correspondente
minúsculo do caractere lido.
Salvar minusculo.c
Compilar: gcc minusculo.c -o minusculo
Executar: ./minusculo

Rose (RYSH) Linguagem C 69 / 72


Último algarismo

1 #i n c l u d e < s t d i o . h>
2
3 i n t main ( )
4 {
5 // D e c l a r a c a o de v a r i a v e i s
6 char l e t r a ;
7
8 // I n i c i a l i z a c a o de v a r i a v e i s p e l a e n t r a d a p a d r a o
9 s c a n f ( "%c " , & l e t r a ) ;
10
11 // S a i d a
12 p r i n t f ( "%c \n" , l e t r a +32) ;
13
14 return 0;
15 }
16

Rose (RYSH) Linguagem C 70 / 72


Vamos praticar

Faça o algoritmo de achar o último algarismo dado um número inteiro.

Dica:
▶ Resto % → 3%2 = 1
▶ Divisão / → 33/10 = 3
Entrada:
▶ A entrada é composta por um número inteiro.
Saída:
▶ Seu programa deve imprimir uma linha contendo um inteiro que
representa o último algarismo do número de entrada.
Salvar ultimo.c
Compilar: gcc ultimo.c -o ultimo
Executar: ./ultimo

Rose (RYSH) Linguagem C 71 / 72


Último algarismo

1 #i n c l u d e < s t d i o . h>
2
3 i n t main ( )
4 {
5 // D e c l a r a c a o de v a r i a v e i s
6 i n t num ;
7
8 // I n i c i a l i z a c a o de v a r i a v e i s p e l a e n t r a d a p a d r a o
9 s c a n f ( "%d" , &num ) ;
10
11 // S a i d a
12 p r i n t f ( "%d\n" , num%10) ;
13
14 return 0;
15 }
16

Rose (RYSH) Linguagem C 72 / 72

Você também pode gostar