programação c aula 1 - wiki.sj.ifsc.edu.br · progc aula 1 sumário programação histórico da...
TRANSCRIPT
![Page 1: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/1.jpg)
Programação CAula 1
Fernando S. Pacheco
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE SANTA CATARINACAMPUS FLORIANÓPOLISDEPARTAMENTO ACADÊMICO DE ELETRÔNICA
![Page 2: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/2.jpg)
ProgC Aula 1
Sumário
● Programação● Histórico da linguagem● Linguagens de baixo e alto nível● Processo de geração do código executável● Estrutura de um programa em C
– Operadores básicos e Variáveis
– Tipos inteiro e float– Função printf
![Page 3: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/3.jpg)
LogProg Aula 3 3
Computador
● Máquina programável– Projetada para executar operações lógicas ou
aritméticas sequencialmente
● Por computador, lembrar de
![Page 4: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/4.jpg)
LogProg Aula 3 4
Computador
● http://www.cptec.inpe.br/supercomputador/● Processadores Opteron 6100 (8 ou 12 núcleos)● Roda Cray Linux● 258 TFlops de pico● Comparação (link)
– Intel Core i7● 107 Gflops● 0,107 TFlops
![Page 5: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/5.jpg)
ProgC Aula 1
Linguagem C
● Década de 70● Dennis Ritchie no Bell Labs
– 1978: livro de Kernighan e Ritchie (K&R)
● Derivada da linguagem B
![Page 6: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/6.jpg)
ProgC Aula 1
Linguagem C
![Page 7: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/7.jpg)
ProgC Aula 1
Linguagem C
● Flexibilidade● Portabilidade● Linguagem de alto nível● Base de C++
![Page 8: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/8.jpg)
ProgC Aula 1
Linguagem C
● Objetivo inicial, na década de 70– Escrever sistemas operacionais
● Usada nas mais variadas aplicações– Especialmente importante em sistemas
embarcados– Aplicações gráficas
![Page 9: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/9.jpg)
ProgC Aula 1
Programação
● Definir um conjunto de instruções a serem seguidas
● Algoritmo: “receita de bolo”● Nos primórdios, só em Assembly
![Page 10: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/10.jpg)
ProgC Aula 1
Linguagem de baixo nível
● De http://en.wikipedia.org/wiki/Lowlevel_language
Exemplo de código de máquina: Uma função em código x86 32 bits para calcular números de Fibonacci:
8B542408 83FA0077 06B80000 0000C383FA027706 B8010000 00C353BB 01000000B9010000 008D0419 83FA0376 078BD98BC84AEBF1 5BC3
![Page 11: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/11.jpg)
ProgC Aula 1
Linguagem de baixo nívelExamplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:
fib: mov edx, [esp+8] cmp edx, 0 ja @f mov eax, 0 ret @@: cmp edx, 2 ja @f mov eax, 1 ret @@: push ebx mov ebx, 1 mov ecx, 1
@@: lea eax, [ebx+ecx] cmp edx, 3 jbe @f mov ebx, ecx mov ecx, eax dec edx jmp @b @@: pop ebx ret
![Page 12: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/12.jpg)
ProgC Aula 1
Programação
● Linguagens de alto nível– Mais fácil de entender (para o programador)– “Tradução” da linguagem feita por um compilador– FORTRAN, COBOL, PASCAL, C, C++, Python,
Java– Exemplo
area = (base * altura) / 2.0; /*area do triangulo*/
– (Ler http://en.wikipedia.org/wiki/Lowlevel_languagehttp://en.wikipedia.org/wiki/Highlevel_programming_language)
![Page 13: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/13.jpg)
ProgC Aula 1
Programação
● Como aprender?– Escrevendo programas e testando!– Mas sem deixar de conhecer a teoria
![Page 14: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/14.jpg)
ProgC Aula 1
Compiladores e IDEs
● Ambientes de desenvolvimento (Integrated Development Environment IDE)– CodeBlocks http://www.codeblocks.org
– Eclipse + CDT (com compilador gcc) http://www.eclipse.org
– DevC++ http://www.bloodshed.net/devcpp.html
– Turbo C++ https://downloads.embarcadero.com/free/c_builder
– Microsoft Visual C++ (Express Edition) http://www.microsoft.com/express/download
![Page 15: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/15.jpg)
ProgC Aula 1
Fluxo do processo
● Estudar o problema e definir uma solução● Escrever códigofonte em um arquivo fonte● Compilar e gerar um arquivo objeto● Ligar (“linkar”) o arquivo objeto com rotinas de
bibliotecas e gerar arquivo executável● Se necessário, voltar ao primeiro passo
![Page 16: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/16.jpg)
ProgC Aula 1
Processo de Compilação
![Page 17: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/17.jpg)
ProgC Aula 1
![Page 18: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/18.jpg)
ProgC Aula 1
![Page 19: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/19.jpg)
ProgC Aula 1
Estrutura de um programa C
● Comentários: muito importante!● Dados: “o que vai ser usado”● Instruções: “como usar”
/**************************************** Cabeçalho / Comentários *****************************************/
//Declaração de dados (globais)
int main(){ //Comandos return(0);}
![Page 20: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/20.jpg)
ProgC Aula 1
Estrutura de um programa C
● Comentários– Entre /* e */
● Em C, linha de código termina com ;● Blocos de código são colocados entre chaves {
}
![Page 21: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/21.jpg)
ProgC Aula 1
Função main()
● Primeira função executada em um programa● Deve retornar um inteiro
int main()
![Page 22: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/22.jpg)
ProgC Aula 1
Programa clássico Hello World
#include <stdio.h>
int main(){ printf("Hello World!\n"); return(0);}
![Page 23: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/23.jpg)
ProgC Aula 1
Estilo
● Muito importante: COMENTAR o código– Comentar é uma arte que pode ser aprendida
● Programa sem comentários pode se tornar difícil de ler● Mas excesso de comentários também é ruim
● Pelo menos, um cabeçalho● Endentação (facilita leitura para o programador)
– Para o compilador, é irrelevante– Automática nos IDEs– Use o sítio http://indentcode.net
![Page 24: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/24.jpg)
ProgC Aula 1
Operadores básicos
● Multiplicação: *● Divisão e também divisão inteira: /● Adição: +● Subtração: –● Resto após divisão inteira: %
● O que faz o programa seguinte?int main(){ (3 + 7) * 2; return(0);}
![Page 25: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/25.jpg)
ProgC Aula 1
Variáveis
● De forma simples, uma variável é um “pedaço” de memória com um nome
● E o valor dentro desse local pode ser alterado● Vamos ver como “batizar” esse espaço de
memória (dar um nome e definir o tipo)● E como incluir (atribuir) um valor
![Page 26: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/26.jpg)
ProgC Aula 1
Variáveis
● Declaração: nome e tipo (e comentário)int num_dias; /* número de dias de aula */
● C é case sensitive (diferencia maiúsculas de minúsculas)
● O que não vale como nome de variável em C
– Começar com número: 1a_nota
– Usar $: media$final
– Espaço: media final
– Usar operadores (+, , /, ...): media*final
– Palavras reservadas: float, int, for...
![Page 27: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/27.jpg)
ProgC Aula 1
Como comentar
● Na declaração de variáveis– RUIM por não fornecer informação relevante:int num_dias; /* define num_dias como inteiro */
– MELHOR:
int num_dias; /* número de dias de aula */
![Page 28: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/28.jpg)
ProgC Aula 1
Tipo inteiro (int)
● Tamanho depende da plataforma/compilador● Se 16 bits, vai de 32768 até 32767● Limites definidos em <limits.h>
![Page 29: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/29.jpg)
ProgC Aula 1
Atribuição de valor
● Em inglês, assignment
![Page 30: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/30.jpg)
ProgC Aula 1
Atribuição de valor
● Em C, com =● Não confundir com == (para comparação)● Válido
indice = 9;
media = (nota1 + nota2)/2.0;
![Page 31: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/31.jpg)
ProgC Aula 1
Função printf
● Para apresentar informação na tela● Definida em <stdio.h>
– printf(formato, expressao1, expressao2, ...)
● Mais em http://www.cppreference.com/wiki/c/io/printf
![Page 32: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/32.jpg)
ProgC Aula 1
Exercício
● Calcular e apresentar na tela o resultado de (3 + 7) * 2
![Page 33: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/33.jpg)
ProgC Aula 1
Exercício
● Criar três variáveis: x, y e z● Atribuir os valores x=10, y=2 e z=6● Mostrar na tela o resultado das expressões
– a) x*y+z b) x*(y+z) c) x%y – d) x%z e) 8%y f) 9%y– g) x/y h) (xy)*zy
● Cite uma das aplicações das expressões com o % (resto após divisão inteira)?
![Page 34: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/34.jpg)
ProgC Aula 1
Tipo ponto flutuante (float)
● Declaraçãofloat media; // media das notas
● Código de formato (printf): %f
![Page 35: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/35.jpg)
ProgC Aula 1
Exercício (div1.c)
● Qual o resultado do programa seguinte? Está correto? Como corrigir?
#include <stdio.h>
float resposta; // resultado do calculo
int main(){ resposta = 1/3; printf("O resultado eh %f\n", resposta); return(0);}
![Page 36: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/36.jpg)
ProgC Aula 1
Exercício (operacoes.c)
● Qual o valor de var_int e var_flut em cada linha? (Inclua um printf após cada operação)
int var_int;float var_flut;
int main(){ var_flut = 1.0/2.0; var_int = 1/3; var_flut = (1/2) + (1/2); var_flut = 3.0/2.0; var_int = var_flut; return(0);}
![Page 37: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/37.jpg)
ProgC Aula 1
Exercício
● Qual o resultado do programa seguinte? Está correto? Como corrigir?/****************** * div.c * ******************/#include <stdio.h>float result; /* resultado da divisão */int main(){ result = 7.0 / 22.0; printf("O resultado eh %d\n", result); return (0);}
![Page 38: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/38.jpg)
ProgC Aula 1
Exercício
● Qual o resultado do programa seguinte? Está correto? Como corrigir?/****************** * doisedois.c * ******************/#include <stdio.h>int resposta;int main(){ resposta = 2 + 2; printf("O resultado eh %d\n"); return (0);}
![Page 39: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/39.jpg)
ProgC Aula 1
Exercício
● O programa seguinte tem vários erros. Corrijaos./* Programa com erros */#include <Stdio.h>;
int main()( float a, b; a = 3.5; printf(“Valor de a = %d/n”, a); b = 4.0: c = a*a + b; print(“Resultado = &f”, c); returned 0;}
![Page 40: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Sumário Programação Histórico da linguagem Linguagens de baixo e alto nível Processo de geração do código executável](https://reader034.vdocuments.pub/reader034/viewer/2022050918/60057b36c30f7d2278238594/html5/thumbnails/40.jpg)
ProgC Aula 1
Crédito das figuras
● OUALLINE, S. Practical C Programming. 3. ed. O'Reilly, 1997.
● Compiler, assembler, linker and loader: a brief story. Disponível em: http://www.tenouk.com/ModuleW.html