Linguagem de Programação em C
Anderson L. S. Moreira
[email protected]
http://alsm.cc
Anderson Moreira
Arquitetura de Computadores
O que fazer com essa apresentação
Anderson Moreira
Arquitetura de Computadores
2
Introdução
Por que programar ?
Quando o homem necessita do auxilio do
computador para executar algumas tarefas.
O Que é um programa ?
Conjunto de instruções de uma determinada linguagem
através das quais, um computador executa algumas
tarefas.
Anderson Moreira
Arquitetura de Computadores
Introdução
O Que é uma linguagem ?
Uma linguagem consiste de um conjunto de palavras
reservadas e regras de sintaxe que possibilita criar
programas de computadores.
Este
conjunto
de
palavras
possui
estruturação lógica e sintática própria.
Anderson Moreira
Arquitetura de Computadores
regras
de
Exemplos de Códigos: BASIC
PseudoPseudo-código
leia(num)
para n de 1
até 10 passo 1
faça
tab←
←num*n
imprima(tab)
fim-para;
Anderson Moreira
BASIC
10 input num
20 for n=1 to 10
step 1
30 let tab=num*n
40 print chr$(tab)
50 next n
Arquitetura de Computadores
Exemplos de Códigos: FORTRAN
PseudoPseudo-código
leia(num)
para n de 1
até 10 passo 1
faça
tab←
←num*n
imprima(tab)
fim-para;
Anderson Moreira
FORTRAN
read (num)
do 10 n=1:10
tab=num*n
write(tab)
10 continue
Arquitetura de Computadores
Exemplos de Códigos: Assembly
PseudoPseudo-código
leia(num)
para n de 1
até 10 passo 1
faça
tab←
←num*n
imprima(tab)
fim-para;
Anderson Moreira
Assembly (Intel 8088)
MOV CX,0
IN AX,PORTA
MOV DX,AX
LABEL:
INC CX
MOV AX,DX
MUL CX
OUT AX, PORTA
CMP CX,10
JNE LABEL
Arquitetura de Computadores
Exemplos de Códigos: C
PseudoPseudo-código
leia(num)
para n de 1
até 10 passo 1
faça
tab←
←num*n
imprima(tab)
fim-para;
Anderson Moreira
C
scanf(&num);
for(n=1;n<=10;n++){
tab=num*n;
printf(”\n %d”,
tab);
};
Arquitetura de Computadores
Tipos de Linguagens: Baixo Nível
São linguagens com foco na maquina, ou
seja, utiliza instruções detalhadas que
controla os circuitos internos do computador.
Usualmente são genericamente chamadas
de linguagens de maquina, Assembly ou de
linguagem de montagem.
Anderson Moreira
Arquitetura de Computadores
Tipos de Linguagens: Baixo Nível
Vantagens: Maior velocidade de
processamento e ocupam menor espaço na
memória.
Desvantagens: Pouca portabilidade, ou
seja, o código é gerado para um tipo de
processador não serve para outro.
Anderson Moreira
Arquitetura de Computadores
Tipos de Linguagens: Alto Nível
São linguagens voltadas para que haja uma
maior interação entre o homem e a máquina.
Necessitam de compiladores ou
interpretadores para gerar as instruções do
microprocessador.
Anderson Moreira
Arquitetura de Computadores
Tipos de Linguagens: Alto Nível
Vantagens: São compiladas ou
interpretadas, têm maior portabilidade
podendo ser executados em várias
plataformas com pouquíssimas
modificações.
Desvantagens: São mais lentas e ocupam
mais memória.
Anderson Moreira
Arquitetura de Computadores
Histórico
C foi originalmente desenvolvida por Dennis
Ritchie e K. Thompson nos Laboratórios Bell nos
anos 70.Derivadas de duas linguagens anteriores
chamadas BCPL e B.
Inicialmente para máquinas com o sistema operacional
UNIX.
Tornou-se uma das mais importantes e populares nos
últimos dias.
Foi projetada para o desenvolvimento de programas
estruturados e modulares.
Anderson Moreira
Arquitetura de Computadores
Histórico
Nos anos seguintes, a popularidade da linguagem C
aumentou consideravelmente, aumentando
também o surgimento de ferramentas de
desenvolvimento.
Inicialmente, muitas implementações do C não
traduziam fielmente a definição original, o que gerou
alguns problemas de incompatibilidade
A portabilidade proposta pela definição original ficou
bastante comprometida.
Anderson Moreira
Arquitetura de Computadores
Introdução
O Padrão ANSI
Buscando uma padronização na definição da
linguagem C, a American National Standard
ANSI),
Institute (ANSI
ANSI desenvolveu um padrão hoje
bastante utilizado no mundo da linguagem C,
chamado de C padrão ANSI ou C ANSI.
Quase todas as ferramentas de desenvolvimento da
linguagem C atuais, seguem este padrão.
Anderson Moreira
Arquitetura de Computadores
Compiladores x Interpretadores
A única linguagem que o computador entende é a
linguagem de máquina. Programas escritos em um
linguagem de alto nível, devem ser traduzidos para a
linguagem de máquina.
Os Programas que fazem esta tradução, classificam
em:
- INTERPRETADORES
- COMPILADORES
Anderson Moreira
Arquitetura de Computadores
Compiladores x Interpretadores
Os INTERPRETADORES, traduzem o código fonte em
linguagem de máquina através da interpretação de
cada instrução feita a medida que o software é
executado. Necessitam de um componente
interpretador presente na máquina.
Os COMPILADORES, por sua vez, traduzem o código fonte
em linguagem de máquina através da geração de um
programa .OBJ, que após ser linkeditado, torna-se um
arquivo executável. Em C os programas são compilados.
Anderson Moreira
Arquitetura de Computadores
Como criar um programa
Basicamente três passos :
1) Digitar o programa em um editor de texto e
gravar atribuindo a extensão “.C”;
2) Compilar o programa (fonte) criando um arquivo com
extensão “.obj”. Chamado de programa objeto;
3) Link-editar o programa objeto criando finalmente o
programa executado (com extensão “.exe”).
Anderson Moreira
Arquitetura de Computadores
Estrutura básica de um programa
Um programa em C consiste de uma ou várias
funções, onde uma delas precisa ser denominada
“main” e deve existir em algum lugar de seu
programa. Esta função marca o início da execução
do programa.
Outras funções podem ser definidas pelo programador ou
preencher a função main, porém em um programa
executável em C, a função main deve sempre existir.
Anderson Moreira
Arquitetura de Computadores
Estrutura básica de um programa
main(Argumentos)
/* início do corpo da função */
{
}
/* término do corpo da função */
Uma função deve conter :
- Um header que consiste do nome da função
- Uma lista de argumentos entre parênteses.
- Um bloco de instruções delimitado por chaves.
Anderson Moreira
Arquitetura de Computadores
Estrutura básica de um programa
O nome da função, os parênteses e as chaves, são os únicos elementos
obrigatórios de uma função
Os comentários podem aparecer em qualquer lugar de um programa,
devendo ser colocados entre os delimitadores /* e */
Letras minúsculas e maiúsculas não são equivalentes em C.
Note que cada expressão dentro do bloco deve terminar com um ponto-evírgula.
Anderson Moreira
Arquitetura de Computadores
Exemplo de um programa em C
#include <stdio.h>
/* programa que imprime: Boa Noite */
void main ()
{
printf("Boa Noite");
}
Anderson Moreira
Arquitetura de Computadores
Estrutura básica de um programa
Se utilizamos uma função no corpo da função main(), devemos incluir
a biblioteca que contenha esta função. Por exemplo :
Se colocarmos a função pritnf() no corpo da função main(), devemos
incluir a biblioteca stdio.h. Isto é feito com a diretiva : #include,
Assim:
#include <stdio.h>
void main()
{
printf("Boa Noite");
}
Anderson Moreira
Arquitetura de Computadores
O que é uma IDE (Integrated Development Environment)
• Um conjunto de ferramentas para
desenvolver bibliotecas, aplicações ou
programas (debugger, compilador, linker,
etc…)
• Um ambiente baseado em janelas do tipo
GUI
Gerenciamento de projeto
Configuações de construção
Programação confortável
Anderson Moreira
Arquitetura de Computadores
Code Blocks - Highlighting Editor
Anderson Moreira
Arquitetura de Computadores
Auto completar
Anderson Moreira
Arquitetura de Computadores
Diferentes compiladores
Anderson Moreira
Arquitetura de Computadores
Organização em pastas
Anderson Moreira
Arquitetura de Computadores
Folding
Anderson Moreira
Arquitetura de Computadores
Questionário 1
• Onde a linguagem C foi desenvolvida e quando?
• Explique a diferença entre programas interpretados
e programas compilados.
• Como é formada uma função na linguagem C?
• Como inserir comentários em um programa em C?
Anderson Moreira
Arquitetura de Computadores
Questionário 1
No programa abaixo, existem alguns erro, com a
ajuda do compilador, tente descobri-lo
#include <stdiox.h>
#include <conio.h>
Main ()
(
printf("Boa Noite");
getch();
)
Anderson Moreira
Arquitetura de Computadores
Regra de identificação
• Todas as letras maiúsculas de A a Z e as minúsculas de a a
z, os dígitos de 0 a 9 e alguns caracteres especiais, podem
ser utilizados na criação de códigos em C.
• Os nomes de variáveis, funções e matrizes em C, obedecem
a regra de que você pode usar letras e números, porem o
primeiro digito deve ser apenas uma LETRA ou o caractere
especial underline (_).
• Um nome não pode ser uma das palavras reservadas da
linguagem C.
Anderson Moreira
Arquitetura de Computadores
Regra de identificação
• Exemplo de nomes válidos :
a
y12
soma1
_estoque
• Exemplos de nomes não válidos :
2th (o primeiro caractere deve ser letra ou _ )
“a”
(inicia com um caractere ilegal (“) )
numero-ordem (caractere ilegal (-))
nome completo (espaço em branco)
Anderson Moreira
Arquitetura de Computadores
Regra de identificação
• Um identificador de nome pode ter mais de 32
caracteres, porem somente os 32 primeiros serão
reconhecidos.
• Algumas implementações do C, reconhece apenas
os 8 (oitos) primeiros, assim os nomes : taxa_dia e
taxa_diaria, nestes sistemas não tem diferenca,
pois o compilador reconhece apenas os oitos
primeiros caracteres.
Anderson Moreira
Arquitetura de Computadores
Palavras reservadas
auto
double
break
else
case
enum
char
extern
const
float
continue for
default goto
do
if
int
long
register
return
short
signed
sizeof
static
struct
switch
typedef
union
unsigned
void
volatile
while
São apenas 32 palavras reservadas que não podem
ser utilizadas para outro propósito
Anderson Moreira
Arquitetura de Computadores
Tipos de Dados
Em C existem 5 tipos válidos:
tipo
Palavra
Reservada
Caracter
Char
Inteiro
Bytes
Faixa
8
1
-128 a 127
Int
16
2
-32768 a 32768
Ponto flutuante
Float
32
4
3.4E-38 a
3.4E+38
Pont. Flutuante
duplo
Double
64
8
1.7E-308 a
1.7E+308
Sem valor
void
0
0
Sem valor
Anderson Moreira
Quant.
Bit
Arquitetura de Computadores
Tipos de Dados
Modificadores de Tipos
Com exceção do tipo void, os demais tipos podem ter
alguns modificadores. Um modificador é usado para
alterar o significado do tipo para adequá-los melhor
às necessidades do programador.
Anderson Moreira
Arquitetura de Computadores
Tipos de Dados
Os modificadores são :
signed, unsigned, long e short
Exemplo de utilização:
Se uma variável é declarada como char ela ocupa 8
bit e tem a faixa de valores de -128 a 127, mais se o
modificador unsigned é colocado antes da palavra
char,
char ela continua ocupando 8 bits, mais sua faixa
de valores vai de 0 a 255.
Anderson Moreira
Arquitetura de Computadores
Tipo de Dados Inteiro
•
Os dados inteiros são caracterizados pelos
números positivos ou negativos que não seja
fracionário. Em C referenciamos este tipo de
dados com os seguintes identificadores :
Tipo do Inteiro
Qt.Bit
Faixa
int
16
-32768 a 32767
long int
32
-2.147.483.648 a 2.147.483.648
unsigned int
16
De 0 até 65535
signed long int
32
De 0 até 4.292.967.295
Anderson Moreira
Arquitetura de Computadores
Tipo de Dados Reais
•
Os dados reais são caracterizados pelos números
positivos, negativos, inteiros e os fracionários. Em
C referenciamos este tipo de dados com os
seguintes identificadores :
Tipo do Inteiro
Qt.Bit
Faixa
float
32
de 3.4e-38 até 3.4e+38
double
64
de 1.7e-308 até 1.7e+308
Long double
128
de -3.4e-4932 até 1.1e+4932
Anderson Moreira
Arquitetura de Computadores
Tipo de Dados Caracteres
• Os dados caracteres são caracterizados pelas
sequencias de letras, números e simbolos
especiais delimitados por ( “ ” ) . Em C
referenciamos este tipo de dados pelo
identificadores : char podendo armazenar de 0
até 255 caracteres
Anderson Moreira
Arquitetura de Computadores
Tipo de Dados Lógicos
• Na linguagem C não existe o tipo de dados
booleano , ou seja, não existe o valor lógico
“false” ou “true” de forma predefinida.
• Em C qualquer valor igual a 0 (zero), é
considerado como valor lógico falso e qualquer
valor diferente de 0 (zero), é considerado como
valor lógico verdadeiro.
Anderson Moreira
Arquitetura de Computadores
Constantes
• Constantes são valores que permanecem fixos e na
linguagem C temos 4 tipos básicos de constantes:
-
Inteiras
ponto-flutuante
caracteres
string (cadeia de caracteres)
Anderson Moreira
Arquitetura de Computadores
Constantes numéricas
•
As constantes do tipo Inteiras e de ponto-flutuante, representam
números.
•
As constantes do tipo Inteiras podem ser escritas em três sistemas
de numeração, sendo :
• decimal (base 10)
• octal (base 8)
• hexadecimal (base 16)
•
Uma constante inteira decimal pode ser formada por qualquer
combinação dos dígitos de 0 a 9. Se tem mais de dois dígitos, o
primeiro não pode ser zero. Ex.:
5
Anderson Moreira
13
230 540
Arquitetura de Computadores
Constantes numéricas
•
Uma constante inteira octal pode ser formada por qualquer
combinação dos dígitos de 0 a 7 e o primeiro deve ser zero. Ex.:
0 013 0656 0540
•
Uma constante inteira hexadecimal pode ser formada por qualquer
combinação dos dígitos de 0 a 9 e de A a F (maiúsculas ou
minúsculas). Deve sempre iniciar com 0x ou 0X. Ex.:
0x 0x1 0xABC 0xabc
•
Normalmente a magnitude de uma constante inteira é:
Decimal = 32767
Octal
= 07777
Hexa
= 0x7FFF
Anderson Moreira
Arquitetura de Computadores
Constantes numéricas
•
As constantes do tipo ponto-flutuante é um número na base 10 que
contem casas decimais e/ou um expoente. Ex.:
0.
0.5
1.3
230.323 .540e2
•
Observe que o caractere que separa a casa decimal é um ponto e
não uma virgula
•
Para representar um número com expoente, trocamos a base 10 pela
letra ´e´. Assim para representar 2 x 10², teremos:
200. ou
Anderson Moreira
2e2
ou
2e+2
ou 2E2 ou 2.0e+2
Arquitetura de Computadores
Constantes caracteres
•
As constantes do tipo caracter consiste em um simples caractere
colocado entre apóstrofos. Ex.:
´A´ ´x´ ´5´ ´$´
•
Uma constante de caractere tem valores inteiros correspondentes a
um conjunto de caracteres específicos.
•
Normalmente os computadores utilizam o conjunto de caracteres
ASCII, onde cada caractere é representado por uma combinação de 7
bits, Representando assim 2e+7 = 128 diferentes caracteres.
•
Desta forma, cada constante de caractere, tem um valor inteiro
correspondente.
Anderson Moreira
Arquitetura de Computadores
Constantes caracteres
Caracter
Valor
Caracter
Valor
Caracter
Valor
Caracter
Valor
A
65
M
77
a
97
0
48
B
66
N
78
b
98
1
49
C
67
O
79
c
99
2
50
D
68
P
80
d
100
3
51
E
69
Q
81
e
101
4
52
F
70
R
82
f
102
5
53
G
71
S
83
g
103
6
54
H
72
T
84
h
104
7
55
I
73
U
85
i
105
8
56
J
74
V
86
j
106
9
57
K
75
W
87
k
107
DEL
127
L
76
X
88
l
108
ESC
27
Anderson Moreira
Arquitetura de Computadores
Constantes string
•
As constantes do tipo string consiste em um conjunto de caracteres
colocado entre aspas. Ex.:
“anderson”
“bahia”
“Recife”
“Boa Noite !!!”
“3235-2234”
“2*(I+3)/J”
•
Algumas seqüências de caracteres podem ser incluídas dentro da
string para possibilitar a formatação. Ex.:
“Esta é a primeira linha\n e esta a segunda linha”
Anderson Moreira
Arquitetura de Computadores
Seqüência de escape
•
Alguns caracteres especiais e os não-imprimíveis, são expressos
como uma sequência de escape.
•
Uma sequencia de escape sempre começa com uma barra
invertida (“\”) seguida por um caractere. Alguns comandos em C,
são representados desta forma. Ex.:
Caracter
Seqüência de escape
Valor ASCII
Nova linha (line feed) FD
\n
10
Campainha (bell)
\a
07
Tabulação horizontal
\t
09
Tabulação vertical
\v
11
Aspas (“)
\”
34
Apóstrofo (´)
\´
´
39
Interrogação (?)
\?
63
Barra invertida (\)
\\
92
Nulo (null)
\0
00
Anderson Moreira
Arquitetura de Computadores
Variáveis
As variáveis são o aspecto fundamental em
qualquer linguagem de computador.
Uma variável nada mais é que um espaço de
memória reservado para armazenar um certo tipo
de dado. Uma variável deve receber um nome para
servir de referência e a cada instante ela pode
conter valores diferente.
Anderson Moreira
Arquitetura de Computadores
Declaração de Variáveis
Declarar uma variável significa reservar um espaço
em memória para um determinado tipo de dados
e indicar que o conteúdo daquele espaço, será
referenciado pelo o nome da variável.
Uma declaração de variável consiste em um tipo
seguido do nome da variável. Exemplo:
// uma variável do tipo int
int num;
char a; // uma variável do tipo char
Anderson Moreira
Arquitetura de Computadores
Declaração de variáveis:
Para serem usadas, as variáveis precisam ser declaradas 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;
Exemplos:
int i;
unsigned int a, b, c;
double salario;
Anderson Moreira
Arquitetura de Computadores
Atribuição de valores às variáveis
Após ser declarada, a variável pode receber valores.
O operador de atribuição "=" indica que o valor à
direita será atribuído à variável.
O valor inicial pode ser atribuído de duas formas:
- Durante a declaração da variável
Ex.: int i=0, j=10;
- Durante execução de uma a função
Anderson Moreira
Arquitetura de Computadores
Tipos de Variáveis
O tipo de uma variável informa a quantidade de
memória, em bytes, que ela irá ocupar e a forma
como o seu conteúdo será armazenado.
Os tipos de dados básicos do C visto anteriormente
devem ser utilizados para prototipar uma variável
conforme a necessidade do programa.
Anderson Moreira
Arquitetura de Computadores
Nomes de Variáveis
Você pode usar quantos caracteres quiser para um
nome de variável com o primeiro caracter sendo
obrigatoriamente um letra ou sublinhado(_).
Uma variável não pode ter o mesmo nome de uma
palavra reservada do C e não deverá ter o mesmo
nome de um função.
Na linguagem C, maiúsculas e minúsculas tem
tratamento diferenciado, assim, cont, Cont e
CONT são três variáveis distintas.
Anderson Moreira
Arquitetura de Computadores
Atribuição de valores às variáveis
É possível atribuir a uma variável o valor resultante de uma
expressão. Ex.:
int a;
a = (8+2)/2;
A atribuição de uma variável do tipo char, pode ser feita de duas
formas:
- Atribuindo uma constante de caractere:
char b = ‘A’;
- Atribuindo o código ASCII correspondente antecedido pela barra
invertida:
char b = ‘\65’
Anderson Moreira
Arquitetura de Computadores
Analisando um Programa Exemplo
01
02
03
04
05
06
07
08
09
10
11
#include <stdio.h>
int a=5;
int b=5;
int soma;
// declaração de um inteiro
// declaração de um inteiro
// declaração de um inteiro
void main()
{
soma=a+b;
printf("%d",soma);
}
Anderson Moreira
Arquitetura de Computadores
Analisando um Programa Exemplo
01
02
03
04
05
06
07
08
09
#include <stdio.h>
int a=5, b=5, soma;
void main()
{
soma=a+b;
printf("%d",soma);
}
Anderson Moreira
Arquitetura de Computadores
Atribuição de valores às variáveis
Na linguagem C, não temos o tipo ´string´
´ pre-definido, o que
nos leva a utilizar os vetores de caracter. Desta forma um string em
C será atribuída a um vetor do tipo char na sua inicialização.
char nome[20] = “Anderson Moreira”;
A Atribuição de uma constante de caracter diretamente a um vetor de
caracter já declarado e não inicializado, só pode ser feito com auxilio
de outras funções.Ex.:
char nome[20];
strcpy(nome,“Anderson Moreira”);
Anderson Moreira
Arquitetura de Computadores
Analisando um Programa Exemplo
#include <stdio.h>
#include <conio.h>
char nome[20];
void main()
{
printf("Digite o seu nome : ");
scanf("%s", nome);
printf("Ola! %s ",nome);
getch();
}
Anderson Moreira
Arquitetura de Computadores
Conversão de tipos
Algumas vezes o compilador faz uma conversão automática quando
vai atribuir um valor de uma expressão a uma variável. Ex.: sendo:
void main()
{
float f1,f = 21.45;
char c1,c = 'A';
int
i1,i = 10;
i1 = f; // i1 receberá
printf("%d\n",i1);
f1 = i; // f1 receberá
printf("%f\n",f1);
c1 = i; // c1 receberá
printf("%d\n",c1);
i1 = c; // i1 receberá
printf("%d\n",i1);
getch();
o valor 21
o valor 10.00
o valor 10
o valor 65
}
Anderson Moreira
Arquitetura de Computadores
Conversão de tipos
O Programador pode “forçar” a conversão. Ex.: sendo:
void main()
{
int a = 65; float x = 2.1, y = 8.95, z; char c;
c = (char)a;
printf("Valor de c ( %c ) --> %d\n", c,c);
c = (char)(a + (int)x);
printf("Valor de c ( %c ) --> %d\n", c,c);
z = (float)((int)x * (int)y);
printf("Valor de z ( %f ) --> %d\n", z,z);
z = (float)((x * y));
printf("Valor de z ( %f ) --> %d\n", z,z);
getch();
}
Anderson Moreira
Arquitetura de Computadores
Entrada e Saída
Para que exemplos possam ser construídos, necessitamos conhecer
um pouco sobre entrada e saída de dados.
Um programa que não fornece resultados nem pede valores para
operar não deve ter grande utilidade.
A entrada de dados será feita pelo teclado e a saída poderá ser vista
na tela do computador.
Com isto, é possível resolver problemas bastante interessantes.
Anderson Moreira
Arquitetura de Computadores
Biblioteca Padrão
Para termos acesso à biblioteca que contém as funções, macros e
variáveis que facilitam a entrada e saída de dados, o programa deve
conter a declaração
#include <stdio.h>
no início do programa.
Normalmente os programadores usam os símbolos menor (<) e
maior (>), mas é possível a alternativa
#include "stdio.h"
Anderson Moreira
Arquitetura de Computadores
Saída - A Função printf
A função printf permite que dados sejam escritos na tela do
computador.
O formato é de uso simples e bastante flexível, permitindo que os
dados possam ser apresentados de diversas maneiras.
Syntax: printf(controle, arg1, arg2, ...);
Onde os argumentos são impressos de acordo com a maneira
indicada pelo controle. Um exemplo simples pode tornar a
explicação mais clara.
Anderson Moreira
Arquitetura de Computadores
Saída - A Função printf
O programa abaixo imprime o valor da variável ano.
#include <stdio.h>
#include <conio.h>
ARGUMENTO
// Biblioteca de entrada e saída
main()
{
int ano = 2008;
// Declarei ano como inteiro e ja defini seu valor.
printf(“ Estamos no ano %d ", ano );
getch();
}
Na tela do computador será impresso:
Estamos no ano 2008;
CONTROLE
Anderson Moreira
Arquitetura de Computadores
Saída - A Função printf
O controle, que deve aparecer sempre entre " ", define como serão
impressos os argumentos.
Neste controle podem existir dois tipos de informações: caracteres
comuns e códigos de formatação.
Os caracteres comuns, como no exemplo (Estamos no ano)
ano) são
escritos na tela sem nenhuma modificação.
Os códigos de formatação, aparecem precedidos por um % e são
aplicados aos argumentos na ordem em que aparecem.
Anderson Moreira
Arquitetura de Computadores
Códigos de Formatação
Deve haver um código de formatação para cada argumento. O
código %d indica que o valor armazenado em ano deve ser
impresso na notação inteiro decimal.
Código
%c
%d
%i
%e
%f
%o
%s
%u
%x
%%
Anderson Moreira
Comentário
Caractere simples
Inteiro decimal com sinal
Inteiro decimal com sinal
Real em notação científica com e
Real em ponto flutuante
Inteiro em base octal
Cadeia Caracteres
Inteiro decimal sem sinal
Inteiro em base hexadecimal (letras minúsculas)
Imprime o caracter %
Arquitetura de Computadores
Saída justificada
Um sinal de menos para especificar que o argumento deve ser
tabulado a esquerda no seu campo de impressão pode ser
acrescentado.
Exemplo a seguir ilustra os dois tipos de justificação.
Observe
main()
{
int ano = 2007;
printf("Justificado a esquerda Ano = %-8d\n", ano);
printf("Justificado a direita Ano = %8d\n", ano);
getch();
}
Anderson Moreira
Arquitetura de Computadores
Especificador de Precisão
O especificador de precisão consiste de um ponto que separa o
número que define o tamanho do campo do número que
especifica o máximo número de dígitos a serem impressos a
direita do ponto em um número do tipo float ou double
#include <stdio.h>
#include <conio.h>
Observe
main()
{
float r = 1.0/3.0;
printf("O resultado e = %9.5f\n", r);
getch();
}
Anderson Moreira
Arquitetura de Computadores
Códigos de Formatação
Ao executar o exemplo verifique que \n não é impresso.
A barra inclinada é chamada de seqüência de escape, indicando
que o próximo caracter não é para ser impresso mas representa
caracteres invisíveis, por exemplo. Alguns destes caracteres
são:
Código
\n
\t
\b
\f
\0
Descrição
Passa para uma nova linha
Tabulação
Retorna um caracter
Salta uma página
Caracter nulo
Anderson Moreira
Arquitetura de Computadores
Entrada - A Função scanf
A função scanf pode ser utilizada para entrada de dados a
partir do teclado. Esta função é equivalente à função printf e
seu formato é:
Syntax: scanf(controle, arg1, arg2, ...);
Uma diferença fundamental existe entre as duas funções é
que os argumentos da função scanf são os endereços das
variáveis que irão receber os valores lidos e não, como em
printf, as próprias variáveis.
Anderson Moreira
Arquitetura de Computadores
Entrada - A Função scanf
A indicação que estamos referenciando um
endereço e não a variável se faz pelo operador &.
Por exemplo, o comando
scanf("%d %d", &a, &b)
espera que dois valores inteiros sejam digitados no
teclado. O primeiro é armazenado na variável a e o
segundo em b.
Anderson Moreira
Arquitetura de Computadores
Entrada - A Função scanf
Cada variável a ser lida, deverá ser precedida
pelo caracter &
Para sequência de caracteres (%s), o caractere
& não deverá ser usado.
Anderson Moreira
Arquitetura de Computadores
Entrada - A Função scanf
int main()
{
int numero;
char string[30];
printf("Digite uma string: ");
scanf("%s",string);
printf("Digite um numero: ");
scanf("%d",&numero);
printf("A string digitada foi: \t%s\n", string);
printf("O numero digitado foi: \t%d\n", numero);
}
Anderson Moreira
Arquitetura de Computadores
Lendo e Imprimindo Caracteres
Para ler e escrever caracteres do teclado as funções de entrada e saída
mais simples são getchar e putchar que estão na biblioteca stdio.h
#include <stdio.h>
#include <conio.h>
main()
{
char c;
int i;
printf("Entre com um caracter entre 0 e 9.\n");
c = getchar();
printf("O caracter lido foi o ");
putchar(c);
getch();
}
Anderson Moreira
Arquitetura de Computadores
Lendo e Imprimindo Caracteres
Na definição original da função getchar a entrada é armazenada até
que a tecla ENTER seja apertada. Com isto caracteres ficam em um
buffer esperando para serem tratados.
Em ambientes onde é necessário tratar o caractere imediatamente
esta função pode não ser útil.
Muitos compiladores incluem funções para permitir entrada
interativa de dados. As duas funções mais comuns são getch e
getche e seus protótipos podem ser encontrados na biblioteca
<conio.h>.
Anderson Moreira
Arquitetura de Computadores
Lendo e Imprimindo Strings
Um string em C é um vetor de caracteres. Para usar strings é
preciso primeiro definir um espaço para armazená-los. Para isto é
preciso declarar o tamanho e o tipo do vetor. Por exemplo:
char nome[40];
Quando definir o tamanho do vetor observar que todo string em C
termina com o caracter null ('\0'), que é automaticamente inserido
pelo compilador.
Portanto o vetor nome pode armazenar no máximo 39 caracteres.
Anderson Moreira
Arquitetura de Computadores
Lendo e Imprimindo Strings
Exemplo :
#include <stdio.h>
#include <conio.h>
void main ( )
{
char nome[40];
puts("Por favor, qual o seu nome.");
scanf("%s", nome);
printf(“Em que posso ajuda-lo %s?\n", nome);
getch();
}
Anderson Moreira
Arquitetura de Computadores
Expressões e Operadores
Adição:
Expressão1 + expressão2
Primeiros as duas expressões serão avaliadas e só
depois a adição é realizada.
Pode ter uma conversão de tipos, depois da avaliação das expressões:
float x,y;
int z;
z=y+x;
Anderson Moreira
Arquitetura de Computadores
Expressões e Operadores
Subtração:
Expressão1 - expressão2
As duas expressões são avaliadas, depois a
subtração é realizada, e o valor obtido é o valor da
expressão.
- Expressão
A semântica de (-expressão) é a mesma do que
(0 - expressão).
Anderson Moreira
Arquitetura de Computadores
Expressões e Operadores
Multiplicação:
Expressão1 * expressão2
As duas expressões são avaliadas, depois a multiplicação é realizada, e
o valor obtido é o valor da expressão.
Anderson Moreira
Arquitetura de Computadores
Expressões e Operadores
Divisão:
Expressão1 / expressão2
Diferente das outras linguagens, em C o “ / ” designa ao mesmo tempo
a divisão dos inteiros e dos reais.
Anderson Moreira
Arquitetura de Computadores
Expressões e Operadores
Divisão:
Caso os dois operandos inteiros sejam positivos, o sistema arredonda
o resultado da divisão :
7 / 2 retorna 3
Caso os dois operandos inteiros sejam de sinal diferentes, o
arredondamento depende do compilador.
-7 / 2 ou 7 / -2retornam -3 ou -4 (geralmente -4)
Anderson Moreira
Arquitetura de Computadores
O Módulo %
Expressão1 % Expressão2
As duas expressões devem retornar valores de tipo inteiro
O módulo retorna o resto da divisão inteira.
7 % 2 retorna 1
Caso um dois operadores sejam negativo, o sinal do módulo depende
da implementação, mas é geralmente o sinal do primeiro
7 %2
-7 % 2
7 % -2
Anderson Moreira
retornam 1
retornam -1
retornam 1
Arquitetura de Computadores
Operadores Relacionais
Expressão1 operador Expressão2
Operador
==
!=
>
>=
<
<=
Relação
Igual
Diferente
Maior
Maior ou igual
Menor
Menor igual
O resultado da comparação será um valor lógico :
1 - Verdadeira e;
0 - Falsa.
Anderson Moreira
Arquitetura de Computadores
Operadores Lógicos
Expressão1 operador Expressão2
Operador
&&
||
!
Relação
E (and)
Ou (or)
Negação (not)
exemplos:
(a && b)
(a == 0) || (b != 0)
! ((a = = 0) && (b<3))
Anderson Moreira
Arquitetura de Computadores
Operador &
É o operador de endereçamento (ponteiro): Ele
permite apontar qualquer variável:
&a é o endereço da variável a
Anderson Moreira
Arquitetura de Computadores
Incremento
x = x + 1;
x++;
++x;
s+=i;
/* s=s+i*/
z = y++;
/* z=y e depois y++ */
z = ++y;
/* y++ e depois z = y (novo) */
Anderson Moreira
Arquitetura de Computadores
Decremento
y = y - 1;
/* isto decrementa y */
y--;
/* isto decrementa y */
--y;
/* isto decrementa y */
s-=i;
/* s=s-i*/
z = y--;
/* z =y e depois y- - */
z = --y;
/* y-- e depois
Anderson Moreira
z=y (o novo)*/
Arquitetura de Computadores
Condicional (IF)
if (b >= 3.0)
a = 2.0;
else
a = 10.5;
Igual a :
a = (b >= 3.0 ? 2.0 : 10.5 );
c = (a > b ? a : b);
/* c=maior(a,b) */
c = (a > b ? b : a);
/* c=menor(a,b) */
Anderson Moreira
Arquitetura de Computadores
Questionário 2
Baseado no que foi visto em sala de aula,
responda:
Escreva um programa que declare variáveis do tipo
inteiro, char e float, inicializando-as, e imprima os
seus valores.
Faça um programa capaz de ler um valor real e
escreve-lo com apenas uma casa decimal.
Anderson Moreira
Arquitetura de Computadores
Questionário 2
Sabendo que os argumentos da função "printf" podem ser
expressões (a+b, a/b, a*b...), e não somente argumentos, faça
um programa capaz de ler um valor inteiro X e imprimir na tela
o cubo, o quadrado e a metade de X.
Ex.: para X= 6, imprimir
Cubo = 18; Quadrado = 36; Metade = 3.
Anderson Moreira
Arquitetura de Computadores
Exercícios
Escreva um programa que leia 3 números reais e imprima a
média aritmética destes números.
Escreva um programa que ler uma temperatura em graus
Celsius e apresenta o valor em Fahrenheit. (Formula: F = (9 X C
+ 160)/5)
Escreva um programa que ler uma temperatura em graus
Fahrenheit e apresenta o valor em Celsius. (Formula: C = (F 32) * (5/9)
Anderson Moreira
Arquitetura de Computadores
Dúvidas
Anderson Moreira
Arquitetura de Computadores