Aula 2

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 37

Instituto Superior Politécnico da Huila

Introdução a Programação
Curso: Engenharia Informática e Computação
Docente: Eng.º MANUEL FIGUEIREDO
E-mail: [email protected]
ISPH – 2023
Sumário:
A. Linguagem C
B. Núcleo de um programa
C. Memória e variáveis
D. Fases da Criação de um programa em C
E. Modelo de compilação da linguagem C
Linguagem C
• A linguagem C foi desenvolvida por Dennis Ritchie, entre os anos 1971
e 1973, nos laboratórios da AT&T. O objetivo de Ritchie era criar uma
linguagem para a implementação de sistemas operacionais e
softwares básicos que combinasse a eficiência das linguagens de
baixo nível com características das linguagens de alto nível, como
legibilidade, portabilidade e manutenibilidade.
• A criação da linguagem C é resultado de um processo evolutivo de
linguagens, iniciado com uma linguagem chamada BCPL, desenvolvida
por Martin Richards. Essa linguagem influenciou a linguagem B,
inventada por Ken Thompson, que por sua vez levou ao
desenvolvimento de C.
Núcleo de um programa
• A organização da sequência de instruções em um programa
obedece a um conjunto de regras estabelecidas pela
linguagem de programação. Um programa em C é estruturado
em funções, que são, basicamente, trechos de código que
podem ser chamados várias vezes para realizar uma certa
tarefa. Assim, todas as instruções pertencentes a um
programa em C devem estar contidas em uma função.
• Em C existe uma função especial, denominada de main
(principal), que determina o início e o fim da execução de um
programa. De forma mais específica, a execução de um
programa tem seu início com a execução da primeira
instrução da função main e termina com a execução da sua
última instrução. Dessa maneira, todo programa em C deve
possuir tal função. Veja a seguir um exemplo de um programa
em C.
#include <stdio.h>
int main() {
printf("Meu primeiro programa!");
return 0;
}

Entendendo o código…
#include <stdio.h>

• Esta linha de código solicita ao compilador que inclua no


programa a biblioteca padrão para comandos de entrada e
saída da linguagem C. Uma biblioteca consiste em um
conjunto de arquivos que contém funções que podem ser
incorporadas a outros programas. Neste caso, a inclusão da
biblioteca stdio.h permite que o programa utilize suas
funções para ler dados da entrada padrão (teclado) e para
escrever dados na saída padrão (tela).
int main(){

• Com esta linha de código definimos a função main e


demarcamos o seu início com o caractere { (abre-chaves).
Todo conteúdo de uma função em C fica delimitado por
chaves ( {} ).
printf("Meu primeiro programa!");
• O programa tem seu início com a execução desta instrução, uma
vez que ela é a primeira instrução da função main.
• A função printf tem a finalidade de escrever na tela os dados
recebidos por parâmetro. Como resultado de sua execução, neste
caso, será exibida a frase "Meu primeiro programa!"no canto
superior esquerdo do monitor do computador.
• O ponto-e-vírgula no fim da instrução serve para separar esta
instrução da próxima, dessa maneira, cada instrução deve
terminar com sua utilização.
return 0;

• Essa instrução encerra a execução do programa, de modo


que deve ser sempre a última da função main (antes do fecha-
chaves, é claro). O número 0 (zero) serve para indicar ao
sistema operacional que o programa terminou com sucesso
(números diferentes de zero indicariam um erro).
Identificadores
• Os nomes que damos às variáveis, rotinas, constantes e
demais componentes num programa escrito numa dada
linguagem de programação são chamados de identificadores.
• As palavras que possuem significado especial nas linguagens
de programação, como é o caso dos nomes dados às
estruturas de controle (for, while, if, etc.), tipos de variáveis,
dentre outros, são chamadas de palavras-chave.
• As regras básicas para formação de identificadores são:
• Os caracteres utilizados são os números, letras maiúsculas,
minúsculas e o caractere especial sublinha (_);
• O primeiro caractere deve ser uma letra ou o sublinha;
• Não são permitidos espaços em branco;
• Palavras reservadas não podem ser utilizadas como identificadores.
• Abaixo, alguns exemplos:
Identificadores válidos
• B
• b
• X2
• computacao
• COMPUTACAO
• nota1
• nota_2
Identificadores inválidos
• 3B -> Não pode começar com número.
• X 2 -> Não pode conter espaço em branco.
• Computaçao -> Não é permitido utilizar o caractere cedilha.
• COMPUTACÃO -> Caracteres especiais como o til (~) não são
permitidos.
• while -> while é uma palavra reservada.
• function -> function também é uma palavra reservada.
• Uma boa prática de programação é escolher nomes que indiquem
a função de uma variável, como por exemplo: soma, ano, idade,
media, dataNascimento, numero_filhos, nota1, nota2, notaFinal,
salario, etc. Também é uma prática bastante difundida iniciar os
identificadores com letras minúsculas e usar letras maiúsculas
ou sublinha para separar palavras.
• Por exemplo, para escolher um identificador para uma variável
que deve armazenar a data de nascimento de uma pessoa, as
duas opções citadas correspondem à dataNascimento e
data_nascimento, respectivamente.
Tipos de dados primitivos
• Vimos anteriormente que as variáveis podem armazenar valores de
diversos tipos, tais como números inteiros, fracionários e um conjunto
de caracteres. Os tipos de dados ou tipo de variáveis são
representados de forma diferente em cada linguagem de
programação, algumas dando suporte a mais tipos que outras.
• Embora haja certa variação de uma linguagem para outra, a maioria
delas dá suporte a um grupo de tipos básicos, incorporados na própria
linguagem, chamados de tipos primitivos. Em C há a possibilidade da
criação, por parte do programador, de tipos particulares,
denominados de tipos derivados.
• Existem três tipos primitivos na linguagem C: números
inteiros, números de ponto flutuante (números fracionários) e
caracteres. Os números fracionários são chamados de
números de ponto flutuante devido à forma como eles são
armazenados no computador. Portanto, sempre que você
ouvir o termo ponto flutuante, tenha em mente que o tipo de
dados em questão diz respeito aos números fracionários.
• Os tipos de dados primitivos em C estão descritos na tabela a
seguir:
Declaração de variáveis
• Cada variável utilizada na elaboração de um programa precisa ser
definida com antecedência. Para isso, o programador precisa
definir o identificador da variável e o seu tipo por meio do que
chamamos de declaração de variáveis. Sua forma geral é a
seguinte:
tipo_da_variável identificador;
• O exemplo a seguir declara, na linguagem C, as variáveis x e y
como sendo do tipo int.
int x, y;
• A declaração de variáveis, além de estabelecer uma
interpretação sobre os bits armazenados na memória, também é
responsável por alocar espaço para armazenamento desses bits.
• No exemplo anterior, a declaração das variáveis x e y resulta na
alocação de 4 bytes (provavelmente) para cada uma delas, bem
como determina que os bits a serem armazenados no espaços
alocados deverão ser interpretados como números inteiros.
Seguem abaixo alguns exemplos de declarações de variáveis:
int idade;
int numeroFilhos;
int dia, mes, ano;
float altura;
float nota, media;
• Os tipos das variáveis tem uma relação muito próxima com a
função que elas exercem em um programa. Caso precisemos
armazenar e realizar cálculos sobre a idade de alguém,
deveremos declarar a variável idade como int, visto que a
idade corresponde a um número inteiro positivo.
• Do mesmomodo, como sabemos que a altura de uma pessoa é um
número fracionário (ex.: 1,80 m), devemos declarar a variável
altura como sendo do tipo float.
• Variáveis do mesmo tipo podem ser declaradas em uma mesma
linha, sendo separadas por vírgulas, como na declaração das
variáveis dia, mes e ano do exemplo anterior.
• Já variáveis de tipos diferentes devem ser declaradas
obrigatoriamente de forma separada.
Constantes simbólicas
• Muitas vezes declaramos algumas variáveis que não devem ser modificadas
durante a execução de um programa. É o caso das variáveis abaixo:
PI = 3.14159;
ACELERACAO_GRAVIDADE = 9.8;
• Não faz sentido alterar o valor de uma variável que representa a aceleração
da gravidade, por exemplo, pois o valor da constante gravitacional, como
seu próprio nome já diz, permanece sempre o mesmo.
• Para casos como esse é preferível que usemos constantes simbólicas no
lugar de variáveis. A linguagem C permite que um identificador seja
associado a uma constante através da diretiva #define, cuja sintaxe é
descrita abaixo:
#define nome_constante valor_constante;
• Dessa forma, a definição da constante PI mencionada acima
poderia ser realizada através da linha de código:
#define PI = 3.14159;
• Quando o programa que contém essa instrução é compilado, o
compilador substitui todas as ocorrências de PI pelo seu valor
associado.
• Outra utilidade proveniente da definição de constantes diz respeito
à facilidade de modificação de um programa.
Fases da Criação de um
programa em C
• O desenvolvimento de um programa em Linguagem C, tal como na
maioria das linguagens compiladas, é um processo que
compreende quatro fases: escrita, compilação, “linkink” e
execução.
• Escrita do código–fonte – A primeira fase do processo é criação/edição
de um (ou mais) ficheiro de texto contendo o código–fonte. Isto pode ser
realizado com recurso a um editor de texto. O referido ficheiro tem que
ter a extensão ".cpp" ou ".cc". O conteúdo do programa tem que
obedecer rigorosamente à sintaxe da linguagem.
• Compilação – A segunda fase, a da compilação, é realizada com recurso
a um compilador específico para linguagem, neste caso o de C++. Nesta
fase se existirem erros de sintaxe, o compilador detecta-os e reportará a
sua localização (tipicamente número de linha) e uma breve descrição do
erro. Note-se que os erros de lógica não são detectados nesta fase. Se o
programa não tiver erros de sintaxe o compilador produzirá o código
executável, isto é, um programa pronto a ser executado. Nesta fase são
incluídos os ficheiros de cabeçalhos nos quais são declaradas as
funções que serem posteriormente incluídas no fase de linking.
• "Linking" – A terceira fase, a da linking, é feita com recurso a um
programa especial, designado linker que se responsabiliza por
transformar os programa objecto (independente da plataforma de
hardware) numa aplicação executável na plataforma em hardware
específica. Nesta fase, as declarações das funções (cabeçalhos)
são substituídas por código executável, propriamente dito. Caso
ocorram erros nesta fase, o processo retorna à primeira fase.
• Execução – A quarta e última fase, execução, só poderá ocorrer no
caso das fases terminarem com sucesso.
Modelo de compilação da
linguagem C
No modelo de compilação da linguagem C, existem quatro fases
principais: pré-processador, compilador, assembler e linker.
• Pré–processador – O pré-processador executa as directivas
existentes no código fonte. As directivas de pré-processamento
começam pelo carácter # e de entre as tarefas mais comuns
compreendidas na pré–compilação, destacamse:
• – #include – Inclusão de ficheiros, tipicamente ficheiros de
cabeçalhos;
• – #define – definição de constantes (ver secção 1.5.4.2);
• – Remoção de linhas de comentários.
• Compilador – Alguns compiladores traduzem o código fonte (texto)
recebido do pré–processamento para linguagem assembly
(também texto). Enquanto que outros geram directamente o código
objecto (instruções do processador em código binário);
• Assembler – O assembler traduz código em linguagem assembly
(texto) para código binário. Pode estar integrado no compilador. O
código gerado pelo assembler geralmente tem a extensão ".o" (nos
sistemas operativos Unix e Linux) e ".obj" (nos sistema operativos
Windows);
• Linker – Se o programa fonte tem referências a elementos definidos
nas bibliotecas padrão ou outras, o Linker é o responsável por
adicionar o código desses elementos de forma a criar o ficheiro
executável. A referência a variáveis globais externas é resolvida
pelo Linker.
Primeiro programa. Boas vindas ao Curso de linguagem C.

• Abra o Dev-C++ e faça um programa que imprima na tela uma


mensagem de boas vindas ao curso de linguagem C.
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Seja bem vindo ao curso de linguagem C");
printf("\n");
system("PAUSE");
return 0;
}
Tarefa
• Operadores aritméticos
• Operadores lógicos
• Entrada e saída de dados
A sabedoria consiste em saber que se sabe o que sabe e
saber que não se sabe o que não se sabe. (Provérbio chinês)

Você também pode gostar