IAED Tagus, 2009/2010 Introdução à Programação em C (I)
Transcript of IAED Tagus, 2009/2010 Introdução à Programação em C (I)
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