40
Programação C Aula 1 Fernando S. Pacheco INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE SANTA CATARINA CAMPUS FLORIANÓPOLIS DEPARTAMENTO ACADÊMICO DE ELETRÔNICA

Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

  • Upload
    lamnga

  • View
    220

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

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 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

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 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

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 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

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 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

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 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

ProgC ­ Aula 1

Linguagem C

Page 7: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

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 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

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 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

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 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

ProgC ­ Aula 1

Linguagem de baixo nível

● De http://en.wikipedia.org/wiki/Low­level_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 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

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 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

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/Low­level_languagehttp://en.wikipedia.org/wiki/High­level_programming_language)

Page 13: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

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 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

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 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

ProgC ­ Aula 1

Fluxo do processo

● Estudar o problema e definir uma solução● Escrever código­fonte 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 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

ProgC ­ Aula 1

Processo de Compilação

Page 17: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

ProgC ­ Aula 1

Page 18: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

ProgC ­ Aula 1

Page 19: Programação C Aula 1 - wiki.sj.ifsc.edu.br · ProgC Aula 1 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

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 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

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 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

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 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

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 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

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 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

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 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

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 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

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 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

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 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

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 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

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 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

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 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

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 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

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 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

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) (x­y)*z­y

● 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 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

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 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

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 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

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 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

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 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

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 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

ProgC ­ Aula 1

Exercício

● O programa seguinte tem vários erros. Corrija­os./* 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 Linguagem de baixo nível Examplo de linguagem assembly: O mesmo algoritmo, em linguagem assembly x86 com sintaxe MASM:

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