Beruflich Dokumente
Kultur Dokumente
informática
PROGRAMAÇÃO IMPERATIVA EM C
_________________________
Moçambique ______________________
Programação Imperativa
Indicação de ícones
Os ícones servem como elementos gráficos utilizados para facilitar a organização e a leitura
do Texto. Abaixo indicamos a legenda e a descrição da função de cada um deles.
Fonte Tipo de icone Significado
“Qualidade do
Comprometimento Resistência, trabalho” “Aprender através
COMMONW / da experiência”
EALTH of perseverança (excelência/
perseverança Auto-avaliação autenticidade) Exemplo / Estudo
LEARNING Actividade de caso
(COL) Avaliação / Teste
Paz/harmonia
Debate Unidade/relações Vigilância / “Eu mudo ou
humanas preocupação transformo a minha
Actividade de grupo Tome Nota! vida”
Objectivos
Índice
Tópico Página
CONTEÚDO
Conteúdo ........................................................................................................................
Nota de Apresentação .....................................................................................................
UNIDADE TEMÁTICA I: Introdução ao Paradigma de Programação Imperativa .............
AULA 1: LINGUAGENS DE PROGRAMAÇÃO................................................................
Objectivo geral da aula/Meta ...........................................................................................
1.1. Linguagem de programação .................................................................................
1.2. Programação ........................................................................................................
1.3. Programa ..............................................................................................................
Actividade 1 ...............................................................................................................
AULA 2: Introdução ao paradigma de Programação Imperativa ......................................
Objectivo geral da aula/Meta ...........................................................................................
Conteúdos da aula ............................................................. Error! Bookmark not defin
2.1. Paradigma de Programação Imperativo ................................................................
AULA 3: CICLO DE DESENVOLVIMENTO DE UMA APLICAÇÃO .................................
Objectivo geral da aula/Meta ...........................................................................................
Conteúdos da aula ............................................................... Error! Bookmark not defin
3.1. Resolução de problemas ...................................................................................
3.2. Desenvolver um algoritmo .................................................................................
Início ...............................................................................................................................
AULA 4: • Filosofia da Programação em C .................................................................
Objectivo geral da aula/Meta ...........................................................................................
Conteúdos da aula ............................................................... Error! Bookmark not defin
4.1. Historial da Linguagem C ..................................................................................
4.2. Aplicações desenhadas usando a linguagem c .................................................
4.3. Comparação de C com outras linguagens imperativas ......................................
4.4. Comparação de c com c++ ...............................................................................
Leituras Obrigatórias .......................................................................................................
Textos: ............................................................................................................................
UNIDADE TEMÁTICA II: Introdução ao Paradigma de Programação Imperativa ............
AULA 5:introdução a linguagem c – estrutura de um programa.......................................
NOTA DE APRESENTAÇÃO
Estimado(a)
A sequência deste guia orienta-se por notas introdutórias em cada unidade temática,
objectivos gerais e objectivos específicos de cada unidade, a menção de leituras
obrigatórias, leituras complementares (para saber mais e curiosidades), glossários
ou pequenos dicionários, actividades, exercícios de aplicação ou fichas de trabalho,
bem como as respectivas guias de correcção.
De um modo geral, é esta a proposta apresentada para esta disciplina. A expectativa é que
o estudante seja um verdadeiro centro do processo de aprendizagem e que contribua numa
efectiva produção do conhecimento, por forma a ser um interlocutor válido no complexo e
longo processo de produção do conhecimento, sua aprendizagem e disseminação, de
modo a ser capaz de lidar com os diversos problemas enfrentados na vida.
Utilize também este material para servir de base para a sua interacção sincrónica e
anacrónica com outros estudantes e docentes, de modo a gerar situações de maior
abertura ao debate e discussão em prol da aprendizagem pretendida. Leia-o sempre,
discuta todas as questões que lhe parecerem interessantes, levante questões, aprofunde
permanentemente a sua reflexão, encoraje todos os colegas do grupo a fazerem o mesmo.
O autor
José Luís Sambo tem Diploma em Estudos Avançados em Ciências e Tecnologias Web
pela Universidade Aberta de Portugal (2018), é Mestre em Tecnologias de Informação
desde 2012 pela Punjab Technical Educational da India e Licenciado em Informática
Educacional (2008) pela Universidade de Pedagógica (Moçambique). Estudante de
Doutoramento em Ciências e Tecnologia Web pela Universidade Aberta de Portugal.
Introdução
OBJECTIVO GERAL
Objectivos específicos
Espera-se que com esta aula o aluno seja capaz de:
Os computadores são máquinas que entendem apenas o código binário ou por outras 0s e 1s.
Todas as instruções que são dadas são convertidos ou traduzidos em sinais eléctricos que
significam basicamente 1 para ligado ou 0 para desligado. Um exemplo simples é o da forma de
funcionamento de uma lâmpada. O zero representa o interruptor desligado e 1 representa
interruptor ligado.
Observando, irá verificar que há uma quantidade finita de combinações que podem ser feitas.
De certeza já podes imaginar que essa seria uma tarefa extremamente complicada, cansativa e
demorada. Então as linguagens de programação surgem para resolver essa complicação, criando
uma linguagem em comum entre o computador e o programador.
E com esta, pode-se introduzir comandos como leia, imprima, escreva em inglês ao invés
de inserir instruções usando combinações binárias do tipo 0101011110101.
Portanto, pode-se considerar que uma linguagem de programação serve como meio de
comunicação entre o indivíduo que deseja resolver um determinado problema e o
computador escolhido para ajudá-lo na solução.
Assim podemos considerar de uma forma sumária que Uma linguagem de programação é
um sistema de escrita formal para enunciar a execução de operações no computador. Esta
é composto por duas partes fundamentais a considerar:
Como podes ter percebido até então, qual seria a utilidade de linguagens de
programação? Quantas linguagens de programação imaginas que existem
actualmente e de que forma funcionam? Discuta.
Como vimos, as linguagens são várias e cada uma apresenta as suas características. Uma
das características que diferencia um grupo de linguagens do outro está relacionada com
os tipos de linguagens. Basicamente existem duas categorias de linguagens de
programação de acordo com a forma de execução. As compiladas e interpreitadas.
São linguagens onde o código fonte da mesma é executado por um outro programa de
computador chamado interpretador, que em seguida é executado pelo sistema operacional
ou processador. Mesmo que um código em uma linguagem passe pelo processo de
compilação, a linguagem pode ser considerada interpretada, se o programa resultante não
for executado directamente pelo sistema operacional ou processador. Exemplo: HTML,
Java, C#, BASIC, Logo, PHP entre outras.
Note que as linguagens interpretadas e compiladas também podem ser do alto ou baixo
nível.
1.3. Programação
A programação pode ser definida como o acto de utilizar uma linguagem de programação
para escrever instruções que podem ser executadas pelo computador com o objectivo de
resolver problemas, aplicando correctamente a sintaxe e a semântica da linguagem.
Centenas de linguagens de programação têm sido desenvolvidas e algumas estão em utilização
enquanto outras caíram em desuso. O desenvolvimento da linguagem de programação já percorreu
um longo caminho, assim, tem uma longa história, desde Prolog, Fortran, C, Visual Basic.Net, até
Rust e Swift.
Estas gerações de linguagens algumas são de propósito geral (ADA, COBOL, C) e outras são do
propósito específico, servindo apenas para solucionar problemas científicos, como o exemplo de
FORTRAN, PASCAL e ALGOL;
Exemplo de algumas linguagens dessa geração: LOTUS 1-2-3, SQL, SUPERCALC, VISICALC,
DATATRIEVE, VHML, PHP
Um sistema de 5ª geração armazena conhecimento complexo de modo que a máquina pode obter
inferências a partir da informação codificada.
1.4. Programa
Resumo
Nesta aula definimos o que é uma linguagem de programação e destacamos a sua
utilidade na resolução de problemas, tecemos algumas considerações sobre alguns
conceitos fundamentais sobre as linguagens de programação como sintaxe,
semântica. Classificamos as linguagens quanto ao tipo, onde destacamos dois tipos
de linguagens, as compiladas e interpreutadas. Após termos conhecimento sobre as
linguagens de programação, duma forma suscita definimos o que é a programação e
navegamos ao longo do tempo da sua evolução e por fim debriçamos sobre o
conceito de programação
Actividade 1
Esta actividade, pode ser realizada individualmente ou em grupo, antes de realizar leia
atentamente o material disponibilizado. Esta actividade é sobre a aula acabada de concluir.
2.1. Introdução
Objectivo geral
Como pode ser visto na figura 3, o modelo imperativo de programação, é o mais antigo de
todos, baseia-se no modo de funcionamento do computador. Isto é reflectido na execução
sequencial baseada em comandos e no armazenamento de dados alterável, conceitos que
são baseados na maneira pela qual computadores executam programas a nível de
linguagem de máquina.
Este paradigma foi predominante nas Linguagens de Programação, pois tais linguagens
são mais fáceis de traduzir para uma forma adequada para execução na máquina. Um
programa desenvolvido a partir deste modelo, por exemplo nas linguagens C, C++,
PASCAL, consiste em uma sequência de modificações no armazenamento do computador.
FORTRAN PASCAL
- tipos: integer, real, double - tipos: simples: boolean, integer, char, real;
precision, complex, logical; vetor: estruturados: array, file, record, set
dimension - expressões:
- valores e tipos <nome> (dim1, dim2, dim3), real, integer boolean: and, or, not, xor
- expressões - constantes lógicas: .true., .false. integer: +, -, *, div, mod, =, >=, <>. abs, sqr,
- operadores: **, *, /, +, -, .ge., .gt., .le., trunc, round
.lt., .eq., .ne., .not., .and., .or. string: var a: string; a = ‘abc’; file:
type arq = file of integer;
if (<exp>) then - comandos simples: write, writeln, read, clrscr,
… gotoxy, delay, readkey, upcase
end if if-then, if-then-else case
if (<exp>) <exp> of
… case <op1>:
else if ( ) then case <op2>:
- comandos e … else
seqüências else end
… for x := <inic> to|downto <fim> do while
end if <cond> do
begin
- comandos I/O: open, close, read, ...
write, print, rewind, endfile
end;
- goto, continue, pause, stop
- declaração var.: <tipo> <id> - declaração var.: var <id>: <tipo>;
- funções: function <id> (<parâm.>) - procedimentos e funções:
- proc.: procedure <id> (<p.>) procedure <id> (<parâm.>); function <id>
- declarações (<parâm.>): <tipo>;
- procediment versões anteriores a FORTRAN 90: não é case sensitive
os e funções somente letras maiúsculas; outras
versões
traduzem para maiúsculas
durante a compilação
C ADA
Para além das vantagens colocadas no paragrafo acima, podemos encontrar algumas das
características não desejadas como:
Descrições demasiadamente operacionais;
Focaliza o “como” e não o “quê”;
Relacionamento indirecto com a E/S (indução a erros/estados).
Resumo
Nesta aula falamos dos paradigmas de programação e definimos como sendo um
estilo de programação que fornece uma determina visão ao programador sobre a
estruturação e execução do programa. Listamos possíveis paradigmas de
programação que dominaram o mercado e destacamos o paradigma imperativo.
Falamos do modelo computacional deste paradigma e apresentamos algumas
linguagens de programação deste paradigma que dominaram o mercado,
apresentando a sua filosofia de estruturação e por fim destacamos as suas
vantagens e desvantagens em comparação com outros modelos de programação.
apresentando a sua filosofia de estruturação e por fim destacamos as suas
vantagens e desvantagens em comparação com outros modelos de programação.
ACTIVIDADES 2
Desafio em grupo:
3.1. Introdução
Objectivo geral
• Resolução de Problemas
• Definir o algoritmo e suas formas de representação
Objectivos
• Entender a necessidade de se utilizar uma linguagem formal para construir
algoritmos a serem interpretados por computadores.
• Compreender os conceitos de variáveis, constantes e tipos de dados
aplicados a algoritmos.
• Conhecer os conceitos de comandos de atribuição, entrada e saída de dados.
• Construir algoritmos.
Portanto, pudemos ver que a execução da próxima instrução inicia apenas após a
execução actual. Neste tipo de construção é quase obrigatória a execução de todas as
instruções do programa e não há saltos nem repetição.
Exemplo de um algoritmo
Para mais informações
sobre outras formas de
representação de
algoritmos veja:
https://pt.slideshare.net/
elainececiliagatto/aed-
formas-de-representao-
de-algoritmos
Imagine que queiras criar um algoritmo para resolver problemas do mundo real. De
que formas podes representar a solução?
• O fluxograma e;
• Pseudocódigo.
Figura 8: Fluxograma
3.1.2. O Pseudocódigo
<Declaração de variáveis>
<subalgoritmos>
INÍCIO
<corpo do algoritmo>
Fim.
3.1.2.1. Variáveis
O primeiro passo para que um programa seja executado em um computador é o
carregamento desse programa para a memória. A memória é utilizada para armazenar
tanto as instruções dos programas quanto os dados utilizados pelos mesmos. Qualquer
programa, para ser executado, tem de estar na memória. Quando pretendemos solicitar ao
computador que reserve um espaço na memória fazemos através da declaração de
variáveis.
A sintaxe é
var
Nome_da variável: tipo_da_variavél
Quando declaramos uma variável, devemos ter em mente quais valores serão
armazenados naquele espaço de memória. Uma variável pode ser de um dos seguintes
tipos:
Nome Descrição
O tipo inteiro é usado da mesma forma como nas expressões
Inteiro matemáticas. Declararemos variáveis do tipo inteiro quando
precisarmos armazenar valores inteiros, positivos ou negativos
Este tipo de dados é igual aos números reais em Matemática.
Real Declararemos variáveis do tipo real para armazenar valores reais com
ponto flutuante.
Declaramos este tipo de dados para armazenar um único
Caractere
caractere, que pode ser uma letra, número ou símbolo.
Declararemos variáveis do tipo cadeia de caracteres para
armazenar uma sequência de caracteres. Quando pretendemos
String
armazenar conteúdo de tipo nome, pais, ou outros dados com
mais de um caractere, este tipo de dados é ideais.
Suporta valores do tipo verdadeiro ou falso. Este tipo de dados é
Lógico
aplicável nas instruções condicional.
Tabela 2: Tipo de dados
É uma posição nomeada de memória, que é usada para guardar um valor que
pode ser modificado pelo programa. Existem regras para dar nomes as
variáveis.
REGRA
Inicie sempre por um caractere alfabético, nunca por um número.
Não utilize caracteres especiais como “ , ( ) / * ; + .
Não coloque espaços em branco ou hífen entre nomes.
Utilize, se necessário, underline.
Crie suas variáveis com nomes sugestivos.
Tabela 3: Regras para a declaração de variáveis
3.1.2.2. Constantes
Como podemos ter observado, o valor de uma variável muda de acordo com as
necessidades do problema. Há situações em que pretendemos manter o valor durante toda
a execução do programa. Nessa situação a variável não satisfaz. Dai que existem as
contantes para garantir que o seu valor não mude durante a execução. A sua declaração
obedece as mesmas regras das variáveis.
A sintaxe é
Const
nome_da_constante ← valor
Const
É utilizada para indicar o iníco do bloco de declaração da contante de um algoritimo.
nome_da_constante
é o nome pelo qual vamos nos referir à contante
A sintaxe é
Identificador expressão
Onde:
Para esse efeito existem comandos que podemos utilizar no desenho de algoritmos para o
efeitos, nomeadamente: leia()e escreva().
Leia()
é uma função responsável por ler os dados introduzidos pelo utilizador no espaço indicado.
escreva()
É a função responsável por escrever no monitor uma mensagem para a informação do
utilizador.
Sintaxe é:
leia(variável)
escreva(expressão)
Onde:
Expressão
É o conteúdo a ser exibido ao utilizador
Variável
Encapsula o espaço da memória onde os dados introduzidos serão armazenados.
Algoritmo Média
Resumo
Na aula de hoje aprendemos sobre a resolução do problema. E para a resolução de
problema com recursos computacionais é necessário desenhar soluções por meio
de um algoritmo. Vimos ainda que um algoritmo pode ser representado em
diferentes formas e nesta aula destacamos duas formas fundamentais: (i) o
fluxograma e (ii) pseudocódigo. Ambas formas podem nos encaminhar a resolução
de qualquer problema. Enquanto o fluxograma apresenta-se por anotações
gráficas, o pseudocódigo caracteriza-se por se assemelhar a linguagem de
programação e incorpora expressões matemáticas e de linguagem natural.
ACTIVIDADE 3
Nesta actividade é requerida a leitura dos tópicos sobre o que realmente são
problemas de programação, porquê que os computadores e os outros sistemas digitais
são usados para resolver problemas, definição do problema, as similaridades entre os
problemas, as estratégias para a resolução de problemas e as etapas envolvidas na
resolução de um problema. As leituras podem ser obtidas a partir da lista de livros
fornecidos na seção de referência para esta unidade. Os alunos também devem
complementar as leituras, fazendo pesquisas individuais na internet e noutros recursos, a
fim de melhorar a sua compreensão. Nesta actividade, deves escrever breves notas
sobre:
4.1. Introdução
Objectivo geral
Dar uma visão geral sobre o historial da linguagem C;
C pode ser considerada como uma linguagem de médio nível, pois possui instruções que a
tornam ora uma linguagem de alto nível e estruturada como o Pascal e de igual modo actua
como uma linguagem de baixo nível pois possui instruções tão próximas da máquina como
Assembler.
A filosofia que existe por trás da linguagem C é que o programador sabe realmente o que
está fazendo. Por esse motivo, a linguagem C quase nunca colocasse no caminho do
programador, deixando-o livre para usar de qualquer forma que queira. Existe uma
pequena verificação de erro de execução runtime error. Por exemplo, se por qualquer
motivo queiramos sobrescrever a memória na qual o programa está actualmente
armazenado, o compilador nada fará para impedi-lo.
Quando C++ foi inventado, Bjarne Stroustrup sabia que era importante manter o espírito
original da linguagem C, incluindo a eficiência, a natureza de nível médio e a filosofia de
que o programador, não a linguagem, está com as responsabilidades, enquanto, ao mesmo
tempo, acrescentava o suporte à programação orientada a objectos. Assim, o C++
proporciona ao programador a liberdade e o controle da linguagem C junto com o poder
dos Objectos.
C C++
Linguagem que permite programar
Linguagem estruturada nos dois modos (Orientada a Objecto
e modo orientado a procedimentos)
O C permite a conversão implícita entre o
tipo de dado void* para ponteiros para Não permite essa conversão
outros tipos
O C permite que constantes de caracteres
sejam inseridas em chamadas de funções É preciso declarar o parâmetro como
const char *
com parâmetros tipo char*
C é derivado da linguagem B Ë directamente derivado do C
Resumo
Nesta aula falamos sobre a evolução da linguagem C. Debruçamos sobre diferentes
versões até o surgimento desta que é considerada uma linguagem robusta que
actua em dois níveis o baixo e o alto nível. Tratamos também das suas
características e apresentamos algumas aplicações desenhadas usando esta
linguagem. E por fim fizemos uma análise comparativa entre esta linguagem com
outras linguagens de programação.
ACTIVIDADE 4
Nesta actividade é requerida a leitura dos tópicos sobre o que realmente são o
historial e evolução da linguagem C, As leituras podem ser obtidas a partir da lista de
livros fornecidos na secção de referência para esta unidade. Os alunos também devem
complementar as leituras, fazendo pesquisas individuais na internet e noutros recursos, a
fim de melhorar a sua compreensão. Nesta actividade, deves escrever breves notas
sobre:
i. A origem da linguagem C.
ii. Porque a linguagem C é chamada de linguagem do nível intermediária?
iii. Quais são as possíveis versões da linguagem C?
iv. Porque C é uma linguagem estruturada e não orientada a objecto?
v. Fale sobre o historial da linguagem C;
LEITURAS OBRIGATÓRIAS
TEXTOS:
Leituras Complementares
• Moreira, M. A. (1996). Modelos mentais. Investigações em ensino de ciências. Porto
Alegre. Vol. 1, n. 3 (dez. 1996), p. 193-232.
• Gudwin, R. R. (1997). Linguagens de programação. Campinas: DCA/FEEC/
UNICAMP.
• Medeiros, H. Linguagens de Programação.
• Da Silva, V. L. Linguagens de Programação.
• Sebesta, R. W. (2009). Conceitos de linguagens de programação. Bookman Editora.
• Grune, D. (2000). Modern Compiler Design. Modern Compiler Design, 736.
https://doi.org/10.5860/CHOICE.50-3309
CONCLUSÃO DA UNIDADE
Esta unidade discute a linguagem de programação, os paradigmas de programação e a
resolução de problemas através de recursos computacionais. Tem A unidade tem como
foco a introdução do estudante na programação através da criação da lógica de
programação e de demostração das estratégias de resolução de problema baseado no
computador, os passos seguidos no desenvolvimento de um programa, as técnicas de
concepção de programa incluindo as abordagens top down e bottom up, os algoritmos e as
formas de representação: pseudocódigo e fluxograma. Apresenta também a linguagem de
programação em C, abordando as suas características e o seu historial.
Actividades Formativa
Actividade Formativa 1
AVALIAÇÃO DA UNIDADE
PARTE A
1. A programação pode ser definida como o acto de usar uma _____________ para
escrever __________________que pode ser executada pelo computador com o objectivo
de ____________________________, aplicando correctamente ________________ e
_________________de uma linguagem de programação.
PARTE B
1. Um fluxograma é______________________________________
Feedback
• Na tua opinião, o quão bem está a unidade desenvolvida/entregue?
• Quais são as áreas que achas necessária mais clareza?
• Existem termos que precisavam de mais explicações?
• Que sugestões dariam para melhorar o conteúdo apresentado?
• Os exercícios de avaliação apresentados foram adequados?
Respostas PARTE A
Introdução geral
A unidade é constituída por três aulas das quais na primeira iremos discutir
sobre aspectos gerais da linguagem C. Apresentaremos a estrutura de um
programa em C, aprenderemos como trabalhar com os compiladores da
linguagem e discutimos passo a passo desde a configuração do ambiente do
trabalho até a programa detalhadamente.
CONTEÚDOS DA AULA
Para discutir e ilustrar esses conceitos usando um programa C, primeiro temos que
começar por nos familiarizar com o ambiente de linguagem (visão geral da linguagem C).
Como referenciamos nas aulas anteriores, a linguagem C é uma linguagem compilada, isto
é, para a sua execução precisa de um compilador. Existem várias opções de compiladores
de C no mercado concebidos ou desenvolvidos por diferentes grupos de desenvolvedores.
Podemos encontrar como exemplo o Microsoft Visual C++, Turbo C/C++, Code::Block,
DevCPP entre outros. Dentre estes existem alguns grátis e comerciais. Nesta unidade
curricular optaremos por usar o DevCPP para ambiente Windows.
Para criarmos um programa usando este compilador podemos fazer de duas maneiras.
Tanto para a primeira opção assim como a segunda, as janelas apresentam as mesmas
características: Face a essa situação, vamos apresentar a legenda:
Para termos uma visão geral da linguagem que usaremos no desenvolvimento dos
programas, vamos analisar como ficaria, na linguagem C, nosso algoritmo calculo da média
apresentado como exemplo nas aulas anteriores.
Ao introduzirmos o código acima em devC++ teremos uma situação similar a que podemos
verificar na figura abaixo:
Linha 8 e 19: { }
Representam o início e o fim do bloco de comandos no programa. Para cada chaveta que
colocamos, temos que informar sobre o seu fecho através de outra chaveta do sentido
oposto.
Nessa linha a função irá ler o primeiro número que for digitado e o armazenará no
endereço da variável n1, conforme indicado (“%f”, &n1). O “%f” indica que se trata da
leitura de um número real com ponto flutuante. O mesmo ocorre para scanf(“%f”,&n2).
executada a linha 15 caso o resultado da média entre n1 e n2 seja superior a 10. Caso a
condição colocada não seja satisfeita, executa-se a linha 17.
Resumo da aula
ACTIVIDADE 5
Para a resolução desta actividade deve ler atentamente o conteúdo da aula e os materiais
disponibilizados no fim desta unidade. Esta actividade pode ser realizada em grupo ou
individualmente. Deve ter internet para descarregar o programa no site indicado e procure a
versão mais actualizada do DevC++ ou outro compilador que o seja de fácil manipulação.
1. Baixa e instala o compilador DeV C++ no seu computador (caso ainda não o tiver
instalado).
3. Crie um projecto usando o devC++ e crie dois ficheiros de código fontes sob
projecto;
int a,b,c,d=5;
a=++d;
b=a++;
c=b--;
printf (“%d %d %d %d %d”, a, b, ++c, d,--d);
Introdução
CONTEÚDOS DA AULA
A linguagem C é o meio de comunicação com o computador. Esta pode ser amplamente definida
como: Alfabetos, dígitos ou símbolos especiais combinados para formar constantes, variáveis ou
palavras reservadas. As quais são combinadas para formar instruções, regras e regulamentos, isto
é, combinação de sintaxes para formar expressões e a combinação de expressões formam o
programa.
Dígitos 0–9
Símbolos especiais , . ; : ? ! @ % & * / \ | { } ( _ ) etc.
6.2. Constantes
Como vimos na aula anterior, Uma constante é uma variável tem um valor fixo e inalterável
ao longo do programa. Em C uma constante do tipo caractere é escrita entre aspas
simples, uma constante cadeia de caracteres entre aspas duplas e constantes numéricos
escritos como o número inteiro.
EXPONENCIAL
1. A mantissa e expoente devem ser separados por e;
2. A mantissa pode ser positive ou negative. O padrão é positive;
3. O expoente deve ter no mínimo um digito, positive ou negativo.
4. O Range desse tipo é -3.4e+38 a 3.4e+38
Saiba masi
sobre as
funções de cada
palavra
https://www.progra
miz.com/c-
programming/list-
all-keywords-c-
language
Embora uma variável possa assumir diferentes valores, ela só pode armazenar um valor a
cada instante.
vii. O nome de uma variável pode ser de uma letra até palavras com no máximo 32
caracteres;
Exemplo: a; num; essa_e_uma_variavel; tambem_essa;
viii. Palavras reservadas não podem ser usadas como nome de variáveis.
Tipo_de_dado identificador;
Exemplos:
Exemplo Resultado
Int qnt, saldo, pUnity; Correcto
char nome da escola; Errado
char nome_da_escola; Correcto
float main; Errado
float _main; Correcto
Os tipos básicos são char, int e float. Para cada um dos tipos de variáveis existem
modificadores. Os modificadores suportados em na linguagem C são signed, unsigned,
long e short. Vejamos a tabela que detalha os mesmos:
Para manipular esses tipos de dados usando funções formatadas como printf() e scanf()
é preciso usar o formato especifico como pode ser visto na coluna 2 da tabela acima.
Para além dos tipos de dados primários, podemos encontrar outros tipos de dados como
(i) secondários, definidos pelo utilizador e tipo void. A figura abaixo ilustra cada uma
dessas categorias.
A sua declaração é:
tipo_de_dado identificador[subscrição];
6.5.1.2. Estruturas
struct identificador
{
Declaração:
Tipo_de_dado 1 identificador 1;
Tipo_de_dado 2 identificador 2;
….
Tipo_de_dado n identificador n;
};
6.5.1.3. União
É um tipo de dado derivado, quase similar a estructura. É declarado da mesma forma que a
estrutura.
union identificador
{
Tipo_de_dado 1 identificador 1;
Tipo_de_dado 2 identificador 2;
Declaração: ….
Tipo_de_dado n identificador n;
};
6.5.1.4. Ponteiro
Ponteiro é outro tipo de dado derivado, usado para armazenar os endereços de memória
de variáveis do mesmo tipo.
Declaração:
tipo_de_dado * identificador;
6.5.1.5. Typedef
Ela nos fornece uma maneira simples e significante para chamar um tipo de dados que já
declarada.
6.5.1.6. Enum
Tipo de dados enumerado é usado para criar o nosso próprio tipo de dados e dar-lhe os
valores que tipo de dados que passará a tomar
enum especialidade
{
Declaração: SISTEMA, ENSINO, REDES, MULTIMEDIA
};
enum especialidade m1,m2;
Também conhecida como tipo de dado vazia, é útil em muitas situações importantes. Ele é
usado para especificar o tipo de retorno de uma série de funções em que a função não é
suposto para retornar um valor. lista de argumentos vazia de uma função e para declarar
ponteiro genérico.
No primeiro exemplo a função não retorna nenhum valor, no segundo a função leva
argumentos vazios e no terceiro exemplo trata-se de um ponteiro genérico.
Resumo da aula
ACTIVIDADE 6
Para esta actividade leia sobre as regras de declaração de variáveis, constantes e tipos de dados
de formas a aprender a criar, definir e declarar identificadores:
1. Responda
a) Declare uma variável para armazenar a inicial do seu nome do meio.
b) Declare uma variável para armazenar a sua idade.
c) Declare uma variável para armazenar a sua altura.
d) Declare uma constante que guarde um número do intervalo (0 a 12).
e) Declare uma variável que contém um montante de capital (número real).
2. Escreva programas simples que lhe ajuda a aprender como usar variáveis, atribuir
valores a variáveis, usar os operadores e apresentar os resultados dos programas.
Usando o operador de atribuição, inicializar variáveis declaradas entre i e v e imprima os
seus valores.
- Lê um número inteiro x
- Lê um double y
- Lê um caractere
- Imprima um inteiro x
- Imprima um double y
- Imprima um caractere i
- Incremente x por 1
CONTEÚDOS DA AULA
7.1. Operadores e Expressões
Exemplo:
A expressão matemática 1+2 relaciona dois operandos (os números 1 e 2) por meio de um
operador (+) que representa a operação de adição/soma em que o valor é 3.
Vamos observar o exemplo dado, e pode-se verificar que ao nível de programação essa
expressão não é armazenada em memória, pois o seu resultado não é colocado em
nenhuma variável. Para ultrapassar isso é necessário utilizar operadores de atribuição.
A sintaxe é:
Identificador = expressão;
a = 10;
areaCirc = 3.14 * raio*raio;
i=k;
Existem expressões que podem ser abreviadas. E a linguagem C permite a equivalência
das expressões abaixo:
Exemplo:
soma = a + b;
pi = 3.1416;
a=b=c=1;
7.1.2. Operadores aritméticos
OPERADOR SIGNIFICADO
> Maior que
< Menor que
>= Maior ou igual a
Uma expressão que contenha um operador relacional devolve sempre como resultado o
valor lógico (verdade (1) ou FALSO (0).
Exemplo 2:
int a = 10, b = 1, c = 12;
a > b + c;
OPERADOR SIGNIFICADO
^ XOR
~ Complemento de um
Para saber sobre
>> Deslocamento à esquerda operadores leia a obra
Kernighan, B. W.,
Ritchie, D. (1988). The
<< Deslocamento a direita
C Programming
Language -the ANSI
edition, Pearson
Prentice Hall.
Exemplo:
sizeof, operador ternário (? : ), operador de endereço (&), valor no endereço (*) e ponto
(.).
Este também pode ser chamado como operador de indireção. o item de dados
representado por x também pode ser acessadido pelo *y, onde * é operador unário que
opera apenas com ponteiros.
Para aceder os elementos código e nome deve ser através do operador ponto. E procede-
se desta forma.
struct baseDeDados x;
x.codigo = 10;
x.nome=”ISEAD”;
Onde struct é a palavra reservada que ajuda nos a desenhar estrutura e baseDeDados
trata-se de um nome dado a estrutura. O x é a variável criada para manipular as variáveis
da estrutura. Pode-se considerar x como cópia da estrutura.
Exemplo:
double d;
long l;
int i;
if (d > i) d = i;
if (i > l) l = i;
if (d == l) d *= 2;
Exemplo:
double y;
int x = (int)y;
Nesta linha estamos informando ao compilador que pretendemos armazenar o conteúdo da
variável y, mas convertido a inteiro.
RESUMO DA AULA
ACTIVIDADE 7
LEITURAS OBRIGATÓRIAS
TEXTOS:
Leituras Complementares
• Gudwin, R. R. (1997). Linguagens de programação. Campinas: DCA/FEEC/
UNICAMP.
• Medeiros, H. Linguagens de Programação.
• Da Silva, V. L. Linguagens de Programação.
• Sebesta, R. W. (2009). Conceitos de linguagens de programação. Bookman Editora.
CONCLUSÃO DA UNIDADE
Esta actividade instruiu-lhe como instalar e executar um programa usando o Dev C++,
recomendamos a usar a versão mais recente. Também permitiu conhecer as formas de
definir e declarar variáveis e utilizar de forma adequada os vários tipos de dados e os
operadores mencionados nesta unidade. Possibilitou o entendimento de vários operadores
e quando aplica-los em exercícios específicos.
Actividades Formativa
AVALIAÇÃO DA UNIDADE
a) Tipo de dados
b) Variável
c) Operador
d) Identificador
e) Caractere
2. Identifique as regras que são seguidas quando se usa um identificador?
3. Por que é importante entender como usar os tipos de dados num programa?
Introdução geral
Nas duas unidades anteriores vimos conceitos que possibilitam nos trabalhar
com a linguagem C na resolução de tarefas simples.
CONTEÚDO DA AULA
8.1. If simples
Sintaxe Fluxograma
Exemplo:
8.2. If … else
É uma extensão da instrução if. A sua sintaxe é:
Sintaxe Fluxograma
Voltemos a analisar o exemplo da instrução if. Apenas nos apresenta o resultado quando o
numero num for par, mas e se, por exemplo o número num não fosse par?
Ele seria ímpar… mas como faríamos isso no programa? A estrutura do if é composta
do else, que é executado caso a condição do if não seja satisfeita. A seguir temos o
exemplo.
Exemplo: Faça um programa que recebe três valores e determina qual é o maior dentre
eles.
Comando switch é uma estrutura de decisão múltiplo controlo que permite que os valores
sejam testados de uma lista de valores até encontrar uma correspondência que retorna
resultados. Esta instrução é outro modo para simular o uso de varias instruções if e pode
somente verificar uma relação de igualdade. Todos os tipos primitivos (int, string, etc)
podem ser usados nas instruções switch/case.
Sintaxe Fluxograma
Exemplo
Faça um programa que informa sobre os dias da semana por extenso mediante a inserção
do número equivalente.
RESUMO DA AULA
gere valores discretos, usado também em situações nas quais deve ser realizado um
mesmo processamento para várias condições quando o número de possibilidade for
razoavelmente grande e finito.
Portanto não existe uma regra específica para se escolher uma estrutura ou outra. Em
alguns casos, poder-se-ia utilizar qualquer uma destas estruturas.
ACTIVIDADE 8
1. Explica o que são estruturas de controlo? Lista várias estruturas de controlo usadas em
C.
Actividade prática
1. Faça um programa que recebe o ano pela teclado e determina se é comum ou bissexto.
2. Faça um programa que leia três valores distintos a serem digitados pelo utilizador, determine e exiba
o menor deles.
3. Faça um programa que leia o salário bruto e calcule o salário líquido. Para esse programa, o salário
líquido será o salário bruto menos os descontos de INSS e IR, seguindo as regras:
Caso o salário seja menor que 1.5000,00 MT não devemos descontar IRPS e
descontaremos 8% de INSS;
Para salários a partir 1.5000,00 MT descontaremos 5% de IRPS e 11% de INSS.
CONTEÚDO DA AULA
while(condição)
{
Comando(s);
}
Como a palavra sugere, enquanto a condição for verdadeira, o comando é
repetido.
Como funciona?
Declaramos a variável x que controlará o while. Ela armazena o valor a ser impresso. A
expressão do while verifica se o x está dentro do limite desejado (x <=10). No início, a
variável x contém o valor 1 e, portanto, a expressão do while é satisfeita. O bloco de
expressões é executado, imprimindo o valor de x e aumentando seu valor em uma unidade.
Note que isto afecta a condição que controla o bloco. Nas próximas repetições, a
expressão será verdadeira para os valores de x 2, 3, 4, …, 9 e 10. Quando x armazenar o
valor 11, a expressão que controla o while se tornará falsa. Nesse ponto, o while termina,
encerrando as repetições. No final da execução, o valor da variável x estará em 11, que foi
justamente o valor que tornou a expressão falsa, impedindo uma nova execução do bloco
while.
Um for sempre está acompanhado de uma variável contadora que armazena quantas
vezes o bloco de sentenças do for deve ser executado. O seu cabeçalho agrupa todas as
Sintaxe:
do {
Comando(s);
} while(condição);
As diferenças entre a estrutura while e do...while é sútil. Ela está no momento quando a
condição de repetição é verificada: antes ou depois de executar o bloco de sentenças. A
escolha dependerá do bom senso do programador, que optará pela estrutura que deixar o
algoritmo mais simples e legível.
Quando o bloco da estrutura do...while contém apenas uma única sentença, pode-se omitir
as chaves que delimitam o bloco.
O uso do comando break costuma estar associado à uma estrutura condicional if para que
a interrupção seja realizada somente sob determinadas condições excepcionais.
Exemplo: Escreva um programa que que imprime o primeiro dígito divisível por 2 e 3.
Resolução
A variável x armazena valores
incrementados pelo ciclo de
repetição do... while. A instrução
if da linha 6, vai controlando se o
resto da divisão do x por 2 e x
por 3 é verdadeira. (Lembra-se
do funcionamento do operador
lógico (&&).Uma vez sendo
verdade, a expressão de output
printf(“%d\n”, x) é executada. Logo após a sua execução, segue o break que força a
interrupção do ciclo. E o resultado será o 6.
Exemplo: Faça um programa que gera números entre 1 a 100 e imprima apenas os
números divisíveis por 5.
Resolução
Programa Resultado
RESUMO DA AULA
ACTIVIDADES 9
adquiridos na aula. Para o sucesso na realização desta actividade, o estudante deve ler as
bibliografias recomendadas na parte final desta unidade.
CONTEÚDO DA AULA
Suponha que temos uma tarefa sempre executada exactamente da mesma maneira.
Quando pretendemos que seja feito, vamos para o serviço e dizemos: chegou o período,
faça serviços de manutenção do veículo. Não precisamos dar instruções, porque o
mecânico conhece seu trabalho. E também não precisamos ser informado sobre como o
trabalho está pronto. Assumimos que o nosso veículo seria atendido da maneira usual, o
mecânico faz isso e é isso.
Imaginemos que uma operação tiver que ser realizada em vária partes distintos em um
programa, o programador codifica o mesmo conjunto de instruções quantas vezes for
necessário. Por exemplo, em um programa que calcula a área de triângulo em diferentes
partes de um programa, seria desperdiça do tempo e o esforço do programador para
codificar a mesma sequência de instruções sempre que for necessário. Esta actividade não
só aumenta o tamanho do programa, mas também acrescenta as chances de cometer
erros tipográficos.
Uma melhor maneira de alcançar o mesmo efeito, no entanto, seria usar subprogramas ou
funções. Um subprograma ou função é um nome dado a um conjunto de instruções que
podem ser chamadas por outro programa ou subprograma. Essa técnica simplifica o
processo de programação porque um único conjunto de instruções sob a forma de
subprograma está sendo usado para todas as instâncias no programa, mudando apenas
dados. Sempre que a tarefa for feita, o controle é transferido para o subprograma e após o
término da execução, o controle é transferido de volta para o fluxo normal do programa.
Onde:
Tipo: é o tipo de valor a ser retornado pela função. Caso a função não retorne nenhum
valor, neste caso, devemos defini-la como void.
Todos programas em C consistem em uma ou várias funções, e uma dessas funções
obrigatoriamente deve ser main(), pois é a função main é o ponto de execução do
programa. Existem vários benefícios de uso de funções, desde a clarificação da lógica,
evitam a repetição do código que executa as mesmas tarefas, promovem a portabilidade,
reduzem o uso da memória, permitem a modularização e reduzem as linhas do código.
Em linguagem c, existem várias funções de bibliotecas que são usadas para realização de
algumas operações e cálculos. Essas são pré-definidas no compilador da linguagem e
armazenadas em ficheiros especiais de bibliotecas. Se o pretendemos usar uma dessas
bibliotecas especiais, devemos incluir o respectivo ficheiro através da directiva #include.
Como exemplo, vamos supor que pretendemos usar as funções matemáticas, ai teríamos
que incluir o ficheiro math.h e operacionalizando devia ser: #include<math.h>. Após essa
linha de código podemos usar todos os tipos de funções pré-definidos de matemática que
estão contidos neste ficheiro.
main()
{
mensagem(); // Chamada de função
}
3. A função é definida quando o nome da função é seguido por par de chavetas e que no
interior tem uma ou mais instruções;
mensagem()
{
Instruções;
}
A função que não retorna nenhum valor declaramos como void. As instruções da
função são colocadas entre chavetas. Caso a função retorne qualquer tipo de dado, é
obrigatório usar a instrução return, a qual retorna um valor do mesmo tipo da
declaração da função.
Exemplo 1:
#include<stdio.h>
int main()
{
int a,b;
printf("A soma é %d",soma(a,b));
add(a,b);
return 0;
}
Neste caso temos duas funções, que realizam as mesmas operações. A primeira
retorna um valor e a segunda não retorna. O x e y são designados de argumentos
formais enquanto o a e b são argumentos actuais.
A função add() e soma() tem formas diferentes de serem referenciados no main(). As
funções que retornam qualquer valor a função não são referenciadas directamente.
Devemos chamá-las e atribuir o seu valor a uma variável do mesmo tipo, ou usá-las
directamente em funções como printf() como pode ser visto no exemplo acima. Para as
funções que não retornam, essas são invocadas directamente, como pode ser visto no
exemplo da função add().
void main()
{
int n1,n2,n3,soma;
printf("Introduza o primeiro número:");
scanf("%d",&n1);
printf("Introduza o segundo número:");
scanf("%d",&n2);
printf("Introduza o terceiro número:");
scanf("%d",&n3);
soma = somTres(n1,n2,n3);
printf("A soma dos tres numeros e: %d",soma);
}
RESUMO DA AULA
ACTIVIDADE 10
Na comunicação entre funções podemos encontrar dois tipos de casos: A chamada por
valor e a passagem por referência. Em ambas situações, o número de argumentos actuais
deve ser obrigatoriamente igual ao número de argumentos formais.
A chamada por valor é uma técnica que consiste em passar apenas o valor das variáveis
da de uma função para outra, isto é, faz-se cópia do conteúdo dos argumentos actuais para
argumentos formais.
Exemplo: Usando chamada por valor, faça um programa que determina o maior valor entre
dois números.
#include<stdio.h>
int main()
{
int a,b;
printf(“O maior e valor é %d”,verifica(a,b));
return 0;
}
#include<stdio.h>
int main()
{
int num, f;
printf(“introduza o numero”);
scanf(“%d”,&num);
f = fact(num);
printf(“Factorial de %d = %d” , f);
return 0;
}
#include<stdio.h>
int main()
{
int a,b;
a = 20; b=10;
printf("Antes da troca");
printf("A=%d, B = %d",a,b);
troca(a,b);
printf("Depois da troca");
printf("A=%d, B = %d",a,b);
return 0;
}
void troca(int x, int y)
{
int temp = x;
x=y;
y=temp;
}
Este programa parece estar muito bem, mas analisando um pouco mais a fundo, veremos
que a função troca não influencia no comportamento da variável a. Isto porque na
passagem por valores os argumentos formais e actuais comunicam-se através de cópias
de valores e não de referências. Assim, uma alteração nos argumentos formais não tem
nenhuma influência nos argumentos actuais vice-versa.
Como resultado do programa acima teremos:
Antes da troca
A = 20 B = 10
Depois da troca
A = 20 B = 10
Portanto, se pretendermos que as alterações feitas nos argumentos formais tenham efeito
nos argumentos actuais, devemos usar a chamada por referência.
Esta técnica consiste em passar a referência do argumento actual à função chamada.
Assim, o argumento formal e o actual partilham o mesmo espaço da memória.
Isso pode ser alcançado através do uso do operador do endereço (&) nos argumentos
formais e o operador do valor do endereço (*) no argumento formal.
#include<stdio.h>
int main()
{
int a,b;
a = 20; b=10;
printf("Antes da troca");
printf("A=%d, B = %d",a,b);
troca(&a,&b);
printf("Depois da troca");
printf("A=%d, B = %d",a,b);
return 0;
Uma função normalmente so retorna um único valor de cada vez. Para ultrapassar essa
limitação, podemos usar a passagem por referência, uma vez que as variáveis podem ser
manipuladas usando referencias.
Variáveis globais são definidas fora de todas as outras funções do programa. Como acordo,
elas são declaradas na parte superior do programa após as directivas de pré-processador,
mas antes da função main ().
Vamos aprender a usar correctamente as variáveis usando o seguinte exemplo:
#include <stdio.h>
/* declaração de variável global */
int a = 20;
int main ()
{
/* declaração de variável local na função main */
int a = 10;
int b = 20;
int c = 0;
printf ("valor de a no main() = %d\n", a);
c = sum( a, b); //parâmetros actuais (a, b)
printf ("valor de c no main() = %d\n", c);
return 0;
}
/* função para somar dois inteiros */
RESUMO DA AULA
formais e actuais ocupam espaços diferentes, o que significa a exigência da duplicação dos
espaços da memória, enquanto a passagem por referência os argumentos formais e
actuais ocupam o mesmo espaço, fazendo que qualquer alteração em variáveis em
questão significa a mudança do conteúdo da outra. E por fim tratamos de um conceito
tratado na unidade dois as variáveis. Onde classificamos estas em variáveis globais e
locais. As globais são aquelas que tem a vida durante toda execução do programa,
enquanto as locais são aquelas definidas dentro das funções e são visíveis apenas no
bloco onde são criadas.
ACTIVIDADES 11
4. Refaça as actividades práticas da aula 10 de formas que os dados sejam inseridos no main.
LEITURAS OBRIGATÓRIAS
TEXTOS:
Leituras Complementares
• Gudwin, R. R. (1997). Linguagens de programação. Campinas: DCA/FEEC/
UNICAMP.
• Medeiros, H. Linguagens de Programação.
• Da Silva, V. L. Linguagens de Programação.
• Sebesta, R. W. (2009). Conceitos de linguagens de programação. Bookman Editora.
CONCLUSÃO DA UNIDADE
Esta actividade habilitou-lhe a programar usando técnicas de desvio e modularização.
Também permitiu conhecer as formas de definir e declarar variáveis locais e globais, a
saber utilizar de forma adequada os vários tipos de fincões desde as de biblioteca até as
definidas pelo utilizador e ajudou-lhe a saber resolver problemas específicos de acordo
com um pensamento lógico de programação.
Actividades Formativa
AVALIAÇÃO DA UNIDADE
11. Guarde a divisão de uma variável inteira por 5 numa variável do tipo “float” de nome
comissão.
14. Escreva um ciclo for que adiciona todos os valores entre 50 e 100 e guarde o
resultado numa variável chamada soma?
15. Escreva uma instrução if que compara o valor de um inteiro chamado produto com o
valor de 15, e se for maior, imprima a sequência de texto "excedestes".
Feedback
1. int total=0;
2. char initial=’K’;
4. #define PI 3.14
5. int a, b; b=a;
6. sum=c+e;
7. a+=b; or a=a+b;
8. sum/=9;
9. scanf(“%d”, &y);
11.comissao=(float) total/5;
15. if(product>15
printf(“excedestes”);
16. if(x==y)
printf(“%d”, x);
else
printf(“%d”, y);
default:
printf ("caracter desconhecido %c\n", c );
}
18. if (a<b)
v=a;
else
v=b;
Introdução geral
Na terceira aula iremos discutir sobre tipos de dados definidos pelo utilizador
capazes de agrupar elementos de diferentes tipos. Trata-se de estruturas e
uniões. Nesta abordagem vamos trabalhar de formas a criar mais uma
complexidade nos assuntos, dai que o estudante deve prestar maior
concentração nesse conjunto de aulas.
O tipo especifica o tipo de elementos que serão armazenados no vector que inclui: int, float,
char, double etc., enquanto o tamanho indica o número máximo de elementos que podem
ser armazenados no vector. Por exemplo:
Elementos do vector são acedidos usando o nome do vector e seu índice. Elementos do
vector são armazenados de um modo contíguo e o primeiro elemento do vector começa
com o índice zero (0), o último elemento do vector termina com um tamanho do elemento
menos um ([elemento-1]). No nosso do exemplo, o primeiro elemento é abcde [0] .... [4],
conforme ilustrado a seguir:
Por exemplo:
int abcde [5] = {10, 20, 30, 40, 50};
ou
int abcde [5];
abcde [0] =10;
abcde [1] =20;
abcde [2] =30;
abcde [3] =40;
abcde [4] =50;
Este comando é usado para manipular o conteúdo de um vector. Para ilustrar isso, vamos
escrever este programa simples:
#include<stdio.h>
main ()
{
int abcde [5] = {10, 20, 30,40,50}, x;
for (x=0; x<5; ++x)
{
printf(“abcde[%d] =%d\n”, x, abcde[x]);
}
printf (“imprimi os elementos do meu vetor\n”);
}
O resultado será:
abcde [0] =10
abcde [1] =20
abcde [2] =30
abcde [3] =40
abcde [4] =50
Aqui, x é a nossa variável de controlo que usamos para aceder ou manipular o conteúdo do
vector.
Como outros tipos de argumentos, os elementos de um array podem também ser passados
para uma função através de chamada por referência ou por valor.
12.2. Matriz
Temos outros tipos de vectores conhecidos como vectores multidimensionais. Vector
multidimensional é um vector de vectores. Por exemplo, vector bidimensional
(representando uma matriz ou uma tabela) é um vector multidimensional que tenta
representar todos os elementos da mesma forma. A matriz tem dois índices, um para a
linha e a outra para a coluna. Por exemplo, é apresentado a seguir é uma tabela de três por
três para armazenar nove valores (3x3 = 9).
<tipo_dados> nome_vetor[tamanho_linha];
Por exemplo, my_table é declarada como uma matriz com 4 linhas e 5 colunas. O primeiro
elemento da matriz é variável [0] [0] e último elemento é my_table [3] [4]. A seguir é
ilustrado uma matriz bidimensional.
}
}
printf(“Imprimi os dois elementos da matriz\n”);
}
12.3. Strings
Uma string é um vector de caracteres que pode ser terminado com um valor nulo '\0'. Aqui
nós definimos uma string usando duas palavras que temos que encontrou nesta unidade,
como um vector de caractere (char). Uma string é declarada usando a mesma forma de
um vector, veja:
O tipo é char porque é um vector de caracteres, o nome indica o identificador que marca o
local na memória para armazenar os caracteres. Tamanho contém o número de caracteres
que podem ser contidos na string. Por exemplo;
“Elisandra” é uma cadeia fechada em aspas duplas, enquanto 'y' é uma string colocada em
aspas simples. A string tem a seguinte forma:
char primeiro_nome[10];
char ultimo_nome[10];
RESUMO DA AULA
Com estes conceitos importantes na programação, vectores e strings. Como podemos ver,
estas estruturas são quase inevitavelmente, ao desenvolver um programa em C. Nós
sempre lidamos com uma série de itens de dados, provavelmente do mesmo tipo por
exemplo o uso de vectores e strings. Portanto, é importante que entendas esses conceitos.
ACTIVIDADE 12
Podes também sempre complementar as tuas leituras com outras pesquisas realizadas na
internet. Esta actividade exige que faças mesmo uma pequena pesquisa. Lê os conteúdos
pesquisados, a seguir, então:
CONTEÚDO DA AULA
13.1. Ponteiros
Ponteiro ponteiros são uns dos recursos mais poderosos da linguagem C. para iniciantes
desta linguagem, torna-se difícil de entender a filosofia dos ponteiros e a sua manipulação,
que na verdade não é assim. Um ponteiro em C é uma variável comum, em cujo conteúdo
armazenamos o endereço de memória de um outro objecto. O objecto cujo endereço é
armazenado pode ser de qualquer tipo, como, por exemplo, uma outra variável, um array,
ou mesmo uma função. É como se a variável apontasse para o objecto cujo endereço está
ali armazenado.
Com ponteiros, temos uma variável que aponta para outra variável. Isso é chamado de
indireção.
Em ponteiros existem dois operadores fundamentais usados em ponteiros:
1. O operador de endereço (&)
2. O operador de indireção (*)
Resultado:
valor de x = 10
endereço do x = 2004
Podemos notar aqui que o valor do endereço de x é assumido e o valor real é dependente
da máquina e do tempo de execução.
Resultado:
valor de x = 10
endereço do x = 2004
O valor de endereço 2004 = 10
<Tipo_de_dado> * nome_da_variável;
Onde:
Tipo de dado: Pode ser qualquer tipo de dado básico ou derivado;
( * ) : Indica que a variável é do tipo ponteiro
Nome_da_variavel: é um identificador da variável. E este deve obedecer todas as regras
da nomenclatura de identificadores
int x;
int *y;
x = 10;
y = &x; // O ponteiro y é alocado o endereço de x
Para além de ponteiros simples podemos trabalhar com ponteiros que apontam em outros
ponteiros. A esse grupo de variáveis são designados de ponteiro de ponteiro.
Sintaxe:
<tipo_de_dado> ** nome_da_variavel;
Onde:
Tipo de dado: Pode ser qualquer tipo de dado básico ou derivado;
( **) : Indica que a variável é do tipo ponteiro do ponteiro
Nome_da_variavel: é um identificador da variável. E este deve obedecer todas as regras
da nomenclatura de identificadores
Exemplo:
int x; // variável normal
int *y; // variável do tipo ponteiro
int **k; // variável do tipo ponteiro do ponteiro
Assim podemos dizer que o y aponta para o x e o k aponta para y. O valor armazenado em
y será o endereço do x e o valor armazenado no k será o endereço do y.
Ilustrando graficamente fica:
Se fosse um tipo dado diferente de int a alocação seria de acordo com o tamanho do
mesmo. Abaixo apresentamos uma tabela de tamanhos de tipos de dados:
Tipo Tamanho Incremento Antes de Depois de
Resultado
Introduza os valores de x e y: 12 15
Antes da troca
X = 12 y = 15
Depois da troca
X = 15 y = 12
Resumo da aula
Nesta actividade demos uma introdução a ponteiros, aprendemos como declarar, manipular e as
possíveis operações com ponteiros. Os ponteiros só podem armazenar endereços de variáveis do
mesmo tipo de dado. A manipulação desta informação pode ser feita através da aplicação de
operadores de indireção (*) e de endereço (&).
Actividade 13
Podes também sempre complementar as tuas leituras com outras pesquisas realizadas na
internet. Esta actividade exige que faças mesmo uma pequena pesquisa. Lê os conteúdos
pesquisados, a seguir, então:
Conteúdo da Aula
Uma vez que o vector arr é do tipo int, cada elemento deste ocupa 2 bytes. O nome do
array contém o endereço inicial do array, assim, o nome contém o endereço 2001.
Assim se imprimirmos o nome do vector arr, teremos o endereço do array na posição zero.
for(i=0;i<5;i++)
printf(“\n %d \t %d … elemento”,arr[i],i);
}
Resultado
10 0 … elemento
20 1 … elemento
30 2 … elemento
40 3 … elemento
50 4 … elemento
Para manipular um array usando matriz seria necessário usar dois operadores de valor no
endereço:
*( * (arr + i) + j);
Demostração:
int main()
{
int arr[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{30,45,8,3}},i,j;
printf(“endereço de todas linhas são …”);
for(i=0;i<3;i++)
printf(“\n endereço do vector = %d”, i+1, arr[i]);
printf(“\n”);
printf(“elementos de matriz bidimensional são:\n”);
for(i=0;i<3;4i++)
{
for(j=0;j<4;++)
{
printf(“%d \t”,*(*(arr + i)+j);
printf(“\n”);
}
}
return 0;
}
Resultado
Elementos de matriz bidimensional são
1 2 3 4
5 6 7 8
9 10 11 12
30 45 8 3
#include<stdio.h>
int main()
{
char nome[100],*ptr;
int counter;
printf("Introduza um nome");
scanf("%s",&nome);
ptr = nome;
while(*ptr!='\0')
{
if((*ptr=='a')||(*ptr=='e')||(*ptr=='i')||(*ptr=='o')||(*ptr=='u'))
counter++;
}
printf("A string tem %d vogais", counter);
return 0;
}
Exemplo: Escreva um programa para impressão das strings usando array de ponteiros em
strings.
#include<stdio.h>
int main()
{
char * nome[]= { "Mause","teclado","Processador", "Impressora" };
int i;
printf("As strings introduzidas são ...\n");
for(i=0;i<4;i++)
puts(nome[i]);
return 0;
}
}
void troca(int *x, int *y)
{
int temp = *x;
*x = *y;
*y = temp;
}
Assim o resultado da segunda versão será:
Antes da troca
A = 20 B = 10
Depois da troca
A = 10 B = 20
Isto significa que a função temp retorna um tipo de dado ponteiro. Desta forma a instrução
de retorno deve retornar um ponteiro.
Exemplo: Escreva um programa que lê dois números inteiros e determine o maior entre
eles com ajuda da função maior(). Esta função pode retornar um ponteiro.
#include<stdio.h>
int * maior(int, int); // Protótipo da função
int main()
{
int a, b, *ptr;
printf("Introduza dois números");
Resultado
Introduza dois números
20
10
O maior entre 20 e 10 é 20
Função malloc()
Uso de sizeof
Na solicitação de memória para matrizes é necessário saber o tamanho de cada elemento,
em bytes, para calcular o tamanho total do matriz. Isto pode ser uma tarefa não trivial, pois
os tipos de dados podem apresentar tamanhos diferentes em diferentes sistemas. Além
disso, tipos formados por estruturas complexas não necessariamente têm tamanho igual a
soma do tamanho de seus atributos. Para auxiliar nesta tarefa, a linguagem C possui a
pseudo função sizeof. Ela recebe como parâmetro um tipo (inteiro, ponto flutuante,
caractere, estrutura, enumeração, etc.) ou uma variável. A função sizeof retorna o número
de bytes necessários para armazenar dados deste tipo, ou o número de bytes que será
alocado para a variável. Por exemplo, para saber o tamanho necessário para armazenar
um número inteiro, utiliza-se a expressão sizeof (int). Para conhecer o tamanho necessário
para armazenar um número fraccionário, utilizar-se-ia sizeof(float) ou sizeof(double).
Função calloc ()
Esta aloca espaço para elementos de matriz, inicializa-os para zero e retorna um ponteiro
para a memória.
Função free ()
Esta função desaloca ou libera um bloco de memória anteriormente alocado. É
responsabilidade do programador libertar o espaço. se não for necessário.
Esta função leva um ponteiro para o bloco de memória como seu argumento e, após a
execução, esse bloco não está mais disponível.
Exemplo:
Int *p;
free (p);
Função realloc()
Esta função é usada para redefinir ou modificar o tamanho anteriormente alocado.
Exemplo:
if p = (int *) malloc(5);
Pode-se alterar para 10 bytes caso queiramos de seguinte forma:
p = (int *) realloc (p, 10);
Exemplo prático: escreva um programa que aloca dinamicamente uma matriz de inteiro. A
lista deve ser lida a partir do teclado e armazenada na matriz. Determine o menor na lista e
imprima sua localização.
#include<stdio.h>
#includes<conio.h>
int main()
{
int menor,i,loc,n,*a;
printf("Informa do tamanho da matriz");
scanf("%d",&n);
a = (int *) malloc (n * sizeof(int));
for(i=0;i<n;i++)
{
printf("i = %d a = ",i+1);
scanf("%d", a + i);
}
loc =0;
menor = *(a+0);
for(i=1;i<n;i++)
{
if(menor > *(a+i))
{
menor = *(a+i);
loc=i+1;
}
}
RESUMO
Nesta aula aprendemos como relacionar os ponteiros com vectores, matrizes e strings.
Vimos também como é que podemos manipular um ponteiro usando um outro ponteiro.
Uma nota importante por reter é que o nome do vector pode também considerado por
ponteiro.
Na segunda parte da aula vimos como podemos passar um ponteiro de uma função para
outra. E por fim vimos como fazer com que a alocação da memória as variáveis seja
realizada no acto de execução através da alocação dinâmica da memória.
Actividades 14
Conteúdo da aula
15.1. Estruturas
Uma estrutura ou struct é uma variável especial que contém diversas outras variáveis
normalmente de tipos diferentes. As variáveis internas contidas pela struct são
denominadas membros da struct.
Podemos dizer que as structs da linguagem C são o equivalente ao que se denomina
registros em outras linguagens de programação.
Sintaxe:
struct <identificador>
{
<Listagem dos tipos e membros>;
} struct <identificador> <variável>;
Exemplo:
struct estudante
{
char nome [20];
int idade;
int código;
char turma [5];
};
A declaração significa que estudante é um tipo que é uma estrutura composta por
membros: nome, idade, código e turma, Uma vez que estudante é um tipo de dados,
para a manipulação dos seus membros é necessário declarar variáveis do seu tipo antes
de uso, e obedecem a seguinte sintaxe:
struct estudante est1;
Uma vez declarado o est1 este assa a conter todos os elementos do estudante. Isto é, faz
uma cópia de todos os membros da estrutura e com ele podem ser manipulados
isoladamente.
Caso queiramos armazenar dados de mais estudantes, podemos criar uma outra variável
do tipo estudante.
struct estudante
{
char nome [20];
int idade;
int codigo;
char turma [5];
}struct estudante est1,est2,est3;
O acesso aos membros da estrutura é feito através das variáveis criadas com auxílio do
operador ponto (.). Voltando ao caso do exemplo, se pretendermos armazenar dados nos
membros da estrutura estudante temos que usar a seguinte forma:
est1.nome =”ISEAD”;
est1.idade = 2;
est1.codigo = 1;
est1.turma =”mat”;
Também pode se usar a forma interactiva através das funções scanf() ou gets().
gets(est.nome);
scanf("%d %d %s",&est1.idade, &est1.codigo,&est1.turma);
Para a impressão:
Inicialização da estrutura:
Faça um programa que recebe dados do estudante (nome, código e nota) e calcula a
média do estudante.
#include<stdio.h>
struct estudante
{
char nome [20];
int cod;
float notas[2];
};
Void main()
{
struct estudante est;
int i;
float soma = 0.0;
printf("Introduza o seu nome e código");
scanf("%s %d",&est.nome,&est.cod);
printf("Introduza duas notas do estudante" );
for(i=0;i<2;i++)
{
scanf("%f",&est.notas[i]);
soma+=est.notas[i];
}
printf("Codigo\t Nome\t Media" ;
printf("%d\t %s\t %f", est.cod, est.nome,soma/i);
}
Pode-se atribuir valores de uma variável da estrutura a uma outra do mesmo tipo.
Exemplo: est2 = est1. Isto significa que o conteúdo da variável est1 e ste2 serão
iguais.
Como vimos nos exemplos anteriores, para armazenar e manipular estruturas, precisamos
de uma variável. No caso da estrutura estudante a qual armazena notas de um estudante,
foi fácil de gerir, isto porque só tratava-se de nota de um único estudante.
Mas imaginemos se fosse uma turma de 100 estudantes? Ai seriamos obrigados a declarar
100 variáveis de estruturas de formas a acomodar a situação. E isso seria uma tarefa muito
difícil. E é por este motivo que existem os arrays de estruturas para resolver e reduzir essa
complexidade.
A passagem de uma estrutura a uma função é similar a passagem de qualquer variável. Ele
pode ser chamado por referência assim como valor.
14.5. Uniões
O uso de uniões é igual ao uso das estruturas. Eles comungam da mesma sintaxe com
única diferença da palavra reservada usada. Em estrutura é struct enquanto na união é
union.
Sua sintaxe:
union <identificador>
{
<Listagem dos tipos e membros>;
} union <identificador> <variável>;
Tanto a estrutura assim como uniões são usados para conter membros de diferentes tipos
em uma única unidade. Enquanto a estrutura é usada para armazenar dados em diferentes
locais da memória, a união é usada para armazenar em único espaço da memória
diferentes tipos de dados. Em uniões, o espaço que armazena todos os membros é o
espaço requerido pela variável com maior capacidade, isto é, a variável que ocupa mais
espaço da memória toma o tamanho geral da união.
Exemplo:
union estudante
{
char nome [20];
int idade;
int codigo;
char turma [5];
}union estudante est1,est2,est3;
Nesta declaração, podemos concluir que o tamanho da união será de 20 bytes, espaço
ocupado pela variável nome, pois é a variável que requer maior espaço comparando com
as restantes.
RESUMO DA AULA
ACTIVIDADE 15
1. Por palavras simples defina o que são estruturas e uniões e estabeleça a diferença
entre estes com arrays.
Actividade pratica
3. Cria uma estrutura com os seguintes elementos: nome, salario e departamento. Com
ajuda da função inserir(), receba dados de 50 funcionários. E através da função
imprimir(), o programa deve mostrar os 10 funcionários com melhor salário.
LEITURAS OBRIGATÓRIAS
TEXTOS:
Leituras Complementares
• Moreira, M. A. (1996). Modelos mentais. Investigações em ensino de ciências. Porto
Alegre. Vol. 1, n. 3 (dez. 1996), p. 193-232.
• Gudwin, R. R. (1997). Linguagens de programação. Campinas: DCA/FEEC/
UNICAMP.
• Medeiros, H. Linguagens de Programação.
• Da Silva, V. L. Linguagens de Programação.
• Sebesta, R. W. (2009). Conceitos de linguagens de programação. Bookman Editora.
CONCLUSÃO DA UNIDADE
Esta unidade habilitou-lhe programar usando novas técnicas de programação.
Introduziu conceitos como vectores, estruturas e ponteiros que são tipos de dados
indispensáveis na programação.
Actividades Formativa
AVALIAÇÃO DA UNIDADE
6. O endereço de uma variável pode ser obtido através de uso do operador _______;
1. Vector
2. Subscrição
3. Endereço;
4. String;
5. String, Caractere;
6. &;
7. Ponteiro;
8. Ponto-e-virgula (;);
9. Mesmo;
10. union
11. Vectores desempenham um papel importante no tratamento de funções. Para
passar um vector é feito através do uso do nome do array sem parenteses rectos
no argumento actual. No argumento formal deve se usar a declaração formal, sem
especificar o seu tamanho, deixando assim os parenteses rectos vazios.
Exemplo:
void main() int soma(int i, float p[ ])
{ {
float media, notas[10]; ________________
________________ ________________
________________
media = soma(n, soma); }
}
Introdução geral
Conteúdo da aula
A linguagem C trata os arquivos como uma sequência de bytes. Esta sequência pode ser
manipulada de várias formas e para tanto, existem funções em C para criar, ler e escrever
o conteúdo de arquivos independente de quais sejam os dados armazenados.
• Abrir o ficheiro;
• Ler o ficheiro;
• Fechar o ficheiro;
Consiste em abrir o ficheiro de forma apropriada com ajuda de funções específicas para o
efeito. O modo de abertura do ficheiro tem a ver com a forma como pretendemos trabalhar
com o ficheiro. Existem três modos de abertura: input ou read. Este modo é usado
quando pretendemos ler os dados do ficheiro. O segundo modo é output/write, usamos
este modo quando pretendemos armazenar o resultado do processamento do nosso
programa e por fim temos o modo read-write que usamos quando pretendemos escrever
ou acrescentar algo ao ficheiro.
Este passo garante a manipulação dos conteúdos do ficheiro caso a abertura tenha sido
sucedido.
Este é o passo final no processamento do ficheiro. Uma vez terminado a leitura ou a escrita
em um ficheiro, este deve ser fechado.
O primeiro passo para trabalhar com um fivheiro é fazer a associação do arquivo físico com um
arquivo lógico. Para isso utilizamos o tipo FILE, definido na biblioteca stdio.h. A
abertura/associação do arquivo é feita pela função fopen(const char* arquivo, const char* modo),
em que arquivo é o directório/nome do arquivo a ser aberto e modo é o modo que a associação é
MODO FUNÇÃO
”r” Abre o arquivo somente para leitura, a partir do início. O arquivo deve existir.
“w” w” Cria um arquivo vazio para escrita. Se já havia o arquivo, ele é perdido
“a” Adiciona no final do arquivo. Se o arquivo não existir, a função o cria.
“r+” Abre o arquivo para leitura e escrita, a partir do início. O arquivo deve existir.
“w+” Cria um arquivo vazio para leitura e escrita. Se já havia o arquivo, ele é perdido
Abre para adição ou leitura no final do arquivo. Se o arquivo não existir, a
“a+”
função o cria.
Quando um programa encerra correctamente, com exit(0) por exemplo, os arquivos lógicos são
liberados da memória. Porém, se o programa fechar com erro, o arquivo não é liberado. Para evitar
que isso aconteça, é conveniente fechar o arquivo quando não for mais necessário o seu uso. Para
isso basta usar a função fclose(arquivo).
#include<stdio.h>
#include<conio.h>
#include<string.h>
void main()
{
FILE *fp;
Resultado:
Ficheiro: exemplo.txt
#include<stdio.h>
#include<conio.h>
#include<stdio.h>
int main()
{
FILE *fp;
Resultado:
#include<stdio.h>
#include<conio.h>
#include<stdio.h>
int main()
{
FILE *fp;
char car = 's';
int n;
fp = fopen("exemplo.txt","w");
if(fp==NULL)
{
printf(" \n Nao ee possivel abrir o ficheiro");
}
printf(" \Escreva s numeros inteiros e pressione entre para gravar:\n\n");
while(car =='s')
{
printf("\n Introduza um numero qualuer: ");
scanf("%d", &n);
putw(n,fp);
printf("Pretendes introduzir um outro (s/n)?");
car=tolower(getche());
}
fclose(fp);
Resultado:
Para saber
mais sobre
tratamento de
ficheiro leia:
RESUMO DA AULA
ACTIVIDADE DA AULA
4. Discuta sobre vários problemas que podem ser encarrados na abertura de ficheiro;
Actividade pratica
LEITURAS OBRIGATÓRIAS
TEXTOS:
Leituras Complementares
• Moreira, M. A. (1996). Modelos mentais. Investigações em ensino de ciências. Porto
Alegre. Vol. 1, n. 3 (dez. 1996), p. 193-232.
• Gudwin, R. R. (1997). Linguagens de programação. Campinas: DCA/FEEC/
UNICAMP.
• Medeiros, H. Linguagens de Programação.
• Da Silva, V. L. Linguagens de Programação.
• Sebesta, R. W. (2009). Conceitos de linguagens de programação. Bookman Editora.
CONCLUSÃO DA UNIDADE
Esta unidade habilitou-lhe programar usando novas técnicas de programação.
Discutiu-se diferentes operações de gravação e leitura de informação num ficheiro, com
intuito de munir o estudante de capacidades de fazer programas cujo o resultado do seu
processamento seja mantido permanentemente do disco duro.
Actividades Formativa
AVALIAÇÃO DA UNIDADE
1. Ficheiro;
2. Criado;
3. Fechado;
4. Ficheiro;
5. Console;
6. Scanf() e printf();
Introdução Geral
CONTEÚDO DA AULA
17.1. Tratamento de erros e teste
Existem três tipos básicos de erros: erros de sintaxe ou de compilação, erros de excepção
(erro de execução) e erros lógicos.
Um programa deve ser testado para todos esses tipos de erros. Isso garante a
confiabilidade, eficácia, desempenho entre outros atributos de um bom programa. Os testes
também são divididos em dois tipos básicos: teste de caixa branca e testes de caixa preta.
Usando métodos de teste de caixa branca um programador pode testar casos que
garantem que cada parte individual de um programa tenha sido testada pelo menos uma
vez, todas as decisões lógicas foram testadas com valores verdadeiros e valores falsos,
todos os ciclos foram testados até os seus limites e todas as estruturas de dados internas
forma testadas para garantir a sua validade. Teste de caixa petra tenta encontrar erros nas
seguintes categorias: as funções incorrectas ou em falta; os erros de interface; os erros em
estruturas de dados ou de acesso a base de dados externo; os erros de desempenho; os
erros de inicialização de finalização.
Teste de caixa preta é uma abordagem complementar que é provável descobrir um grupo
de erros diferentes que os testes de caixa branca. É praticamente impossível provar que o
17.2. Depuração
Teste Depuração
Erros lógicos podem ser detectados por fazer simulação do código do programa e
colocando as instruções de escrita de mensagens no código do programa. Outra
abordagem para a detecção de erros lógicos é pelo uso de um debugger. Esta é a técnica
mais utilizada. Debugger é o programa de software que auxilia um programador na
O IDE inclui um debugger, é uma ferramenta de apoio para encontrar erros de execução.
Para usar o debugger, é necessário modificar as opções do compilador para incluir
informações de depuração no objecto e nos ficheiros executáveis (Ferramentas> Opções
Compiler>Compiler). Isto é feito através da adição do parâmetro -g para as chamadas e do
compilador e linkador.
deve ser interrompido (com um ponto de interrupção ou após o uso de Executar para
Cursor).
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int x = 5;
double a, b;
printf("Entrar o primeiro numero (double type): ");
scanf("%lf", &a);
printf("\n a = %f", a);
a = a + x;
printf("\n a = %f", a);
printf("\nEntrar o segundo numero (double type): ");
scanf("%f", &b);
printf("%.2f + %.2f = %.2f\n", a, b, a + b);
printf("x = %d\n", x);
system("PAUSE");
return 0;
}
Esta saída indica que o programa tem um ou mais erros de lógica. O debugger do Dev C++
pode ser usado para localizar o erro(s).
leitura do
programmer
wrote the
program2-
Harsha Priya, r.
Ranjeet.
Isso também é uma actividade de leitura e o aluno é requerido que leia sobre a documentação
programa/software usando Fundamentals of programming languages book by Dipali P. Baviskar.
Vamos praticar o conceito de documentação de uma forma simples com o uso de comentários. O
aluno pode aceder o link http://en.wikibooks.org/wiki/C_Programming/Structure_and_style para ler
sobre tipos de documentação por uso de comentários. Nesta actividade, é requerido:
LEITURAS OBRIGATÓRIAS
Leituras Complementares
• Moreira, M. A. (1996). Modelos mentais. Investigações em ensino de ciências. Porto
Alegre. Vol. 1, n. 3 (dez. 1996), p. 193-232.
• Gudwin, R. R. (1997). Linguagens de programação. Campinas: DCA/FEEC/
UNICAMP.
• Medeiros, H. Linguagens de Programação.
• Da Silva, V. L. Linguagens de Programação.
• Sebesta, R. W. (2009). Conceitos de linguagens de programação. Bookman Editora.
CONCLUSÃO DA UNIDADE
Esta unidade introduziu os alunos na documentação do programa, uma actividade que é essencial
e que é praticado por programadores. O principal ponto a este nível é o de ajudar o aluno a
compreender o significado do código e de auto documentar e como documentá-lo código usando
comentários. O aluno também foi introduzido para sistemas de utilizador e manuais como parte da
documentação do programa. A este nível, o aluno deve ser capaz de apreciar os benefícios
da documentação do programa e aplica-lo nas suas actividades.
Actividades Formativa
AVALIAÇÃO DA UNIDADE
Defina o seguinte:
1. Um bug é _____________________________________________
2. Teste de programa______________________________________
3. Debug________________________________________________
4. Erros de compilação são detectados por___________________________
5. Erros de execução são conhecidos como__________________________
6. A instrução do programa foi escrita x=d\y; que erro será gerado no programa?
7. Para ver uma variável, o programa deve ser parado com um _________;
8. Erros lógicos podem ser detectados por __________e____________;
9. Documentação pode ser agrupada em três categorias. Nomeia as três categorias
de documentação de programa.
1. Um bug é um problema que causa falhas num programa ou produz uma saída inválida.
O problema é causado pela lógica insuficiente ou erro. Um erro pode ser um erro de
defeito ou falha, o que pode causar falha ou desvio dos resultados esperados.
2. O teste é um processo de execução de um programa com o intuito de encontrar erros.
3. A depuração é um processo metodológico de encontrar e reduzir o número de erros
ou defeitos de um programa de computador tal como esperado.
4. O compilador
5. Erros de tempo de execução
6. Sintaxe
7. breakpoint
8. Simulações e uso de um depurador
9. Instalação, referência e tutorial
Referências bibliográficos
● Ascencio, A. F.G, (2007). Fundamentos da programação de computadores. Pearson
Prentice Hall 2ª edição.
● Backes, A. (2013). Linguagem C: Completa e Descomplicada. Campus. Elsevier 1ª
edição.
● Baviskar, D.P. (2012). Fundamentals of programming languages. Technical
Publication Pune 2ª edição.
● Cormen, T. H…[et al.] (2002). Algoritmos: Teoria e Prática. Rio de Janeiro.
Elsevier 2ª edição.
● Damas, L. (1999). Linguagem C. Rio de Janeiro. FCA 10ª edição.
● Damas, L. (2001). Linguagem C. Lisboa. FCA.
● Damas, L. (2014). Linguagem C. Lisboa. FCA 24ª edição.
● Dale, N. (s/d). Programming and PROB solving using C. ISRD. McGraw-Hill
education.
● Gerard, O. (2012). A brief history of computing. London, Springer 2 ª edição.
● Guerreiro, P. (2006). Elementos de programação com C. FCA.
● Farrell, J. (2012). Programming Logic and design, Comprehensive. Amazon 8ª
edição.
● Fenwich, J. B. (s/d). Programming Languages & paradigms. Amazon 1ª edição.
● Forbellone, A. L. V. (2005). Lógica de programação: a construção de algoritmos e
estruturas de dados. Pearson Prentice Hall.
● Hanly, J. R., Koffman, E. B. (2009). Problem solving and program design in C.
Pearson Education, Inc.
● Holzner, S. (1991). C Programming. Brady.
● Jackson, M. A. (1975). Principles of Program Design. Academic Press, Inc.
Orlando, FL, USA.
● Manzano, J. A. N. G., Oliveira, J, F. (2016). Algoritmos – lógica para
desenvolvimento de programação de computadores. Érica 28ª edição
● Matos, J.A. (2009). Dicionário de Informática e Novas tecnologias. Lisboa.
Disponível em: http://www.fnac.pt/Dicionario-de-Informatica-e-Novas-
Tecnologias-Jose-A-de-Matos/a81059
● Michell, J. C. (2003). Concepts in programming Languages. Cambridge.
Tutoriais e apostilas
1. http://archive.oreilly.com/pub/a/oreilly//news/languageposter_0504.html
2. http://www.softpanorama.org/History/lang_history.shtml#General
3. http://www.ime.usp.br/~kunio/devcpp/devcppintro.pdf
4. http://www.univasf.edu.br/~leonardo.campos/Arquivos/Disciplinas/Alg_Prog_I_2007_
1/Aula_02.pdf
5. http://dcm.ffclrp.usp.br/~augusto/teaching/ici/Estruturas-de-Decisao.pdf
6. http://wurthmann.blogspot.com/2013/03/depuracao-debugger-no-dev-c.html
7. http://www.esj.eti.br/Apostilas/DicasDeDepuracaoDeCodigoUtilizandoDEVCPP_V10.
pdf
8. http://wiki.icmc.usp.br/images/e/e3/Manual_Dev_C.pdf
9. http://www.urisan.tche.br/~janob/Cap_1.html
10. http://pt.scribd.com/doc/27760045/Teste-de-Inf-Basica
11. http://www.proprofs.com/quiz-school/story.php?title=teste-diagnostico-tic
12. Programming: Grade in Industrial Technology Engineering. Creative Commons. On:
http://ocw.uc3m.es/ingenieria-informatica/programming-in-c-language-
2013/IntroductiontoDevCIDE.pdf.