iaed tagus, 2009/2010 introdução à programação em c (i)
TRANSCRIPT
![Page 1: IAED Tagus, 2009/2010 Introdução à Programação em C (I)](https://reader036.vdocuments.net/reader036/viewer/2022081602/552fc130497959413d8d4eaa/html5/thumbnails/1.jpg)
IAED Tagus, 2009/2010
Introdução à Programação em C (I)
![Page 2: IAED Tagus, 2009/2010 Introdução à Programação em C (I)](https://reader036.vdocuments.net/reader036/viewer/2022081602/552fc130497959413d8d4eaa/html5/thumbnails/2.jpg)
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)](https://reader036.vdocuments.net/reader036/viewer/2022081602/552fc130497959413d8d4eaa/html5/thumbnails/3.jpg)
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)](https://reader036.vdocuments.net/reader036/viewer/2022081602/552fc130497959413d8d4eaa/html5/thumbnails/4.jpg)
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)](https://reader036.vdocuments.net/reader036/viewer/2022081602/552fc130497959413d8d4eaa/html5/thumbnails/5.jpg)
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)](https://reader036.vdocuments.net/reader036/viewer/2022081602/552fc130497959413d8d4eaa/html5/thumbnails/6.jpg)
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)](https://reader036.vdocuments.net/reader036/viewer/2022081602/552fc130497959413d8d4eaa/html5/thumbnails/7.jpg)
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)](https://reader036.vdocuments.net/reader036/viewer/2022081602/552fc130497959413d8d4eaa/html5/thumbnails/8.jpg)
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)](https://reader036.vdocuments.net/reader036/viewer/2022081602/552fc130497959413d8d4eaa/html5/thumbnails/9.jpg)
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)](https://reader036.vdocuments.net/reader036/viewer/2022081602/552fc130497959413d8d4eaa/html5/thumbnails/10.jpg)
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)](https://reader036.vdocuments.net/reader036/viewer/2022081602/552fc130497959413d8d4eaa/html5/thumbnails/11.jpg)
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)](https://reader036.vdocuments.net/reader036/viewer/2022081602/552fc130497959413d8d4eaa/html5/thumbnails/12.jpg)
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)](https://reader036.vdocuments.net/reader036/viewer/2022081602/552fc130497959413d8d4eaa/html5/thumbnails/13.jpg)
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)](https://reader036.vdocuments.net/reader036/viewer/2022081602/552fc130497959413d8d4eaa/html5/thumbnails/14.jpg)
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)](https://reader036.vdocuments.net/reader036/viewer/2022081602/552fc130497959413d8d4eaa/html5/thumbnails/15.jpg)
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)](https://reader036.vdocuments.net/reader036/viewer/2022081602/552fc130497959413d8d4eaa/html5/thumbnails/16.jpg)
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)](https://reader036.vdocuments.net/reader036/viewer/2022081602/552fc130497959413d8d4eaa/html5/thumbnails/17.jpg)
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)](https://reader036.vdocuments.net/reader036/viewer/2022081602/552fc130497959413d8d4eaa/html5/thumbnails/18.jpg)
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)](https://reader036.vdocuments.net/reader036/viewer/2022081602/552fc130497959413d8d4eaa/html5/thumbnails/19.jpg)
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)](https://reader036.vdocuments.net/reader036/viewer/2022081602/552fc130497959413d8d4eaa/html5/thumbnails/20.jpg)
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)](https://reader036.vdocuments.net/reader036/viewer/2022081602/552fc130497959413d8d4eaa/html5/thumbnails/21.jpg)
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)](https://reader036.vdocuments.net/reader036/viewer/2022081602/552fc130497959413d8d4eaa/html5/thumbnails/22.jpg)
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)](https://reader036.vdocuments.net/reader036/viewer/2022081602/552fc130497959413d8d4eaa/html5/thumbnails/23.jpg)
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)](https://reader036.vdocuments.net/reader036/viewer/2022081602/552fc130497959413d8d4eaa/html5/thumbnails/24.jpg)
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)](https://reader036.vdocuments.net/reader036/viewer/2022081602/552fc130497959413d8d4eaa/html5/thumbnails/25.jpg)
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)](https://reader036.vdocuments.net/reader036/viewer/2022081602/552fc130497959413d8d4eaa/html5/thumbnails/26.jpg)
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)](https://reader036.vdocuments.net/reader036/viewer/2022081602/552fc130497959413d8d4eaa/html5/thumbnails/27.jpg)
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)](https://reader036.vdocuments.net/reader036/viewer/2022081602/552fc130497959413d8d4eaa/html5/thumbnails/28.jpg)
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)](https://reader036.vdocuments.net/reader036/viewer/2022081602/552fc130497959413d8d4eaa/html5/thumbnails/29.jpg)
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)](https://reader036.vdocuments.net/reader036/viewer/2022081602/552fc130497959413d8d4eaa/html5/thumbnails/30.jpg)
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)](https://reader036.vdocuments.net/reader036/viewer/2022081602/552fc130497959413d8d4eaa/html5/thumbnails/31.jpg)
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)](https://reader036.vdocuments.net/reader036/viewer/2022081602/552fc130497959413d8d4eaa/html5/thumbnails/32.jpg)
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)](https://reader036.vdocuments.net/reader036/viewer/2022081602/552fc130497959413d8d4eaa/html5/thumbnails/33.jpg)
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)](https://reader036.vdocuments.net/reader036/viewer/2022081602/552fc130497959413d8d4eaa/html5/thumbnails/34.jpg)
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)](https://reader036.vdocuments.net/reader036/viewer/2022081602/552fc130497959413d8d4eaa/html5/thumbnails/35.jpg)
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)](https://reader036.vdocuments.net/reader036/viewer/2022081602/552fc130497959413d8d4eaa/html5/thumbnails/36.jpg)
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