1. Linguagem C Agradecimentos
TÉCNICAS DE PROGRAMAÇÃO I
Prof.John Hebert da Silva Felix
johnfelix@unilab.edu.br
Universidade da Integração Internacional da Lusofonia
Afro-Brasiliera
Curso de Engenharia de Energias
Redenção-CE, Brasil
2015
Prof. John Hebert S. Felix 1/10 UNILAB
Técnicas de Programação I
2. Linguagem C Agradecimentos
Índice da Apresentação
1 Linguagem C
Linguagem C
Prof. John Hebert S. Felix 2/10 UNILAB
Técnicas de Programação I
4. Linguagem C Agradecimentos
Linguagem C
1 Introdução;
2 A Biblioteca-padrão e as Palavras Reservadas em C;
3 Tipos de Dados e Variáveis;
4 Operadores e Expressões;
5 Entrada e Saída E/S pelo Console;
6 Estruturas de Controles;
7 Funções;
8 Arrays e Strings;
9 Ponteiros;
10 Estruturas, Uniões e Enumerações;
11 Arquivos e Streams;
12 Estruturas de dados:
Listas lineares (Filas, Pilhas e Listas Encadeadas).
Ordenação e Pesquisa.
Prof. John Hebert S. Felix 4/10 UNILAB
Técnicas de Programação I
5. Linguagem C Agradecimentos
Linguagem C
1 Introdução;
2 A Biblioteca-padrão e as Palavras Reservadas em C;
3 Tipos de Dados e Variáveis;
4 Operadores e Expressões;
5 Entrada e Saída E/S pelo Console;
6 Estruturas de Controles;
7 Funções;
8 Arrays e Strings;
9 Ponteiros;
10 Estruturas, Uniões e Enumerações;
11 Arquivos e Streams;
12 Estruturas de dados:
Listas lineares (Filas, Pilhas e Listas Encadeadas);
Ordenação e Pesquisa.
Prof. John Hebert S. Felix 4/10 UNILAB
Técnicas de Programação I
6. Linguagem C Agradecimentos
Introdução
Introdução
A linguagem C foi desenvolvida por Dennis Ritchie no Bell
Laboratories, a partir de outras duas linguagens mais antigas a
BCPL e a B;
C é uma linguagem de programação que permite uma
abordagem estruturada e disciplinada para a escrita de
programas;
Os códigos escritos em C são portáveis, i.e, podem ser
adaptados ao outros computadores com pouca ou nenhuma
modificção nos códigos.
Prof. John Hebert S. Felix 5/10 UNILAB
Técnicas de Programação I
7. Linguagem C Agradecimentos
Introdução
Introdução
A linguagem C foi desenvolvida por Dennis Ritchie no Bell
Laboratories, a partir de outras duas linguagens mais antigas a
BCPL e a B;
C é uma linguagem de programação que permite uma
abordagem estruturada e disciplinada para a escrita de
programas;
Os códigos escritos em C são portáveis, i.e, podem ser
adaptados ao outros computadores com pouca ou nenhuma
modificção nos códigos.
Prof. John Hebert S. Felix 5/10 UNILAB
Técnicas de Programação I
8. Linguagem C Agradecimentos
Introdução
Introdução
A linguagem C foi desenvolvida por Dennis Ritchie no Bell
Laboratories, a partir de outras duas linguagens mais antigas a
BCPL e a B;
C é uma linguagem de programação que permite uma
abordagem estruturada e disciplinada para a escrita de
programas;
Os códigos escritos em C são portáveis, i.e, podem ser
adaptados ao outros computadores com pouca ou nenhuma
modificção nos códigos.
Prof. John Hebert S. Felix 5/10 UNILAB
Técnicas de Programação I
9. Linguagem C Agradecimentos
Introdução
Introdução
A linguagem C foi desenvolvida por Dennis Ritchie no Bell
Laboratories, a partir de outras duas linguagens mais antigas a
BCPL e a B;
C é uma linguagem de programação que permite uma
abordagem estruturada e disciplinada para a escrita de
programas;
Os códigos escritos em C são portáveis, i.e, podem ser
adaptados ao outros computadores com pouca ou nenhuma
modificção nos códigos.
Prof. John Hebert S. Felix 5/10 UNILAB
Técnicas de Programação I
10. Linguagem C Agradecimentos
A biblioteca-padrão e as palavras reservadas em C
A Biblioteca-Padrão C
Em 1983, foi estabelecido um comitê, pelo o ANSI (American National
Standards Institute), com o objetivo de padronizar a linguagem C;
Este comitê definiu o conteúdo e a forma padrão para a biblioteca C que
ficou conhecido como padrão C ANSI;
A biblioteca-padrão é formda por uma coleção de funções suportadas
pelos compiladores ANSI;
Uma biblioteca armazena um arquivo que tem o nome de cada função, o
código-objeto e as infrmações para o processo de ligar (visto em
compiladores x interpretadores);
Os arquivos de cabeçalho que relacionam as funções da biblioteca são
incluidos pela diretiva #include;
A biblioteca-padrão contém os protótipos de funções que estão
relacionados com os arquivos de cabeçalho.
Prof. John Hebert S. Felix 6/10 UNILAB
Técnicas de Programação I
11. Linguagem C Agradecimentos
A biblioteca-padrão e as palavras reservadas em C
A Biblioteca-Padrão C
Arquivo de
Cabeçalho
Finalidade
assert.h Define macros que auxiliam na depuração de programas.
ctype.h Define protótipos de função para funções utilizadas na manipulação de
caracteres
errno.h Define macros utilizadas na apresentação de erros.
float.h Define os valores de tamanho de ponto flutuante do sistema.
limits.h Define os valores de tamanho de inteiros do sistema.
locale.h Contém protótipos de funções e outras informações que suportam a lo-
calização.
math.h Contém protótipos de função para funções utilizadas na biblioteca de
matemtática.
Prof. John Hebert S. Felix 6/10 UNILAB
Técnicas de Programação I
12. Linguagem C Agradecimentos
A biblioteca-padrão e as palavras reservadas em C
A Biblioteca-Padrão C
Arquivo de
Cabeçalho
Finalidade
setjmp.h Contém protótipos de função para funções utilizadas para evitar sequên-
cia normal de chamada e de retorno de função.
signal.h Contém protótipos de função e macros que suportam a manipulação de
sinais.
stdarg.h Define macros que suportam lista de argumentos de comprimentos va-
riável.
stddef.h Define tipos comuns normalmente utilizados em C.
stdio.h Contém protótipos de função para funções de entrada e saída.
stdlib.h Contém protótipos de função para conversões de número em texto e
vice-versada, alocação de memória, números aleatórios e funções utili-
tárias.
string.h Contém protótipos de função para funções de processamento de strings.
time.h Contém protótipos de função e tipo para manipular data e hora.
Prof. John Hebert S. Felix 6/10 UNILAB
Técnicas de Programação I
13. Linguagem C Agradecimentos
A biblioteca-padrão e as palavras reservadas em C
Palavras reservadas em C
auto double int struct
break else long switch
case enum register typedef
char extern return union
const float short unsigned
continue for signed void
default goto sizeof volatile
do if static while
Prof. John Hebert S. Felix 6/10 UNILAB
Técnicas de Programação I
14. Linguagem C Agradecimentos
Tipos de Dados e Variáveis
Tipos de Dados
Um tipo de dado em C, define um conjunto de valores possíveis de
serem armazenados em variáveis, bem como as diversas operações
que podem ser realizadas com tais variaáveis. Em C há cinco tipos de
dados primitivos, a saber:
char: caractere simples. Tamanho de 1 byte (8 bits). Faixa de −127 a 127;
int: valores inteiros. Tamanho de 2 bytes. Faixa de −32.767 a 32.767;
float: números reais (ponto flutuante). Tamanho de 4 bytes. Faixa
de ±3, 4 × 10±38;
double: números reais (ponto flutuante duplo). Tamanho de 8 bytes. Faixa
de ±1, 7 × 10±308;
void: tipo de dado que indica vazio.
Em C, o tipo de dado lógico é obtido pela utilização do valor 0 (zero)
para falso (false) e 1 (um) ou qualquer valor diferente de zero para
verdadeiro (true).
Prof. John Hebert S. Felix 7/10 UNILAB
Técnicas de Programação I
15. Linguagem C Agradecimentos
Tipos de Dados e Variáveis
Tipos de Dados - modificadores
Um modificador é utilizado para alterar um tipo de dado. Os
modificadores em C são: signed, unsigned, long e short;
Os modificadores podem ser aplicados aos tipos de dados básicos
int e char. O long também pode ser aplicado a double;
No C ANSI o long float foi retirado, devido este ter o mesmo
significado do double. Exemplos:
unsigned char: 1 byte (8 bits). Faixa de 0 a 127;
unsigned short int: 2 bytes. Faixa de 0 a 65.535;
long int: 4 bytes. Faixa de −2.147.483.647 a 2.147.483.647;
unsigned long int: 4 bytes. Faixa de 4.294.967.295.
Prof. John Hebert S. Felix 7/10 UNILAB
Técnicas de Programação I
16. Linguagem C Agradecimentos
Tipos de Dados e Variáveis
Variáveis e Constantes
As variáveis são posições nomeadas de memória utilizadas para
armazenar os dados, que podem ser modificados durante a execução do
programa;
As variáveis podem ser declaradas dentro de funções (variáveis locais),
na definição de parâmetros (parâmetros formais) e localizadas foras das
funções (variáveis globais);
As variáveis locais são alocadas e desalocadas dentro de funções;
Os parâmetros formais são os argumentos, i.e., variáveis delcaradas
para receber os valores de argumentos de uma função;
As variáveis globais podem ser utilizadas por qualquer parte do
programa.
Prof. John Hebert S. Felix 7/10 UNILAB
Técnicas de Programação I
17. Linguagem C Agradecimentos
Tipos de Dados e Variáveis
Sintaxe da Declaração de Variáveis
Em C, a declaração de variáveis tem a seguinte sintaxe.
tipo_de_dado identificador;
tipo_de_dado lista_de_identificadores (separados por vírgula);
Identificadores Válidos
Em C, os nomes ou identificadores das variáveis devem atender as seguintes regras:
1 O identificador deve começar com um caractere alfabético ou “_”(underline);
2 O identificador pode ter caracteres numéricos, desde que atenda a regra 1;
3 O identificador não pode conter caracteres especiais;
4 Utilizar nomes significativos para representar as variáveis do programa;
5 C faz distinção entre letras minúsculas e maiúsculas,e.g., Nome e nome são
variáveis diferentes;
6 Ex.:identificadores válidos: numero, conta, _nome, idade, B13, C2;
7 Ex.:identificadores inválidos: _av!15, entre..par, a-b, c&h, 1car.
Prof. John Hebert S. Felix 7/10 UNILAB
Técnicas de Programação I
18. Linguagem C Agradecimentos
Tipos de Dados e Variáveis
Programa em C - declaração de variáveis
//Bibliotecas no padrão C ANSI
#include <stdio.h>
#include <stdlib.h>
//Função principal do programa
int main (void){
//Declaração de variáveis
unsigned short int numConta;
unsigned char tipConta;
float saldoConta;
/* Corpo do programa
Ações a serem executadas */
return 0;//Indica o fim do programa com sucesso
} //Fim da função principal do programa
Prof. John Hebert S. Felix 7/10 UNILAB
Técnicas de Programação I
19. Linguagem C Agradecimentos
Tipos de Dados e Variáveis
Variáveis e Constantes
As constantes são variáveis com valores fixos, que não podem ser
modificados pelo programa;
Ex.: int cont = 0;
A constante string é suportada por C. Uma string correponde a um conjunto
de caracteres entre aspas dupla, e.g., “Hoje a noite tem festa”.
C suporta constantes de barra invetida que insere caracteres especiais como
constantes.
Códigos de barra invetida
Código Descrição
n Nova linha. Insere o curso da tela no começo de uma nova linha
t Tabulação horizontal. Movimenta o curso da tela para a próxima posição de tabulação
horizontal
" Aspas duplas. Insere aspas duplas
’ Aspas simples. Insere aspas simples
0 Nulo. Indica o fim de uma string
Barra invertida. Insere um caractere de barra invetida em uma string
v Tabulação vertical
a Alerta (beep). Emite o sinal sonoro do sistema
Prof. John Hebert S. Felix 7/10 UNILAB
Técnicas de Programação I
20. Linguagem C Agradecimentos
Operadores e Expressões
Operador de Atribuição
Em C, o operador ou comando de atribuição é representado por =. A sintaxe deste
operador é mostrado a seguir:
variável = dado_atribuído;
variável = expressão; ou
variável1 = variável2= variáveln = expressão;
A atribuição em C, pode ocorrer durante a declaração de variáveis conforme é mostrado a seguir.
Atribuição de Valores em Variáveis
#include <stdio.h>
#include <stdlib.h>
int main (void){
unsigned short int numConta = 1200013;
unsigned char tipConta = ’F’; //F - pessoa Física e J - pessoa Jurídica
float saldoConta = 2750.92;
/* Corpo do programa - Ações a serem executadas */
return 0;
}
Prof. John Hebert S. Felix 8/10 UNILAB
Técnicas de Programação I
21. Linguagem C Agradecimentos
Operadores e Expressões
Conversão de tipos de dados por atribuição
Em C, a atribuição de valores a tipos diferentes pode converte o seu tipo de dado,
e.g., a variá de destino recebe o valor da expressão e adequa tal valor a seu tipo de
dado.
Ex.: Conversão de tipo por atribuição
#include <stdio.h>
#include <stdlib.h>
int main (void){
int inum;
char ctex;
float fvr;
ctex = inum; /* ctex recebe os 8 bits menos significativos de inum, se inum for de 0 a 256, ctex tem
valor semelhante ao de inum */
inum = fvr; /* inum recebe a parte inteira de fvr */
fvr = ctex; /* fvr converte o valor de ctex para ponto flutuante */
fvr = inum; /* fvr converte o valor de inum para flutuante */
return 0;
}
Prof. John Hebert S. Felix 8/10 UNILAB
Técnicas de Programação I
22. Linguagem C Agradecimentos
Operadores e Expressões
Operadores Aritméticos
Operador Função Exemplo
+ Adição c = a + b
– Subtração (ou menos
unário)
c = a – b
* Multiplicação c = a * b
/ Divisão c = a / b
% Resto c = a % 4
– – Decremento – –a (pré-decremento) ou
a– – (pós-decremento)
++ Incremento ++a (pré-incremento) ou
a++ (pós-incremento)
Prof. John Hebert S. Felix 8/10 UNILAB
Técnicas de Programação I
23. Linguagem C Agradecimentos
Operadores e Expressões
Operadores Lógicos
Operador Função Exemplo
&& AND f && v = f
|| OR f || v = v
! NOT !f = v
Tabela verdade dos operadores lógicos &&, || e !
a b a && b a || b !a
0 0 0 0 1
0 1 0 1 1
1 0 0 1 0
1 1 1 1 0
Prof. John Hebert S. Felix 8/10 UNILAB
Técnicas de Programação I
24. Linguagem C Agradecimentos
Operadores e Expressões
Operadores Relacionais
Operador Função Exemplo
== Igual a c == a
> Maior que a > b
< Menor que a < b
>= Maior ou igual a c >= a
<= Menor ou igual a c <= a
!= Diferente c != a
Prof. John Hebert S. Felix 8/10 UNILAB
Técnicas de Programação I
25. Linguagem C Agradecimentos
Operadores e Expressões
Operadores Bit a Bit
Operador Função Exemplo
& AND Equivante a &&
! OR Equivante a ||
ˆ OR exclusivo (XOR)
˜ Complemento de um ˜ a (inverte os bits, 1 == 0 e 0 ==1)
» Deslocamento à esquerda a = b»2;
« Deslocamento à direita b = a«1;
Tabela verdade dos operador lógico ˆ XOR
a b a ˆ b
0 0 0
0 1 1
1 0 1
1 1 0
Prof. John Hebert S. Felix 8/10 UNILAB
Técnicas de Programação I
26. Linguagem C Agradecimentos
Operadores e Expressões
Ex.: Incremento e deslocamento de bits
#include <stdio.h>
int main (void){
int a = 3, b = 3;
printf(“Mostra o valor de a: %dn", a); /* Realiza o pré-incremento */
printf(“Realiza o pré-incremento: %dn”, ++a);
printf(“Mostra o valor de a com pré-incremento:%dn”, a);
a = 3;
printf(“Mostra o valor de a: %dn", a); /* Realiza o pós-incremento */
printf(“Realiza o pós-incremento: %dn”, a++);
printf(“Mostra o valor de a com pós-incremento:%dn”, a);
/* Realiza o deslocamento à esquerda */
printf(“Realiza o deslocamento à esquerda:%d:%d:%dn”, b, b«1, b«2);
b = 3;
/* Realiza o deslocamento à direita */
printf(“Realiza o deslocamento à direita:%d:%d:%dn”, b, b»1, b»2);
return 0;
}
Prof. John Hebert S. Felix 8/10 UNILAB
Técnicas de Programação I
27. Linguagem C Agradecimentos
Operadores e Expressões
Operadores: ternário ? e ponteiros & e ∗
O operador ternário ? pode substituir a estrutura de seleção
if-then-else;
A forma do operador ternário ? é: expressão1 ? expressão2 :
expressão3;
Ex.: a = c > 5 ? 10 : 30; Se a expressão1 (c > 5) é verdadeira, a = 10,
caso contrário, a = 30;
Operadores: ternário ? e ponteiros & e ∗
Um endereço de uma variável na memória é chamado de ponteiro;
Os operadores & e ∗ são unários. O primeiro operador & retorna o endereço na
memória de seu operando. O segundo operador ∗ é o complemento de & e
retorno o valor da variável localizada no endereço que o segue.
Prof. John Hebert S. Felix 8/10 UNILAB
Técnicas de Programação I
28. Linguagem C Agradecimentos
Operadores e Expressões
Ex.: Ponteiros
#include <stdio.h>
int main (void){
int valor, aux;
int *endereco;
aux = 7;
endereco = &aux;
valor = *endereco;
printf(“O endereço é:%dn”, endereco);
printf(“O valor é:%dn”, valor);
return 0;
}
Prof. John Hebert S. Felix 8/10 UNILAB
Técnicas de Programação I
29. Linguagem C Agradecimentos
Operadores e Expressões
Operadores: vígula (,), ponto (.) e seta (->)
O operador vígula (,) é utilizado para fazer o encadeamento de
expressão, e.g., a = (b = 5, b + 2);
Os operadores ponto (.) e seta (->) são utilizados no referenciamento
de estruturas e uniões. Estes são tipos de dados compostos
referenciado por um mesmo nome (identificador);
Operadores: parênteses () e colchetes []
O operador parênteses () aumenta a precedência entre das
operações que estão no seu interior;
O operador colchetes [] permite indexar arrays unidimensionais
(vetores) e arrays bidimensionais (tabelas), e.g., char texto[10];
Prof. John Hebert S. Felix 8/10 UNILAB
Técnicas de Programação I
30. Linguagem C Agradecimentos
Operadores e Expressões
Precedêcia entre os operadores em C
Operadores Associatividade Tipo
( ) [ ] -> esquerda para direita maior
+ – ++ – – ! * & (tipo) direita para esquerda unário
* / % esquerda para direita multiplicativo
+ – esquerda para direita aditivo
< <= > >= esquerda para direita relacional
== != esquerda para direita igualdade/diferença
& esquerda para direita AND lógico
ˆ esquerda para direita XOR lógico
| esquerda para direita lógico
&& esquerda para direita lógico
|| esquerda para direita lógico
?: esquerda para direita condicional
= += –= *= /= esquerda para direita atribuição
Prof. John Hebert S. Felix 8/10 UNILAB
Técnicas de Programação I
31. Linguagem C Agradecimentos
Operadores e Expressões
Expressões e Blocos de Comandos
Em C, uma expressão é uma combinação válida de operadores,
constantes e variaáveis;
Converter uma expressão a mudar para um determindado tipo de dado é
denomindado de cast. A forma do cast é (tipo) expressão.
Ex.: (double) var1/10;
C reduzido consiste em simplificar a codificação de operadores de
atribuição. A forma do C reduzido é variável operador = expressão
correponde a forma normal variável = variável operador expressão.
Ex.: a = a + 5; na forma simplificada fica a+ = 5;
Os blocos de comandos são conjuntos ou grupos de comandos
relacionados, que são tratados como unidade. Em C, um bloco de
comando estar entre chaves { comandos }, i.e, o início é indicado por { e
o fim por }.
Prof. John Hebert S. Felix 8/10 UNILAB
Técnicas de Programação I
32. Linguagem C Agradecimentos
Entrada e Saída E/S pelo Console
Comandos de entrada e saída
A entrada de dados em C é realizada pelo comando scanf();
A saída de dados é executada pelo comando printf();
Estes comandos podem realizar a entrada e saída formadas, i.e., ler e
escrever nos diversos tipos de dados.
Sintaxe dos comandos de entrada e saída
scanf(“Texto / formato de dado”,&var1);
scanf(“Texto / formatos de dados”,&var1, &var2,. . . , &varn);
printf(“Texto / formato de dado”, result1);
printf(“Texto / formatos de dados”, result1, result2,. . . , resultn);
Exemplos para os comandos de entrada e saída
scanf (“%c %d %f”, &tipoConta, &numConta, &valorConta);
printf (“%c %d %f”, tipoConta, numConta, valorConta);
Prof. John Hebert S. Felix 9/10 UNILAB
Técnicas de Programação I
33. Linguagem C Agradecimentos
Entrada e Saída E/S pelo Console
Especificadores de formato de scanf()
Código Descrição de formato de leitura
%c caractere único
%d %i inteiros decimal
%e %f %g valor em ponto flutuante
%o valor em octal
%p ponteiro
%n recebe um valor inteiro igual ao número de caracte-
res lidos até esse ponto
%s string
%u inteiros sem sinal
%x valor em hexadecimal
%[] procura um conjunto de caractere %
Prof. John Hebert S. Felix 9/10 UNILAB
Técnicas de Programação I
34. Linguagem C Agradecimentos
Entrada e Saída E/S pelo Console
Especificadores de formato de printf()
Código Descrição
%c caractere
%d %i inteiros decimais com sinal
%e %E notação científica (minúsculo e maiúsculo)
%f ponto flutuante decimal
%g utiliza %e ou %f, o que for mais curto
%G utiliza %E ou %F, o que for mais curto
%o octal sem sinal
%p mostra um ponteiro
%n mostra o número de caracteres escritos até esse
ponto
%s string
%u inteiros decimais sem sinal
%x %X hexadecimal sem sinal (minúsculo e maiúsculo)
%% mostra o símbolo %
Prof. John Hebert S. Felix 9/10 UNILAB
Técnicas de Programação I
35. Linguagem C Agradecimentos
Entrada e Saída E/S pelo Console
Especificador de largura mínima e de precisão
O especificador de largura mínima, que correponde a um número entre o
símbolo % e o especificador de formato (e.g, %4c) limita o tamanho de
preencimento de uma variável;
O especificador de precisão acompanha o anteriro e especifica o número de
casas decimais (e.g, %4.8s, mostra uma string que tenha entre 4 e 8
caracteres);
Exemplo:
#include <stdio.h>
int main (void){
double num1 = 11.123456;
printf(“%fn”, num1);
printf(“%2.3fn”, num1);
printf(“%010.5fn”, num1);
printf(“%8.26sn”, “Quando aplicado a um texto limita o seu tamanho”);
return 0;
}
Prof. John Hebert S. Felix 9/10 UNILAB
Técnicas de Programação I