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 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 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 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 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 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: olamundo.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 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 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 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/