Sistemas Operacionais e
Introdução à
Programação
Introdução à Lógica de
Programação
1
Lógica de Programação
Programação
●
●
Tradução de um algoritmo para uma linguagem de programação
Cada linguagem de programação possui sua sintaxe e construções
#include <stdio.h>
int main(int argc, char ** argv) {
printf(“Hello world !\n”);
return 0;
}
Programa em
linguagem C
2
Lógica de Programação
Linguagem C
●
●
●
●
Linguagem de médio nível (quanto à abstração)
● Estruturas de controle e dados simples e expressivas
● Poucas restrições para o programador
Criada em 1972 por Dennis Ritchie, no Bell Labs (AT&T), para
codificar o sistema operacional Unix
● A intenção era facilitar sua implantação em novas plataformas
(tipos de computador)
A linguagem se difundiu durante os anos 70, por causa dos laços
com o Unix e a existência de compiladores C
Problemas de compatibilidade passaram a surgir devido a
diferentes variações da linguagem
● Proposta uma padronização em 1983, chamada de ANSI C
3
Lógica de Programação
Linguagem C: estrutura básica de um programa
#include <stdio.h>
← Inclusão de definições de arquivo externo
int main(int argc, char ** argv) ← Início do programa
{
← demarcador de início de bloco
printf(“Hello world !\n”);
return 0;
}
← demarcador de fim de bloco
4
Lógica de Programação
Linguagem C: estrutura básica de um programa
#include <stdio.h>
← Inclusão de definições de arquivo externo
int main(int argc, char ** argv) ← Início do programa
{
← demarcador de início de bloco
int x;
← declaracão de variável
x = 0;
printf(“x = %d\n”, x);
x = x + 1;
printf(“x = %d\n”, x);
return 0;
}
← demarcador de fim de bloco
5
Lógica de Programação
Linguagem C: estrutura básica de um programa
●
Programa em C é composto por um conjunto de funções
A principal função se chama main, e corresponde ao início do
programa
●
int main(int argc, char ** argv) ← Início do programa
{
← demarcador de início de bloco
...
}
← demarcador de fim de bloco
6
Lógica de Programação
Linguagem C: estrutura básica de um programa
●
Variáveis são declaradas no início de um bloco
int main(int argc, char ** argv)
{
int x;
← Início do programa
← demarcador de início de bloco
← declaração de variável
...
}
← demarcador de fim de bloco
7
Lógica de Programação
Linguagem C: estrutura básica de um programa
●
As sentenças são terminadas por ;
int main(int argc, char ** argv) ← Início do programa
{
← demarcador de início de bloco
int x;
← declaração de variável
x = 0;
printf(“x = %d\n”, x);
x = x + 1;
printf(“x = %d\n”, x);
return 0;
}
← Sentenças
← demarcador de fim de bloco
8
Lógica de Programação
Linguagem C: estrutura básica de um programa
●
Operação de atribuição: operador “=”
●
Funções úteis:
●
●
●
scanf(“%d”, &x): leitura de um número inteiro (variável x
deve ser do tipo int)
printf(“Valor de x = %d\n”, x): mostra mensagem na tela,
podendo usar valores de variáveis
Para ambas as funções, dependendo do tipo de variável
deve-se usar um formatador diferente. Nos exemplos, “%d”
corresponde a números inteiros.
9
Lógica de Programação
Linguagem C: estrutura básica de um programa
Programas modulares: funções e outras definições contidas em
outros arquivos podem ser incluídas
●
#include <stdio.h>
← Inclusão de definições externas
int main(int argc, char ** argv)
{
int x;
← Início do programa
← demarcador de início de bloco
← declaração de variável
x = 0;
printf(“x = %d\n”, x);
x = x + 1;
printf(“x = %d\n”, x);
return 0;
}
← Sentenças
← demarcador de fim de bloco
10
Lógica de Programação
Linguagem C: estrutura básica de um programa
●
Programas ficam guardados em arquivos com extensão .c
●
Definições ficam guardadas em arquivos com extensão .h
●
●
●
●
Arquivos de definições a rigor não contêm implementações
de funções
Esses arquivos contêm apenas as declarações, que
informam que determinadas funções e estruturas de dados
existem
As funções declaradas estão em outros arquivos .c, ou já
compiladas e guardados em arquivos de bibliotecas.
Por convenção, arquivos .h ficam no subdiretório /usr/include
11
Lógica de Programação
Linguagem C: do programa C ao arquivo executável
Programas C não são executáveis
● O processador não entende as construções da linguagem C
● O processador somente executa instruções de código de
máquina
● Para transformar um programa C em executável, usam-se
programas tradutores
●
Compilador
Assemblador
Linkador
12
Lógica de Programação
Linguagem C: do programa C ao arquivo executável
●
Programas tradutores:
● Compilador: transforma programa C para Assembly
● Assemblador: transforma programa Assembly para código
de máquina
● Linkador: une programas em código de máquina e os torna
executáveis
13
Lógica de Programação
Linguagem C: ferramentas do Linux
●
gcc (Gnu Compiler Collection): Compilador C no Linux:
● Inclui as três tarefas de geração de arquivo executável:
● Compilação (compiling)
● Montagem (assembly)
● Ligação (linkage)
Programa hello.c
#include <stdio.h>
int main(int argc, char ** argv)
{
printf(“Hello world !”);
}
Compilação de hello.c
> gcc -o hello hello.c
> ls -l hello
-rwxr-xr-x 1 sobral users 9361 2009-05-04 12:42 hello
> ./hello
Hello world!
>
14
Lógica de Programação
Linguagem C: ferramentas do Linux
●
gdb (Gnu Debugger): Depurador (debugador) no Linux:
● Possibilita a execução monitorada de um programa
● Ajuda a acompanhar a sequência de execução
● Possibilita visualizar os valores de variáveis
● Ajuda a localizar erros
● Portanto, ferramenta fundamental para auxílio no
desenvolvimento de programas !
15
Lógica de Programação
Linguagem C: ferramentas do Linux
●
gdb (Gnu Debugger): Depurador (debugador) no Linux:
● Obs: programa deve ser compilado usando-se opção -g (ex:
gcc -g -o hello hello.c)
● Essa opção armazena no executável informações sobre o
código fonte
> gdb hello
GNU gdb 6.8
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "i586-suse-linux"...
(gdb)
16
Lógica de Programação
Linguagem C: ferramentas do Linux
●
gdb (Gnu Debugger): comandos:
● break {função | linha de arquivo}: define um breakpoint; o
depurador para a execução do programa ao encontrar um
breakpoint
● next: executa a linha de programa atual
● step: executa a linha atual; se for uma chamada de função,
entra dentro da função
● cont: continua a execução até o próximo breakpoint, ou até o
fim do arquivo
● display var: mostra o valor da variável var
● help: mostra a ajuda
17
Lógica de Programação
Linguagem C: ferramentas do Linux
●
gdb (Gnu Debugger): exemplo:
(gdb) break main
Breakpoint 1 at 0x80483e5: file hello.c, line 4.
(gdb) run
Starting program: /home/sobral/Cefet/SOP/Aulas/C/hello
Breakpoint 1, main () at hello.c:4
4
printf("Hello world !\n");
(gdb) next
Hello world !
5
}
(gdb) next
0xb7eef5f5 in __libc_start_main () from /lib/libc.so.6
(gdb)
18
Lógica de Programação
Linguagem C: ferramentas do Linux
●
gdb (Gnu Debugger): exemplo:
#include <stdio.h>
int main(int argc, char ** argv) {
int x;
x = 0;
while (x < 5) {
printf("Hello world %d !\n", x);
x = x + 1;
}
}
(gdb) run
Starting program: /home/sobral/hello2
Breakpoint 1, main () at hello2.c:6
6
x = 0;
(gdb) display x
1: x = -1207015856
(gdb) next
7
while (x < 5) {
1: x = 0
(gdb) next
8
printf("Hello world %d !\n", x);
1: x = 0
(gdb)
19
Lógica de Programação
Exercícios: edite seus programas com o editor vi, compileos com gcc, e depure-os com gdb.
1) Faça um programa que leia cinco valores inteiros e mostre
sua média
2) Modifique o programa acima para que mostre o desvio padrão
desse conjunto de valores
3) Faça um programa para calcular a comissão de 5% dada a
vendedores de peças, usando os seguintes dados: identificação
do vendedor, código da peça, preço unitário da peça e
quantidade de peças vendidas. Faça um teste de mesa de seu
algoritmo usando o gdb.
20
Download

Introdução a linguagem C