36
IAED Tagus, 2009/2010 Introdução à Programação em C (I)

IAED Tagus, 2009/2010 Introdução à Programação em C (I)

Embed Size (px)

Citation preview

Page 1: IAED Tagus, 2009/2010 Introdução à Programação em C (I)

IAED Tagus, 2009/2010

Introdução à Programação em C (I)

Page 2: IAED Tagus, 2009/2010 Introdução à Programação em C (I)

3 IAED Tagus,2009/2010

Resumo

• Diferenças na Sintaxe entre Scheme e C• Exemplo: Factorial

– Tipos de Dados Básicos– Saltos Condicionais: if-then-else– Valor de retorno de uma função: return

• Exemplo: Conversão de Temperaturas– Definição de variáveis e atribuições – Ciclos utilizando a estrutura de controlo while– Ciclos utilizando a estrutura de controlo for– Definição de constantes usando #define

Page 3: IAED Tagus, 2009/2010 Introdução à Programação em C (I)

4 IAED Tagus,2009/2010

Factorial

• Definição de função para cálculo de factorial• Scheme(define (factorial n) (if (= n 1) 1 (* n (factorial (- n 1)))))

int factorial (int n){ if (n == 1) return 1; else return n*factorial(n-1);}

• C

Page 4: IAED Tagus, 2009/2010 Introdução à Programação em C (I)

5 IAED Tagus,2009/2010

Factorial

• Novidades em C– Linguagem tipificada– Notação infixa– Operador de comparação de igualdade é ==– Operador = é usado para atribuição

int factorial (int n){ if (n == 1) return 1; else return n*factorial(n-1);}

Page 5: IAED Tagus, 2009/2010 Introdução à Programação em C (I)

6 IAED Tagus,2009/2010

Factorial

• Tipo de dados do valor de retorno da função– Precede o nome da função

• Tipos básicos: char, int, long int, double e float;• Tipos complexos: estruturas, uniões, tabelas, ponteiros para

tipos mais simples e funções

int factorial (int n){ if (n == 1) return 1; else return n*factorial(n-1);}

Page 6: IAED Tagus, 2009/2010 Introdução à Programação em C (I)

7 IAED Tagus,2009/2010

Factorial

• Tipo de dados do parâmetro n• Todos os parâmetros são precedidos pelo seu tipo

int factorial (int n){ if (n == 1) return 1; else return n*factorial(n-1);}

Page 7: IAED Tagus, 2009/2010 Introdução à Programação em C (I)

8 IAED Tagus,2009/2010

Factorial

• Sintaxe da estrutura de controlo: if-then-else

if (<condição>)

<instrução1>

else

<instrução2>• Se a condição é verdadeira, executa instrução1• Caso contrário, executa instrução2

int factorial (int n){ if (n == 1) return 1; else return n*factorial(n-1);}

Page 8: IAED Tagus, 2009/2010 Introdução à Programação em C (I)

9 IAED Tagus,2009/2010

Factorial

• Sintaxe da instrução return

return <expressão>;• Termina a execução da função• Resultado da expressão é o valor de retorno da função

int factorial (int n){ if (n == 1) return 1; else return n*factorial(n-1);}

Page 9: IAED Tagus, 2009/2010 Introdução à Programação em C (I)

10 IAED Tagus,2009/2010

Réplica do Z3, considerado o primeiro computador programável

completamente automáticoDeutsches Museum, Munique

Page 10: IAED Tagus, 2009/2010 Introdução à Programação em C (I)

11 IAED Tagus,2009/2010

Conversão de Temperaturas

0 -17

20 -6

40 4

...

260 126

280 137

300 148

• Construir um programa que escreve uma tabela de conversão de temperaturas da escala Fahrenheit para escala Celsius

)32(9

5 FahrenheitCelsius TT

Page 11: IAED Tagus, 2009/2010 Introdução à Programação em C (I)

12 IAED Tagus,2009/2010

Algoritmo

Conversão de Temperaturas

Inicia no limite inferior de temperatura na escala Fahrenheit

Converte temperatura para escala Celsius

Escreve linha da tabela com temperaturas

Aumenta valor de temperatura na escala Fahrenheit

Page 12: IAED Tagus, 2009/2010 Introdução à Programação em C (I)

13 IAED Tagus,2009/2010

Algoritmo

Conversão de Temperaturas

Inicia no limite inferior de temperatura na escala Fahrenheit

Converte temperatura para escala Celsius

Escreve linha da tabela com temperaturas

Aumenta valor de temperatura na escala Fahrenheit

Page 13: IAED Tagus, 2009/2010 Introdução à Programação em C (I)

14 IAED Tagus,2009/2010

Algoritmo

Conversão de Temperaturas

Inicia no limite inferior de temperatura na escala Fahrenheit

Enquanto temperatura não fôr superior ao limite superior

Converte temperatura para escala Celsius

Escreve linha da tabela com temperaturas

Aumenta valor de temperatura na escala Fahrenheit

Page 14: IAED Tagus, 2009/2010 Introdução à Programação em C (I)

15 IAED Tagus,2009/2010

Algoritmo

Conversão de Temperaturas

Inicia no limite inferior de temperatura na escala Fahrenheitfahr = inferior;Enquanto temperatura não fôr superior ao limite superiorwhile (fahr <= superior) {

Converte temperatura para escala Celsiuscelsius = 5 * (fahr-32) / 9;Escreve linha da tabela com temperaturasprintf("%d\t%d\n", fahr, celsius);Aumenta valor de temperatura na escala Fahrenheitfahr = fahr + passo;

}

Page 15: IAED Tagus, 2009/2010 Introdução à Programação em C (I)

16 IAED Tagus,2009/2010

Conversão de Temperaturas

#include <stdio.h>

/* Conversao Fahrenheit-Celsius */

main (){ int fahr, celsius; int inferior, superior, passo;

inferior = 0; superior = 300; passo = 20;

fahr = inferior; while (fahr <= superior) { celsius = 5 * (fahr-32) / 9; printf("%d\t%d\n", fahr, celsius); fahr = fahr + passo; }}

Page 16: IAED Tagus, 2009/2010 Introdução à Programação em C (I)

17 IAED Tagus,2009/2010

Conversão de Temperaturas

#include <stdio.h>

/* Conversao Fahrenheit-Celsius */

main ()

{

int fahr, celsius;

int inferior, superior, passo;

• Comentários• Texto entre /* e */

Page 17: IAED Tagus, 2009/2010 Introdução à Programação em C (I)

18 IAED Tagus,2009/2010

Conversão de Temperaturas

main ()

{

int fahr, celsius;

int inferior, superior, passo;

inferior = 0;

superior = 300;

passo = 20;

• Declaração de variáveis

Page 18: IAED Tagus, 2009/2010 Introdução à Programação em C (I)

19 IAED Tagus,2009/2010

Conversão de Temperaturas

main ()

{

int fahr, celsius;

int inferior, superior, passo;

inferior = 0;

superior = 300;

passo = 20;

• Instruções de atribuição de um valor a uma variável• Sintaxe: <variável> = <expressão>

Page 19: IAED Tagus, 2009/2010 Introdução à Programação em C (I)

20 IAED Tagus,2009/2010

Algoritmo

Conversão de Temperaturas

Inicia no limite inferior de temperatura na escala Fahrenheitfahr = inferior;Enquanto temperatura fôr inferior ao limite superiorwhile (fahr <= superior) {

Converte temperatura para escala Celsiuscelsius = 5 * (fahr-32) / 9;Escreve linha da tabela com temperaturasprintf("%d\t%d\n", fahr, celsius);Aumenta valor de temperatura na escala Fahrenheitfahr = fahr + passo;

}

Page 20: IAED Tagus, 2009/2010 Introdução à Programação em C (I)

21 IAED Tagus,2009/2010

Conversão de Temperaturas

fahr = inferior; while (fahr <= superior) { celsius = 5 * (fahr-32) / 9; printf("%d\t%d\n", fahr, celsius); fahr = fahr + passo;

}

• Ciclo while• Síntaxe: while (<expressao>) <instrução>• Indentação ajuda a perceber estrutura do programa• Erro frequente: while (i >= 0);

i = i-1;

Page 21: IAED Tagus, 2009/2010 Introdução à Programação em C (I)

22 IAED Tagus,2009/2010

Conversão de Temperaturas

fahr = inferior; while (fahr <= superior) { celsius = 5 * (fahr-32) / 9; printf("%d\t%d\n", fahr, celsius); fahr = fahr + passo; }

• Divisão entre inteiros é divisão inteira• Resultado é o quociente da divisão (número inteiro)• Exemplo: 5/9 é 0

Page 22: IAED Tagus, 2009/2010 Introdução à Programação em C (I)

23 IAED Tagus,2009/2010

Conversão de Temperaturas

fahr = inferior; while (fahr <= superior) { celsius = 5 * (fahr-32) / 9; printf("%d\t%d\n", fahr, celsius); fahr = fahr + passo; }

• printf permite efectuar escrita formatada• %d inteiro decimal, \t caracter tabulação• Melhorar formatação:

printf("%3d\t%6d\n", fahr, celsius);• Problema: 0oF são -17,8oC e não -17oC

Page 23: IAED Tagus, 2009/2010 Introdução à Programação em C (I)

24 IAED Tagus,2009/2010

Conversão de Temperaturas

#include <stdio.h>

/* Conversao Fahrenheit-Celsius */

main (){ int fahr, celsius; int inferior, superior, passo;

inferior = 0; superior = 300; passo = 20;

fahr = inferior; while (fahr <= superior) { celsius = 5 * (fahr-32) / 9; printf("%3d\t%6d\n", fahr, celsius); fahr = fahr + passo; }}

Page 24: IAED Tagus, 2009/2010 Introdução à Programação em C (I)

25 IAED Tagus,2009/2010

Conversão de Temperaturas

#include <stdio.h>

/* Conversao Fahrenheit-Celsius */

main (){ float fahr, celsius; int inferior, superior, passo;

inferior = 0; superior = 300; passo = 20;

fahr = inferior; while (fahr <= superior) { celsius = (5.0/9.0) * (fahr-32); printf("%3.0f\t%6.1f\n", fahr, celsius); fahr = fahr + passo; }}

Page 25: IAED Tagus, 2009/2010 Introdução à Programação em C (I)

26 IAED Tagus,2009/2010

Conversão de Temperaturas

#include <stdio.h>

/* Conversao Fahrenheit-Celsius */

main (){ float fahr, celsius; int inferior, superior, passo;

inferior = 0; superior = 300; passo = 20;

fahr = inferior; while (fahr <= superior) { celsius = (5.0/9.0) * (fahr-32); printf("%3.0f\t%6.1f\n", fahr, celsius); fahr = fahr + passo; }}

Page 26: IAED Tagus, 2009/2010 Introdução à Programação em C (I)

27 IAED Tagus,2009/2010

Conversão de Temperaturas

#include <stdio.h>

/* Conversao Fahrenheit-Celsius */

main (){ float fahr, celsius; int inferior, superior, passo;

inferior = 0; superior = 300; passo = 20;

fahr = 0; while (fahr <= 300) { celsius = (5.0/9.0) * (fahr-32); printf("%3.0f\t%6.1f\n", fahr, celsius); fahr = fahr + 20; }}

Page 27: IAED Tagus, 2009/2010 Introdução à Programação em C (I)

28 IAED Tagus,2009/2010

Conversão de Temperaturas

#include <stdio.h>

/* Conversao Fahrenheit-Celsius */

main (){ float fahr, celsius; fahr = 0; while (fahr <= 300) { celsius = (5.0/9.0) * (fahr-32); printf("%3.0f\t%6.1f\n", fahr, celsius); fahr = fahr + 20; }}

• Má prática utilizar valores explícitos• Alternativa: utilização de constantes, com #define

Page 28: IAED Tagus, 2009/2010 Introdução à Programação em C (I)

29 IAED Tagus,2009/2010

Conversão de Temperaturas

#include <stdio.h>

/* Conversao Fahrenheit-Celsius */

#define INFERIOR 0#define SUPERIOR 300#define PASSO 20

main (){ float fahr, celsius; fahr = INFERIOR; while (fahr <= SUPERIOR) { celsius = (5.0/9.0) * (fahr-32); printf("%3.0f\t%6.1f\n", fahr, celsius); fahr = fahr + PASSO; }}

Page 29: IAED Tagus, 2009/2010 Introdução à Programação em C (I)

30 IAED Tagus,2009/2010

Conversão de Temperaturas

while ( ) { celsius = (5.0/9.0) * (fahr-32); printf("%3.0f\t%6.1f\n", fahr, celsius);

}

for ( ; ; )

{

celsius = (5.0/9.0) * (fahr-32);

printf("%3.0f\t%6.1f\n", fahr, celsius);

}

Page 30: IAED Tagus, 2009/2010 Introdução à Programação em C (I)

31 IAED Tagus,2009/2010

Conversão de Temperaturas

fahr = INFERIOR; while ( ) { celsius = (5.0/9.0) * (fahr-32); printf("%3.0f\t%6.1f\n", fahr, celsius);

}

for (fahr = INFERIOR; ; )

{

celsius = (5.0/9.0) * (fahr-32);

printf("%3.0f\t%6.1f\n", fahr, celsius);

}

Page 31: IAED Tagus, 2009/2010 Introdução à Programação em C (I)

32 IAED Tagus,2009/2010

Conversão de Temperaturas

fahr = INFERIOR; while (fahr <= SUPERIOR) { celsius = (5.0/9.0) * (fahr-32); printf("%3.0f\t%6.1f\n", fahr, celsius);

}

for (fahr = INFERIOR; fahr <= SUPERIOR; )

{

celsius = (5.0/9.0) * (fahr-32);

printf("%3.0f\t%6.1f\n", fahr, celsius);

}

Page 32: IAED Tagus, 2009/2010 Introdução à Programação em C (I)

33 IAED Tagus,2009/2010

Conversão de Temperaturas

fahr = INFERIOR; while (fahr <= SUPERIOR) { celsius = (5.0/9.0) * (fahr-32); printf("%3.0f\t%6.1f\n", fahr, celsius); fahr = fahr + PASSO; }

for (fahr = INFERIOR; fahr <= SUPERIOR; fahr = fahr + PASSO)

{

celsius = (5.0/9.0) * (fahr-32);

printf("%3.0f\t%6.1f\n", fahr, celsius);

}

• Inicialização de variáveis: fahr = INFERIOR• Teste: fahr <= SUPERIOR• Incremento: fahr = fahr + PASSO

Page 33: IAED Tagus, 2009/2010 Introdução à Programação em C (I)

34 IAED Tagus,2009/2010

Exercicio para Casa (1)

1 1

2 2

3 6

4 24

...

10 3628800

• Usar a função factorial para construir um programa que escreve uma tabela com os valores do factorial de 1 a 10.

Page 34: IAED Tagus, 2009/2010 Introdução à Programação em C (I)

35 IAED Tagus,2009/2010

Exercicio para Casa (2)

1 1

2 2

3 6

4 24

...

10 3628800

...

...

30 ???

• Aumente o limite do programa anterior para mostrar o valor do factorial de 1 a 30. Observe o resultado.

Page 35: IAED Tagus, 2009/2010 Introdução à Programação em C (I)

36 IAED Tagus,2009/2010

Exercicio para Casa (3)

• Implemente uma nova versão da função factorial, mas não use recursão.

Utilize a estrutura de controlo while.

Page 36: IAED Tagus, 2009/2010 Introdução à Programação em C (I)

37 IAED Tagus,2009/2010

Resumo

• Sintaxe para definição de funções• Definição de variáveis e atribuições• Estruturas de controlo if-then e if-then-else• Ciclos utilizando a estrutura de controlo while• Ciclos utilizando a estrutura de controlo for• Definição de constantes usando #define