programação c - homes.dcc.ufba.brhomes.dcc.ufba.br/~italo/cursos/c/m01-introducao.pdf · italo...

58
Italo Valcy Programação em C Programação C Italo Valcy <[email protected]> www.ieee.org/ufba Módulo 01 – Introdução à linguagem C

Upload: dinhthu

Post on 26-Sep-2018

217 views

Category:

Documents


0 download

TRANSCRIPT

Italo Valcy Programação em C

Programação C

Italo Valcy <[email protected]>

www.ieee.org/ufba

Módulo 01 – Introdução à linguagem C

Italo Valcy Programação em C 2 / 59

Todo o material aqui disponível pode, posteriormente, ser utilizado sobre os termos da:

Creative Commons License: Atribuição - Uso não comercial - Permanência da Licença

http://creativecommons.org/licenses/by-nc-sa/3.0/

Licença de uso e distribuição

Este curso foi baseado no curso “Algoritmos e Programação deComputadores” do prof. Centoducatte, da UNICAMP, disponívelem <http://www.ic.unicamp.br/~ducatte/mc102/mc102.html>, e nas aulas de prof. Arnaldo V. Moura e Daniel F. Feber.

Italo Valcy Programação em C 3 / 59

Introdução a programação

Italo Valcy Programação em C 4 / 59

Introdução a programação

O que é um algoritmo?

“É um conjunto finito de regras, bem definidas, para a solução de um problema

em um tempo finito”Algoritmo mais antigo (400 a 300 AC): Algoritmo de Euclides, que calcula o máximo divisor comum (MDC) de dois números inteiros positivos.

mdc (x, y) = mdc (y, x mod y); mdc (x, 0) = x

Algoritmo

Italo Valcy Programação em C 5 / 59

Introdução a programação

Algoritmo de Euclides:

mdc (x, y) = mdc (y, x mod y); mdc (x, 0) = x

Entrada: dois valores inteiros positivos m e n (m > n)

Saída: máximo divisor comum de m e n

Algoritmo

Passo 1: Adote x = m e y = n;Passo 2: Adote r = (resto de x dividido por y);Passo 3: Adote novos valores x = y e y = r;Passo 4: Se r é diferente de 0, volte ao passo 2; senão pare         com a resposta x.

Italo Valcy Programação em C 6 / 59

Introdução a programação

Enfoque em algoritmos computacionais

Algoritmos corretos

Conceito de “programar”

Ferramentas necessárias:

Fluxograma

Pseudo-linguagem

Linguagem de programação

Ambiente de programação

Algoritmo

Italo Valcy Programação em C 7 / 59

Introdução a programaçãoAlgoritmo (fluxograma)

Italo Valcy Programação em C 8 / 59

Introdução a programaçãoExemplo: qual o maior número

Italo Valcy Programação em C 9 / 59

Introdução a programaçãoExemplo: qual o maior número

Italo Valcy Programação em C 10 / 59

Introdução a programaçãoLinguagem de programação

A linguagem de programação é um veículo para se escrever algoritmos.

Características:

Vocabulário restrito

Regras de sintaxe

Recursos automáticos de verificação da sintaxe da linguagem

Italo Valcy Programação em C 11 / 59

Introdução a programaçãoLinguagem de programação

Várias classificações:

Paradigma: funcional, lógica, estruturada, orientada a objeto, etc.

Compiladas/interpretadas, fortemente ou fracamente tipadas, alto nível até baixo nível, etc.

Várias linguagens:

C/C++, Java, PHP, C#, Python, Perl, Ruby, Assembly, Lua, etc.

Italo Valcy Programação em C 12 / 59

Introdução a programaçãoExemplo: qual o maior número

Italo Valcy Programação em C 13 / 59

Introdução a programaçãoEtapas para execução

Italo Valcy Programação em C 14 / 59

Programação em C

Italo Valcy Programação em C 15 / 59

Programação em C

“Um programa em C, independentemente de seu tamanho, consiste em funções e variáveis. Uma função

contém comandos que especificam as operações de computação a serem feitas, e as variáveis armazenam

valores usados durante a computação.”

-- Kernighan e Ritchie, 1989:6

Italo Valcy Programação em C 16 / 59

O que é C?

É uma linguagem de programação de propósito geral

Criada por Dennis Ritchie

Derivada da linguagem B

Rápida e “portável” (ANSI C)

Várias aplicações...

Kernel do Linux

GNOME

Programação de circuitos

...

Italo Valcy Programação em C 17 / 59

Programação em CEstrutura do código fonte

Italo Valcy Programação em C 18 / 59

Programação em CEstrutura do código fonte

Comentários

Texto ignorado pelo compilador

Documentação útil para descrever trechos do algoritmo

Possível em qualquer posição do código fonte

Duas formas para comentários:

Uma linha: // comentário...

Várias linhas: /* comentário …

mais comentário */

Italo Valcy Programação em C 19 / 59

Programação em CEstrutura do código fonte

Diretivas de compilador

Informam outros arquivos que devem ser consultados antes de compilar

Definem parâmetros utilizados pelo compilador

Colocadas no início do código fonte

Italo Valcy Programação em C 20 / 59

Programação em CEstrutura do código fonte

Procedimento principal (main())

Seqüência de instruções

Pontuação: Ponto-e-vírgula separa instruções

Chaves agrupam instruções relacionadas: { }

Italo Valcy Programação em C 21 / 59

Programação em CEstilo do código fonte

Linhas em branco são ignoradas

Italo Valcy Programação em C 22 / 59

Programação em CEstilo do código fonte

Espaços e tabulações são ignoradas

Italo Valcy Programação em C 23 / 59

Programação em CEstilo do código fonte

De preferência, uma instrução por linha!

Italo Valcy Programação em C 24 / 59

Primeiros passos

Italo Valcy Programação em C 25 / 59

Primeiros passos

O que você precisa?

Compilador (DJGPP, etc.)

Editor de texto (gedit/notepad, IDE)

C é Case-Sensitive:

soma != Soma != SOMA != SoMa

Originalmente Programação Modular, mas... suporta:

POO

Programação Concorrente

Italo Valcy Programação em C 26 / 59

Primeiros passos

Exercício: fazer um programa que exiba a seguinte mensagem na tela: “Ola Mundo!!!”

Primeiro programa em C

Italo Valcy Programação em C 27 / 59

Primeiros passos

Exercício: fazer um super-programa que exiba a seguinte mensagem na tela: “Ola Mundo!!!”

Primeiro programa em C

/* Primeiro programa em C: ola­mundo.c */

#include <stdio.h>

int main() {   printf(“Ola Mundo!!!\n”);}

Italo Valcy Programação em C 28 / 59

Primeiros passos

Compilar e executar:

gcc -o ola-mundo ola-mundo.c

./ola-mundo

No Dev C++:

Executar > Compilar (ou CTRL+F9)

Executar > Executar (ou CTRL+F10)

Primeiro programa em C

Italo Valcy Programação em C 29 / 59

Primeiros passos

Função saída: printf

printf – print + formato

Exemplo de utilização:

printf(string-de-controle, lista-de-argumentos)

printf ("%f",40.345) -> "40.345"

printf("Ola mundo!\n");

Funções básicas de I/O

Italo Valcy Programação em C 30 / 59

Primeiros passos

Função saída: printf

Funções básicas de I/O

Italo Valcy Programação em C 31 / 59

Primeiros passos

Função entrada: scanf

scanf – scan + formato

Exemplo de utilização:

scanf(string-de-controle, lista-de-argumentos)

scanf ("%d",&x);

scanf("%f %f", &num1, &num2);

Cuidado com o buffer na leitura de string...

Funções básicas de I/O

Italo Valcy Programação em C 32 / 59

Variáveis e tipos de dados

Italo Valcy Programação em C 33 / 59

Memória

Algoritmos usam dados e produzem um resultado.

Um passo de um algoritmo:

Lê dados armazenados no computador

Executa operações matemáticas e lógicas sobre dados.

Armazena o resultado.

Revisão de algoritmos

Italo Valcy Programação em C 34 / 59

MemóriaConceitos

Memória: sequência de células

Célula armazena um dado

Posição da célula = endereço

Célula = endereço + conteúdo

Um único valor por célula

Valores grandes: mais células

Armazenamento volátil

Italo Valcy Programação em C 35 / 59

MemóriaOperações na memória

1. Consulta (lê) células de memória

2. Programa calcula um novo valor

3. Armazena (escreve) o novo valor em uma célula

Italo Valcy Programação em C 36 / 59

MemóriaExemplo de operação em memória

Máximo Divisor Comum

1. Leia um número e escreva na célula 1

2. Leia um número e escreva na célula 2

3. Divida o valor da célula 1 pelo valor da célula 2. Guarde o quociente na célula 3 e o resto na célula 4.

4. Se o valor da célula 4 for 0 (zero), então mostre o valor da célula 2 e PARE.

5. Escreva na célula 1 o valor da célula 2.

6. Escreva na célula 2 o valor da célula 4.

7. Retorne ao passo 3.

Italo Valcy Programação em C 37 / 59

MemóriaDificuldades

Complexidade desnecessária no algoritmo

Difícil manutenção do código

Impossível prever células livres

Interferência por execução simultânea

Italo Valcy Programação em C 38 / 59

MemóriaConceitos

Abstração dos endereços de memória

Rótulo para cada endereço

Maior semelhança com descrição do algoritmo

Italo Valcy Programação em C 39 / 59

MemóriaExemplo de operação em memória

Máximo Divisor Comum

1. Leia um número e escreva na variável A

2. Leia um número e escreva na variável B

3. Divida o valor da variável A pelo valor da célula 2. Guarde o quociente na variável Q e o resto na variável R.

4. Se o valor da variável R for 0 (zero), então mostre o valor da variável B e PARE.

5. Copie o conteúdo da variável B para variável A

6. Copie o conteúdo da variável R para variável B

7. Retorne ao passo 3.

Italo Valcy Programação em C 40 / 59

Variáveis e tipos de dados

Uma variável é uma porção de memória, utilizada para armazenar um determinado valor:

a = 5

b = 2

a = a + 1

result = a – b

Variáveis

Italo Valcy Programação em C 41 / 59

Variáveis e tipos de dadosIdentificadores

Cada variável necessita de um Identificador que a distingue das outras:

Lestras (a-z, A-Z) + dígitos (0-9) + underscore (_)

Não podem iniciar com dígitos

Cuidado com as palavras reservadas:

Dica de boa prática:

Uso de identificadores mnemónicos

Italo Valcy Programação em C 42 / 59

Variáveis e tipos de dadosTipos de dados fundamentais

Ok, iremos armazenar os dados na memória, mas o computador precisa saber que tipo de dado está armazenando...

Tipos fundamentais:

char – Armazenamento de caracteres

int – Armazenamento de inteiros

float – Ponto flutuante em precisão simples

double – Ponto flutuante em dupla precisão

Italo Valcy Programação em C 43 / 59

Variáveis e tipos de dadosVariações dos tipos básicos

unsigned char: caracter sem sinal;

long int: número inteiro, com domınio estendido;

unsigned int: numero inteiro positivo;

unsigned long int: numero inteiro positivo com domínio estendido.

short int: inteiro com dom ınio reduzido.́

unsigned short int: inteiro positivo com domínio reduzido.

Italo Valcy Programação em C 44 / 59

Variáveis e tipos de dadosCaracterísticas dos tipos

NOTA: é possível especificar a precisão de formatação      no printf, por exemplo, das seguintes maneiras: ­ printf(“%.2f”, 12.66668); => 12.67 ­ printf("% 10s", "aaa"); => “       aaa”

Italo Valcy Programação em C 45 / 59

Variáveis e tipos de dadosDeclaração de variáveis

Para declarar variáveis em C, digite o tipo da variável seguido por um identificador válido:

int a;

int b;

float mynumber;

É possível declarar variáveis de mesmo tipo na mesma linha:

int a, b;

Italo Valcy Programação em C 46 / 59

Variáveis e tipos de dadosInicialização de variáveis

É possível inicializar variáveis através de atribuição após a declaração:

#include <stdio.h>

int main(void){  int evento ;  char corrida;  float tempo;  evento = 5;  corrida = 'C';  tempo = 27.25;  printf(“O tempo vitorioso na eliminatoria %c”,corrida);  printf(“\nda competicao %d foi %f.”, evento, tempo);  return 1;}

Italo Valcy Programação em C 47 / 59

Variáveis e tipos de dadosInicialização de variáveis

Ou diretamente na sua declaração:

Mais de uma variável de mesmo tipo:

int a = 10, b = 50, c;

#include <stdio.h>

int main(void){  int evento = 5;  char corrida = 'C';  float tempo = 27.25;  printf(“O tempo vitorioso na eliminatoria %c”,corrida);  printf(“\nda competicao %d foi %f.”, evento, tempo);  return 1;}

Italo Valcy Programação em C 48 / 59

Variáveis e tipos de dadosExercício

Aponte os erros no programa abaixo:

#include <stdio.h>

int main(void){  int a=1; x=2; c=3;  float 1a_parcela = 100.0; // valor do carro  float d := 54.12;  printf(“Os numeros sao: %d, %d e %d\n,a,d,c,x)  Printf(“1a parcela = %f\n”, 1a_parcela);}

Italo Valcy Programação em C 49 / 59

Operadores

Italo Valcy Programação em C 50 / 59

OperadoresOperadores Aritméticos

Operadores aritméticos

A divisão inteira trunca qualquer parte fracionária

A seguinte expressão produz o resto da divisão de x por y (somente aplicado à int):

x % y

5 % 3 resulta em 2

Italo Valcy Programação em C 51 / 59

OperadoresOperadores Aritméticos – Precedência

Os operadores aritméticos se associam da esquerda para direita

Precedência:

os operadores binários + e – possuem a mesma precedência,

que é menor que a precedência de *, / e %,

que por sua vez é menor que a do + e – unário.

Italo Valcy Programação em C 52 / 59

Exercício

Fazer um programa que leia três inteiros a partir do teclado, calcule e imprima a soma, a média e o produto entre eles. Exemplo:

Programa para operações aritméticas

Entre com tres valores inteiros: 13 27 15Soma: 55Media: 18.33Produto: 5265

Italo Valcy Programação em C 53 / 59

Exercício

Fazer um programa que leia três inteiros a partir do teclado, calcule e imprima a soma, a média e o produto entre eles. Exemplo:

Programa para operações aritméticas

#include <stdio.h>

int main() {   int a,b,c;   printf("Entre com tres valores inteiros: ");   scanf("%d %d %d",&a,&b,&c);   printf("Soma: %d\n", a+b+c);   printf("Media: %.2f\n", (a+b+c)/3.0);   printf("Produto: %d\n",a*b*c);   return 0;}

Italo Valcy Programação em C 54 / 59

Exercício

Fazer um programa que leia um número natural, representando a quantidade de dias, e exiba o equivalente a quantidade de anos.

Exemplo:

365 dias => ~1 ano

1461 dias => 4 anos

Dica: para ler um inteiro na variável x, fazemos:

scanf(“%d”, &x);

Dica: para imprimir int e float (x e y, respec.):

printf(“numero int: %d; numero float: %f\n”, x, y);

Conversor de dias para anos

Italo Valcy Programação em C 55 / 59

Exercício

Fazer um programa que leia um número natural, representando a quantidade de dias, e exiba o equivalente a quantidade de anos.

Conversor de dias para anos

/* Conversao dias para anos: dias2anos.c */#include <stdio.h>

int main() {int dias;float anos;

printf(“Digite o numero de dias: ”);scanf(“%d”,&dias);anos = dias / 365.25;printf(“\n%d dias equivale a %f anos.\n”,dias, anos);

}

Italo Valcy Programação em C 56 / 59

Exercício

Fazer um programa que leia um número inteiro de cinco dígitos, separa o inteiro em seus dígitos individuais e imprime os dígitos separados entre si por três espaços cada [Dica: utilize operadores de divisão de inteiros e módulo]

Programa um pouco mais trabalhado

Entre um inteiro de 5 digitos: 42339   4   2   3   3   9

Italo Valcy Programação em C 57 / 59

Referências

KERNIGHAN, B.W. C and RITCHIE, D.M.: A linguagem de programação. Tradução de: The C Programming Language. Edisa, 1986.

Curso de C, UFMG. Disponível em: http://www.mtm.ufsc.br/~azeredo/cursoC/

Curso de C, UNICAMP. Disponível em: http://www.ic.unicamp.br/~ducatte/mc102/mc102.html

C Library Reference. Disponível em: http://www.cplusplus.com/reference/clibrary/

Italo Valcy Programação em C 58 / 59

Dúvidas