53
Professor: Mauro Jansen Microprocessadores II Revisão de Linguagem de Programação: Linguagem C

Microprocessadores ii revisão de linguagem de programação (parte2)

Embed Size (px)

Citation preview

Page 1: Microprocessadores ii revisão de linguagem de programação (parte2)

Professor: Mauro Jansen

Microprocessadores II

Revisão de Linguagem de Programação:Linguagem C

Page 2: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro JansenLinguagem de Programação

Linguagem C – parte 1 2

Introdução à linguagem C

Page 3: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Histórico

Criada na década de 70 por Denis Ritchie (Bell Labs)

Objetivo: ser uma linguagem mais fácil que o Assembler mas que permitisse grande controle sobre o hardware, para a programação do sistema Unix

Influência das linguagens BCPL e B

Linguagem de ProgramaçãoLinguagem C – parte 1 3

Page 4: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Características

Genérica: usada para a criação de programas para diversas áreas Ex: aplicativos, sistemas operacionais,

automação industrial, engenharia, física, química, etc.

Linguagem “mista”: tem características de linguagem de alto e baixo nível

Induz a uma boa estruturação de programas

Influenciou várias outras linguagens

Linguagem de ProgramaçãoLinguagem C – parte 1 4

Page 5: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Características

É “case sensitive”: minúsculas e maiúsculas fazem diferença Variável “nome” é diferente de “Nome”

É compilada (gera arq.executável)

Linguagem de ProgramaçãoLinguagem C – parte 1 5

Page 6: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

O pré-processador

Parte do compilador C que trata alguns textos (comandos) do código-fonte antes da tradução em código executável

Esses comandos são as diretivas do pré-processador. Ex: #define #include

Linguagem de ProgramaçãoLinguagem C – parte 1 6

Page 7: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Diretivas do pré-processador

#define: define um identificador e uma sequência de caracteres que será substituída pelo identificador no código-fonte. Ex:

#include: inclui um cabeçalho ou outro arquivo-fonte no ponto onde está a diretiva. Ex:

Linguagem de ProgramaçãoLinguagem C – parte 1 7

#define PI 3.1415

#include <stdio.h>

Em todo o código fonte, PI será substituído por 3.1415

Inclui o arquivo “stdio.h” (definições padrões para entrada e saída de dados) no programa-fonte

Page 8: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Estrutura básica de um programa em C

Linguagem de ProgramaçãoLinguagem C – parte 1 8

#Include <biblioteca1.h>#Include <biblioteca2.h>...Void main(){

<Declaração de variáveis>...<comandos>...

}

Inclusão de arquivo de bibliotecas de comandos

Função main(): é obrigatória. É a primeira função chamada quando o programa é iniciado

Delimitadores de inicio e fim de bloco de comandos

Page 9: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Comentários

Comentários são úteis para documentar o programa, e devem ser sempre usados

Existe dois modos: Posição livre: usa-se o comando // Várias linhas: usa-se o comando /* */

Linguagem de ProgramaçãoLinguagem C – parte 1 9

Page 10: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Palavras reservadas

Linguagem de ProgramaçãoLinguagem C – parte 1 10

São os comandos e funções próprias do vocabulário da linguagem. Ex.: auto, break, case, char, const, continue,

default, do, double, else, enum, extern, float, for, goto, if, int, long, register, struct, switch, typedef, union, unsigned, void, volatile, while, etc.

Page 11: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Exemplo de programa em C

Linguagem de ProgramaçãoLinguagem C – parte 1 11

/* Programa: calcular a média entre duas notas Autor...: prof.Mauro*/#Include <stdio.h>Void main(){ float nota1,nota2; // declaração de variáveis printf(“Digite a primeira nota: “); scanf(“%f”,&nota1); printf(“Digite a segunda nota: “); scanf(“%f”,&nota2) printf(“A média é: %f”,(nota1+nota2)/2);}

Page 12: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Comando de saída: printf

Sintaxe: printf(<string de controle>,<lista de argumentos>)

Códigos de controle:

Exemplos: printf(“O valor de PI é %f”,3.1415);

printf(“Meu nome é %s e eu tenho %d anos\n”,”João”,18);

Linguagem de ProgramaçãoLinguagem C – parte 1 12

Código Formato Código Formato

%d Inteiro com sinal %X Hexadecimal

%f Float (número real) %o Octal

%c Caractere %E Notação científica

%s String %p Ponteiro

%u Inteiro sem sinal

Mensagem (string) com códigos de controle embutidos na mesma

Valores que serão substituídos na mensagem, no lugar de cada código

de controle iniciado por %

\n salta linha

Page 13: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Comando de entrada: scanf

Sintaxe: scanf(<string de controle>,<lista de argumentos>)

Exemplo:

Linguagem de ProgramaçãoLinguagem C – parte 1 13

#Include <stdio.h>Void main(){ char c; float n; printf(“Digite uma letra: “); scanf(“%c”,&c); printf(“Digite um valor real: “); scanf(“%f”,&n); printf(“Letra: %c , número: %f”,c,f);}

códigos de controle que identificarão o tipo de dado a ser

digitado pelo usuário

Variável(is) que receberá(ão) os dados, precedida(s) pelo sinal &

Page 14: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro JansenLinguagem de Programação

Linguagem C – parte 1 14

Tipos de dados, constantes, variáveis,

operadores e expressões em C

Page 15: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Tipos de dados

A linguagem C tem os tipos básicos Char (caractere), Int (inteiro), float (real),

double (real) E modificadores de tipo, que vêm antes

do tipo e podem ser combinados: Unsigned: sem sinal Signed: com sinal (padrão) Short: menor precisão (padrão) Long: maior precisão

Linguagem de ProgramaçãoLinguagem C – parte 1 15

Page 16: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Tipos de dados

Linguagem de ProgramaçãoLinguagem C – parte 1 16

Page 17: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Constantes e variáveis

Constante: porção de dados que não muda seu valor durante a execução do programa. Exemplos: 23, ‘X’, “Linguagem C”, 1.234 Constantes não precisam de nome, mas

podemos nomeá-las usando a diretiva #define. Ex: #define PI 3.1415

Variável: porções de dados que podem mudar seu valor durante a execução do programa Uma variável precisa ter um nome e tipo e

precisa ser declarada e inicializada

Linguagem de ProgramaçãoLinguagem C – parte 1 17

Page 18: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Constantes de barra invertida

São códigos que iniciam com uma barra invertida que representam uma constante tipo caractere dentro de strings, como no comando printf. Veja alguns:Código Significado

\n Nova linha (new line)

\” Aspas

\’ Apóstrofo

\0 Nulo

\\ Barra invertida

\t Tabulação horizontal

\a Sinal sonoro (beep)

\N Constante octal (N é o valor da constante)

\xN Constante hexadecimal (N é o valor da constante)

Muito usado no printf para saltar

para próxima linha

Page 19: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Regras para nomes de variáveis

Começar com letra ou sublinhado (_) Caracteres seguintes podem ser

letras, números ou sublinhado Não pode ser palavra reservada ou

função Maiúsculas e minúsculas fazem

diferença

Linguagem de ProgramaçãoLinguagem C – parte 1 19

Page 20: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Declaração e inicialização de variáveis

A declaração é feita da seguinte forma:

Obs: Na linguagem C não há uma seção específica para declaração de variáveis

Exemplos:

Linguagem de ProgramaçãoLinguagem C – parte 1 20

<tipo de dado> <lista de variáveis>;

char ch,letra;long cont;

Page 21: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Declaração e inicialização de variáveis

Inicialização: podemos atribuir valor no momento da declaração ou depois, usando o operador de atribuição “=“ :

Linguagem de ProgramaçãoLinguagem C – parte 1 21

Char ch=‘D’;Int num=123;num=10;

Page 22: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Operadores aritméticos

Usados em operações matemáticas

Linguagem de ProgramaçãoLinguagem C – parte 1 22

Operador Ação

+ Soma

- Subtração ou troca de sinal

* Multiplicação

/ Divisão

% Resto da divisão

++ Incrementa valor de uma variável

-- Decrementa valor de uma variável

+= Atribuição com soma

-= Atribuição com subtração

Page 23: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Operadores relacionais

Usados em comparações entre valores

Linguagem de ProgramaçãoLinguagem C – parte 1 23

Operador Significado

> Maior

>= Maior ou igual

< Menor

<= Menor ou igual

== Igual

!= Diferente

Page 24: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Operadores lógicos

Usados em expressões lógicas compostas

Linguagem de ProgramaçãoLinguagem C – parte 1 24

Operador Significado

&& Operador E. Retorna verdadeiro se ambos valores forem verdadeiros

|| Operador OU. Retorna verdadeiro se pelo menos um for verdadeiro

! Operador NÃO. Retorna o contrário do valor informado.

Page 25: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Exemplo com operadores e expressões

Linguagem de ProgramaçãoLinguagem C – parte 1 25

#Include <stdio.h>Void main(){ int a,b,c,d; a=10; b=22; c=30; d=40; printf(“a+b = %d”,a+b); // soma a e b printf(“a-b = %d”,a-b); // subtrai b de a printf(“b%%a = %d”,b%a); // resto da divisão de b por a a++; // incrementa a (mesmo que a=a+1) b--; // decrementa b (mesmo que b=b-1) c+=a; // soma a em c (mesmo que c=c+a) d-=b; // soma e em d (mesmo que d=d+b) printf(“a=%d, b=%d, c=%d, d=%d”,a,b,c,d);}

OBS: No próximo bloco veremos exemplos com operadores relacionais e lógicos

Page 26: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro JansenLinguagem de Programação

Linguagem C – parte 1 26

Estruturas de controle e fluxo em C

Page 27: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Estrutura condicional ifEquivalente em pseudocódigo: se-senão-fimse

Sintaxe:

Se a condição for verdadeira, executa bloco de comandos 1, senão executa bloco de comandos 2

OBS: Um bloco de comando composto por mais de um comando deve iniciar com { e terminar com }

O bloco do else é opcional

Linguagem de ProgramaçãoLinguagem C – parte 1 27

If(<condição>) <bloco de comandos>[else <bloco de comandos 2>]

Page 28: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Estrutura condicional if (se) - Exemplo

Linguagem de ProgramaçãoLinguagem C – parte 1 28

/* Programa: calcular a média e mostrar situação*/#Include <stdio.h>Void main(){ float nota1,nota2,media; // declaração de variáveis printf(“Digite a primeira nota: “); scanf(“%f”,&nota1); printf(“Digite a segunda nota: “); scanf(“%f”,&nota2); media=(nota1+nota2)/2; printf(“A média é: %f \n”,media); if(media>=7) printf(“Você está aprovado.\n”); else printf(“Você está de recuperação.\n”);}

Page 29: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Estrutura condicional switch-caseEquivalente pseudocódigo: escolha

Linguagem de ProgramaçãoLinguagem C – parte 1 29

Sintaxe:Switch (<variável>){ case <constante1>: <declaração1>; break; case <constante2>: <declaração2>; break; case <constante_n>: <declaraçãoN>; break; default: <declaração default>}

Page 30: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Estrutura condicional switch-caseExemplo

Linguagem de ProgramaçãoLinguagem C – parte 1 30

#Include <stdio.h>void main(){ float n1,n2; char op; printf(“Digite um número: “); scanf(“%f”,&n1); printf(“Digite a operação (+,-,* ou /): “); scanf(“%s”,&op); printf(“Digite outro número: “); scanf(“%f”,&n2); switch (op) { case ‘+’: printf(“Soma=%f”,n1+n2); break; case ‘-’: printf(“Subtração=%f”,n1-n2); break; case ‘*’: printf(“Multiplicação=%f”,n1*n2); break; case ‘/’: printf(“Divisão=%f”,n1/n2); break; default: printf(“Você digitou uma operação inválida!”); }}

Page 31: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Operador ternário

Operador que permite simplificar tomadas de decisão simples

Sintaxe:

Exemplo:

<expressão1> ? <expressão2> : <expressão3>

max=(a>b) ? a : b;

If (a>b) max=a;Else max=b;

Equivale a:

Page 32: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Estrutura de repetição forEquivalente pseudocódigo: para - fimpara

É a repetição contada. Sintaxe:

Inicialização: expressão de inicialização. Ex: n=0

Condição: expressão condição para continuar a repetição. Ex: n<=10

Incremento: expressão de incremento. Ex: n++

Linguagem de ProgramaçãoLinguagem C – parte 1 32

for(<inicialização>;<condição>;<incremento>) <bloco de comandos>

Page 33: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Estrutura de repetição forexemplo:

Programa para contar de 1 a 100:

#include <stdio.h>{ int n; for(n=1 ; n<=100 ; n++) { printf("Contando: %d\n",n); }}

Page 34: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Estrutura de repetição while Equivalente pseudocódigo: enquanto–faça-fimenquanto

Sintaxe:

Inicia e repete o bloco de comandos enquanto a condição for verdadeira

É a repetição com teste no início

Linguagem de ProgramaçãoLinguagem C – parte 1 34

while(<condição>) <bloco de comandos>

Page 35: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Estrutura de repetição whileExemplo:

Soma quantidade indeterminada de números

Linguagem de ProgramaçãoLinguagem C – parte 1 35

#include <stdio.h>int main(){ float n=1,soma=0; while (n!=0) { printf("Digite um numero (zero=fim):"); scanf("%f",&n); soma+=n; } printf("A soma dos numeros digitados é: %f",soma);}

Page 36: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Estrutura de repetição do..whileEquivalente pseudocódigo: repita - até

Sintaxe:

Executa o bloco de comando e repete enquanto a condição for verdadeira

É a repetição com teste no final

Linguagem de ProgramaçãoLinguagem C – parte 1 36

do <bloco de comandos>While(<condição>);

Page 37: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Estrutura de repetição do..whileExemplo: Mesmo anterior, agora com do..while:

Linguagem de ProgramaçãoLinguagem C – parte 1 37

#include <stdio.h>{ float n=0,soma=0; do { printf("Digite um numero (zero=fim):"); scanf("%f",&n); soma+=n; } while (n!=0); printf("A soma dos numeros digitados é: %f\n",soma);}

Page 38: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Comandos que afetam as estruturas de repetição

Comando break: interrompe a repetição, continuando após o bloco de comandos a ser repetido

Comando continue: interrompe apenas a repetição atual, voltando ao início do laço

Linguagem de ProgramaçãoLinguagem C – parte 1 38

Page 39: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro JansenLinguagem de Programação

Linguagem C – parte 1 39

Procedimentos e funções em C

Page 40: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Procedimentos e funções

Também chamados de sub-programas ou rotinas, são programas que executam uma função específica que é acessada diversas vezes Procedimento: não retorna valor ao

programa que o chamou Função: retorna valor

Exemplos: função fatorial (calcula o fatorial de um número)

Linguagem de ProgramaçãoLinguagem C – parte 1 40

Page 41: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Por que usar funções?

Reaproveitar código já criado (por você ou outros programadores)

Evitar repetição de código dentro do mesmo programa

Separar o programa em blocos, facilitando a leitura, o entendimento e a manutenção

Linguagem de ProgramaçãoLinguagem C – parte 1 41

Page 42: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Procedimentos e funções em C

A linguagem C tem apenas funções O tipo da função diz se ela retorna ou

não valor: Tipo void: função que não retorna valor Outros tipos básicos (int, float, etc.):

funções que retornam valor

Linguagem de ProgramaçãoLinguagem C – parte 1 42

Page 43: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

A função main()

Como já vimos, todo programa em C tem pelo menos uma função:

Linguagem de ProgramaçãoLinguagem C – parte 1 43

#Include <biblioteca1.h>#Include <biblioteca2.h>...Void main(){

<Declaração de variáveis>...<comandos>...

}

Inclusão de arquivo de bibliotecas de comandos

Função main(): é obrigatória. É a primeira função chamada quando o programa é iniciado

Delimitadores de inicio e fim de bloco de comandos

Page 44: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Definindo funções em C

Sintaxe:

Os parâmetros são os dados que serão usados pela função para realizar sua operação ou retornar algum resultado

A lista de parâmetros é opcional, mas se for usada deve ser especificado o tipo de cada parâmetro

Linguagem de ProgramaçãoLinguagem C – parte 1 44

tipo nome da função(tipo parâmetro1,...,tipo parâmetroN){ // comandos da função}

Page 45: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Chamada de funções

Linguagem de ProgramaçãoLinguagem C – parte 1 45

void main(){ // comando anterior à chamada funcao1(2,3) // comando posterior à chamada}

void funcao1(int a,int b){ // comandos da função}

Page 46: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Exemplo de função

Linguagem de ProgramaçãoLinguagem C – parte 1 46

#Include <stdio.h>

float media(float nota1,float nota2){ return( (nota1+nota2)/2);}

void main(){ printf(“%f\n”,media(8,9));}

Page 47: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro JansenLinguagem de Programação

Linguagem C – parte 3 47

Ponteiros

Page 48: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Memória e endereços

Local de armazenamento de informações binárias

Podem ser circuitos semicondutores, mídias magnéticas, óticas, etc.

Cada posição de memória é identificada por um ENDEREÇO

Endereçamento é o ato de acessar um dado em uma posição de memória (para isso precisamos especificar o endereço)

Linguagem de ProgramaçãoLinguagem C – parte 3 48

Page 49: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Memória e endereços

Linguagem de ProgramaçãoLinguagem C – parte 3 49

Endereço Conteúdo

0000h 00

0001h EB

0002h 29

...

FFFFh 00

Exemplo de bloco de memória com 64K posições (64KB)

O conteúdo de cada posição de memória pode ser um dado (numérico ou caractere) ou uma instrução

Os endereços normalmente são identificados por números hexadecimais (h)

Page 50: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Ponteiros

Toda variável é armazenada na memória do computador em uma posição que possui um ENDEREÇO

Um ponteiro é uma variável especial que guarda um endereço de memória

Com ponteiros, podemos acessar e modificar dados diretamente na memória

Linguagem de ProgramaçãoLinguagem C – parte 3 50

Ponteiro é um dos recursos que permitem à linguagem C acessar os recursos do

hardware

Page 51: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Operadores & e *

Operador & (endereço de) Sintaxe: &<variável> Uso: retorna o endereço de uma variável Exemplo: scanf(“%d”,&num) Usado para inicializar ponteiros.

Operador * (conteúdo de) Sintaxe: *<variável tipo ponteiro> Uso: retorna o conteúdo do endereço de

memória guardado na variável, que deve ser do tipo ponteiro

Linguagem de ProgramaçãoLinguagem C – parte 3 51

Page 52: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Declarando ponteiros

Sintaxe: <tipo> *<nome da variável>;

Exemplo:#include <stdio.h>int main(){ int x=15; int *pInt; // ponteiro para variável de tipo inteiro pInt=&x; printf("Conteudo de x: %d\n",*pInt); // conteúdo de x printf("Endereço de x: %d\n",pInt); // endereço de x}

Linguagem de ProgramaçãoLinguagem C – parte 3 52

Observe que todo ponteiro deve ter o “*” (asterisco) antes do nome

Page 53: Microprocessadores ii revisão de linguagem de programação (parte2)

Prof. Mauro Jansen

Ponteiros – ilustração do funcionamento

Linguagem de ProgramaçãoLinguagem C – parte 3 53

Endereço

Variável

Conteúdo

0000h 00

0001h EB

02F0h c ‘A’

...

FFFFh 00

Declaração e inicialização de uma variável c tipo

char, que ficou no endereço 2F0

char c=‘A’;char *pc=&c;printf("%c",*pc);

O endereço da variável cé

guardado no ponteiro *pc

O comando printf acessa o conteúdo do endereço guardado

em *pc (que é o valor da variável c)