77
© M@nso 2003 Introdução à programação Computadores e programação I Linguagens de programa Linguagens de programa ç ç ão ão Introdução ao C

Linguagens de programação - DEI/DEE - Intra Web Serverorion.ipt.pt/~aulasi/ip/07-Introducao_C/aula7-intro_c(2006).pdf · Execução de programas ... Notação corrente

  • Upload
    lammien

  • View
    216

  • Download
    0

Embed Size (px)

Citation preview

© M@nso 2003

Introdução à programação Computadores e programação I

Linguagens de programaLinguagens de programaççãoão

Introdução ao C

Introdução à programação Computadores e programação I

© M@nso 2004

SumSumááriorio

Execução de programasinterpretadores, compiladores

LinguagemManipulação de informação

Variáveistipos de dados

Operadoresaritméticos, lógicos

Leitura e escritaentrada e saída de dados

Selecção de instruçõesInstrução ifInstrução Switch

Erros em programação

Introdução à programação Computadores e programação I

© M@nso 2004

InterpretaInterpretaçção de Programasão de Programas

Basic, Java, Portugol

interpretadorinterpretadorPrograma que converte as instruções da linguagem de alto nível em instruções máquina e as executa.

Programa que Programa que converte as converte as instruinstruçções da ões da linguagem de linguagem de alto nalto níível em vel em instruinstruçções ões mmááquina e as quina e as executa.executa.

Introdução à programação Computadores e programação I

© M@nso 2004

CompilaCompilaçção de programasão de programas

C,C++, Pascal

Compilador (compiler)Compilador (compiler)

Programa que converte as instruções da linguagem de alto nível em instruções máquina formando um programa objecto

Programa que Programa que converte as converte as instruinstruçções da ões da linguagem de alto linguagem de alto nníível em instruvel em instruçções ões mmááquina formando quina formando um programa objectoum programa objecto

Ligador (linker)Ligador (linker)

Programa que reúne todos os programas objecto e faz um programa executável

Programa que rePrograma que reúúne ne todos os programas todos os programas objecto e faz um objecto e faz um programa executprograma executáávelvel

ProgramasProgramas

Executados pelo sistema operativo

Executados pelo Executados pelo sistema operativosistema operativo

© M@nso 2003

Introdução à programação Computadores e programação I

IntroduIntroduçção ão àà linguagem Clinguagem C

Introdução à programação Computadores e programação I

© M@nso 2004

Porquê C++Porquê C++

É a base de linguagens de programação modernasÉ um investimento

Linguagem estandardizadaMuitos programas escritos em C / C++

È uma linguagem genéricaServe para vários fins

É disciplinadoraProgramar com método

É eficienteExistem bons compiladores

Introdução à programação Computadores e programação I

© M@nso 2004

OlaOla mundomundo

#include#include <<stdio.hstdio.h>>Biblioteca de funções de entrada e saida de dados

intint main(intmain(int argcargc, , char*char* argv[argv[])])FunFunçção principalão principal

{ }{ }DefiniDefiniçção de um bloco de instruão de um bloco de instruççõesões

printf(printf(""olaola mundo");mundo");escreverescrever

returnreturn 0;0;Retorno do programaRetorno do programa

Olá mundoOlá mundo

#include <stdio.h>int main(int argc, char* argv[]){

printf("ola mundo");return 0;

}

#include#include <<stdio.hstdio.h>>intint main(intmain(int argcargc, , char*char* argv[argv[])]){{

printf(printf(""olaola mundo")mundo");;returnreturn 00;;

}}

Introdução à programação Computadores e programação I

© M@nso 2004

Algoritmos computacionaisAlgoritmos computacionais

• Acções de um algoritmo computacionalManipular dados

Receber dadosGuardar dadosImprimir dados

Executar instruçõesFazer operações aritméticasFazer operações lógicasEscolha entre várias instruções.Repetir um conjunto de instruções

Introdução à programação Computadores e programação I

© M@nso 2004

Tipos de dados em CTipos de dados em C

SimplesNuméricos

inteirosreais

CaracterLógico

CompostosMatrizesEstruturasUniões

D0 variável

11100 11100

D0 variável lógico

VERDADEIRO0100 0001

D0 variável caracter

A0100 0001Variáveis

Um nomeUm TipoUm só valor

A0 inteiro

50 000100 0001 0100 0001

Nome da variável

C Real

-3,14156100 0001 100 0001

Nome da variável

0100 0001 0100 0001

Introdução à programação Computadores e programação I

© M@nso 2004

DeclaraDeclaraçção de varião de variááveisveisTipo_de_dado nome_da_variável;Tipo_de_dado nome_da_variável = valor_inicial;

• Tipo_de_dado nome_da_variável1, nome_da_variável2, . . .;

NOTANOTA

A declaração das variáveis deve ser feita antes da sua utilizaçãoA declaração das variáveis deve ser feita antes da sua utilização

ExemplosExemplosint soma;float saldo = 0.0;doule x, y, z;

intint somasoma;;floatfloat saldosaldo = = 0.00.0;;douledoule x, y, zx, y, z;;

Introdução à programação Computadores e programação I

© M@nso 2004

Regras dos nomes de variRegras dos nomes de variááveisveisPode ser constituído por letras do alfabeto por dígitos e pelo caracter _ (underscore)O primeiro caracter não pode ser um dígitoAs letras maiúsculas e minúsculas representam caracteres diferentesNão pode ter o nome de uma palavra reservado da linguagem Deve ser descritivo daquilo que armazena

Caso tenha mais que uma palavra utilizar o caracter _ para unir as palavras ou capitular as iniciais

Não é aconselhado A utilização de caracteres acentuadosComeçar por _Ter apenas letras maiúsculas

Introdução à programação Computadores e programação I

© M@nso 2004

Palavras reservadas do CPalavras reservadas do C

Introdução à programação Computadores e programação I

© M@nso 2004

AtribuiAtribuiçção de Valores ão de Valores –– operador =operador =

NOTANOTA

O operado = é o operador de atribuição e significa que a variável passa a ter um novo valor (<- no portugol)

O operador == (igual) é o operador de comparação e devolve verdadeiro ou falso ( = no portugol)

O operado = é o operador de atribuição e significa que a variável passa a ter um novo valor (<- no portugol)

O operador == (igual) é o operador de comparação e devolve verdadeiro ou falso ( = no portugol)

ExemplosExemplos

soma = 10 ;

saldo = soma + 1;

area = lado1 * lado2;

soma soma == 10 ;10 ;

saldo saldo == soma + 1;soma + 1;

areaarea == lado1 * lado2;lado1 * lado2;

variavel = expressão;

Introdução à programação Computadores e programação I

© M@nso 2004

AtribuiAtribuiçção de valoresão de valores

Valores na Base:Decimal

numeração normal00 22 6363 8383

Octal Começam por 0 (zero)

0000 0022 007777 00123123Hexadecimal

Começam por 0x (zero xis)

0x0x00 0x0x22 0x0x3f3f 0x0x5353

atribuição do valor doze a xatribuição do valor doze a x

X = 12;X = 014;X = 0xC;

X = 12;X = 12;X = 014;X = 014;X = 0xC;X = 0xC;

Introdução à programação Computadores e programação I

© M@nso 2004

Inteiros Inteiros -- intint

Sinalsigned – positivos e negativos

1 bit para representar o sinal

unsigned – apenas números positivos

Tamanhoshort – menor dimensão em bytes

2 bytes

long – maior dimensão em bytes4 bytes

Exemplosunsigned short int x;signed short int y;unsigned long int total;long int votos;int nota;

NOTANOTApor defeito os inteiros são:

•signed•16 bits

•short•32 bits

•long

por defeito os inteiros são:

•signed•16 bits

•short•32 bits

•long

Introdução à programação Computadores e programação I

© M@nso 2004

Alcance dos inteirosAlcance dos inteiros

Introdução à programação Computadores e programação I

© M@nso 2004

exemplosexemplos

Nota final da disciplina de IPunsigned short int nota;unsigned short nota;

Soma das notas das disciplinas de uma alunounsigned short int somaNotas;unsigned short somaNotas;

Número de segundos de vida de uma pessoaunsigned long int numMinutos;unsigned long numMinutos;

Diferença entre o número de segundos de duas pessoassigned long difSegundos;long difsegundos;

Diferença entre o número de anos de duas pessoassigned short int difAnos;short difAnos;

Introdução à programação Computadores e programação I

© M@nso 2004

NNúúmeros Reaismeros Reais

Tipofloatdouble

Representação Base e Mantissa

notaçãoNotação corrente

1.23 .23 0.23 1. 1.0

Notação científica

1.2E10 1.23e-15

Modificadoreslong

ExemploExemplofloat raio = .50;long double taxa = 5E-2 ;floatfloat raio = .50;raio = .50;longlong doubledouble taxa = 5Etaxa = 5E--2 ;2 ;

base mantissa

102.8NOTANOTA

Os números armazenados em virgula flutuante podem comportar um erro de arredondamento resultante da sua representação

Os números armazenados em virgula flutuante podem comportar um erro de arredondamento resultante da sua representação

Introdução à programação Computadores e programação I

© M@nso 2004

Erro nos NErro nos Núúmeros Reaismeros Reais

NOTANOTA

Os números armazenados em virgula flutuante podem comportar um erro de arredondamento resultante da sua representação

Os números armazenados em virgula flutuante podem comportar um erro de arredondamento resultante da sua representação

Introdução à programação Computadores e programação I

© M@nso 2004

Caracteres (Caracteres (charchar))Ocupam um byte

256 caracteres disponíveis

Representados por um númeroTabela ASCII

AtribuiçãoUtilização do caracter plica (‘)

charchar sexo = sexo = ‘‘mm’’;;charchar enterenter ==‘‘\\nn’’

Utilização directa do código ASCIIcharchar letra = 98; letra = 98;

Modificadoressignedunsigned

Caracter 0xff ASCII\0xffBackspace\bCaracter “\”Caracter ‘\’Caracter \\\

Horizontal tabulation

\tVertical tabulation\vCarriage return\rNew line\nSinal sonoro\a

Caracteres especiais

Introdução à programação Computadores e programação I

© M@nso 2004

Tabela ASCIITabela ASCII

ExemploExemplo

char sexo;

Sexo = ‘M’;

Sexo = 77;

charchar sexo;sexo;

Sexo = Sexo = ‘‘MM’’;;

Sexo = 77;Sexo = 77;

Introdução à programação Computadores e programação I

© M@nso 2004

DefiniDefiniçção de tipos ão de tipos -- EnumeraEnumeraççõesões

enum semana{ segunda=2, terca=3,quarta=4, quinta=5,sexta=6, sabado=7,domingo=8 };

segu

nda

terç

a

quar

ta

quin

ta

sext

a

saba

do

dom

ingo

-3 -2 -1 0 1 2 3 4 5 6 7 8 9 10

Nome

Valor

Definição de nomes para valoresCores , Dias da semana , Meses, etc.

ExemploExemplo

enum semana teoricaIP, praticaIP;teoricaIP = segunda;praticaIP = teoricaIP +1 ;

enum semana teoricaIPteoricaIP, , praticaIPpraticaIP;;teoricaIPteoricaIP = segunda;= segunda;praticaIPpraticaIP = = teoricaIPteoricaIP +1 ;+1 ;

Introdução à programação Computadores e programação I

© M@nso 2004

DefiniDefiniçção de tipos ão de tipos -- EnumeraEnumeraççõesões

enum novo_tipo {nome_1=valor_1, nome_2, . . .,nome_n};novo_tipo nome_variavel = nome_x;

enum novo_tipo {nome_1=valor_1, nome_2, . . .,nome_n};novo_tipo nome_variavel = nome_x;

enum logica {falso, verdadeiro };enum logica condicao=verdadeiro;

NOTASNOTAS

•Quando omitimos o valor a enumeração toma o valor da anterior mais uma unidade.• Por defeito começam em zero

•Quando omitimos o valor a enumeração toma o valor da anterior mais uma unidade.• Por defeito começam em zero

enum Cores {verde= 0 , amarelo = 1, vermelho =2 };enum Cores semaforo = verde;

Introdução à programação Computadores e programação I

© M@nso 2004

Valores lValores lóógicos (gicos (boolbool))

Dois valores definidosfalse (valor zero)true (um ou qualquer outro valor)

VE

RD

AD

EIR

O

VE

RD

AD

EIR

O

VE

RD

AD

EIR

O

FALS

O

VE

RD

AD

EIR

O

VE

RD

AD

EIR

O

VE

RD

AD

EIR

O

VE

RD

AD

EIR

O

VE

RD

AD

EIR

O

VE

RD

AD

EIR

O

VE

RD

AD

EIR

O

VE

RD

AD

EIR

O

-3 -2 -1 0 1 2 3 4 5 6 7 8

Nome

Valor

ExemploExemplo

bool aprovado, trabEstudante;aprovador = true;trabEstudante = false;

boolbool aprovado, aprovado, trabEstudantetrabEstudante;;aprovador = aprovador = truetrue;;trabEstudantetrabEstudante = = falsefalse;;

Introdução à programação Computadores e programação I

© M@nso 2004

DefiniDefiniçção de tipos ão de tipos -- TypedefTypedef

Definição de nomes para tipos

typedef tipo_de_dado novo_nome_do_tipo ;

Exemplostypedef unsigned long int int32;

definição de um novo tipo chamado int32

int32 somatorio;definicao de uma variável do tipo int32

Introdução à programação Computadores e programação I

© M@nso 2004

Tipos de dados do c++ Tipos de dados do c++ BuilderBuilder

3.37 10^-4932 < |X| < 1.18 10^493280long double

2.23 10^-308 < |X| < 1.79 10^30864double

1.18 10^-38 < |X| < 3.40 10^3832float

2,147,483,647-2,14748364832long

2,147,483,647-2,14748364832enum

4,294,967,295032unsigned long

2,147,483,647-2,14748364832int

4,294,967,295032unsigned int

32,767-32,76816short int

127-1288char

25508unsigned char

MáximoMínimotamanho(bits)tipo

Introdução à programação Computadores e programação I

© M@nso 2004

ExercExercíícoscos

Defina variáveis em C para manipularA média das notas de um ano lectivoO salário de um trabalhadorO número de alunos de um paísO saldo de uma conta bancáriaNúmero de dias entre duas datasO sexo de um alunoFactor rhesus do sangue (+ e -)A situação de uma aluno relativo à aprovaçãoA situação de uma aluno relativo á matrícula.

© M@nso 2003

Introdução à programação Computadores e programação I

Entrada e saEntrada e saíída de dadosda de dados

Introdução à programação Computadores e programação I

© M@nso 2004

Entrada e Entrada e saidasaida de dadosde dados

scanfEntrada de dados pelo teclado

printfSaída de dado para a consola

scanf(“string de formato”, &&variavel , &&variavel ,…);scanf(“%f", &&altura);scanf(“%d", &&idade);scanf(“%f %d", &&altura, &&idade);

printf(“string de formato”, variavel , variavel ,…);printf(“ a altura é %f :", altura);printf(“ a idade é %d :", idade);printf(“\n altura: %f idade :%d \n", altura, idade);

Introdução à programação Computadores e programação I

© M@nso 2004

Formato de dados (I/O)Formato de dados (I/O)c c

caractercaracters s

cadeia de caracterescadeia de caracteresd d

inteirointeirof f

real no formato numreal no formato numééricoricoe e

real no formato cientificoreal no formato cientifico

u u sem sinal sem sinal

l l grandegrande

h h pequenopequeno

o o octaloctal

x x HexadecimalHexadecimal

%c Caracter char%s cadeias de caracteres char[]

%d numero decimal int%hd numero decimal pequeno (short) short int%ld numero decimal grande (long) long int%u numero decimal sem sinal unsigned int%hd numero decimal sem sinal pequeno unsigned short int%ld numero decimal grande sem sinal unsigned long int%o numero decimal em octal int%x numero decimal em hexadecimal int

%e numero real no formato cientifico ( 1.2e45) float%le numero real no formato cientifico grande (long) double%f numero real no formato numérico float%lf numero real double

Introdução à programação Computadores e programação I

© M@nso 2004

Programa gentilPrograma gentil

ExemploExemplo#include <stdio.h>int main(int argc, char* argv[]){

int idade;printf(“qual a sua idade:”);scanf(“ %d ” , &idade);printf(“parabens, voce tem %d anos“, idade);

}

#include#include <<stdio.hstdio.h>>intint main(intmain(int argcargc, , char*char* argv[argv[])]){{

intint idade;idade;printf(printf(““qualqual a sua idade:a sua idade:””););scanf(scanf(““ %d%d ”” , , &idade&idade););printf(printf(““parabensparabens, , vocevoce tem tem %d%d anosanos““, , idadeidade););

}}

Introdução à programação Computadores e programação I

© M@nso 2004

Ficheiros geradosFicheiros gerados

Introdução à programação Computadores e programação I

© M@nso 2004

Algoritmos computacionaisAlgoritmos computacionais

• Acções de um algoritmo computacionalManipular dados

Receber dadosGuardar dadosImprimir dados

Executar instruçõesFazer operações aritméticasFazer operações lógicasEscolha entre várias instruções.Repetir um conjunto de instruções

© M@nso 2003

Introdução à programação Computadores e programação I

OperadoresOperadores

Introdução à programação Computadores e programação I

© M@nso 2004

25 205 121

InteirosInteiros

Operadores unários- (sinal)

Operadores binários+ (Soma)- (Subtracção)/ (Divisão inteira)% (Módulo)

NOTANOTAQualquer operação entre inteiros devolve um inteiro

Qualquer operação entre inteiros devolve um inteiro

ExemploExemplo

25 - 2 = 23 -3 - 2 = -525 / 2 = 12 25 + 2 = 2725 % 2 = 1 25 * 2 = 50

25 25 -- 2 = 23 2 = 23 --3 3 -- 2 = 2 = --5525 / 2 = 12 25 + 2 = 2725 / 2 = 12 25 + 2 = 2725 % 2 = 1 25 * 2 = 5025 % 2 = 1 25 * 2 = 50

Introdução à programação Computadores e programação I

© M@nso 2004

Operadores unOperadores unáários rios –– PPóós fixos fixo

Operadores unários++ (incremento)-- (decremento)

NotaNotaX++X = X+1X++X++X = X+1X = X+1

NotaNotaX--X = X-1XX----X = XX = X--11

NotaNotay = x++

y = xx = x+1

y = x++y = x++

y = xy = xx = x+1x = x+1

NotaNotay = x--

y = xx = x-1

y = y = xx----

y = xy = xx = xx = x--11

xx333

yy

expressãoexpressãoy = x++;y = x++;y = x++;

xx444

yy333

Introdução à programação Computadores e programação I

© M@nso 2004

Operadores unOperadores unáários rios –– PrPréé fixofixo

Operadores unários++ (incremento)-- (decremento)

NotaNota++XX = X+1++X++XX = X+1X = X+1

NotaNota--XX = X-1----XXX = XX = X--11

NotaNotay = ++x

x = x+1y = x

y = ++xy = ++x

x = x+1x = x+1y = xy = x

NotaNotay = --x

x = x-1y = x

y = y = ----xx

x = xx = x--11y = xy = x

xx333

yy

expressãoexpressãoy = --x;y = y = ----x;x;

xx222

yy222

Introdução à programação Computadores e programação I

© M@nso 2004

Operadores bit a bitOperadores bit a bit

Manipulam directamente a representação binária dos números

e (and)&

ou (or)|

ou exclusivo (Xor)^

Deslocamento à esquerda<<

Deslocamento à direita>>

11110010OU

10100010E

MultiplicaçãoLógica

MultiplicaçãoLógica Soma

Lógica

SomaLógica

01110010xor

diferençaLógica

diferençaLógica0 0 0 0 0 1 1 0

Introdução à programação Computadores e programação I

© M@nso 2004

Operadores bit a bit Operadores bit a bit -- OROR

xx919191

yy128128128

expressãoexpressão

z = x | y ;z = x | y ;z = x | y ;

xx919191

yy128128128

zz

zz219219219

11110010OU

SomaLógica

SomaLógica

0 1 0 1 1 0 1 1 91

1 0 0 0 0 0 0 0 128|

1 1 0 1 1 0 1 1 219

Introdução à programação Computadores e programação I

© M@nso 2004

Operadores bit a bit Operadores bit a bit -- ANDAND

xx909090

yy202020

expressãoexpressão

z = x & y ;z = x & y ;z = x & y ;

xx909090

yy202020

zz

zz161616

128 64 32 16 8 4 2 1

0 1 0 1 1 0 1 0 90

0 0 0 1 0 1 0 0 20&

0 0 0 1 0 0 0 0 16

10100010E

MultiplicaçãoLógica

MultiplicaçãoLógica

Introdução à programação Computadores e programação I

© M@nso 2004

Operadores bit a bit Operadores bit a bit -- XORXOR

xx909090

yy202020

expressãoexpressão

z = x ^ y ;z = x ^ y ;z = x ^ y ;

xx909090

yy202020

zz

zz787878

0 1 0 1 1 0 1 0 90

0 0 0 1 0 1 0 0 20^

0 1 0 0 1 1 1 0 78

01110010xor

diferençaLógica

diferençaLógica

Introdução à programação Computadores e programação I

© M@nso 2004

Operadores bit a bit Operadores bit a bit -- DeslocamentoDeslocamento

xx202020

yy

expressãoexpressão

y = x << 2;y = x << 2;y = x << 2;

xx202020

yy808080

0 0 0 1 0 1 0 0 20<< 2

0 1 0 1 0 0 0 0 80

•Algoritmo•deslocam-se os bites para a esquerda•os últimos bites perdem-se•introduzem-se zeros no inicio

Introdução à programação Computadores e programação I

© M@nso 2004

Operadores bit a bit Operadores bit a bit -- DeslocamentoDeslocamento

xx202020

yy

expressãoexpressão

y = x >> 2;y = x >> 2;y = x >> 2;

xx202020

yy555

•Algoritmo•deslocam-se os bites para a direita•os primeiros bites perdem-se•introduzem-se zeros no fim

0 0 0 1 0 1 0 0 20>>2

0 0 0 0 0 1 0 1 5

Introdução à programação Computadores e programação I

© M@nso 2004

Operadores sobre reaisOperadores sobre reais

Aritméticosmultiplicaçãodivisãosomasubtracção

C Real

-3,14156100 0001 100 0001

Nome da variável

0100 0001 0100 0001

mantissa expoente

Introdução à programação Computadores e programação I

© M@nso 2004

Operadores compostosOperadores compostos

+= , -=,%=, *=, /=, >>=, <<=, &=, |=, ^=+= , -=,%=, *=, /=, >>=, <<=, &=, |=, ^=

variável Operador= expressãoVariavel = variavel operador expressão

exemplosexemplos

X+= 3;X = X+3;X+= 3;X+= 3;X = X+3;X = X+3;

exemplosexemplos

x/=y;x = x /y;x/x/=y=y;;x = x /y;x = x /y;

exemplosexemplos

X*= 3;X = X*3;X*= 3;X*= 3;X = X*3;X = X*3;

exemplosexemplos

X|= y;X = X | y;X|= y;X|= y;X = X | y;X = X | y;

Introdução à programação Computadores e programação I

© M@nso 2004

Operadores sobre lOperadores sobre lóógicosgicos

RELACIONAISMaior

>

Menor<

Igual==

Maior ou igual>=

Menor ou igual<=

Diferente!=

LÒGICOSConjunção

&&

Disjunção||

Negação!

Introdução à programação Computadores e programação I

© M@nso 2004

AssociatividadeAssociatividade

Associatividadeesquerda=> direita

x + y + z3 + z

7z / x * y

2 * z2

xx222

yy111

zz444

rr111

Associatividade direita => esquerda

r =x + y + z7

r = 7teste = !matriculado

teste = true

x = -zx=-4

matriculadomatriculado

falsefalsefalsetesteteste

falsefalsefalse

Introdução à programação Computadores e programação I

© M@nso 2004

Prioridade dos operadoresPrioridade dos operadores

Operadores Associatividade () esquerda para a direita! - ++ -- direita para a esquerda* / % esquerda para a direita+ - esquerda para a direita<< >> esquerda para a direita< <= > >= esquerda para a direita== != esquerda para a direita& esquerda para a direita^ esquerda para a direita| esquerda para a direita&& esquerda para a direita|| esquerda para a direita?: direita para a esquerda= += -= *= /= %= &= ^= |= <<= >>= direita para a esquerda

Introdução à programação Computadores e programação I

© M@nso 2004

Algoritmos computacionaisAlgoritmos computacionais

• Acções de um algoritmo computacionalManipular dados

Receber dadosGuardar dadosImprimir dados

Executar instruçõesFazer operações aritméticasFazer operações lógicasEscolha entre várias instruções.Repetir um conjunto de instruções

Introdução à programação Computadores e programação I

© M@nso 2004

ExercExercíícioscios

Construa um programa que calcule a área de um rectangulo

Ler lado1Ler lado1

Area := lado1*lado2Area := lado1*lado2

InicioInicio

Programa Área do rectânguloPrograma Área do rectângulo

#include <stdio.h>int main(int argc, char* argv[]){

double Lado1, lado2, area;scanf(“%lf”, &lado1);scanf(“%lf”, &lado2);area = lado1 * lado2;printf(“ area = %lf ”, area);

}

#include#include <<stdio.hstdio.h>>intint main(intmain(int argcargc, , char*char* argv[argv[])]){{

doubledouble Lado1, lado2, Lado1, lado2, areaarea;;scanf(scanf(““%lf%lf””, &lado1);, &lado1);scanf(scanf(““%lf%lf””, &lado2);, &lado2);areaarea = lado1 * lado2;= lado1 * lado2;printf(printf(““ areaarea = %= %lflf ””, , areaarea););

}}

fimfim

Ler lado2Ler lado2

Escrever Area

Introdução à programação Computadores e programação I

© M@nso 2004

ExercExercíícioscios

Construa um programa que leia a nota teórica e a nota prática e imprima a nota final (não arredondada) da disciplina de IP

Nota de IPNota de IP#include <stdio.h>int main(int argc, char* argv[]){

float nTeorica, nPratica, nFinal;printf(“ introduza a nota teórica :“);scanf(“%f”, &nTeorica);printf(“ introduza a nota prática:“);scanf(“%f”, &nPratica);

nFinal = nTeorica * 0.6 + nPratica * 0.4;printf(“A nota final e: %f “,nFinal);

}

#include#include <<stdio.hstdio.h>>intint main(intmain(int argcargc, , char*char* argv[argv[])]){{

floatfloat nTeoricanTeorica, , nPraticanPratica, , nFinalnFinal;;printf(printf(““ introduza a nota teintroduza a nota teóórica :rica :““););scanf(scanf(““%f%f””, , &nTeorica&nTeorica););printf(printf(““ introduza a nota introduza a nota prpráática:tica:““););scanf(scanf(““%f%f””, , &nPratica&nPratica););

nFinalnFinal = = nTeoricanTeorica * 0.6 + * 0.6 + nPraticanPratica * 0.4;* 0.4;printf(printf(““AA nota final e: %f nota final e: %f ““,,nFinalnFinal););

}}

Ler nTeoricaLer nTeorica

nFinal = nTeorica*0.6 +nPratica * 0.4

nFinal = nTeorica*0.6 +nPratica * 0.4

InicioInicio

fimfim

Ler nPraticaLer nPratica

Escrever nFinal

© M@nso 2003

Introdução à programação Computadores e programação I

SelecSelecçção de ão de intruintruççõesões

Introdução à programação Computadores e programação I

© M@nso 2004

SelecSelecçção Simplesão Simples

. . .

Se <condição> então

Instruções

fim_se

. . .

Se <condição> então

Instruções

fim_se

CondiçãoCondição

Bloco deInstruções

Bloco deInstruções

FluxogramaFluxograma

Se x > 0 então

escrever “numero:”

ler numero

fim_se

Se x > 0 então

escrever “numero:”

ler numero

fim_se

ExemploExemplo

V

C++C++

If (condição){

intrução;intrução;intrução;. . .

}

IfIf (condi(condiçção)ão){{

intruintruççãoão;;intruintruççãoão;;intruintruççãoão;;. . .. . .

}}

Um “Bloco de instruções” é limitado por chavetas { }

Um “Bloco de instruções” é limitado por chavetas { }

Linguagem estruturadaLinguagem estruturada

Introdução à programação Computadores e programação I

© M@nso 2004

SelecSelecçção Simples (exemplo)ão Simples (exemplo)

A empresa X faz um desconto de 15% em todas as facturas cujo total ultrapasse 1000 euros. Construa um programa que receba o total da factura e imprima o valor a pagar

A empresa X faz um desconto de 15% em todas as facturas cujo total ultrapasse 1000 euros. Construa um programa que receba o total da factura e imprima o valor a pagar

ExemploExemploInicioInicio

totalFactura>10000

totalFactura>10000

Ler totalFacturaLer totalFactura

totalFactura =totalFactura *0.85

totalFactura =totalFactura *0.85

FimFim

v

totalFactura

Introdução à programação Computadores e programação I

© M@nso 2004

SelecSelecçção Simples (exemplo)ão Simples (exemplo)

Calculo do total da facturaCalculo do total da factura#include <stdio.h>int main(int argc, char* argv[]){

float totalFactura;scanf(“%f”, &totalFactura);if( totalFactura > 1000.0)

{totalFactura*= 0.85;

}

printf(“ %f “, totalFactura);}

#include#include <<stdio.hstdio.h>>intint main(intmain(int argcargc, , char*char* argv[argv[])]){{

float totalFactura;scanf(“%f”, &totalFactura);if( totalFactura > 1000.0)

{totalFactura*= 0.85;

}

printf(“ %f “, totalFactura);}}

NOTANOTASe o bloco tiver apenas uma instrução podem omitir-se as chavetas

Se o bloco tiver apenas uma instrução podem omitir-se as chavetas

Introdução à programação Computadores e programação I

© M@nso 2004

Visibilidade das variVisibilidade das variááveisveis

int main(int argc, char* argv[]){

float totalFactura;sacanf(“ %f “, &totalFactura);if( totalFactura > 1000){

double desconto = totalFactura* 0.85;totalFactura -= desconto;

}printf(“%f”, totalFactura);return 0;

}

int main(int argc, char* argv[]){

float totalFactura;sacanf(“ %f “, &totalFactura);if( totalFactura > 1000){

double desconto = totalFactura* 0.85;totalFactura -= desconto;

}printf(“%f”, totalFactura);return 0;

}

Visibilidade das variáveis:•Desde que são declaradas•Até final do bloco

Introdução à programação Computadores e programação I

© M@nso 2004

SelecSelecçção em Alternativaão em Alternativa

. . .

Se <condição> entao

Instruções

Senao

Instruções

Fim_se

. . .

Se <condição> entao

Instruções

Senao

Instruções

Fim_se

Linguagem estruturadaLinguagem estruturada

CondiçãoCondição

InstruçõesInstruções

FluxogramaFluxograma

Se numero>0 então

escreve “positivo”

Senão

escreve “negativo”

Fim_se

Se numero>0 então

escreve “positivo”

Senão

escreve “negativo”

Fim_se

ExemploExemplo

V

InstruçõesInstruções

F

C++C++

if (condição){

intrução1;. . .

}else{

intrução2;. . .

}

ifif (condi(condiçção)ão){{

intruintruçção1;ão1;. . .. . .

}}elseelse{{

intruintruçção2;ão2;. . .. . .

}}

Introdução à programação Computadores e programação I

© M@nso 2004

SelecSelecçção em Alternativa (exemplo)ão em Alternativa (exemplo)

25 205 12

1

Construa um programa que imprima “Par” ou “Impar” consoante o número introduzido pelo utilizador o é ou não.

Construa um programa que imprima “Par” ou “Impar” consoante o número introduzido pelo utilizador o é ou não.

ExercícioExercício

128 64 32 16 8 4 2 1

0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 1 10 0 0 0 0 0 1 0 20 0 0 0 0 0 1 1 30 0 0 0 0 1 0 0 40 0 0 0 0 1 0 1 50 0 0 0 0 1 1 0 6

0 0 0 0 0 0 0 1&

0 0 0 0 0 0 0 X

Introdução à programação Computadores e programação I

© M@nso 2004

SelecSelecçção Simples (exemplo)ão Simples (exemplo)Programa par ou imparPrograma par ou impar

main(){

int numero;printf( “ numero :”);scanf(“%d”,&numero);if( numero % 2 == 0)

printf(“ O numero é par”);else

printf(“ o número é impar”);

}

main(main()){{

int numero;printf( “ numero :”);scanf(“%d”,&numero);if( numero % 2 == 0)

printf(“ O numero é par”);else

printf(“ o número é impar”);

}}

25 205 12

1

n % 2 = 0n % 2 = 0

VF

Fim

Inicio

Ler nLer n

Impar Par

Introdução à programação Computadores e programação I

© M@nso 2004

SelecSelecçção encadeadaão encadeada

Construa um programa que imprima o maior de três número introduzido pelo utilizador

Construa um programa que imprima o maior de três número introduzido pelo utilizador

ExercícioExercício

V1 > v2 eV1 > v3

V1 > v2 eV1 > v3

Maior=v1Maior=v1

V2>v3V2>v3

Maior=v2Maior=v2Maior=v3Maior=v3

ss

ss

nn

nn

Introdução à programação Computadores e programação I

© M@nso 2004

SelecSelecçção encadeada (exemplo)ão encadeada (exemplo)

Programa maior de trêsPrograma maior de trêsint main(int argc, char* argv[]){

int v1, v2; v3;int maior;scanf(“ %d %d %d “, &v1, &v2, &v3);if( v1 > v2 && v1 > v3)

maior= v1;else

{if( v2 > v3)

maior= v2;else

maior=v3;}printf(“ O maior é %d :”, maior);return 0;

}

intint main(intmain(int argcargc, , char*char* argv[argv[])]){{

intint v1, v2; v3;v1, v2; v3;intint maior;maior;scanf(scanf(““ %d %d %d %d %d %d ““, &v1, &v2, &v3);, &v1, &v2, &v3);ifif(( v1 > v2 && v1 > v3)v1 > v2 && v1 > v3)

maior=maior= v1;v1;elseelse

{{ifif(( v2 > v3)v2 > v3)

maior=maior= v2;v2;elseelse

maior=v3;maior=v3;}}printf(printf(““ O maior O maior éé %d :%d :””, maior);, maior);returnreturn 0;0;

}}

Introdução à programação Computadores e programação I

© M@nso 2004

ExercExercííciocio

Contrua um programa que solicite ao utilizador a letra correspondente ao estado civil (S C D V ) e imprima por extenso o mesmo ou erro no caso de não ser um caractér válido

Contrua um programa que solicite ao utilizador a letra correspondente ao estado civil (S C D V ) e imprima por extenso o mesmo ou erro no caso de não ser um caractér válido

ecivilecivil

InicioInicio

ecivil=secivil=snãonão

Estado = SolteiroEstado = Solteiro

simsim

ecivil=cecivil=c

Estado = casadoEstado = casado

ecivil=decivil=d

Estado =divorciadoEstado =divorciado

simsimnãonão

ecivil=vecivil=v

Estado = viuvoEstado = viuvo

simsim

Estado = ERROEstado = ERRO

naonao

nãonão simsim

estado FimFim

Introdução à programação Computadores e programação I

© M@nso 2004

ExercExercííciocio

Estado civilEstado civilmain(){

char ECivil;scanf(“%c”,&ECivil);if( ECivil ==‘S’)

printf( “ Solteiro”);else

if (ECivil ==‘C’ )printf(“ Casado”);

elseif ( ECivil == ‘D)

printf(“Divorciado”);else

if(ECivil == ‘V’)printf(“Viuvo”);

elseprintf(“ERRO”);

}

main(main()){{

char ECivil;scanf(“%c”,&ECivil);if( ECivil ==‘S’)

printf( “ Solteiro”);else

if (ECivil ==‘C’ )printf(“ Casado”);

elseif ( ECivil == ‘D)

printf(“Divorciado”);else

if(ECivil == ‘V’)printf(“Viuvo”);

elseprintf(“ERRO”);

}}

ecivilecivil

InicioInicio

ecivil=secivil=snãonão

Estado = SolteiroEstado = Solteiro

simsim

ecivil=cecivil=c

Estado = casadoEstado = casado

ecivil=decivil=d

Estado =divorciadoEstado =divorciado

simsimnãonão

ecivil=vecivil=v

Estado = viuvoEstado = viuvo

simsim

Estado = ERROEstado = ERRO

naonao

nãonão simsim

estado FimFim

Introdução à programação Computadores e programação I

© M@nso 2004

SelecSelecçção Mão Múúltiplaltipla

switchswitchswitch ( expressão){

case constante1 :intruções;break;

case constante2 :intruções;break;

. . . case constanten :

intruções;break;

default:intruções;

}

switchswitch ( expressão)( expressão){{

case constante1 :case constante1 :intruintruççõesões;;breakbreak;;

case constante2 :case constante2 :intruintruççõesões;;breakbreak;;

. . . . . . case case constantenconstanten ::

intruintruççõesões;;breakbreak;;

default:default:intruintruççõesões;;

}}

ecivilecivilss cc …… defeitodefeito

estado

ecivilecivil

InicioInicio

Estado = solteiroEstado = solteiro Estado = casadoEstado = casado Estado = ERROEstado = ERRO

FimFim

Estado = …Estado = …

Introdução à programação Computadores e programação I

© M@nso 2004

ExercExercííciocio Estado civilEstado civil#include <iostream.h>main(){

char ECivil;scanf(“%c”,&ECivil);switch ( ECivil){

case ‘S’ :printf( “solteiro”);break;

case ‘C’ :printf(“casado”);break;

case ‘D’ :printf(“Divorciado”);break;

case ‘V’ :printf(“Viuvo”);break;

default :printf(“ERRO”);

}}

#include#include <<iostream.hiostream.h>>main(main(){){

charchar ECivilECivil;;scanf(“%c”,&ECivil);switchswitch ( ( ECivilECivil)){{

case case ‘‘SS’’ ::printf(printf( ““solteirosolteiro””););breakbreak;;

case case ‘‘CC’’ ::printf(printf(““casadocasado””););breakbreak;;

case case ‘‘DD’’ ::printf(printf(““DivorciadoDivorciado””););breakbreak;;

case case ‘‘VV’’ ::printf(printf(““ViuvoViuvo””););breakbreak;;

default :default :printf(printf(““ERROERRO””););

}}}}

Introdução à programação Computadores e programação I

© M@nso 2004

ExercExercííciocio

Estado civilEstado civilswitch ( ECivil)

{. . .

case ‘d’ :case ‘D’ :

printf( “Divorciado”);break;

. . .}

switchswitch ( ( ECivilECivil)){{

. . . . . . case case ‘‘dd’’ ::case case ‘‘DD’’ ::

printf(printf( ““DivorciadoDivorciado””););breakbreak;;

. . .. . .}}

NOTANOTAA escolha termina:

•quando chegar ao fim

•quando encontrar a instrução break

A escolha termina:

•quando chegar ao fim

•quando encontrar a instrução break

Introdução à programação Computadores e programação I

© M@nso 2004

ExercExercíícioscios

Construa um programa que indique se dois números introduzidos pelo utilizador são múltiplos um do outro.Construa um programa que calcule as raízes de uma equação de 2º grau.Altere o programa anterior para calcular as raízes reais e imaginárias.

© M@nso 2003

Introdução à programação Computadores e programação I

ErrosErros

Introdução à programação Computadores e programação I

© M@nso 2004

Erros programasErros programasErros de especificação

Não compreendemos o problema

Erros LógicosO algoritmo está errado

Erros de sintaxe O algoritmo está mal programado

Erros de ligação Bibliotecas referenciadas que não existem

Erros de execução Dados mal introduzidos

Os erros são a base da experiência.

Introdução à programação Computadores e programação I

© M@nso 2004

Erros de especificaErros de especificaççãoão

Construir um programa que as calcule as interacções do spin de um electrão num campo gravitacional desconhecidodado o número de mesões e fermiõespertencentes ao meio.

Introdução à programação Computadores e programação I

© M@nso 2004

Erros LErros Lóógicosgicos

Solteiro casado ou erro ecivilecivil

InicioInicio

ecivil=secivil=s

nãonão

Estado = SolteiroEstado = Solteiro

simsim

nãonão

estado

FimFim

ecivil=cecivil=c

Estado = casadoEstado = casado

simsim

Estado = casadoEstado = casado

Introdução à programação Computadores e programação I

© M@nso 2004

Erros de sintaxe mais comunsErros de sintaxe mais comuns

Escrita ambígua

if(m == 0) if(n == 0)

printf("m e n são zero.“); else

printf("m não é zero.“);

if(m == 0) if(n == 0)

printf("m e n são zero.“); else

printf("m não é zero.“);

Introdução à programação Computadores e programação I

© M@nso 2004

Erros de sintaxe mais comunsErros de sintaxe mais comuns

Esquecer as chavetas

int main(int argc, char* argv[]){

float totalFactura;sacanf(“ %f “, &totalFactura);if( totalFactura > 1000)

double desconto = totalFactura* 0.85;totalFactura -= desconto;

printf(“%f”, totalFactura);return 0;

}

int main(int argc, char* argv[]){

float totalFactura;sacanf(“ %f “, &totalFactura);if( totalFactura > 1000)

double desconto = totalFactura* 0.85;totalFactura -= desconto;

printf(“%f”, totalFactura);return 0;

}

Introdução à programação Computadores e programação I

© M@nso 2004

Erros de sintaxe mais comunsErros de sintaxe mais comuns

Colocar um ; a seguir ao if ou else

int main(int argc, char* argv[]){

float totalFactura;sacanf(“ %f “, &totalFactura);

if( totalFactura > 1000) ;{

double desconto = totalFactura* 0.85;totalFactura -= desconto;

}printf(“%f”, totalFactura);return 0;

}

int main(int argc, char* argv[]){

float totalFactura;sacanf(“ %f “, &totalFactura);

if( totalFactura > 1000) ;{

double desconto = totalFactura* 0.85;totalFactura -= desconto;

}printf(“%f”, totalFactura);return 0;

}

Introdução à programação Computadores e programação I

© M@nso 2004

Erros de sintaxe mais comunsErros de sintaxe mais comuns

Esquecer o break; no ciclo switchEstado civilEstado civil

switch ( ECivil){

case ‘S’ :printf( “solteiro”);

case ‘C’ :printf(“casado”);

case ‘D’ :printf(“Divorciado”);

case ‘V’ :printf(“Viuvo”);

default :printf(“ERRO”);

}

switchswitch ( ( ECivilECivil)){{

case case ‘‘SS’’ ::printf(printf( ““solteirosolteiro””););

case case ‘‘CC’’ ::printf(printf(““casadocasado””););

case case ‘‘DD’’ ::printf(printf(““DivorciadoDivorciado””););

case case ‘‘VV’’ ::printf(printf(““ViuvoViuvo””););

default :default :printf(printf(““ERROERRO””););

}}

© M@nso 2003

Introdução à programação Computadores e programação I

ConclusãoConclusão

Introdução à programação Computadores e programação I

© M@nso 2004

ConstruConstruçção de programasão de programas

Especificação do problema Compreender o problema

Desenvolvimento do algoritmo Especificar as entradas, saídas e uma forma de transformar as entradas em saídas

Tradução do algoritmo para uma linguagem de programação

programar

Tradução do programa para linguagem máquina

Compilar e linkar

Executar o programa testar