Programação C Módulo 01 – Introdução à linguagem C Italo Valcy <[email protected]> www.ieee.org/ufba Italo Valcy Programação em C Licença de uso e distribuição 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/ Este curso foi baseado no curso “Algoritmos e Programação de Computadores” do prof. Centoducatte, da UNICAMP, disponível em <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 2 / 59 Introdução a programação Italo Valcy Programação em C 3 / 59 Introdução a programação Algoritmo 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 Italo Valcy Programação em C 4 / 59 Introdução a programação Algoritmo 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 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 5 / 59 Introdução a programação Algoritmo Enfoque em algoritmos computacionais Algoritmos corretos Conceito de “programar” Ferramentas necessárias: Fluxograma Pseudo-linguagem Linguagem de programação Ambiente de programação Italo Valcy Programação em C 6 / 59 Introdução a programação Algoritmo (fluxograma) Italo Valcy Programação em C 7 / 59 Introdução a programação Exemplo: qual o maior número Italo Valcy Programação em C 8 / 59 Introdução a programação Exemplo: qual o maior número Italo Valcy Programação em C 9 / 59 Introdução a programação Linguagem 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 10 / 59 Introdução a programação Linguagem 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 11 / 59 Introdução a programação Exemplo: qual o maior número Italo Valcy Programação em C 12 / 59 Introdução a programação Etapas para execução Italo Valcy Programação em C 13 / 59 Programação em C Italo Valcy Programação em C 14 / 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 15 / 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 16 / 59 Programação em C Estrutura do código fonte Italo Valcy Programação em C 17 / 59 Programação em C Estrutura 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 18 / 59 Programação em C Estrutura 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 19 / 59 Programação em C Estrutura 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 20 / 59 Programação em C Estilo do código fonte Linhas em branco são ignoradas Italo Valcy Programação em C 21 / 59 Programação em C Estilo do código fonte Espaços e tabulações são ignoradas Italo Valcy Programação em C 22 / 59 Programação em C Estilo do código fonte De preferência, uma instrução por linha! Italo Valcy Programação em C 23 / 59 Primeiros passos Italo Valcy Programação em C 24 / 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 25 / 59 Primeiros passos Primeiro programa em C Exercício: fazer um programa que exiba a seguinte mensagem na tela: “Ola Mundo!!!” Italo Valcy Programação em C 26 / 59 Primeiros passos Primeiro programa em C Exercício: fazer um super-programa que exiba a seguinte mensagem na tela: “Ola Mundo!!!” /* Primeiro programa em C: olamundo.c */ #include <stdio.h> int main() { printf(“Ola Mundo!!!\n”); } Italo Valcy Programação em C 27 / 59 Primeiros passos Primeiro programa em C 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) Italo Valcy Programação em C 28 / 59 Primeiros passos Funções básicas de I/O 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"); Italo Valcy Programação em C 29 / 59 Primeiros passos Funções básicas de I/O Função saída: printf Italo Valcy Programação em C 30 / 59 Primeiros passos Funções básicas de I/O 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... Italo Valcy Programação em C 31 / 59 Variáveis e tipos de dados Italo Valcy Programação em C 32 / 59 Memória Revisão de algoritmos 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. Italo Valcy Programação em C 33 / 59 Memória Conceitos 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 34 / 59 Memória Operaçõ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 35 / 59 Memória Exemplo 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 36 / 59 Memória Dificuldades 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 37 / 59 Memória Conceitos 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 38 / 59 Memória Exemplo 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 39 / 59 Variáveis e tipos de dados Variáveis 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 Italo Valcy Programação em C 40 / 59 Variáveis e tipos de dados Identificadores 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 41 / 59 Variáveis e tipos de dados Tipos 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 42 / 59 Variáveis e tipos de dados Variaçõ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 43 / 59 Variáveis e tipos de dados Caracterí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 44 / 59 Variáveis e tipos de dados Declaraçã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 45 / 59 Variáveis e tipos de dados Inicializaçã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 46 / 59 Variáveis e tipos de dados Inicialização de variáveis Ou diretamente na sua declaração: #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; } Mais de uma variável de mesmo tipo: int a = 10, b = 50, c; Italo Valcy Programação em C 47 / 59 Variáveis e tipos de dados Exercí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 48 / 59 Operadores Italo Valcy Programação em C 49 / 59 Operadores Operadores 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 50 / 59 Operadores Operadores 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 51 / 59 Exercício Programa para operações aritméticas 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: Entre com tres valores inteiros: 13 27 15 Soma: 55 Media: 18.33 Produto: 5265 Italo Valcy Programação em C 52 / 59 Exercício Programa para operações aritméticas 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: #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 53 / 59 Exercício Conversor de dias para anos 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); Italo Valcy Programação em C 54 / 59 Exercício Conversor de dias para anos Fazer um programa que leia um número natural, representando a quantidade de dias, e exiba o equivalente a quantidade de 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 55 / 59 Exercício Programa um pouco mais trabalhado 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] Entre um inteiro de 5 digitos: 42339 4 2 3 3 9 Italo Valcy Programação em C 56 / 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 http://www.mtm.ufsc.br/~azeredo/cursoC/ em: Curso de C, UNICAMP. Disponível em: http://www.ic.unicamp.br/~ducatte/mc102/mc102.html C Library Reference. Disponível http://www.cplusplus.com/reference/clibrary/ Italo Valcy Programação em C em: 57 / 59 Dúvidas Italo Valcy Programação em C 58 / 59