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

Preview:

Citation preview

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

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

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);}

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);}

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);}

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);}

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);}

10 IAED Tagus,2009/2010

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

completamente automáticoDeutsches Museum, Munique

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

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

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

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

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;

}

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; }}

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 */

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

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>

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;

}

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;

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

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

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; }}

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; }}

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; }}

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; }}

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

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; }}

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);

}

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);

}

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);

}

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

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.

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.

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.

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

Recommended