algo 08 introducao linguagem C [Modo de Compatibilidade]rcmg/cefet-al/algo/aulas/... · 3 Linguagem...

26
1 Algoritmos e Lógica de Programação Introdução d Linguagem C Linguagem C Reinaldo Gomes [email protected] Pré-processador Variáveis Operadores Introdução: Histórico Linguagem criada por Dennis Ritchie em 1972 Linguagem de Programação C Linguagem criada por Dennis Ritchie em 1972 Em 1973 foi utilizada para reescrever o UNIX Surgem diversas versões da Linguagem C, porém os códigos gerados eram incompatíveis ANSI (American National Standard Institute), em 1983 padronizou a Linguagem C padronizou a Linguagem C O objetivo do curso é utilizar C ANSI Utilizando características especiais de uma versão especifica de C, não há garantia que o programa seja compilado em outra versão de C

Transcript of algo 08 introducao linguagem C [Modo de Compatibilidade]rcmg/cefet-al/algo/aulas/... · 3 Linguagem...

Page 1: algo 08 introducao linguagem C [Modo de Compatibilidade]rcmg/cefet-al/algo/aulas/... · 3 Linguagem de Programação C Introdução: Características da Linguagem Portabilidade Modularidade

1

Algoritmos e Lógica de Programação

IntroduçãoP é d

Linguagem CLinguagem C

Reinaldo [email protected]

Pré-processadorVariáveis

Operadores

Introdução: HistóricoLinguagem criada por Dennis Ritchie em 1972

Linguagem de Programação C

Linguagem criada por Dennis Ritchie em 1972Em 1973 foi utilizada para reescrever o UNIXSurgem diversas versões da Linguagem C, porém os códigos gerados eram incompatíveisANSI (American National Standard Institute), em 1983 padronizou a Linguagem Cpadronizou a Linguagem CO objetivo do curso é utilizar C ANSIUtilizando características especiais de uma versão especifica de C, não há garantia que o programa seja compilado em outra versão de C

Page 2: algo 08 introducao linguagem C [Modo de Compatibilidade]rcmg/cefet-al/algo/aulas/... · 3 Linguagem de Programação C Introdução: Características da Linguagem Portabilidade Modularidade

2

Introdução: C comparada a outras linguagensDevemos entender Nível Alto como sendo a

Linguagem de Programação C

Devemos entender Nível Alto como sendo a capacidade da linguagem em compreender instruções escritas em “dialetos” próximos da linguagem falada (Pascal, por exemplo) e Nível Baixo para aquelas linguagens que se aproximam do Assembler, que é a linguagem própria da máquina, compostas por instruções binárias e outras incompreensíveis para o ser humano não treinado para este propósito.

Linguagem de Programação CIntrodução: C comparada a outras linguagens

Nível Baixo Nível Médio Nível Alto

Velocidade

Clareza / Simplicidade

A bl C Basic Pascal AdaAssembler C

COBOL

Basic Pascal Ada

Modula -2

Page 3: algo 08 introducao linguagem C [Modo de Compatibilidade]rcmg/cefet-al/algo/aulas/... · 3 Linguagem de Programação C Introdução: Características da Linguagem Portabilidade Modularidade

3

Linguagem de Programação CIntrodução: Características da Linguagem

PortabilidadePortabilidadeModularidadeLinguagem compilada com geração de código compacto e rápidoRecursos de baixo nívelSi li id d F ilid d d (Alt í l)Simplicidade e Facilidade de uso (Alto nível)

Linguagem de Programação CIntrodução: Características da Linguagem

Alia, portanto, características de linguagens de alto e p g gbaixo nível (liberdade ao programador).Pode ser usada para os mais variados propósitosIndicada para escrever software básico (SO, BD, Editores de texto, planilhas, etc.).

Para criar um programa Para criar um programa ...Utilize um editor para criar o código fonte;Utilize um compilador e um linkeditor para gerar o programa executávelSugestão: Dev C++ for windows – www.bloodshed.net

Page 4: algo 08 introducao linguagem C [Modo de Compatibilidade]rcmg/cefet-al/algo/aulas/... · 3 Linguagem de Programação C Introdução: Características da Linguagem Portabilidade Modularidade

4

Linguagem de Programação CIntrodução: Palavras Reservadas

São palavras que têm um significado especial para a São palavras que têm um significado especial para a linguagem

• break, case, if, for, while, return, const, do, else, continue, switch, int, double, unsigned, long, char, float...

C entende tais palavras apenas em letrasC entende tais palavras apenas em letrasminúsculas

Linguagem de Programação CIntrodução: Bibliotecas

Conjunto de funções para realizar tarefas específicasConjunto de funções para realizar tarefas específicas.Biblioteca padrão C - ANSI - funções básicas.As primeiras linhas do programa indicam as bibliotecas utilizadas

• #include <minha_biblioteca.h>Exemplos:Exemplos:

• stdio.h – Funções de entrada e saída • math.h – Funções matemáticas comuns • string.h – Funções para manipular strings.• stdlib.h – Funções para alocação de memória

Page 5: algo 08 introducao linguagem C [Modo de Compatibilidade]rcmg/cefet-al/algo/aulas/... · 3 Linguagem de Programação C Introdução: Características da Linguagem Portabilidade Modularidade

5

Linguagem de Programação CIntrodução: Estrutura de um programa C

Os programas começam com a função main( )Os programas começam com a função main( )A função main( ) é obrigatória { e } identificam o início e o fim de um bloco de comandosAs variáveis são declaradas imediatamente depois da abertura do bloco da função (depois da { )abertura do bloco da função (depois da { )Declarações iniciadas por # identificam comandos para o pré-processador (diretivas)

• #include <stdio.h>• #define TAMANHO 10

/* Primeiro Programa em C */

Linguagem de Programação CIntrodução: Estrutura de um programa C

/ Primeiro Programa em C /

#include <stdio.h>

main(){

printf(“Meu primeiro programa em C\n”);

}

Page 6: algo 08 introducao linguagem C [Modo de Compatibilidade]rcmg/cefet-al/algo/aulas/... · 3 Linguagem de Programação C Introdução: Características da Linguagem Portabilidade Modularidade

6

/* P i i P C */ tá i

Linguagem de Programação CIntrodução: Estrutura de um programa C

/* Primeiro Programa em C */ comentários#include <stdio.h> /*biblioteca de E/S */

main() /*função principal – inicio do programa*/

{ /*marca início da função*/

printf(“Meu primeiro programa em C\n”); /*função para escrever na tela*/ç p

system (“PAUSE”); /* Espera qq tecla pra sair } /*marca fim da função*/

Instruções terminam com ponto-e-vírgula

A função system()A função system() executa um comando interno do sistema operacional do sistema operacional

/* Primeiro Programa em C */

#include <stdio.h>

main(){

printf(“Meu primeiro programa em C\n”);

system(“dir”);

system (“pause”);

}

Page 7: algo 08 introducao linguagem C [Modo de Compatibilidade]rcmg/cefet-al/algo/aulas/... · 3 Linguagem de Programação C Introdução: Características da Linguagem Portabilidade Modularidade

7

O pré-processador e a diretiva includeO pré-processador examina o programa fonte em C e executa certas modificações baseados em diretivasA diretiva include

#include <stdio.h>#include <stdlib.h>#include “meuArquivo.h”I l i i fInclui outro arquivo em um programa fonteAs alterações são inseridas antes da compilaçãoPode ser usado com <> (procura arquivo apenas na pasta include) e com “” (procura primeiro no diretório corrente e depois na pasta include)

O pré-processador CExecuta modificações no código fonte antes da compilaçãoFaz parte do compilador e executam diretivasAs diretivas podem ser colocadas em qualquer lugar do programaAs mais usadas são:

#define #ifndef#define #ifndef#undef #else#include #elif#if #endif#ifdev #error

Page 8: algo 08 introducao linguagem C [Modo de Compatibilidade]rcmg/cefet-al/algo/aulas/... · 3 Linguagem de Programação C Introdução: Características da Linguagem Portabilidade Modularidade

8

O pré-processador C#define

Define constantes com nomes apropriados. Executa p puma substituição textual.Não há substituição dentro de cadeia de caracteres (strings)Ex: #define PI 3.14Ex2: #define ERRO printf(“\a\aERRO”)

. . .if (Zebra)ERRO;. . .

O pré-processador C#define e const

A diretiva #define realiza uma substituição textualA diretiva #define realiza uma substituição textualO qualificador const é tipado, ou seja, pode ser utilizado pelo compilador para detecção de erros e devem ser inicializadas sempre.

int main()t a (){ int i,j;

const double Pi = 3.1416;system("PAUSE"); return 0;

}

Page 9: algo 08 introducao linguagem C [Modo de Compatibilidade]rcmg/cefet-al/algo/aulas/... · 3 Linguagem de Programação C Introdução: Características da Linguagem Portabilidade Modularidade

9

O pré-processador CMacros

#include <stdio.h>#include <stdlib h>#include <stdlib.h>#define PRN(n) printf("%.2lf\n", (double)n)int main(){ int n1,n2;

n1=1416;n2=n1/2;PRN(n1); /* Chamada a macro */PRN( 2) /* Ch d */PRN(n2); /* Chamada a macro */system("PAUSE");return 0;

}

O pré-processador C#undef

Remove a mais recente definição criada com #defineRemove a mais recente definição criada com #define• #define GRANDE 3

• #define GRANDE 8

• #undef GRANDE

Page 10: algo 08 introducao linguagem C [Modo de Compatibilidade]rcmg/cefet-al/algo/aulas/... · 3 Linguagem de Programação C Introdução: Características da Linguagem Portabilidade Modularidade

10

O pré-processador C#include

Incluem um outro arquivo no programa fonteq p gO outro arquivo é um texto ASCII que incorporam definição de constantes, protótipos de funções, definições de tipos de dados complexos e declarações de variáveis externas;

#if, #elif, #else e #endifCada diretiva #if deve terminar com a diretiva #endifCada diretiva #if deve terminar com a diretiva #endifEntre #if e #endif pode ser colocado qualquer número de #elif mas só se permite uma diretiva #elseA #else é opcional, mas se estiver presente deve ser a última anterior a #endif

O pré-processador CEx.#if CORES > 5#if CORES > 5

#define SOMBRA 1#if COR_FUNDO == 1

#include “cor_fundo.h”#else

#include “sem_fundo.h”#endif

#endif

Page 11: algo 08 introducao linguagem C [Modo de Compatibilidade]rcmg/cefet-al/algo/aulas/... · 3 Linguagem de Programação C Introdução: Características da Linguagem Portabilidade Modularidade

11

Linguagem de Programação CTipos de Dados

Tipos InteirosTipos Inteiros• char: 1 byte e escala de -128 a 127

• unsigned char: 1 byte e escala de 0 a 255

• int: 2 bytes e escala de -32768 a 32767

• unsigned int: 2 bytes e escala de 0 a 65535

• long: 4 bytes

Linguagem de Programação CTipos de Dados

Tipos FlutuantesTipos Flutuantes• float: 4 bytes e escala de 3.4e-38 a 3.4e+38

• double: 8 bytes e escala de 1.7e-308 a 1.7e+308

Page 12: algo 08 introducao linguagem C [Modo de Compatibilidade]rcmg/cefet-al/algo/aulas/... · 3 Linguagem de Programação C Introdução: Características da Linguagem Portabilidade Modularidade

12

Linguagem de Programação CVariáveis

Variável: elemento que pode assumir diversos valores;Variável: elemento que pode assumir diversos valores;Espaço de memória de um certo tipo de dado associado a um nome para referenciar seu conteúdo.Não podemos definir um identificador com o mesmo nome que uma palavra chaveC é case sensitive:C é case-sensitive:

• peso ≠ Peso ≠ pEso

Linguagem de Programação CVariáveis

As variáveis são declaradas depois da abertura do As variáveis são declaradas depois da abertura do bloco da função (depois da { )Sintaxe:

• tipo nome-da-variável; ou• tipo nome1, nome2, ..., nomeN; ou• tipo nome-da-variável = valor default;tipo nome da variável valor_default;

– Ex.: char nome;– int idade, num;– int soma = 0;

Page 13: algo 08 introducao linguagem C [Modo de Compatibilidade]rcmg/cefet-al/algo/aulas/... · 3 Linguagem de Programação C Introdução: Características da Linguagem Portabilidade Modularidade

13

#include <stdio.h>

Linguagem de Programação CExemplo: tipos de dados e variáveis

main( ){

int soma = 10;float money = 2.21;char letra= ‘A’;

printf(“valor de soma = %d\n”, soma);printf( valor de soma %d\n , soma);printf(“Valor de Money = %f\n”, money);printf(“Valor de Letra = %c\n”, letra);

}

Linguagem de Programação CVariáveis globais

Declaração: fora do corpo de qualquer funçãoPossuem como escopo todas as rotinas da aplicaçãoSão alocadas em tempo de compilação e ocupam memória durante toda a execução do programaObservações

• Caso se tente declarar uma variável global de mesmo nome gmais de uma vez, o compilador indicará um erro de identificador duplicado

• Caso se esteja trabalhando em uma aplicação com mais de um módulo (arquivos fontes) é preciso fazer uma indicação ao compilador que as variáveis globais já estão declaradas em outro módulo

Page 14: algo 08 introducao linguagem C [Modo de Compatibilidade]rcmg/cefet-al/algo/aulas/... · 3 Linguagem de Programação C Introdução: Características da Linguagem Portabilidade Modularidade

14

Linguagem de Programação CVariáveis globais – exemplo de uso

Linguagem de Programação CVariáveis globais

Não é obrigatório mas é melhor declarar variáveis Não é obrigatório, mas é melhor declarar variáveis globais no início do programa

Deve-se evitar o uso de variáveis globais desnecessárias

A declaração de muitas variáveis globais pode levar a erros por causas desconhecidas

Page 15: algo 08 introducao linguagem C [Modo de Compatibilidade]rcmg/cefet-al/algo/aulas/... · 3 Linguagem de Programação C Introdução: Características da Linguagem Portabilidade Modularidade

15

Linguagem de Programação CModificador de declaração extern

Indica ao compilador que os nomes e tipos que se Indica ao compilador que os nomes e tipos que se seguem já foram declarados em um outro módulo da aplicaçãoExemplo

Linguagem de Programação CModificador de declaração static

Principais usos:Principais usos:• Declaração de variáveis estáticas locais• Declaração de variáveis estáticas globais

Variáveis estáticas locais• São variáveis que são visíveis apenas na função onde foram

declaradas, como as variáveis locais,• Diferença: mantêm seus valores entre chamadas de função,

como as variáveis globais.• Exemplo do seu uso: um gerador de série de números que

produz um novo valor baseado no anterior

Page 16: algo 08 introducao linguagem C [Modo de Compatibilidade]rcmg/cefet-al/algo/aulas/... · 3 Linguagem de Programação C Introdução: Características da Linguagem Portabilidade Modularidade

16

Linguagem de Programação CModificador de declaração static - Exemplo

Linguagem de Programação CExemplo: Função que requer o uso de um modificador static localmodificador static local

Gerador de números sequenciais que produz um novo valor baseado no anterior

int series(void){t ti i t S i 100static int numSerie = 100;

numSerie = numSerie + 10;return(numSerie);

}

Page 17: algo 08 introducao linguagem C [Modo de Compatibilidade]rcmg/cefet-al/algo/aulas/... · 3 Linguagem de Programação C Introdução: Características da Linguagem Portabilidade Modularidade

17

Linguagem de Programação CVariáveis estáticas globais

São variáveis globais que são enxergadas apenas no São variáveis globais que são enxergadas apenas no módulo (arquivo fonte) onde foram declaradas.

Exemplo

Linguagem de Programação CExemplo - Continuação

Page 18: algo 08 introducao linguagem C [Modo de Compatibilidade]rcmg/cefet-al/algo/aulas/... · 3 Linguagem de Programação C Introdução: Características da Linguagem Portabilidade Modularidade

18

Linguagem de Programação CVariáveis tipo register

Na prática caracteres inteiros são colocados nos Na prática, caracteres inteiros são colocados nos registradores da CPUO especificador register só pode ser aplicado a variáveis locais e parâmetros formais;Ideais pra o controle de laços

• Muitas referências a uma mesma variável• Muitas referências a uma mesma variável.Exemplo

Linguagem de Programação COperador de Atribuição

Em C o operador de atribuição é o sinal de igual “ =”Em C o operador de atribuição é o sinal de igual

É comum programadores iniciantes na Linguagem C confundirem o “=“ com o operador lógico de igualdade “==“

Assim são corretas as expressões int x = 0; e if (x == 4) Assim, são corretas as expressões int x = 0; e if (x == 4)

Está errada a expressão (caso a intenção seja um teste)if (x = 0)

Page 19: algo 08 introducao linguagem C [Modo de Compatibilidade]rcmg/cefet-al/algo/aulas/... · 3 Linguagem de Programação C Introdução: Características da Linguagem Portabilidade Modularidade

19

Operador Ação

Operadores Aritméticos

+ Adição

* Multiplicação

/ Divisão

% Resto da divisão inteira

‐ Subtração

‐‐ Decremento

++ Incremento

Operador Ação

Operadores Lógicos e Relacionais

> Maior que

>= Maior ou igual que

< Menor que

<= Menor ou igual que

== Igual a

! Dif  d!= Diferente de

&& Condição “E”

|| Condição “OU”

! Não

Page 20: algo 08 introducao linguagem C [Modo de Compatibilidade]rcmg/cefet-al/algo/aulas/... · 3 Linguagem de Programação C Introdução: Características da Linguagem Portabilidade Modularidade

20

Operador Ação

Incremento e Decremento

i +=2; i = i + 2;

d ‐= 3; d = d – 3;

x *= y + 1; x = x * (y + 1);

y = x = 0; y = 0; x = 0;

x‐‐; x = x – 1;

++x; x = x + 1;++x; x = x + 1;

y = x‐‐; y = x; x = x – 1;

y = ++x; x = x + 1; y = x;

y = ++x + 2; x = x + 1; y = x + 2;

y = 1 + x‐‐; y = 1 + x; x = x – 1;

int main()

O modificador unsigned (sem sinal)

Linguagem de Programação C

int main() {

unsigned j = 429496700UL;int i = j;printf (“\n Variavel unsigned = %u", j);printf (“\n Variavel int = %d", i);system ("pause");return 0;

}

O bit mais significativo de uma variável é:0 se o número for positivo1 se o número for negativoUnsigned ignora o bit de sinal

Page 21: algo 08 introducao linguagem C [Modo de Compatibilidade]rcmg/cefet-al/algo/aulas/... · 3 Linguagem de Programação C Introdução: Características da Linguagem Portabilidade Modularidade

21

Operadores cast e sizeofOperador cast - conversão de tipos:

Linguagem de Programação C

Operador cast conversão de tipos: • float f = 3.5;

int i = (int) f; /* i será igual a 3 */

Operador sizeof() - retorna o tamanho da variável em bytes: bytes:

• Ex.: sizeof(i) resultaria em 2.• Ex.: sizeof(char) resultaria em 1.

Conversões de TiposQuando forem misturadas variáveis de diferentes tipos,

Linguagem de Programação C

p ,o compilador C converterá os operandos para o tipo de operando maior, de acordo com as regras descritas a seguir:

• Todo char e short é convertido para int.• Todo int é convertido para float.• Todo float é convertido para doubleTodo float é convertido para double.

Sempre de acordo com o tamanho e a escala de cada tipo!

Page 22: algo 08 introducao linguagem C [Modo de Compatibilidade]rcmg/cefet-al/algo/aulas/... · 3 Linguagem de Programação C Introdução: Características da Linguagem Portabilidade Modularidade

22

Operador de endereço &Toda variável ocupa uma área de memória e seu

Linguagem de Programação C

Ex:Main ( )

Saída: valor = 2, endereço = FA01Varia conforme memória da máquina

Toda variável ocupa uma área de memória e seu endereço é o primeiro byte por ela ocupadoQuando usamos & precedendo uma variável estamos falando do endereço desta variável na memória

{int num;num = 2;printf(“valor = %d, num);printf(“ endereço = %x”, &num);

}

Varia conforme memória da máquina

Operadores - OBSERVAÇÕES:Em C o resultado de uma expressão resultará ZERO

Linguagem de Programação C

Em C, o resultado de uma expressão resultará ZERO se for avaliada como FALSA, e resultará UM no caso de ser avaliada como VERDADEIRA.

Em C, considera-se o valor ZERO como sendo FALSO e qualquer número DIFERENTE DE ZERO como sendo e qualquer número DIFERENTE DE ZERO como sendo VERDADEIRO.

Page 23: algo 08 introducao linguagem C [Modo de Compatibilidade]rcmg/cefet-al/algo/aulas/... · 3 Linguagem de Programação C Introdução: Características da Linguagem Portabilidade Modularidade

23

Operadores – EXEMPLO 1:

Linguagem de Programação C

#include <stdio.h>

main ( ){int verdadeiro, falso;

verdadeiro = (15 < 20);

Saída: Verd.= 1 Falso = 0

verdadeiro = (15 < 20);falso = (15 == 20);printf(“Verdadeiro = %d”, verdadeiro);printf(“Falso = %d\n”, falso);

}

Operadores – EXEMPLO 2:Observa-se que ++x é diferente de x++!

Linguagem de Programação C

Sex = 10;y = ++x;

Sex = 10;y = x++;

Observa se que ++x é diferente de x++!

/* x=x+1; y=x; */

então x = 11 ey = 11

/* y=x; x=x+1 */

então x = 11 e y = 10

Page 24: algo 08 introducao linguagem C [Modo de Compatibilidade]rcmg/cefet-al/algo/aulas/... · 3 Linguagem de Programação C Introdução: Características da Linguagem Portabilidade Modularidade

24

#include<stdio h>

Linguagem de Programação COperadores – EXEMPLO 3:#include<stdio.h>main(){int n1 = 0, n2;n2 = ++n1;printf(“n1 = %d, n2 = %d\n”, n1, n2);

n2 = n1++;printf(“n1 = %d, n2 = %d\n”, n1, n2);}

Quais são as saídas deste programa ?

S

Operadores – EXEMPLO 4:

Linguagem de Programação C

Seint x = 1;int y = 2;printf(“%d = = %d é %d\n”, x, y, x = = y );

Qual a saída deste comando?resultaria em (1 == 2)=> 0 (zero)

(pois a expressão é falsa)

Page 25: algo 08 introducao linguagem C [Modo de Compatibilidade]rcmg/cefet-al/algo/aulas/... · 3 Linguagem de Programação C Introdução: Características da Linguagem Portabilidade Modularidade

25

if (10 > 4 && !(10 < 9) || 3 < 4)

Operadores – EXEMPLO 5:

Linguagem de Programação C

if (10 > 4 && !(10 < 9) || 3 <= 4)

Como seria avaliada esta instrução?resultaria em Verdadeiro, pois dez é maior que quatro E dez não é menor que nove q q qOU três é menor ou igual a quatro

ExercíciosImplementar um programa que imprima a quantidade

Linguagem de Programação C

Implementar um programa que imprima a quantidade de bytes dos tipos:

• int• float• double• char

Page 26: algo 08 introducao linguagem C [Modo de Compatibilidade]rcmg/cefet-al/algo/aulas/... · 3 Linguagem de Programação C Introdução: Características da Linguagem Portabilidade Modularidade

26

Linguagem de Programação CConstantes (Exercícios)

1. Calcular e imprimir o comprimento de um círculo.

2. Calcular e imprimir a área de um círculo.

Algoritmos e Lógica de Programação

IntroduçãoP é d

Linguagem CLinguagem C

Reinaldo [email protected]

Pré-processadorVariáveis

Operadores