Baixe Linguagem C conceitos basicos e outras Notas de estudo em PDF para Informática, somente na Docsity!
Algoritmos e Estruturas de Dados
Prof. Patrick Pedreira
Linguagem C Linguagem C
- - Conceitos BConceitos Báásicossicos - -
A linguagemA linguagem CC éé uma linguagem de programauma linguagem de programaççãoão
gen
gen
é
é
rica inventada na d
rica inventada na d
é
é
cada de 1970 por Dennis
cada de 1970 por Dennis
Ritchie.Ritchie.
O ANSI (O ANSI (AmericanAmerican NationalNational StandardStandard InstituteInstitute))
padronizou a versão ANSIpadronizou a versão ANSI--CC
Histórico
Histórico
C é uma linguagem de médio nível
C é uma linguagem de médio nível
Assembly
Assembly
Baixo n
Baixo n
í
í
vel
vel
CC
MMéédio ndio níívelvel C++C++
Basic
Basic
FortranFortran
CobolCobol
Pascal
Pascal
Alto nAlto níívelvel AdaAda
Por que estudar C?
Por que estudar C?
Versatilidade:Versatilidade: ele possui tanto caracterele possui tanto caracteríísticas de "altosticas de "alto
nníível" quanto de "baixo nvel" quanto de "baixo níível".vel".
Poder:Poder: possui ampla biblioteca de funpossui ampla biblioteca de funçções eões e éé utilizadoutilizado
na construna construçção deão de ““softwaresoftware”” para os mais diversospara os mais diversos
projetos.projetos.
Portabilidade:Portabilidade: éé posspossíível adaptar um programa em C devel adaptar um programa em C de
um tipo de computador para outro.
um tipo de computador para outro.
Primeiros passos
Primeiros passos
Um programa em C consiste de vUm programa em C consiste de vááriasrias funfunççõesões
encadeadas encadeadas..
Uma funUma funççãoão éé umum bloco de cbloco de cóódigodigo de programa quede programa que
pode ser usado diversas vezes em sua execu pode ser usado diversas vezes em sua execuçção.ão.
Blocos de c
Blocos de c
ó
ó
digo são delimitados por chaves:
digo são delimitados por chaves:
O uso de funO uso de funçções permite que o programa fique maisões permite que o programa fique mais
leg legíívelvel, mais, mais estruturadoestruturado..
O C é “ Case Sensitive”
O C é “ Case Sensitive”
CaracteresCaracteres maimaiúúsculos e minsculos e minúúsculos fazemsculos fazem
diferendiferenççaa::
Comandos do C (Comandos do C (ifif ouou forfor, por exemplo) s, por exemplo) sóó
podem ser escritos em min
podem ser escritos em min
ú
ú
sculas, pois senão o
sculas, pois senão o
compilador interpretarcompilador interpretaráá como varicomo variááveis.veis.
Soma ≠ soma ≠ SOMA ≠ SomASomaSoma ≠≠ somasoma ≠≠ SOMASOMA ≠≠ SomASomA
Estrutura Geral
Estrutura Geral
tipo_de_retorno main()
comandos
return valor;
tipo_de_retorno main()
comandos
return valor;
int main()
int x, y;
x = x + y;
return 0;
int main()
int x, y;
x = x + y;
return 0;
Exemplo:Exemplo:
A função main()
A função main()
Todo programa deve terTodo programa deve ter umauma úúnicanica funfunççãoão
mainmain..
A fun
A fun
ç
ç
ão
ão
main
main
é
é
o
o
ponto de partida
ponto de partida
quando o
quando o
programaprograma éé executado.executado.
Arquivos auxiliares não devem conter a fun
Arquivos auxiliares não devem conter a fun
ç
ç
ão
ão
mainmain..
FFFF
Endereço Conteúdo
Variáveis
Variáveis
VariVariááveis são armazenadas naveis são armazenadas na
memmemóória do computador.ria do computador.
A linguagem C tem 5 tipos bA linguagem C tem 5 tipos báásicos:sicos:
charchar – – caracterecaractere ASCIIASCII
int
int
n
n
ú
ú
mero inteiro
mero inteiro
floatfloat – – nnúúmero real de precisão simplesmero real de precisão simples
voidvoid – – sem valorsem valor
doubledouble – – nnúúmero real de precisão duplamero real de precisão dupla
Tipos de dados
Tipos de dados
doubledouble
float 44 3232
float
intint 44 3232
charchar
Tamanho (bits)
Tamanho (bits) Tamanho (bytes)
Tamanho (bytes) Tipo
Tipo
* Depende do compilador
Tipos de dados
Tipos de dados
Um modificador de tipo
Um modificador de tipo
altera o intervalo de
altera o intervalo de
valores
valores
que uma vari
que uma vari
á
á
vel pode armazenar ou
vel pode armazenar ou
como o compilador representacomo o compilador representa um valor.um valor.
Existem quatro modificadores de tipo:Existem quatro modificadores de tipo:
signedsigned
unsignedunsigned
longlong
short
short
Tipos de dados
:: Modificadores
Tipos de dados
:: Modificadores
Tipos de dados
:: Modificadores
Tipos de dados
:: Modificadores
Ao tipoAo tipo floatfloat não se pode aplicar nenhumnão se pode aplicar nenhum
modificador. modificador.
Ao tipo
Ao tipo
double
double
pode
pode
se aplicar apenas o
se aplicar apenas o
modificador
modificador
long
long
Os quatro modificadores podem ser aplicados aOs quatro modificadores podem ser aplicados a
inteiros ( inteiros (intint).).
O modificador
O modificador
unsigned
unsigned
serve para especificar
serve para especificar
vari variááveisveis sem sinalsem sinal, instruindo o compilador a, instruindo o compilador a
não considerar o primeiro bit como sinal. não considerar o primeiro bit como sinal.
Tipos de dados
:: Modificadores
Tipos de dados
:: Modificadores
OO nnúúmero de bitsmero de bits do tipodo tipo intint normalmentenormalmente
corresponde ao tamanho da palavra de umacorresponde ao tamanho da palavra de uma
determinada arquitetura de computador.determinada arquitetura de computador.
Dependendo do compilador, os modificadores
Dependendo do compilador, os modificadores
shortshort ee longlong alteram aalteram a quantidade de bitsquantidade de bits
reservados para representar nreservados para representar núúmeros inteiros:meros inteiros:
longlong intint: reserva: reserva mais bitsmais bits que o tipoque o tipo intint
short intshort int: reserva: reserva menos bitsmenos bits que o tipoque o tipo intint
Cada compilador
Cada compilador
é
é
livre para escolher tamanhos
livre para escolher tamanhos
adequados para o seu pradequados para o seu próóprio hardware.prio hardware.
Tipos de dados
:: Resumo (compilador gcc)
Tipos de dados
:: Resumo (compilador gcc)
long double 8080 dez ddez díígitos de precisãogitos de precisão
double 6464 dez ddez díígitos de precisãogitos de precisão
float 3232 seis dseis díígitos de precisãogitos de precisão
signed long int 3232 - -2.147.483.647 a 2.147.483.6472.147.483.647 a 2.147.483.
0 a 4.294.967.
0 a 4.294.967. 32
unsigned long int 32
- 2.147.483.647 a 2.147.483.
2.147.483.647 a 2.147.483. 32
long int 32
signed short int 1616 - -32.767 a 32.76732.767 a 32.
unsigned short int 1616 0 a 65.5350 a 65.
short int 1616 - -32.767 a 32.76732.767 a 32.
signed int 3232 - -2.147.483.647 a 2.147.483.6472.147.483.647 a 2.147.483.
unsigned int 3232 0 a 4.294.967.2950 a 4.294.967.
-2.147.483.647 a 2.147.483. 32
int 32
signed char 88 - -128 a 127128 a 127
unsigned char 88 0 a 2550 a 255
char 88 - -128 a 127128 a 127
Faixa de nFaixa de núúmerosmeros
representadosrepresentados
Tamanho emTamanho em
bitsbits
Tipo Tipo
São os
São os
nomes
nomes
que damos aos objetos utilizados
que damos aos objetos utilizados
(vari
(vari
á
á
veis, constantes, fun
veis, constantes, fun
ç
ç
ões, etc.)
ões, etc.)
Podem ter qualquer nome, desde que:Podem ter qualquer nome, desde que:
Comece com umaComece com uma letraletra ou sublinhado (ou sublinhado (underscoreunderscore)) __
Os caracteres subseqOs caracteres subseqüüentes devem serentes devem ser letrasletras,,
nnúúmerosmeros ouou __..
Não seja igual a:
Não seja igual a:
uma palavra reservada,uma palavra reservada,
uma funuma funçção declaradaão declarada
bibliotecas do C.bibliotecas do C.
Identificadores
Identificadores
Exemplos:Exemplos:
letra = 'H';
ano = 2007;
temperatura = 38.9;
nova_letra = letra;
float cateto = 3.1;
area_ret = base * altura;
letra = 'H';
ano = 2007;
temperatura = 38.9;
nova_letra = letra;
float cateto = 3.1;
area_ret = base * altura;
Operador de Atribuição
Operador de Atribuição
atribuiatribuiçção de valorão de valor
atribui
atribui ç
ç ão de uma
ão de uma
varivariáável a outravel a outra
defini definiçção e atribuião e atribuiççãoão
atribuiatribuiçção de fão de fóórmularmula
Caractere × String de caracteres
Caractere × String de caracteres
Quando uma variQuando uma variáável possui apenas umvel possui apenas um
caractere, ele ocupacaractere, ele ocupa apenas uma posiapenas uma posiççãoão dede
memmemóória:ria:
A
char char letra = 'A'; letra = 'A';
VariVariáávelvel MemMemóóriaria
Caractere × String de caracteres
Caractere × String de caracteres
Uma string deUma string de nn caracteres ocupacaracteres ocupa n+1n+1 posiposiççõesões dede
mem memóória.ria.
A posi
A posi
ç
ç
ão adicional corresponde ao valor zero (
ão adicional corresponde ao valor zero (
\
\
NULL
NULL
em ASCII), indicativo do
em ASCII), indicativo do
final da string
final da string
A
B C
nn caracterescaracteres
n+
n+
posi
posi ç
ç ões
ões
char nome[] = "ABC";
char nome[] = "ABC";
VariVariáávelvel MemMemóóriaria
Aritm
Aritm
é
é
ticos
ticos
RelacionaisRelacionais
LLóógicosgicos
Operadores
Operadores
DecrementoDecremento
IncrementoIncremento
Resto de divisãoResto de divisão
DivisãoDivisão
MultiplicaMultiplicaççãoão
Subtra
Subtra ç
ç ão
ão
Adi
Adi ç
ç ão
ão
AAççãoão
OperadorOperador
yy----;;
xx++++;;
x = yx = y %% 2;2;
x = yx = y // 2;2;
x = 8x = 8 ** y;y;
x = x
x = x
y;
y;
x = A
x = A
y;
y;
ExemploExemplo
Operadores Aritméticos
Operadores Aritméticos
area = 2 * PI * raio;
delta = bb – 4a*c;
area = 2 * PI * raio;
delta = bb – 4a*c;
media = (a + b + c)/2;
delta = (bb) – (4a*c);
media = (a + b + c)/2;
delta = (bb) – (4a*c);
Operadores Aritméticos
Operadores Aritméticos
Diversos operadores podem ser utilizados emDiversos operadores podem ser utilizados em
uma mesma expressão:uma mesma expressão:
A ordem de execu
A ordem de execu
ç
ç
ão dos operadores pode ser
ão dos operadores pode ser
determinada explicitamente pelo uso de
determinada explicitamente pelo uso de
parênteses
parênteses
Quando não h
Quando não h
á
á
parênteses, o compilador usa
parênteses, o compilador usa
regras de
regras de
precedência
precedência
para determinar qual
para determinar qual
opera operaçção executar primeiroão executar primeiro
Se duas opera
Se duas opera
ç
ç
ões têm a mesma precedência,
ões têm a mesma precedência,
segue segue--se a ordem dase a ordem da esquerda para a direitaesquerda para a direita..
Maior precedência
Menor precedência
Maior precedênciaMaior precedência
Menor precedênciaMenor precedência
Operadores Aritméticos
Operadores Aritméticos
Operadores Aritméticos
:: Incremento e decremento
Operadores Aritméticos
:: Incremento e decremento
O operadorO operador incremento de 1incremento de 1 ((++++) realiza duas) realiza duas
opera
opera
ç
ç
ões:
ões:
Soma 1Soma 1 ao valor atual da variao valor atual da variáávelvel
Armazena o resultado na prArmazena o resultado na próópria varipria variáávelvel
Em vez deEm vez de xx == x + 1;x + 1; , escreve, escreve--sese x++;x++;
De forma semelhante funciona o operadorDe forma semelhante funciona o operador
decremento de 1
decremento de 1
Em vez de
Em vez de
x = x
x = x
, escreve
, escreve
se
se
x
x
int cond;
int a = 3;
float x = 1.5;
cond = a != x; /* cond=1 -> V */
cond = a/2.0 == x; /* cond=1 -> V */
cond = a/2 == x; /* cond=0 -> F */
cond = a != 2x; / cond=0 -> F */
cond = a >= x; /* cond=1 -> V */
cond = a/3 <= x; /* cond=1 -> V */
cond = a/2 > 2; /* cond=0 -> F */
cond = a; /* cond=3 -> V */
cond = a – 2x; / cond=0 -> F */
int cond;
int a = 3;
float x = 1.5;
cond = a != x; /* cond=1 -> V */
cond = a/2.0 == x; /* cond=1 -> V */
cond = a/2 == x; /* cond=0 -> F */
cond = a != 2x; / cond=0 -> F */
cond = a >= x; /* cond=1 -> V */
cond = a/3 <= x; /* cond=1 -> V */
cond = a/2 > 2; /* cond=0 -> F */
cond = a; /* cond=3 -> V */
cond = a – 2x; / cond=0 -> F */
Operadores Relacionais
:: Exemplos
Operadores Relacionais
:: Exemplos
Operadores Lógicos
Operadores Lógicos
Operam sobre os valoresOperam sobre os valores
l
l
ó
ó
gicos das vari
gicos das vari
á
á
veis, sem
veis, sem
considerar seu bits considerar seu bits
individuais.
individuais.
AND (E) AND (E)
NOT (NÃO)NOT (NÃO)
OR (OU)OR (OU)
OperadorOperador AAççãoão
int cond;
int a = 3;
float x = 1.5;
cond = (a/2 == x) && (a > 2); /* cond=0 -> F */
cond = (a != x) || (a/x < 2); /* cond=1 -> V */
cond = (x <= a) && (a >= 2x); / cond=1 -> V */
cond = !(a/3 <= x); /* cond=0 -> F */
cond = (a/2==x) || (a>=x) && !(2x!=a); / cond=1 -> V */
cond = a && x; /* cond=1 -> V */
cond = (a - 2x) || (x < a/2); / cond=0 -> F */
int cond;
int a = 3;
float x = 1.5;
cond = (a/2 == x) && (a > 2); /* cond=0 -> F */
cond = (a != x) || (a/x < 2); /* cond=1 -> V */
cond = (x <= a) && (a >= 2x); / cond=1 -> V */
cond = !(a/3 <= x); /* cond=0 -> F */
cond = (a/2==x) || (a>=x) && !(2x!=a); / cond=1 -> V */
cond = a && x; /* cond=1 -> V */
cond = (a - 2x) || (x < a/2); / cond=0 -> F */
Operadores Lógicos
:: Exemplos
Operadores Lógicos
:: Exemplos
Precedência entre operadores
Precedência entre operadores
AtribuiAtribuiççãoão
OU lOU lóógicogico
&&&& E lE lóógicogico
==== !=!= Igual, diferenteIgual, diferente
RelacionaisRelacionais
SubtraSubtraçção, adião, adiççãoão
MultiplicaMultiplicaçção, divisãoão, divisão
MMóódulo (resto da divisão inteira)dulo (resto da divisão inteira)
Maior precedênciaMaior precedência
Menor precedênciaMenor precedência
PrPréé/p/póós incremento, decrementos incremento, decremento
MenosMenos UnUnááriorio
NegaNegaççãoão
Estão descritos na bibliotecaEstão descritos na biblioteca stdiostdio.h.h
Comandos deComandos de SaSaíídada::
FunFunççãoão printfprintf()()
FunFunççãoão putcharputchar()()
Comandos de
Comandos de
Entrada
Entrada
Fun
Fun
ç
ç
ão
ão
scanf
scanf
FunFunççãoão getsgets()()
FunFunççãoão getchargetchar()()
Comandos de Entrada e Saída
Comandos de Entrada e Saída
printf (string_de_controle, argumentos);
printf (string_de_controle, argumentos);
Comandos de Saída
:: printf()
Comandos de Saída
:: printf()
FunFunçção para aão para a escrita formatadaescrita formatada no dispositivono dispositivo
de sade saíída padrão, normalmente o vda padrão, normalmente o víídeo.deo.
Comandos de Saída
:: printf()
Comandos de Saída
:: printf()
string_de_controlestring_de_controle consiste em:consiste em:
Caracteres que serão exibidos na tela
Caracteres que serão exibidos na tela
Caracteres de controle (Caracteres de controle (\))
Comandos de formato, que definem a maneira comoComandos de formato, que definem a maneira como
os argumentos serão mostrados (
os argumentos serão mostrados (
argumentos
argumentos
são as vari
são as vari
á
á
veis cujos conte
veis cujos conte
ú
ú
dos
dos
serão exibidos na tela. serão exibidos na tela.
Comandos de Saída
:: printf()
Comandos de Saída
:: printf()
Caracteres de controle imprimem caracteres
Caracteres de controle imprimem caracteres
especiais na sa
especiais na sa
í
í
da:
da:
\nn – – nova linhanova linha
\tt – – tabulatabulaçção horizontalão horizontal
\\ – – a pra próópria contrapria contra--barrabarra
\bb – – backspace backspace
\"" – – aspasaspas
\'' – – apapóóstrofestrofe
\xnnnxnnn – – ccóódigo hexadecimal do caractere ASCIIdigo hexadecimal do caractere ASCII
\
\
a
a
alerta sonoro
alerta sonoro
nome_da_variável = getchar();
nome_da_variável = getchar();
Comandos de Entrada
:: getchar()
Comandos de Entrada
:: getchar()
getchar() - - rotina querotina que espera uma tecla serespera uma tecla ser
pressionada pressionada e devolve seu valor na tela.e devolve seu valor na tela.
Deve
Deve
se pressionar
se pressionar
ENTER
ENTER
depois de digitar o caractere.
depois de digitar o caractere.
Não fazem parte do ANSI C padrão:Não fazem parte do ANSI C padrão:
getche()
lê caractere, exibe na tela, dispensa
lê caractere, exibe na tela, dispensa ENTER
ENTER
getch() - - lê caractere, não exibe na tela, dispensalê caractere, não exibe na tela, dispensa ENTERENTER..
Modeladores ouModeladores ou castcast são aplicados a umasão aplicados a uma
expressão paraexpressão para converterconverter seu resultado em umseu resultado em um
tipo especificado.tipo especificado.
()
()
Modeladores (Cast)
Modeladores (Cast)
Tabela ASCII
Tabela ASCII
American
American
Standard
Standard
Code
Code
for
for
Information
Information
Interchange
Interchange
(ASCII)
(ASCII)
é
é
um conjunto de c
um conjunto de c
ó
ó
digos
digos
para o computador representar n para o computador representar núúmeros, letras,meros, letras,
pontua pontuaçção e outros caracteres.ão e outros caracteres.
0100 0011 67 43 C
0010 1011 43 2B +
0100 0010 68 42 B
0100 0001 65 41 A
Binário Decimal Hex Caractere
Exemplo programa em C
referente ao algoritmo de
inversão de números
Exemplo programa em C
referente ao algoritmo de
inversão de números
ExercExercíício 5 pcio 5 páágina 38gina 38
/* Arquivo Capitulo_02_05.c // Arquivo Capitulo_02_05.c */
// stdiostdio.h.h éé a biblioteca em C que implementa as funa biblioteca em C que implementa as funçções de entrada e saões de entrada e saíída */da */
##includeinclude <.h>
/* m/* móódulo principal */dulo principal */
intint mainmain()()
/* O caractere "{"
/* O caractere "{" é
é a abertura do bloco. Corresponde ao "in
a abertura do bloco. Corresponde ao "in í
í cio".
cio".
O caractere "}" corresponde ao "fim" */
O caractere "}" corresponde ao "fim" */
/* A declara/* A declaraçção de varião de variááveis se inicia pelo tipo seguido pelas variveis se inicia pelo tipo seguido pelas variááveis */veis */
intint valor_inicialvalor_inicial,, valor_tempvalor_temp, milhar, centena, dezena, unidade,, milhar, centena, dezena, unidade, valor_invertidovalor_invertido;;
/* "/* "printfprintf" corresponde ao comando "escreve". O /n faz pular para a pr" corresponde ao comando "escreve". O /n faz pular para a próóxima linhaxima linha
printfprintf("Entre com um n("Entre com um núúmero.mero.\n");n");
/* "/* "scanfscanf" corresponde ao comando "leia" */" corresponde ao comando "leia" */
// ÉÉ necessnecessáário colocar o caractere "&" antes da varirio colocar o caractere "&" antes da variáável que servel que seráá lida, paralida, para
indicar que a mesma serindicar que a mesma seráá alterada */alterada */
// ÉÉ necessarionecessario indicar o tipo da variindicar o tipo da variáável a ser lida.vel a ser lida.
No caso, os inteiros são indicados pelo "%d" */No caso, os inteiros são indicados pelo "%d" */
scanfscanf("%d", &("%d", &valor_inicialvalor_inicial););
/* o caractere "=" corresponde a "/* o caractere "=" corresponde a "ßß" */" */
valor_tempvalor_temp == valor_inicialvalor_inicial;;
milhar =milhar = valor_tempvalor_temp / 1000;/ 1000;
/* O operador "%" corresponde ao operador "resto" // O operador "%" corresponde ao operador "resto" */
valor_tempvalor_temp == valor_tempvalor_temp % 1000 ;% 1000 ;
centena =
centena = valor_temp
valor_temp / 100;
valor_temp
valor_temp
valor_temp
valor_temp % 100;
dezena =dezena = valor_tempvalor_temp / 10;/ 10;
valor_tempvalor_temp == valor_tempvalor_temp % 10;% 10;
unidade =unidade = valor_tempvalor_temp;;
valor_invertidovalor_invertido = unidade * 1000;= unidade * 1000;
valor_invertidovalor_invertido == valor_invertidovalor_invertido + ( dezena * 100 );+ ( dezena * 100 );
valor_invertidovalor_invertido == valor_invertidovalor_invertido + ( centena * 10 );+ ( centena * 10 );
valor_invertidovalor_invertido == valor_invertidovalor_invertido + milhar;+ milhar;
/* Na escrita, o %d/* Na escrita, o %d éé substitusubstituíído pela varido pela variáável na seqvel na seqüüência. No caso a seguir, O valorência. No caso a seguir, O valor
da varida variáávelvel valor_inicialvalor_inicial éé inserido na posiinserido na posiçção do primeiro %d e o valor da varião do primeiro %d e o valor da variáávelvel
valor_invertidovalor_invertido na posina posiçção doão do segudosegudo %d */%d */
printfprintf("O n("O núúmero %d invertidomero %d invertido éé %d%d\n",n", valor_inicialvalor_inicial,,valor_invertidovalor_invertido););
/* Retorno do m/* Retorno do móódulo principal */dulo principal */
returnreturn 0;0;
Questões
Questões