Você está na página 1de 26

Linguagens de programação I Universidade Lusófona de Humanidades Tecnologias

Aula prática 1

Sumário:
 Apresentação
 Programa
 Avaliação
 Bibliografia
 Introdução à linguagem C
 História da linguagem
 Conceitos básicos
 Bibliotecas básicas
 Tipos de dados escalares
Exercícios – FICHA 1 DE AVALIAÇÃO

2º Semestre 2006/2007 Sérgio Guerreiro Aula Prática 1


slguerreiro@gmail.com Página 1
Linguagens de programação I Universidade Lusófona de Humanidades Tecnologias

 Apresentação

• Professor das aulaspráticas:


Prof. Sérgio Guerreiro
– Dúvidas aulas enviar para o email: slguerreiro@gmail.com

• Página web da cadeira com acetatos, anúncios,


fichas de avaliação :
http://paginas.ulusofona.pt/p2549/lp1

2º Semestre 2006/2007 Sérgio Guerreiro Aula Prática 1


slguerreiro@gmail.com Página 2
Linguagens de programação I Universidade Lusófona de Humanidades Tecnologias
 Programa

• Introdução C
• Estruturas básicas, tipos escalares
• Operadores
• Instruções de controlo
• Apontadores e vectores
• Acesso à memória
• Visibilidade e longevidade
• Estruturas e uniões
• Funções
• Entradas / Saídas
• Directivas ao pré-processador
• Bibliotecas

2º Semestre 2006/2007 Sérgio Guerreiro Aula Prática 1


slguerreiro@gmail.com Página 3
Linguagens de programação I Universidade Lusófona de Humanidades Tecnologias

 Avaliação I
• Fichas de avaliação durante o semestre - 10%
– Avaliação individual ou em grupos de 2 alunos
– Cada uma das fichas de avaliação serão apresentadas em cada aula
– A resolução da ficha, em código C, tem de ser enviada antes do dia/hora
da aula seguinte para o email: slguerreiro@gmail.com, com o subject:
LPI_NOME1_NOME2_NRALUNO1_NRALUNO2_NRFICHA.
– Em alternativa aceita-se entregas em CD devidamente identificados.
– Se as fichas não forem entregues segundo as regras anteriores consideram-
se não entregues.

• Projecto - 40%
2º Semestre 2006/2007 Sérgio Guerreiro Aula Prática 1
slguerreiro@gmail.com Página 4
Linguagens de programação I Universidade Lusófona de Humanidades Tecnologias

Avaliação II

• As dúvidas que surgirem ao longo do semestre,


enviar sempre por email: slguerreiro@gmail.com

• Não adiar o esclarecimento de dúvidas

2º Semestre 2006/2007 Sérgio Guerreiro Aula Prática 1


slguerreiro@gmail.com Página 5
Linguagens de programação I Universidade Lusófona de Humanidades Tecnologias

 Bibliografia

• Principal
– The C Programming Language -- ANSI C Brian W. C. Kernighan & Dennis
M. Ritchie Prentice Hall, 1988

– Acetatos da cadeira a disponibilizar pelo professor ao longo do semestre na


página web

2º Semestre 2006/2007 Sérgio Guerreiro Aula Prática 1


slguerreiro@gmail.com Página 6
Linguagens de programação I Universidade Lusófona de Humanidades Tecnologias

 Introdução

– Programação imperativa – exemplos: Pascal, C, Basic. Segue o modelo


segundo o qual, tanto o programa como os dados estão armazenados na
memória do computador. Durante a execução do programa, as células de
memória são acedidas, interpretadas e actualizadas. A base da programação
imperativa reside na operação de atribuição através da qual uma variável
recebe o resultado de uma operação. Também na programação imperativa se
recorre a métodos para especificar e controlar a execução de sequências de
instruções.
Exemplo (em linguagem C):

#include <stdio.h>
void escreve_mensagem(){ printf(“Olá mundo!”); }
int main() {
escreve_mensagem();
return 1;
}

2º Semestre 2006/2007 Sérgio Guerreiro Aula Prática 1


slguerreiro@gmail.com Página 7
Linguagens de programação I Universidade Lusófona de Humanidades Tecnologias

 História do ANSI-C

• 1972 – A linguagem C foi desenvolvida, por


Dennis Ritchie, em AT&T Bell Labs
• 1973 – Dennis Ritchie e Ken Thompson
reescrevem, em C, o sistema operativo UNIX
• 1977 – 1ª edição do livro: “the C programming
language”
• 1983 – o American National Standards Institute
(ANSI) nomeia um comité para produzir uma nova
definição, não ambígua e independente de
qualquer arquitectura, para a linguagem C
• 1988 – 2ª edição do livro: “the C programming
language”, usando a definição de ANSI
2º Semestre 2006/2007 Sérgio Guerreiro Aula Prática 1
slguerreiro@gmail.com Página 8
Linguagens de programação I Universidade Lusófona de Humanidades Tecnologias

 Estrutura de um programa

• A estrutura básica de um programa em C:


1. Inclusão de bibliotecas necessárias

2. Função1();
…………
3. FunçãoN();

4. Programa principal
int main(int argc, char* argv[])
{
}

• Várias funções podem ser distribuídas por


vários ficheiros
2º Semestre 2006/2007 Sérgio Guerreiro Aula Prática 1
slguerreiro@gmail.com Página 9
Linguagens de programação I Universidade Lusófona de Humanidades Tecnologias

 Fundamentos de sintaxe
Expressão – conjunto de acções

{ } - expressam agrupamento de expressões


{ - início
} – final
/* */ - comentário (início e fim)

Instrução – unidade independente mais pequena em C

; - terminador de instrução, ou bloco de código

Função – grupo de instruções logicamente


relacionadas. É composta por: tipo de retorno
(output), nome, lista de argumentos (input) e
expressões.
2º Semestre 2006/2007 Sérgio Guerreiro Aula Prática 1
slguerreiro@gmail.com Página 10
Linguagens de programação I Universidade Lusófona de Humanidades Tecnologias
 Palavras Reservadas em C

auto break case char const continue default do

double else enum extern float for goto if

int long register return short signed sizeof static

struct switch typedef union unsigned void volatile while

2º Semestre 2006/2007 Sérgio Guerreiro Aula Prática 1


slguerreiro@gmail.com Página 11
Linguagens de programação I Universidade Lusófona de Humanidades Tecnologias

 Bibliotecas básicas
• Bibliotecas básicas de ANSI C (o C que é compatível com todos os sistemas operativos):
<assert.h> : Diagnostics (diagnóstico de erros internos)
<ctype.h> : Character Class Tests (testes a caracteres)
<errno.h> : Error Codes Reported by (Some) Library Functions (tratamento de erros)
<float.h> : Implementation-defined Floating-Point Limits
<limits.h> : Implementation-defined Limits (limites dos tipos de dados)
<locale.h> : Locale-specific Information (ex: moeda, currency)
<math.h> : Mathematical Functions
<setjmp.h> : Non-local Jumps (recurso de sistema operativo)
<signal.h> : Signals (recurso de Sistema Operativo)
<stdarg.h> : Variable Argument Lists (recurso de Sistema Operativo)
<stddef.h> : Definitions of General Use (uso de funções gerais, ex: representação do NULL)
<stdio.h> : Input and Output
<stdlib.h> : Utility functions
<string.h> : String functions
<time.h> : Time and Date functions
2º Semestre 2006/2007 Sérgio Guerreiro Aula Prática 1
slguerreiro@gmail.com Página 12
Linguagens de programação I Universidade Lusófona de Humanidades Tecnologias

 Código exemplo, do 1º programa em C

#include <stdio.h> /* inclusão de bilioteca */

int main(int argc, char* argv[]) /*inicio programa */


{
printf("\nHello World\n"); /*escrita mensagem */
return(0);
}

2º Semestre 2006/2007 Sérgio Guerreiro Aula Prática 1


slguerreiro@gmail.com Página 13
Linguagens de programação I Universidade Lusófona de Humanidades Tecnologias

 Compilador I

• A compilação, para o programa principal em C, deve ser efectuada usando a linha


de comando de ambiente de desenvolvimento linux, com o seguinte comando:

cc <nome_do_ficheiro>.c
Obtemos assim um ficheiro executável com o mesmo nome de nome_do_ficheiro.

Ou
cc –o teste <nome_do_ficheiro>.c
Obtemos assim um ficheiro executável com o nome teste

• Exemplos de compiladores, de linha de comando, noutros sistemas operativos


(linux, os2, hp-ux, vax, tiger os,....,entre outros):
– cc, gcc, g++, cl ...entre outros

2º Semestre 2006/2007 Sérgio Guerreiro Aula Prática 1


slguerreiro@gmail.com Página 14
Linguagens de programação I Universidade Lusófona de Humanidades Tecnologias

 Compilador II

Para programas mais complexos com diferentes ficheiros:


• Exemplo:
cc main.c teste.c teste2.c

Obtenção de um ficheiro executável a.out, que contem o resultado da compilação


dos 3 ficheiros C + a linkagem entre os 3.

• Vantagens, exemplos:
– Partilha de trabalho em grupo
– Optimização na utilização de Bibliotecas
– Depuração de erros facilitada

2º Semestre 2006/2007 Sérgio Guerreiro Aula Prática 1


slguerreiro@gmail.com Página 15
Linguagens de programação I Universidade Lusófona de Humanidades Tecnologias

 Compilador III
• Compilador cc em linha de comando, exemplo:

2º Semestre 2006/2007 Sérgio Guerreiro Aula Prática 1


slguerreiro@gmail.com Página 16
Linguagens de programação I Universidade Lusófona de Humanidades Tecnologias

 Tipos de dados I

Os tipos de dados permitem definir variáveis a usar no


código.
Os nomes das variáveis são definidos pelo programador
(alguns compiladores limitam os nomes a 32 caracteres).
Não podem assumir nenhum nome reservado
Tipo Descrição
int inteiro
float nº de vírgula flutuante
double nº de vírgula flutuante de precisão dupla
char caracter
2º Semestre 2006/2007 Sérgio Guerreiro Aula Prática 1
slguerreiro@gmail.com Página 17
Linguagens de programação I Universidade Lusófona de Humanidades Tecnologias

 Tipos de dados II - Exemplos


int
int Count;
Count = 5;
float
float Miles;
Miles = 5.6;
double
double Atoms;
Atoms = 2500000;
char
char Letter;
Letter = 'x';
2º Semestre 2006/2007 Sérgio Guerreiro Aula Prática 1
slguerreiro@gmail.com Página 18
Linguagens de programação I Universidade Lusófona de Humanidades Tecnologias

 Tipos de dados III - Modificadores

Alguns tipos de dados podem ser modificados usando: signed, unsigned,


short, and long.

Quando são usados apenas os modificadores, o tipo de dados int é assumido.

Os tipos de dados que admitem modificadores são apenas: int, char, double.

Regras de alocação de memória:


short int <= int <= long int
float <= double <= long double
Exemplo de modificadores:
unsigned short int
long double
signed char
2º Semestre 2006/2007 Sérgio Guerreiro Aula Prática 1
slguerreiro@gmail.com Página 19
Linguagens de programação I Universidade Lusófona de Humanidades Tecnologias

 Tipos de dados IV - limites

Os intervalos apresentados em cima, referenciam valores médios. Podem diferir em Sistemas Operativos
diferentes.
Conhecer os limites de um tipo de dados dinamicamente: sizeof

Exemplo:
/* How big is an int? expect an answer of 4. */

main()
{
printf("%d \n", sizeof(int));
}
2º Semestre 2006/2007 Sérgio Guerreiro Aula Prática 1
slguerreiro@gmail.com Página 20
Linguagens de programação I Universidade Lusófona de Humanidades Tecnologias

Tipos de dados VI – Outros tipos


• void – A palavra reservada void permite criar funções
que não recebem ou devolvem qualquer valor.

• enum – permite definir uma lista de aliases (“atalhos”)


que representam nºsinteiros. Exemplos:
enum week { Mon=1, Tue, Wed, Thu, Fri
Sat, Sun} days;
enum boolean { FALSE = 0, TRUE };
enum days {Jan=31, Feb=28, Mar=31,
Apr=30, May=31, Jun=30,
Jul=31, Aug=31, Sep=30,
Oct=31, Nov=30, Dec=31};
2º Semestre 2006/2007 Sérgio Guerreiro Aula Prática 1
slguerreiro@gmail.com Página 21
Linguagens de programação I Universidade Lusófona de Humanidades Tecnologias

 constantes e variáveis

• Constantes (variáveis que não podem ver o seu


valor alterado ao longo da execução do código):
– const int x= 2; // X= ….; é erro

• Formato de definição de variáveis


– Tipo_de_dados nome_da_variável ;

2º Semestre 2006/2007 Sérgio Guerreiro Aula Prática 1


slguerreiro@gmail.com Página 22
Linguagens de programação I Universidade Lusófona de Humanidades Tecnologias

 Output - função printf – Output para o ecrã

A função printf permite escrever no ecrã do computador: int, integers, floats e strings.
A sintaxe geral é: printf( "format", variables );

Onde:
"format" especifica a conversão entre as variáveis a apresentar e o formato que devem
assumir. Os formatos podem ser definidos das seguintes formas:

%.nd integer (optional n = number of columns; if 0, pad with zeroes)


%m.nf float or double (optional m = number of columns, n = number of decimal places)
%ns string (optional n = number of columns)
%c character \n \t to introduce new line or tab \g ring the bell (``beep'') on the terminal

Exemplos: printf("This text will appear on the screen\n")


int number=42;
printf("The answer is %i\n", number);

2º Semestre 2006/2007 Sérgio Guerreiro Aula Prática 1


slguerreiro@gmail.com Página 23
Linguagens de programação I Universidade Lusófona de Humanidades Tecnologias
Código Exemplo de tipos de dados
#include<stdio.h>
int main(int argc, char* argv[])
{
int inteiro;
float virgula_flutuante1 , virgula_flutuante2;
double dupla_precisao1 , dupla_precisao2;
char caracter;
enum months {Jan=1, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec};
enum months month;

inteiro = 1;
printf("Inteiro = %d\n",inteiro); /* Atribuição com soma */
virgula_flutuante1 = 4.435;
printf("Virgula flutuante = %2.5f\n", virgula_flutuante1 );

dupla_precisao1 = 123756565.83838474;
printf("dupla precisão = %20.20f\n", dupla_precisao1 );

caracter='a';
printf("caractere = %c\n", caracter );

month = Apr;
printf("Mês = %d\n", month);
};

2º Semestre 2006/2007 Sérgio Guerreiro Aula Prática 1


slguerreiro@gmail.com Página 24
Linguagens de programação I Universidade Lusófona de Humanidades Tecnologias
Código Exemplo de tipos de dados, resultado

2º Semestre 2006/2007 Sérgio Guerreiro Aula Prática 1


slguerreiro@gmail.com Página 25
Linguagens de programação I Universidade Lusófona de Humanidades Tecnologias

Dúvidas ?

Usar bibliografia ou referência por internet para tutoriais


online da sintaxe da linguagem C.

Exemplo:
http://www.cs.cf.ac.uk/Dave/C/
http://www.phim.unibe.ch/comp_doc/c_manual/C/cref.html
http://www.imada.sdu.dk/~svalle/courses/dm14-2005/mirror/c/

2º Semestre 2006/2007 Sérgio Guerreiro Aula Prática 1


slguerreiro@gmail.com Página 26