Vous êtes sur la page 1sur 56





   

m   m
  !"

m  
   
 
‡ Você pode:
± copiar, distribuir, exibir e executar a obra
± criar obras derivadas
± fazer uso comercial da obra
‡ Sob as seguintes condições:
± m #. Você deve dar crédito ao autor original, da forma
especificada pelo autor ou licenciante.
± 
   
 . Se você alterar,
transformar, ou criar outra obra com base nesta, você somente poderá
distribuir a obra resultante sob uma licença idêntica a esta.
± Para cada novo uso ou distribuição, você deve deixar claro para outros
os termos da licença desta obra.
± Qualquer uma destas condições podem ser renunciadas, desde que
Você obtenha permissão do autor.
‡ $%& 
 

m  
   
 
' 
‡ Metodologia das Aulas
‡ História da Linguagem C
‡ Características da Linguagem C
‡ Sistemas de Tipos
‡ Variáveis e Operadores
‡ Estruturas de Controle
‡ Funções
‡ Entrada e Saída
m  
   
 
  m 
‡ 8 aulas
± Exercícios no final de cada aula
± Análise de códigos como exemplos
± Resolução de Questões

m  
   
 
( 
‡ Surgiu no início dos anos 70
‡ Criada inicialmente para o UNIX
‡ Criadores:
± Dennis Ritchie (direita)
± Kenneth Thompson (esquerda)
‡ Baseada na Linguagem B www.viphostsystem.com

‡ Versão inicial bastante simples

m  
   
 
( 
‡ Ampla popularização nos anos 80
‡ Muitas arquiteturas e compiladores
‡ Problemas com a incompatibilidade
‡ Padronização de 82 a 89 (C ANSI)
‡ Até hoje existem problemas entre os
diversos compiladores e sistemas
operacionais

m  
   
 
 ) 
‡ Paradigma Procedural
‡ Flexível
‡ Alta performance
‡ Poucas restrições
‡ Ótima iteração com:
± Sistemas Operacionais
± Dispositivos de Hardware
± Outras Linguagens

m  
   
 
*
 
. 

+

. +



 

/#% 

,

 "-
m  
   
 
 -'-

6 6 6
 6 
   6 
 
  6 
 
  

 


6 
 
    
 
 6  

Obs.: C é case sensitive

m  
   
 
0

‡ São as formas que utilizamos para
representar dados
‡ C possui 5 tipos básicos:
± char, int, float, double e void
‡ E 4 modificadores básicos:
± signed, unsigned, long e short
± Os 4 podem ser aplicados ao int
± long pode ser aplicado ao double
± signed e unsigned aplicados ao char
m  
   
 
0

‡ Modificadores de acesso:
± const: a variável não pode ter o seu valor alterado
± volatile: a variável pode ter o seu valor modificado
fora do controle do programa
‡ Classes de Armazenamento:
± auto: indica que uma variável é local (opcional),
também é usada na declaração de 
  

± extern: variável declarada em outro arquivo


± register: armazena, se possível, a variável em um
registrador na própria CPU.

m  
   
 
0


‡ Classes de Armazenamento (Cont.):


± static: não permite que um módulo externo
possa alterar nem ver uma variável global,
também é usado para manter o valor de uma
variável local em uma função de uma
chamada para outra.

m  
   
 
0

‡ O tamanho do inteiro depende da
arquitetura do sistema:
± Sistemas de 32 bits * inteiro de 32 bits
± Sistemas de 64 bits * inteiro de 64 bits
‡ Restrições:
± short int e int devem ter pelo menos 16 bits
± long int com no mínimo 32 bits
± short int <= int <= long int

m  
   
 
$"-
‡ Declaração:
±    6 6
‡ Escopo da variáveis:
±  #: podem ser usadas em qualquer
lugar do programa
± : podem ser usadas apenas na função
onde foi declarada

m  
   
 


int a, b = 10; // Variáveis globais

void f(char c) {
double d = 10.0; // Variável local
int i = a; // Variável local
// ...
}

int main() {
int i = b; // Variável local
return 0;
}
m  
   
 



‡ 

‡ 6 
‡  

m  
   
 
$"-
‡ Restrições
± O nome das variáveis deve começar com
uma letra ou um sublinhado ³_´
± Os demais caracteres podem ser letras,
números ou sublinhado
± O nome da variável não pode ser igual a uma
palavra reservada e aos nomes das funções
± Tamanho máximo para o nome de uma
variável:
‡ 32 caracteres
m  
   
 
  
‡ São valores que são mantidos fixos pelo
compilador
‡ Também podem ser:
± Octais - 0NUMERO_OCTAL
± Hexadecimais - 0xNUMERO_HEXADECIMAL
‡ Exemplos:
± µ\n¶ (caractere), ³C++´ (string), 10 (inteiro),
15.0 (float), 0xEF (239 em decimal), 03212
(1674 em decimal)
m  
   
 
  !1- 
 23
\b Retrocesso (backspace)
\f Alimentação de Formulário (form feed)
\t Tabulação Horizontal (tab)
\n Nova Linha
\´ Aspas
\¶ Apostrofo
\0 Nulo
\\ Barra Invertida
\a Sinal Sonoro (Beep)
\N Constante Octal (N é o valor da constante)
\xN Constante Hexadecimal (N é o valor da
constante)

m  
   
 
m

‡ Um programa possui três tipos de
memória
±  4: guarda o código do
programa a ser executado.
± : guarda as variáveis
locais, constantes, etc.

m  
   
 
m

‡ A memória de dados pode ser dividida em
duas partes:
±  : guarda variáveis locais não estáticas e
parâmetros de funções.
±  " : guarda variáveis e
constantes globais além de variáveis
estáticas locais.
± (
: guarda as variáveis alocadas em
tempo de execução, ou seja, alocadas
dinamicamente.
m  
   
 
m

2 ,!

 -

(
!
 " !
!

2 ,m

 -

(
m
 " m
m

2 /

m  
   
 
/
m + 

/
 m
+ Soma
- Subtração ou troca de sinal
* Multiplicação
/ Divisão
% Resto da divisão inteira
++ Incremento
-- Decremento

m  
   
 
)
‡ Qual o valor das variáveis x, y e z após o
seguinte trecho de código:
int x, y, z;
x = y = 10;
z= ++x; Resultado
x= -x; x = -11

y++; y = 11
z = 10
x = x + y - (z--);

m  
   
 
/
' 

/
 ' 
± Maior que
±= Maior que ou igual a
< Menor que
<= Menor que ou igual a
== Igual a
!= Diferente de

m  
   
 
/


/
 .
ßß AND
|| OR
! NOT

m  
   
 
/
! !

/
 m
ß AND Lógico
| OR Lógico
^ XOR (OR exclusivo)
~ NOT
±± Shift Rigth
<< Shift Left

m  
   
 
)
‡ Qual o valor das variáveis após a
execução do seguinte trecho de código:

int x = 2, y = 4;
int a, b, c, d, e, f;
a = x ß y; Resultado
a=0
b = x | y; b=6
c = x ^ y; c=6
d = ~x; d = -3
e = 16
e = x << 3; f=1
f = x ±± 1;
m  
   
 
0# 5

6 7 : ;; << ; = < 77 ?? ?? 8 9 > CD


87 >7 7 @@  B EF
7 @@ A 88 @
97 7 
7

9
<

 a 
m  
   
 
 
‡ Sintaxe:
± Ö !



‡ Exemplo:
long a = 10, b = 4;
double f = (double) a/b; // f = 2.5

m  
   
 
  . 
‡ C possui 7 controladores de fluxo básicos:
± if
±?
± switch
± for
± while
± do-while
± goto

m  
   
 
3
‡ if (condição) { declaração }

‡ if (condição) { declaração1 }
else { declaração2 }

‡ if (condição1) { declaração1 }
else if (condição2) { declaração2 }
else { declaração3 }
m  
   
 


int a = 2;

if (2) {
a = 4;
} else if (0) {
a = 0;
}

if (a) {
a = -a;
}
m  
   
 
:
‡ condição ? expressão1 : exepressão2;
‡ Equivalente a:
if (condição) { expressão1 }
else { expressão2 }

‡ O operador ? é restrito, mas pode


simplificar expressões grandes
‡ Uma expressão é diferente de uma
declaração
m  
   
 


int a = 9, b = -4;

b = a±b ? a : b;

m  
   
 
 
switch (variável) {
case (constante1):
declaração1;
[break;]
// ...
case (constanteN):
declaraçãoN;
[break;] _bs.: É muito importante saber
exatamente quando usar ou
default:
não o break
declaraçãoDefault;
}
m  
   
 


switch (a) {
case (1):
// ...
break;
case (2):
// ...
break;
default:
// ...
}
m  
   
 
3
for (inicialização; condição; incremento) {
declaração;
}

‡ Exemplo:
int i; // o i não pode ser declarado no for
int a = 0;
for (i = 0; i < 100; i++) {
a = a + 14;
}

m  
   
 
 
while (condição) {
declaração;
}

‡ Executa a declaração zero ou mais vezes


‡ Exemplo:
int i = 0;
int a = 0;
while (i < 100) {
a = a + 14;
i++;
}
m  
   
 
 
do {
declaração;
} while (condição);

‡ Executa a declaração pelo menos uma


vez, já que a verificação da condição é
feita apenas no final de cada iteração do
loop

m  
   
 


int i = 0; // o i não pode ser declarado no
do-while
do {
int a = 0;
a = a + 14;
i++;
} while (i < 0);

m  
   
 
#,  
‡ O break é usado para interromper o switch ou
um loop
‡ Exemplo:

while (1) {
a = a + 14;
i++;
if (i ± 99) {
break;
}
}

m  
   
 
 
‡ O continue é usado para fazer um loop pular
para a próxima iteração
‡ Exemplo:
while (1) {
i++;

if (i % 2 == 0) {
continue;
}

a = a + 14;
}
m  
   
 
 
‡ O goto pode ser usado para dar um salto
incondicional no fluxo do programa
‡ Exemplo:
int a = 0;

inicio:
a++;
if (a < 10) {
goto inicio;
}
m  
   
 
.4
‡ Sintaxe:
 "  "6# Ö 66"
$6%
!&
"6# 
'

 66"
$6%
 ( ( ) )

‡ Funções que não possuem retorno são void


‡ O retorno de uma função é feito através do
comando return

m  
   
 


int dobro(int a) {
return 2 * a;
}

int main() {
int c;

c = 8;
c = dobro(c);
return 0;
}
m  
   
 
 2)G
‡ A função scanf é utilizada para a leitura
dados do dispositivo de entrada padrão
‡ A função printf é utilizada para a escrita de
dados do dispositivo de saída padrão

m  
   
 


int a;
scanf(³%d´, ßa); // lê a
printf(³%d´, a); // escreve a

char c;
scanf(³%c´, ßc); // lê c
printf(³%c´, c); // escreve c
_bs.: Cuidado para não
esquecer do & no uso da
float f; função scanf
scanf(³%f´, ßf); // lê f
printf(³%f´, f); // escreve f
m  
   
 
0# . 
 2

0
 . 
   
[signed | unsigned] char %c
[signed] int %i ou %d
unsigned int %u
[signed] short int %hu
unsigned short int %hi
[signed] long int %li
unsigned long int %lu
float %f
double %lf
long double %Lf
m  
   
 
H 4
‡ Analise as proposições abaixo:
a) O compilador gera um programa executável.
b) Linker transforma código objeto em código
executável.
c) C ANSI define que o tamanho dos tipos é
constante, ou seja, não varia de compilador para
compilador.
d) Os principais tipo de dados de C ANSI são int, float,
boolean, char e double.
e) Classe de armazenamento alteram a forma como
as variáveis são alocadas na memória.

m  
   
 
H 4
f) O nome de uma variável deve começar com
caracteres que podem ser letras, números ou
sublinhado.
g) Constates octais começam com o um 0 e
constantes hexadecimais com um 0x.
h) Todos os operadores lógicos são aplicados bit a bit
i) C ANSI não permite a declaração de variáveis em
qualquer parte do código.
j) O comando break é utilizado para se parar um loop
k) O comando continue é utilizado para se parar uma
função.
l) O comando goto é utilizado para se realizar um
salto condicional no programa.
m  
   
 
I# 

a F g V
b V h F
c F i V
d F j V
e V k F
f F l F

m  
   
 
)
1)Implemente um programa que lê 10
inteiros do teclado ou para quando dois
inteiros consecutivos sejam digitados.
Após a leitura o programa deverá imprimir
o maior, o menor, a média e a soma dos
números digitados.

m  
   
 
)
2)Modifique a sua resposta para o exercício
anterior trocando os loops (for, while, do-
while) para goto

m  
   
 
G3
‡ Escreva uma função chamada showBits
que recebe um inteiro como parâmetro e
imprime todos os seus bits

±* 6"6 +6


6# 
6

m  
   
 
'35
‡ Matos, P. A. ß Carvalho, G. H. P. - A Linguagem de Programação C
‡ The C Programming Language
± http://www.engin.umd.umich.edu/CIS/course.des/cis400/c/c.html
‡ Curso de C da UFMG
± http://ead1.eee.ufmg.br/cursos/C/
‡ Lammert Bies, ASCII character map
± http://www.lammertbies.nl/comm/info/ascii-characters.html
‡ Slides de Gustavo(ghpc@cin.ufpe.br) do curso de C/C++
‡ mpatrol
± http://www.cbmamiga.demon.co.uk/mpatrol/mpatrol_toc.html#SEC_Con
tents
‡ Aulas da cadeira de infra-estrutura de software
± www.cin.ufpe.br/~if677

m