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
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
LogProg Aula 3 3
Computador
● Máquina programável
– Projetada para executar operações lógicas ou aritméticas sequencialmente
● Por computador, lembrar de
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
Linguagem C
ProgC Aula 1
Linguagem C
● Flexibilidade
● Portabilidade
● Linguagem de alto nível
● Base de C++
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
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 0000C383 FA027706 B8010000 00C353BB 01000000 B9010000 008D0419 83FA0376 078BD98B C84AEBF1 5BC3
ProgC Aula 1
Linguagem de baixo nível
Examplo 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
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_language
http://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
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
Processo de Compilação
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);
}
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()
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
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;
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
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
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 */
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
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
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)?
Tipo ponto flutuante (float)
● Declaração
float 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);
}
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);
}
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. 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;
}
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