Upload
mauro-jansen
View
29
Download
0
Embed Size (px)
Citation preview
Professor: Mauro Jansen
Microprocessadores II
Revisão de Linguagem de Programação:Linguagem C
Prof. Mauro JansenLinguagem de Programação
Linguagem C – parte 1 2
Introdução à linguagem C
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
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
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
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
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
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
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
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.
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”,¬a1); printf(“Digite a segunda nota: “); scanf(“%f”,¬a2) printf(“A média é: %f”,(nota1+nota2)/2);}
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
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 &
Prof. Mauro JansenLinguagem de Programação
Linguagem C – parte 1 14
Tipos de dados, constantes, variáveis,
operadores e expressões em C
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
Prof. Mauro Jansen
Tipos de dados
Linguagem de ProgramaçãoLinguagem C – parte 1 16
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
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
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
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;
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;
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
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
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.
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
Prof. Mauro JansenLinguagem de Programação
Linguagem C – parte 1 26
Estruturas de controle e fluxo em C
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>]
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”,¬a1); printf(“Digite a segunda nota: “); scanf(“%f”,¬a2); 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”);}
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>}
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!”); }}
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:
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>
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); }}
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>
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);}
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>);
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);}
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
Prof. Mauro JansenLinguagem de Programação
Linguagem C – parte 1 39
Procedimentos e funções em C
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
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
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
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
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}
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}
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));}
Prof. Mauro JansenLinguagem de Programação
Linguagem C – parte 3 47
Ponteiros
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
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)
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
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
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
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)