programação c aula 1 - wiki.sj.ifsc.edu.br · progc aula 1 linguagem de baixo nível examplo de...
TRANSCRIPT
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
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
LogProg Aula 3 3
Computador
● Máquina programável– Projetada para executar operações lógicas ou
aritméticas sequencialmente
● Por computador, lembrar de
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
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
ProgC Aula 1
Linguagem C
ProgC Aula 1
Linguagem C
● Flexibilidade● Portabilidade● Linguagem de alto nível● Base de C++
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
ProgC Aula 1
Programação
● Definir um conjunto de instruções a serem seguidas
● Algoritmo: “receita de bolo”● Nos primórdios, só em Assembly
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
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
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)
ProgC Aula 1
Programação
● Como aprender?– Escrevendo programas e testando!– Mas sem deixar de conhecer a teoria
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
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
ProgC Aula 1
Processo de Compilação
ProgC Aula 1
ProgC Aula 1
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);}
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 {
}
ProgC Aula 1
Função main()
● Primeira função executada em um programa● Deve retornar um inteiro
int main()
ProgC Aula 1
Programa clássico Hello World
#include <stdio.h>
int main(){ printf("Hello World!\n"); return(0);}
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
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);}
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
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...
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 */
ProgC Aula 1
Tipo inteiro (int)
● Tamanho depende da plataforma/compilador● Se 16 bits, vai de 32768 até 32767● Limites definidos em <limits.h>
ProgC Aula 1
Atribuição de valor
● Em inglês, assignment
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;
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
ProgC Aula 1
Exercício
● Calcular e apresentar na tela o resultado de (3 + 7) * 2
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)?
ProgC Aula 1
Tipo ponto flutuante (float)
● Declaraçãofloat media; // media das notas
● Código de formato (printf): %f
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);}
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);}
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);}
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);}
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;}
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