Linguagem de Programação
C
Disciplina : Paradigmas de Programação
Prof.: Gláucya Carreiro Boechat
Universidade Federal
Rural
de Pernambuco
Departamento de Estatística e Informática
Anatomia de um Programa em C
Características da Linguagem C
Ponto de entrada (início) do programa é a
função
main()
Todo programa em C deve ter sempre uma função main() declarada.
/* e */ identificam respectivamente o começo e
o fim de comentários
Na linguagem C++ usa-se o símbolo // para iniciar um
comentário que se estende até o final da linha onde foi iniciado
Anatomia de um Programa em C
Características da Linguagem C
; é um terminador de declarações
Declarações iniciadas por # identificam
comandos para o pré-processador
Declarações deste tipo não são realmente
compiladas: são pré-processadas
Exemplos
Anatomia de um Programa em C
Características da Linguagem C
{ e } identificam o início e o fim de um bloco de
comandos
Equivalente ao begin...end do Pascal
Distinção entre maiúsculas e minúsculas
Padronização entre os programadores
Minúsculas para nomes de variáveis, funções e
comandos
Maiúsculas para nomes de constantes simbólicas e
Estrutura de um Programa em C
[<definições de pré-processamento>]
[<declaração de variáveis globais>]
main() {
[<declaração de variáveis locais>]
/* Corpo da função main() */ }
[
[<tipo>] funcao1([<lista de parâmetros>])
[<declaração dos parâmetros>] {
Exemplo de um Programa em C
#include <stdio.h>
main() {
int inicio, fim, passo; float fahr;
float celsius(float fahr);
inicio = 0; /* limite inferior */ fim = 300; /* limite superior */ passo = 20; /* passo incremental */ printf("Fahrenheit Celsius\n");
fahr = inicio;
while (fahr <= fim) {
printf("%10.0f %7.1f\n", fahr, celsius(fahr)); fahr = fahr + passo;
Exemplo de um Programa em C
Versão C original da função celsius()
float celsius(fahr)
float fahr; {
return ((5.0/9.0)*(fahr - 32.0)); }
Versão C ANSI da função celsius()
Tipos de Dados em C
Obs: A palavra chave unsigned pode declarar inteiros que
Tipo
Declaração Bytes Faixa
Caracter
char
1
0 a 255
Inteiro
int
2
-32768 a +32767
Inteiro Curto
short
1 ou 2 -128 a +127 ou igual ao int
Inteiro Longo
long
4
-2147483648 a +2147483647
Ponto flutuante
float
4
±3.4E±38
Ponto flutuante
precisão dupla
double
8
±1.7E±308
Ponto flutuante
Identificadores em um Programa C
Uso de identificadores
Nomes de Variáveis, constantes e funções
Formação de nomes de identificadores
Todo identificador deve começar por uma letra ou sublinhado
(underscore) ‘_’
Os caracteres seguintes devem ser letras, dígitos ou ‘_’ Palavras chaves não são permitidas
auto
break
case
char
continue
default
do
double else
extern
float
for
goto
if
int
Identificadores em um Programa C
Declaração de Variáveis
<tipo> var1[, var2, ..., varN];
<tipo> var1 = <valor>;
Exemplos
int x = 10; float z;
char ch = ‘a’;
Identificadores em um Programa C
Locais de Declaração e Regras de Escopo
Há 3 locais principais de um programa em C
onde variáveis são declaradas:
Dentro das funçõesDeclaração dos parâmetros Fora das funções
Declaração de Variáveis em C
Variáveis Locais
As variáveis locais são declaradas dentro do bloco de uma
função
São visualizadas apenas dentro da função onde foram
declaradas
Sobrepõem a definição de uma variável global de mesmo
nome dentro da função
São criadas em tempo de execução quando a função é
chamada e destruídas após o final da execução da mesma
São também chamadas de variáveis dinâmicas ou
Declaração de Variáveis em C
Exemplos de Variáveis Locais
func1()
func2()
{
{
int x;
int x =
-100;
Declaração de Variáveis em C
Parâmetros formais
São resultados da declaração dos parâmetros passados
para as rotinas
Comportam-se como qualquer outra variável local dentro
da função
Padrão ANSI: No protótipo
func1(int arg1, char *str) {
...
}
C original: Entre o nome da função e a chave de abertura
func1(arg1, str) int arg1; char *str; { ... }
Declaração de Variáveis em C
Variáveis globais
Declaração fora do corpo de qualquer função
Possuem como escopo todas as rotinas da
aplicação
São alocadas em tempo de compilação e
ocupam memória durante toda a execução do
programa
Declaração de Variáveis em C
Variáveis globais
Observações
Caso se tente declarar uma variável global de mesmo
nome mais de uma vez, o compilador indicará um erro de identificador duplicado
Caso se esteja trabalhando em uma aplicação com
mais de um módulo (arquivos fontes) é preciso fazer uma indicação ao compilador que as variáveis globais já estão declaradas em outro módulo
Declaração de Variáveis em C
Exemplo com Variável Global
int global; main() { global = 10; func1(); printf("%d\n", global); func2(); printf("%d\n", global); }
void func1() void func2()
Modificadores de declaração
/* Arquivo Main.c */ int global; main() { global = 10; func1(); printf("%d\n", global); /* Arquivo Arq1.c */extern int global;
void func1() {
global = 20; }
Modificador de declaração extern
Indica ao compilador que os nomes e tipos que se
seguem já foram declarados em um outro módulo da
aplicação
Modificadores de declaração
Modificador de declaração static
Principais usos:
Declaração de variáveis estáticas locais Declaração de variáveis estáticas globais
Variáveis estáticas locais
São variáveis que são visíveis apenas na função onde
foram declaradas, como as variáveis locais, mas que mantêm seus valores entre chamadas de função, como as variáveis globais.
Modificadores de declaração
Exemplo com modificador static local
#include <stdio.h> main() { int i; for (i = 0; i < 10; ++i) func1(); } void func1() {
static int num_cham = 0;
printf("Chamada = %d\n", num_cham); num_cham = num_cham + 1;
Modificadores de declaração
Variáveis estáticas globais
São variáveis globais que são enxergadas
apenas no módulo (arquivo fonte) onde foram
declaradas.
Exemplo /* Arquivo Arq1.c */
static int global; void func1() { global = 20; } void func2() /* Arquivo Main.c */ int global; main() { global = 10;
Constantes na Linguagem C
Declaração de Constantes
O Padrão ANSI para a linguagem C prevê a declaração de
constantes
const <tipo> c1 = <valor1>[, c2 = <valor2> ...];
Exemplos
const int x = 10, y = 30;
const float pi = 3.14159265359;
Observações
Constantes não podem ter seus valores alterados em nenhum
ponto do programa, apenas podem ser iniciadas
Compiladores que não seguem o padrão ANSI não compilam
este tipo de declaração
Valores Constantes
Caracteres (entre apóstrofes)
‘a’, ‘A’, ‘&’, ‘4’, ...
‘\0’, ‘\b’ , ‘\a’, ‘\t’, ‘\f’, ‘\n’, ‘\r’ , ‘\\’, ‘\’’
‘\x43’ = ‘C’, ‘\112’ = ‘J’
Cadeia de Caracteres (entre aspas)
“Cadeia de Caracteres”
“hello world”
Valores Constantes
Inteiros: Valores inteiros precedidos ou não
de sinal
10, +5 , +32767
-15, -32768
Longos: Como os inteiros, mas seguidos do
sufixo L, para diferenciar dos inteiros
10L, +15L, 40000L,
-5L, -100000L
Valores Constantes
Octais: Valores numéricos iniciados com 0
010,
040,
0763
Hexadecimais: Valores numéricos iniciados
com 0x
Valores Constantes
Ponto Flutuante
Valores inteiros ou fracionários com ponto
decimal, precedidos ou não por sinal. Pode-se
usar também a notação com expoente
Exemplos
10.0 -5.2
Operadores e Expressões
Operador de Atribuição
Coloca na área de memória da variável localizada à
esquerda do operador (lvalue) o resultado da expressão
localizada à direita do operador (rvalue)
Sintaxe
<variavel> = <expressao>
Exemplos
x = 10;
y = 10*(20 - x);
Operadores e Expressões
Operadores Aritméticos
- (sinalização negativa) + (sinalização positiva) * (multiplicação) / (divisão) % (resto da divisão) + (adição) - (subtração) ++ (incremento) -- (decremento)Operadores e Expressões
Operador de divisão
(
/ )
Pode realizar uma divisão inteira ou de ponto
flutuante
Se operadores são ambos inteiros divisão é inteira
x = 5/2; /* resulta em x = 2 */
Operadores e Expressões
O operador resto da divisão (
%)
devolve resto da divisão inteira entre os dois
operandos
Operadores e Expressões
Operador de incremento (++) e decremento (--)
são operadores unários que devolvem, respectivamente, o
incremento e o decremento de uma variável numérica
Antes da variável (pré-incremento ou pré-decremento)
Incrementa (ou decrementa) a variável antes de realizar a
avaliação da expressão onde a mesma está localizada.
x = 10; y = 20; x = ++y + 2; Seria equivalente a x = 10; y = 20;
Operadores e Expressões
Após a variável (pós-incremento ou pós-decremento)
Incrementa (ou decrementa) a variável após realizar a
avaliação da expressão onde a mesma está localizada.
x = 10;
y = 20;
x = y-- + 2;
Resulta em x = 22 e y = 19
Caso sejam únicos na expressão, é irrelevante aparecer antes
Operadores e Expressões
Operadores Relacionais
> (maior que) < (menor que) >= (maior ou igual a) <= (menor ou igual a) == (igual a) != (diferente de)são utilizados para comparar dois valores permitindo
tomadas de decisões.
devolvem
o valor zero (0) caso a expressão seja avaliada como FALSA o valor um (1) caso a expressão seja VERDADEIRA
Operadores e Expressões
Exemplo
x = 10; if (x = 5) { puts(“Passei no if”); } completamente diferente de x = 10; if (x == 5) { puts(“Passei no if”);Operadores e Expressões
Operadores Lógicos
&&
(E Lógico)
||
(OU Lógico)
!
(NÃO Lógico)
são utilizados na junção de expressões relacionais,
permitindo a criação de expressões lógicas mais
poderosas
em C qualquer valor numérico diferente de zero (0) é
Operadores e Expressões
Operadores Lógicos
(
&& , || , ! )
expressões contendo os operadores
&&
e
||
são
avaliadas sempre da esquerda para a direita
avaliação é interrompida assim que a veracidade ou
falsidade da expressão já puder ser conhecida
Este recurso permite a escrita de códigos limpos (enxutos),
Operadores e Expressões
Exemplo
#include <stdio.h>
char *getlinha(char *s, int n) {
int ch;
int i = 0;
while (--n > 0 && (ch = getchar()) != EOF && ch != ‘\n’)
Operadores e Expressões
Operadores de atribuição composta
*= /= %= += -=
<<= >>= &= ^= |=
processam uma operação numa variável e
armazenam nela própria o resultado obtido.
São formados pela concatenação dos operadores
binários com o símbolo
Não são permitidos espaços (brancos) entre os
Operadores e Expressões
Operadores de atribuição composta
*= /= %= += -=
<<= >>= &= ^= |=
Exemplos
x += 2; /* equivale a x = x + 2 */
Operadores e Expressões
Operador condicional (
?:
)
O operador condicional serve para substituir comandos da
forma
if (x > y) z = x; else
z = y;
A sua sintaxe geral é a seguinte:
<expressão-lógica>? <expressão-1>: <expressão-2>
O resultado da operação será <expressão-1> quando a
<expressão-lógica> for avaliada como VERDADEIRA e <expressão-2> caso aquela seja avaliada como FALSA
Operadores e Expressões
Operador tamanho de variável ou tipo (
sizeof
)
Devolve o tamanho em bytes ocupados por uma variável
ou um tipo. Suas sintaxes de uso são as seguintes:
sizeof(<variável>) sizeof(<tipo>)
Exemplos
/* tamanho em bytes da variável x */ tam = sizeof(x);
/* tamanho em bytes ocupados por um double */ tam = sizeof(double);
Operadores e Expressões
Operador vírgula (
,
)
Um par de expressões separadas por vírgula é avaliado da
esquerda para a direita e o valor da expressão à esquerda é descartado.
O tipo e o valor resultante é o tipo e o valor da segunda
expressão. Sintaxe <expressão>, <expressão-2> Exemplo for (i = 0, j = 0; i < n; ++i, ++j) { ... }
Operadores e Expressões
Operador de conversão de tipo (Cast)
Converte o valor de uma expressão para o tipo especificado Sintaxe (<tipo>) <expressão> Exemplo 1 float pi = 3.141592; float valor; valor = (float)((long)(pi*100.0 + 0.5))/100.0; Exemplo 2