Você está na página 1de 13

Programação I (C)

Universidade Metodista de Angola Prof. Gilberto Cunha

Introdução a Linguagem de Programação

As linguagens humanas (como por exemplo o Português, Francês, Inglês, etc), servem
para a comunicação entre dois indivíduos. No caso das linguagens de programação
servem para estabelecer a comunicação entre o Homem e o computador, permitindo
assim o processamento automático da informação.

Linguagem: É um código de comunicação formado por léxico, sintaxe e semântica.


Léxico: É um conjunto de vocábulos disponíveis numa linguagem.
Sintaxe: É a forma de escrever os vocábulos.
Semântica: É o significado da combinação dos vocábulos.

Linguagem de Programação: É um conjunto de palavras reservadas e regras, sintáticas


e semânticas, usadas para descrever a execução de um algoritmo no computador.

Programar: É criar um conjunto de instruções ou comandos numa sequência lógica,


que o computador interpreta para poder executar uma tarefa ou resolver um determinado
problema. Essas instruções são escritas utilizando uma determinada linguagem de
programação.

Problema Resultado

Análise Algoritmo (pseudo-código)


Característica Solução do Programa Instruções p/
Do Problema Problema L.P Computador

Tipos de Linguagem de Programação

Linguagem de Máquina: São aquelas que consistem de uma sequência de números,


que significam uma sequência de instruções a serem executadas no processador do
computador. Estes números geralmente são na base binária, mas podem também ser de
outro tipo como hexadecimal por exemplo.

Linguagem de Baixo Nível: São aquelas mais próximas daquelas que o computador
entende. Estão directamente ligadas com a arquitetura do computador. A linguagem
Assembly, é exemplo desse tipo de linguagem, que serve para criar programas para
microcontrolador*, para microprocessador (programa da BIOS*), criar sistemas
operativos (ex: Unix), etc.

*Microcontrolador: Os microcontroladores são dispositivos de tamanho reduzido,


capazes de realizar controle de máquinas (ex: gerador, transformador, etc) e
equipamentos eletro-eletrônicos (ex: tv digital, geleira, etc) através de programas. São

Página 1 de 13
Programação I (C)
Universidade Metodista de Angola Prof. Gilberto Cunha

dispositivos que reúnem, num único circuito integrado, diversos componentes de um


sistema computacional simplificado tais como processador, memória e periféricos de
entrada/saída. Em outras palavras, podemos afirmar que um microcontrolador é um
pequeno microcomputador integrado num único chip. Por se tratar de um componente
programável, é bem versátil, podendo ser empregue em diversas aplicações.

*BIOS (Basic Input/Output System - Sistema Básico de Entrada/Saída): É um programa


de computador pré-gravado em memória permanente (ROM) executado por um
computador quando ligado. Ele é responsável pelo suporte básico de acesso ao
hardware, bem como por carregar do sistema operativo. Esse tipo de programa chama-
se firmware.

Linguagem de Alto Nível: São aquelas que usam palavras próximas da linguagem
humana. Não estão directamente ligadas com a arquitetura do computador.

Exemplo:

- Propósito Geral: Pascal (para ensino das técnicas de programação), C, C++, Java,
Python, Visual Basic, Delphi, Asp, PHP, etc.
- Uso Científico (cálculos científicos): Fortran.
- Uso Comercial (processamento de registros): Cobol, Clipper, etc.
- Uso Específico (para área de Inteligência Artificial): List, Prolog, etc.

Nota: Toda linguagem de alto nível precisa ser traduzida para linguagem de máquina.

Tradutores: Montador , Interpretador e Compilador

LBN -» LM LAN -» LM

Ex: Assembly Ex: Python Ex: C

Ex: Java

Existem dois tipos de tradutores para as linguagens de alto nível:

- Interpretador: Trata uma instrução de cada vez, isto é, lê uma instrução, converte em
linguagem máquina, executa-a, passa para a instrução seguinte e repete o processo.
Vantagens: Mais fácil detectar e corrigir erros de sintaxe, maior rapidez de teste do
programa.
Desvantagens: Necessária a presença do interpretador para correr o programa, é mais
lento a executar e possui maiores custos.

Página 2 de 13
Programação I (C)
Universidade Metodista de Angola Prof. Gilberto Cunha

- Compilador: Analisa e trata todo o conjunto de instruções numa dada linguagem


(programa fonte) e converte-o num programa objeto executável.
Vantagens: Maior rapidez de execução, menor necessidade de memória secundária.
Desvantagens: Mais difícil de detectar e corrigir erros de sintaxe.
Nota: Basicamente a linguagem de máquina é projectada em função da rapidez de
execução do programa, mas por outro lado é mais complicado escrever o código e por
consequência mais demorado. Enquanto que a linguagem de alto nível é bem mais fácil
a sua construção, mas seria bem mais demorado a sua execução.

Tipos de Linguagem de Alto Nível

- Imperativa / Procedural (ex: Pascal, C, Python, Cobol, Fortran)


- Orientada à Obejectos (ex: C++, Java, Python)
- Orientada a Eventos (ex: Java Script)
- Funcional (ex: List)
- Lógica (ex: Prolog)

Sistema de Numeração

George Boole, matemático inglês, é considerado o pai da lógica moderna. Em 1847


desenvolveu um sistema lógico que reduz a representação de valores, através de dois
algarismos “0” ou “1”, a que se deu o nome de bit.

Bit: Dígito binário, zero ou um, activo ou desactivo.

Byte: Unidade de medida para especificar a quantidade de memória de um computador.

8 bits formam 1 byte. Os computadores geralmente são idealizados para armazenar


instruções em múltiplos de bits. Por isso, a CPU possui 8, 16, 32 ou 64 bits, a que se
refere a quantidade de informações que podem ser processadas de cada vez. Com 8 bits
= 1 byte é possível representar 256 valores, de 0 à 255.

Quando os primeiros computadores foram projectados percebeu-se que com 256


códigos seria possível representar todos os números, letras maiúsculas e minúsculas e os
demais símbolos. Então cada caractere diferente recebeu um valor de acordo com a
tabela ASCII (American Standard Code for Information Interchange – Código Padrão
Americano para o Intercâmbio de Informação).

Página 3 de 13
Programação I (C)
Universidade Metodista de Angola Prof. Gilberto Cunha

Tabela ASCII

Binário Decimal Hexadecimal Caractere


... ... ... ... ...
00110000 48 30 0
00110001 49 31 1
... ... ... ...
01000000 64 40 @
01000001 65 41 A
01000010 66 42 B

Breve história da linguagem de programação C

A linguagem C foi criada no início dos anos 70, por Dennis Ritchie nos laboratórios da
Bell Telephones nos E.U.A. usando o computador PDP-11 com sistema operativo Unix.
Foi uma evolução da linguagem B desenvolvida por Ken Thompson, inspirada na
linguagem BCPC inventada por Martin Richards. Alguns anos mais tarde Brian
Kerninghan junta-se a Ritchie para aprimorar a linguagem e daí também resulta o
primeiro livro “The C Programming Language”.

A criação da linguagem C tinha como finalidade o desenvolvimento do Sistema


Operativo Unix (originalmente escrito em Assembly) por tratar-se de uma linguagem de
alto nível. Através da divulgação do sistema Unix pelas universidades dos Estados
Unidos, a linguagem C logo cedo disseminou-se e tornou-se conhecida por todos os
tipos de programadores. Esta dispersão levou a que diferentes organizações
desenvolvessem e utilizassem diferentes versões da linguagem C, criando assim alguns
problemas de portabilidade e não só. Por isso, nos anos 80 a linguagem é padronizada
pelo American National Standard Institute (ANSI) e surge o ANSI C, que visa o
funcionamento semelhante de todos os compiladores da linguagem C.

Introdução a Linguagem C

C é uma linguagem de programação compilada, de propósito geral, estruturada,


procedural, de alto nível e padronizada pelo ANSI. Usada para a criação de Sistemas
Operativos, editores de texto, planilhas electrônicas, gerenciadores de banco de dados,
compiladores, etc.

Página 4 de 13
Programação I (C)
Universidade Metodista de Angola Prof. Gilberto Cunha

Características da Linguagem C

Alta velocidade de processamento – Consegue obter performances semelhantes as


obtidas pela linguagem Assembly, usando instruções de alto nível mesmo para aceder a
mecanismos de mais baixo nível, como o endereçamento de memória ou a manipulação
de bits.

Portável – Existe o ANSI C que define as características de qualquer compilador. Deste


modo, o código escrito numa máquina pode ser transportado para outra máquina e
compilado sem qualquer alteração ou alterações mínimas.

Evolução – C é uma linguagem estável, mas a evolução das linguagens fez com que C
evoluísse no sentido das linguagens orientadas à obejectos, dando origem a uma nova
linguagem o C++. C é um subconjunto de C++, ou seja, C++ contém todas as
características de C (sintaxe, funções, tipos de dados, operadores, etc) e mais um
conjunto de características próprias (encapsulamento, polimorfismo, herança, etc). A
linguagem Java baseia-se nas linguagens C e C++.

Modular – C permite desenvolvimento modular de aplicações facilitando a separação


do projecto em módulos distintos e independentes, recorrendo a utilização de funções
específicas dentro de cada módulo.
Exemplo: Gestao.h, Clientes.h, etc.

Gestão Clientes

Apagar Validar
Clientes Fornecedores Faturas
ses Alterar Inserir

Macros – C tem a possibilidade de utilização de Macros no desenvolvimento de


aplicações, reduzindo assim a necessidade de escrita de funções distintas para a
realização do mesmo processamento, para tipos de dados diferentes. As macros
permitem aumentar a velocidade de execução sem ter que aumentar a complexidade de
escrita do código.

Exemplo: #define PI 3.
#define SOMA(a,b) ((a)+(b))

Página 5 de 13
Programação I (C)
Universidade Metodista de Angola Prof. Gilberto Cunha

Palavras Reservadas: São nomes definidos por uma linguagem de programação e que
têm significado específico dentro da linguagem.

auto – const – double – float – int – short – struct – unsigned – break – continue – else –
for – long – signed – switch – void – case – default – enum – goto – register – sizeof –
typedef – volatile – char – do – extern – exit – if – return – static – union – while.

Identificadores: São os nomes usados para se fazer referência a variáveis, funções,


rótulos, constantes e tipos definidos pelo usuário. Ex: Media, nota, _nome, MAX, x2, y,
valor_total, somaNota, etc.

Regras Para Criação de Identificadores:


- Devem começar por letras (minúsculas ou maiúsculas) ou underscore “_”.
- Os caracteres seguintes podem conter letras, números ou underscore.
- Não podem ser uma palavra reservada.
- Não podem ser repetidos dentro do seu escopo.
- Não podem ter espaços em branco. Ex: soma nota
- Não aceitam caracteres acentuados. Ex: ã, ç, é, ô, etc. (Média)
- O tamanho máximo é de 32 caracteres.

Convenções Para Criação de Identificadores:


- Primeira letra minúscula para identificadores de variáveis e funções. Ex: nota,
mediaTotal, soma_nota, etc.
- Letras maiúsculas para identificadores de constantes e rótulos.
- Primeira letra maiúscula para identificadores de tipos definidos pelo usuário.
- Os identificadores devem ser escolhidos em função a que se destina o próprio
identificador. Por exemplo identificador “nome” para uma variável que vai armazenar
o nome de uma pessoa.

Obs: C é case sensitive, ou seja, maiúsculas e minúsculas fazem diferença.


Ex: Soma, soma, SOMA são identificadores diferentes.

Operadores

Operador de Atribuição “ = ”
Uma atribuição é uma expressão cujo valor resultante corresponde ao valor atribuído. A
ordem de precedência é da direita para a esquerda.

Exemplos: x = 2; // x recebe 2
x = y = 10; // 10 é atribuído a y e depois o valor de y é atribuído a x

Página 6 de 13
Programação I (C)
Universidade Metodista de Angola Prof. Gilberto Cunha

Operadores Aritméticos: + , - , * , / , %

Obs: O operador % (módulo) geralmente é usado para variáveis do tipo inteiro e retorna
o resto de uma divisão.

int x; int a;
x = 5 / 2; // x recebe 2 a = 1234 % 10; // a recebe 4
x = 5 % 2; // x recebe 1 a = 1234 % 100 // a recebe 34
x = 2 / 5; // x recebe 0 a = 1234 / 10 // a recebe 123
x = 2 % 5; // x recebe 2 a = 1234 / 100 // a recebe 12

Exemplo3: // OperadorAritmetico.c
#include <stdio.h>
#include <stdlib.h>
int main(){
int x;
x = 5 / 2;
printf("5 / 2 = %i \n",x);
x = 5 % 2;
printf("5 %% 2 = %i \n",x);
x = 2 / 5;
printf("2 / 5 = %i \n",x);
x = 2 % 5;
printf("2 %% 5 = %i \n",x);
x = 123456789 / 10;
printf("123456789 / 10 = %i \n",x);
x = 123456789 / 100;
printf("123456789 / 100 = %i \n",x);
x = 123456789 % 10;
printf("123456789 %% 10 = %i \n",x);
x = 123456789 % 100;
printf("123456789 %% 100 = %i \n",x);
system("PAUSE");
return 0;
}

Página 7 de 13
Programação I (C)
Universidade Metodista de Angola Prof. Gilberto Cunha

Operadores Relacionais

Operadores Lógicos

&& “E” lógico (AND)


|| “OU” lógico (OR)
! “NÃO” lógico (NOT)

Exemplo: Tabela da verdade (expressão ou condição)

a b a && b a || b a !a
v v v v v f
v f f v f v
f v f v
f f f f

Operador sizeof: Retorna o número de bytes (tamanho) de um determinado tipo ou de


uma variável.

Sintaxe: sizeof (tipo);


Sizeof nomeDaVariavel;

Exemplo:
int x = sizeof(int); // armazena em x o tamanho de um int.
float f;
x = sizeof f; // armazena em x o tamanho de um float.

Operadores de Endereço:
Página 8 de 13
Programação I (C)
Universidade Metodista de Angola Prof. Gilberto Cunha

& O endereço de (ex: p = &b; // p recebe o endereço da variável b)


* No endereço de (ex: c = *p; // c recebe o valor da variável apontada por p, ou seja,
recebe o valor da variável b)
[] No endereço de...mais de um índice (ex: c = vect[0]; // c recebe o elemento do
vector vect de índice zero)
. Operador ponto (elemento de estrutura)
-> Operador seta (elemento da estrutura apontada por)

Operadores de Bit:

<< Desloca bits para esquerda, permite realizar multiplicações por 2, 4, 8, etc
>> Desloca bits para direita, permite realizar divisões por 2, 4, 8, etc
& “E” lógico (AND)
| “OU” lógico (OR)
^ “OU” exclusivo (XOR) // acento circunflexo
~ “NÃO” lógico (NOT) // til

int a = 5; // 00000101
int b = 6, x; // 00000110

x = a << 1; // 10 (00001010) = 5 * 2 acrescenta-se um zero a direita


x = a << 2; // 20 (00010100) = 5 * 4 acrescenta-se dois zeros a direita
x = a >> 1; // 2 (00000010) = 5 / 2 elimina-se um dígito a direita
x = a >> 2; // 1 (00000001) = 5 / 4 elimina-se dois dígitos a direita
x = a & b; // 4 (00000100)
x = a ^ b; // 3 (00000011)
x = ~b; // 249 (11111001) altera os bits de 0 para 1 e vice versa

101 =5
110 =6
& 100 = 4 dois bits em 1
| 111 = 7 apenas um bit em 1
^ 011 = 3 bits diferentes

Nota: Divisões Sucessivas / Teorema Fundamental da Numeração para as conversões.

Exemplo4: // OperadorDeBit.c

Página 9 de 13
Programação I (C)
Universidade Metodista de Angola Prof. Gilberto Cunha

#include <stdio.h>
#include <stdlib.h>
int main(){
int a = 5;
int b = 6, x;
printf("a = %i b = %i \n\n",a,b);
x = a << 1;
printf("a << 1 = %i \n",x);
x = a << 2;
printf("a << 2 = %i \n",x);
x = a >> 1;
printf("a >> 1 = %i \n",x);
x = a >> 2;
printf("a >> 2 = %i \n",x);
x = a & b;
printf("a & b = %i \n",x);
x = a ^ b;
printf("a ^ b = %i \n",x);
x = ~b;
printf("~b = %i \n\n",x);
system("PAUSE");
return 0;
}

Operador Condicional:” ?: “ Operador ternário usado para inicializar variáveis.

Sintaxe: var = condição ? expressão1 : expressão2;

Funcionamento:
1. A condição é avaliada.
2. Se o resultado for verdadeiro a expressão1 é atribuída a variável.
3. Se o resultado for falso a expressão2 é atribuída a variável.

int a= 20, b= 10, x;


x= a<b? a:b;
printf("%d\n",x); // 10

Exemplo5: // OperadorCondicional.c
#include <stdio.h>
#include <stdlib.h>
int main(){
int a= 20, b= 10, x;
x= a<b? a:b;

Página 10 de 13
Programação I (C)
Universidade Metodista de Angola Prof. Gilberto Cunha

printf("X = %i \n",x); // 10
system("PAUSE");
return 0;
}

Operadores de Atribuição Compostos: Com operadores aritméticos e de endereço.

Operadores de Incremento e Decremento

Incremento

x++; // equivalente a ++x; a x = x+1; e a x+= 1;

y = x; Ex: int a, b, x = 5;
y = x++; // equivalente a a = x++; // a igual a 5
x++; b = x; // b igual a 6

Página 11 de 13
Programação I (C)
Universidade Metodista de Angola Prof. Gilberto Cunha

x++; Ex: int a, b, x = 5;


y = ++x; // equivalente a a = ++x; // a igual a 6
y = x; b = x; // b igual a 6

Decremento

x--; // equivalente a --x; a x = x-1; e a x-= 1;

y = x; Ex: int a, b, x = 5;
y = x--; // equivalente a a = x--; // a igual a 5
x--; b = x; // b igual a 4

x--; Ex: x = 5;
y = --x; // equivalente a a = --x; // a igual a 4
y = x; b = x; // b igual a 4

Exemplo6: // OperadorIncDec.c
#include <stdio.h>
#include <stdlib.h>
int main(){
int a, b, x;
x = 5;
a = x++;
b = x;
printf("a = %i \t b = %i \n\n",a,b);
x = 5;
a = ++x;
b = x;
printf("a = %i \t b = %i \n\n",a,b);
x = 5;
a = x--;
b = x;
printf("a = %i \t b = %i \n\n",a,b);
x = 5;
a = --x;
b = x;
printf("a = %i \t b = %i \n\n",a,b);
system("PAUSE");
return 0;
}

Ordem de Precedência dos Operadores:

Página 12 de 13
Programação I (C)
Universidade Metodista de Angola Prof. Gilberto Cunha

1. () [] -> . 8. & de bit


2. ! ++ -- ~ * (ponteiro) & (endereço) sizeof cast 9. ^
3. / % * 10. |
4. + - 11. &&
5. >> << 12. ||
6. < > <= >= 13. ?:
7. == != 14. = *= /= %= += -= >>= <<= &= ^= |=

Nota: São avaliados de acordo com o que tem maior precedência, da esquerda para
direita na expressão.

Ex: 2 + 3 * 4 / 2 % 4 = 6+4
2 + 12 / 2 % 4 = x = --------- = 5 -» x = 6 + 4 / 2; // = 8 Errado!
2+ 6 %4= 2
2+ 2 =4 x = (6 + 4) / 2; // = 5

Exemplo7: // OrdemDePrecedencia.c
#include <stdio.h>
#include <stdlib.h>
int main(){
int x;
x = 2 + 3 * 4 / 2 % 4;
printf("X = %i \n\n",x);
x = (6 + 4) / 2;
printf("X = %i \n\n",x);
system("PAUSE");
return 0;
}

Variáveis:

Representam um espaço na memória do computador para armazenar um valor de um


determinado tipo. Esse valor pode variar ao longo da execução do programa. As
variáveis devem ser declaradas antes de serem usadas e podem ser inicializadas durante
a declaração. Uma variável armazena apenas um valor por vez.

Página 13 de 13

Você também pode gostar