Vous êtes sur la page 1sur 65

Introdução

Professor Josemar Rodrigues de Souza


 Linguagem de programação.
◦ Bibliografia.
◦ Introdução à linguagem de programação C.
 Breve revisão de lógica de programação.
Bibliografia
 Básicas.
◦ SCHILDT, Herbert. C completo e total, São Paulo, Makron
Books. 1996
◦ Programação Orientada a Objeto com C++. BUENO, André
D. São Paulo, Novatec. 2003
◦ TENEMBAUM, Aaron M. Estruturas de Dados Usando C, São
Paulo, Makron Books. 1995
 Complementares.
◦ AMMERAAL, Leendert. Algorithms and Data Structures In
C++, EUA, John Wiley & Sons. 1996
◦ Roger S. Pressman . Engenharia de Software, McGraw-Hill,
2006.
◦ Stalling, William. Arquitetura e Organização de
Computadores, 5. Ed. São Paulo. Prentice Hall. 2002.
◦ Stalling, William. Computer Organization and Architecture:
Designing for Performance, 7. Ed. Prentice Hall, 2006
Introdução à linguagem de programação C
 Tradução
CÓDIGO FONTE ... CÓDIGO OBJETO ...
SOMA = VAR1 + TOTAL ... TRADUTOR 00010110111001011001011010 ...
(linguagem de (“executável”)
programação)

 MONTADOR (assembler):
 Tradutor para linguagens de 2ª geração.

 COMPILADOR:
 Traduz todo o programa de uma vez.

 INTERPRETADOR:
 Traduz o programa instrução por instrução.
 Compiladores e Interpretadores - Ciclo de desenvolvimento

Início

Editar código
fonte
Erros de Sim
linkedição?

Não
Compilar
Sim
Executar
programa

Erros de
compilação? Erros de Sim
tempo de
Execução?
Não
Não
Linkeditar

Fim
 Histórico da Linguagem de Programação C
◦ Criada por Denis Ritchie, na década de 1970, para uso em
um computador DEC PDP-11 em Unix.
◦ C++ é uma extensão da linguagem C.
◦ O sistema Unix é escrito em C e C++.
 Estrutura básica de um programa C
diretivas para o pré-processador
declaração de variáveis globais
main ()
{
declaração de variáveis locais da função main
comandos da função main
}
 Diretivas para o processador - Bibliotecas
◦ Diretiva #include permite incluir uma biblioteca.
◦ Bibliotecas contêm funções pré-definidas,
utilizadas nos programas.
◦ Exemplos:
#include <stdio.h> Funções de entrada e saída
#include <stdlib.h> Funções padrão
#include <math.h> Funções matemáticas
#include <system.h> Funções do sistema
#include <string.h> Funções de texto
 O ambiente Bloodshed Dev-C++
◦ O Bloodshed Dev-
Dev-C++ é um ambiente integrado
de desenvolvimento (Integrated Development
Environment –IDE) de programas em C/C++ com
editor, compilador, bibliotecas e debugger.
◦ Pode ser baixado de:
http://www.bloodshed.net/dev/devcpp.html
 Usando o Dev-C++ (a)
◦ Inicie o Dev-C++ pelo ícone ou pelo menu.
◦ Crie um novo arquivo, com o comando File, New
Source File.
◦ Edite o seguinte programa (exemplo
exemplo-
exemplo-1.c).
#include <stdio.h>
main()
{
printf ("Alo mundo!");

system("PAUSE");
}
 Usando o Dev-C++ (b)
◦ Salve o programa com o nome exemplo-
exemplo-1.c. Para tanto,
selecione o menu File, Save unit as.
◦ Compile o programa com o comando Compilar & Executar,
Executar
ou com a tecla Ctrl-
Ctrl-F9.
◦ Se houver algum erro de sintaxe, aparece uma ou mais
mensagens no rodapé da janela. Neste caso, corrija o
programa e repita.
◦ Se não houver erros, execute o programa com o comando
Executar/Executar ou com a tecla Ctrl-
Ctrl-F10.
10.
#include <stdio.h>
main()
{
printf ("Alo mundo!");

system("PAUSE");
}
 Importante
◦ Termine todas as linhas com <;;>
◦ Sempre salve o programa antes de compilar.
◦ Sempre compile o programa antes de executar.
◦ Quando ocorrer um erro de compilação, dê um duplo clique
sobre a mensagem de erro para destacar o comando errado
no programa.
◦ Verifique também a linha anterior, que pode ser a
responsável pelo erro, especialmente se faltar o <;;>.
◦ Use comentários, iniciados por <//>
//>.
//>.
 Declarações
◦ Declaram as variáveis e seus tipos.
◦ Os nomes das variáveis devem conter apenas
letras, dígitos e o símbolo <_>.
◦ Até 32 caracteres.
◦ Os principais tipos são: int,
int float,
float double e char
◦ Exemplos:
int n;
int quantidade_valores;
float x, y, somaValores;
char sexo;
char nome[40];

Diferença entre letras maiúsculas e minúsculas! (exemplo-2.c)


int n, N;
n é diferente de N!
 Declarações

#include <stdio.h>
main()
{
Real: n1, n2, n3, media double n1, n2, n3, media;
...
system("PAUSE");
}
 Comando de atribuição
◦ Atribui o valor da direita à variável da esquerda
◦ O valor pode ser uma constante, uma variável ou
uma expressão
◦ Exemplos
x = 4; --> lemos x recebe 4
y = x + 2;
y = y + 4;
valor = 2.5;
sexo = 'F'
 Entrada e Saída
◦ Função scanf
scanf ("formatos", &var1, &var2,...)
Exemplos:
int i, j;
float x;
%d inteiro
char c;
char* nome; %f float
scanf("%d", &i); %lf double
scanf("%d %f", &j, &x);
scanf("%c", &c);
%c char
scanf("%s", nome); %s palavra
 Entrada e Saída
◦ Função scanf
#include <stdio.h>
main()
{
Real: n1, n2, n3, media double n1, n2, n3, media;

ler n1, n2, n3 scanf ("%lf %lf %lf",&n1, &n2, &n3);

ler n1 scanf ("%lf",&n1);


ler n2 scanf ("%lf",&n2);
ler n3 scanf ("%lf",&n3);

system("PAUSE");
}
 Entrada e Saída
◦ Função printf
printf ("formatos", var1, var2,...)

Exemplos:
int i, j;
float x;
%d inteiro
char c; %f float
char* nome; %lf double
printf("%d", i);
printf("%d, %f", j, x);
%c char
printf("%c", c); %s palavra
printf("%s", nome);
 Entrada e Saída
◦ Função printf
#include <stdio.h>
main()
{
Real: n1, n2, n3, media double n1, n2, n3, media;

ler n1, n2, n3 scanf ("%lf %lf %lf",&n1, &n2, &n3);

media=(n1+n2+n3)/3 media=(n1+n2+n3)/3;

exibir media printf (“%lf”,media);


system("PAUSE");
}
 Operadores Matemáticos
 Operadores Matemáticos
#include <stdio.h>
main()
{
Real: n1, n2, n3, media double n1, n2, n3, media;

ler n1, n2, n3 scanf ("%lf %lf %lf",&n1, &n2, &n3);

media=(n1+n2+n3)/3 media=(n1+n2+n3)/3;

system("PAUSE");
}
 Praticar!
◦ Exemplo-2.c
#include <stdio.h>
main()
{
double n1, n2, n3, media;
printf("Digite 3 notas: ");
scanf ("%lf %lf %lf",&n1, &n2, &n3);
media=(n1+n2+n3)/3;
printf ("A média é %0.2lf",media);

system("PAUSE");
}
 Exercício 1
◦ Tendo como dados de entrada a altura de uma pessoa,
construa um programa que calcule seu peso ideal,
utilizando a seguinte fórmula:
 peso ideal = (72.7*h) - 58
 Operadores de Atribuição
 Funções Matemáticas

#include <math.h>
 Exercício 2
◦ Construa um algoritmo que calcule a quantidade de latas de tinta
necessárias e o custo para pintar tanques cilíndricos de combustível, onde
são fornecidos a altura e o raio desse cilindro.
 Sabendo que:
 a lata de tinta custa R$20,00;
 cada lata contém 5 litros;
 cada litro de tinta pinta 3 metros quadrados.;
 Sabendo que:
 Área do cilindro=3,14*raio2 + 2*3,14*raio*altura;
 e que raio e altura são dados de entrada.
 Operadores Relacionais

As expressões relacionais em C retornam um número negativo:


• 1 se verdadeiro e;
• 0 se falso.
 Operadores Lógicos (a)
◦ && (E lógico): retorna verdadeiro se ambos os operandos
são verdadeiros e falso nos demais casos.
Exemplo: if( a>2 && b<3).

◦ || (OU lógico): retorna verdadeiro se um ou ambos os


operandos são verdadeiros e falso se ambos são falsos.
Exemplo: if( a>1 || b<2).

◦ ! (NÃO lógico): usada com apenas um operando. Retorna


verdadeiro se o operando é falso e vice-versa.
Exemplo: if( !var ).
 Operadores Lógicos (b)
 Estrutura condicional simples
◦ Comando if if (a<menor)
if (condição) menor=a;
comando;

if (condição) { if (a<menor) {
comando1; menor=a;
comando2; printf (“%d”, menor);
comando3; }
}

em pseudo-
pseudo-código:
código
se (a<menor) então menor=a;
 Estrutura condicional composta
 Comando if...
if...else
...else
if (condição) Executa o comando se a condição for
comando; qualquer coisa diferente de zero!
else
comando;

if (condição) { if (peso= =peso_ideal)


comando1; printf (“Você está em forma!”);
comando2; else
} else { printf (“Necessário fazer dieta!”);
comando3;
comando4;
}
em pseudo-
pseudo-código:
código
se (peso= =peso_ideal)
entao exibir “Você está em forma!”
senao exibir “Necessário fazer dieta!”
 Exercício 3
◦ Faça um programa que leia um número inteiro e
mostre uma mensagem indicando se este número
é par ou ímpar, e se é positivo ou negativo.
 Estrutura de repetição
◦ Comando for
for (var=valor inicial; condição; incremento)
comando;

for (var=valor inicial; condição; incremento)


{
comando1; Exemplo:
comando2 for (cont=3; cont<=11; cont++)
printf (“%d”,cont);
comando3;
}
Pseudo-
Pseudo-código:
Para CONT = 3 até 11 repetir
Mostrar CONT
 Exercício 4
◦ Faça um programa que apresente na tela a tabela de
conversão de graus Celsius para Fahrenheit, de -100 C a
100 C. Use um incremento de 10 C.

◦ Observação: Farenheit = (9/5)*(Celsius) + 32


 Exercício 5
◦ Escreva um programa que coloque os números de 1 a 100
na tela na ordem inversa (começando em 100 e terminando
em 1).
 Estrutura de repetição
 Comando while
Exemplo:
while (N != 0) {
while (condição) scanf ("%d",&N);
comando; if (N > MAIOR) MAIOR = N;
}
while (condição) {
comando1;
comando2 Pseudo-
Pseudo-código:
comando3; MAIOR = 0
N=1
}
Enquanto (N <> 0) repetir
Ler N
Se (N > MAIOR) então MAIOR = N
Mostrar MAIOR
 Exercício 6
◦ Faça um programa que leia números digitados pelo usuário
até ele digitar -1 (utilizando um laço while). No final,
calcule a média dos números fornecidos.
 Estrutura de repetição Exemplo:
cont=0;
◦ Comando do...while
do...while do {
do { cont = cont + 1;
printf("%d\n",cont);
comando
} while (cont < 10);
} while (condição);

Em pseudo-código:
do { CONTADOR = 0
Repetir
comando1; CONTADOR = CONTADOR + 1
comando2 exibir CONTADOR
enquanto CONTADOR < 10
comando3;
} while (condição);
 Exercício 7
◦ Escreva um programa que peça ao usuário que digite três
números inteiros, correspondentes a dia , mês e ano. Teste
os números recebidos, e em caso de haver algum inválido,
repita a leitura até conseguir valores que estejam na faixa
correta (dias entre 1 e 31, mês entre 1 e 12 e ano entre
1900 e 2100).
 Verifique se o mês e o número de dias batem. Se estiver tudo certo
imprima o número que aquele dia corresponde no ano.
 Comente seu programa.
 Vetores (array)
◦ Trata-se de automatizar a declaração de um grande número de dados de um mesmo
tipo simples. As variáveis assim declaradas se acessam através de um índice de tipo
int.
int
 Declaração:

 int v[100];

 primeira posição =0;

 última posição=99;

 Atribuição:

 v [9] = 87;

 Acessar um valor:

 a = v[9];
 Vetores (array)
◦ int v[10];
0
V[5]=10;
1
2
printf (“%d”,V[5]);
3
4
5 10
6
7
8
9
 Vetores (array) – exemplo.
exemplo.
◦ Calcular a média da nota de 5 alunos e verificar
quantos conseguiram nota acima da média.
#include <stdio
<stdio.h>
stdio.h>
main()
main()
{
int i, contA=0;
contA=0;
double soma=0, media;
double v[5];
for (i=0;i<5;i++) {
scanf ("%lf
("%lf",
lf", &v[i]);
soma = soma + v[i];
}
media = soma/i;
for (i=0;i<5;i++) {
if (v[i]>media) contA=
contA=contA+1;
contA+1;
}
printf ("%lf
("%lf %d\
%d\n", media, contA);
contA);
system("PAUSE");
}
 Exercício 8
◦ Ler 5 números, armazenando-os no vetor X[5]. Copiar este
vetor, de trás para frente (na ordem inversa de leitura), em
um segundo vetor Y[5].
 Mostrar o vetor Y.
 Strings
◦ Não existe um tipo String em C.
◦ Strings em C são uma array do tipo char que termina com
‘\0’.
◦ Para literais String, o próprio compilador coloca ‘\0’.
#include <stdio
<stdio.h>
stdio.h>
main() {
char re[] = "lagarto";
printf ("%s", re);
system("pause");
}
 Para ler uma String
◦ Comando gets
#include <stdio
<stdio.h>
stdio.h>
main(){
main(){
char re [80];
printf ("Digite o seu nome: ");
gets(re);
gets(re);
printf ("Oi %s\
%s\n", re);
system("pause");
}
 Para comparar duas strings
◦ strcmp (s1, s2); strcmp retorna 0 se as duas strings são iguais.
 Precisa do #include <string.h>
#include <stdio
<stdio.h>
stdio.h>
#include <string.h>
main(
main( ){ Pode utilizar scanf no lugar do gets, só que o
char re[80]; scanf não lê espaços em branco.
printf ("Digite a senha: ");
scanf ("%s", &re);
Se o usuário digitar:
if (strcmp(re,"laranja")==0)
strcmp(re,"laranja")==0) { >“Alexandre Costa e Silva”
printf ("Senha correta\
correta\n"); o scanf vai pegar apenas “Alexandre”.
}
else {
O gets pega tudo.
printf ("Senha invalida\
invalida\n");
}
system("pause");
}
 Para saber o tamanho de uma string
◦ int size = strlen(str);
 Retorna um valor inteiro com o número de caracteres da String.

 Precisa do #include <string.h>


#include <stdio
<stdio.h>
stdio.h>
#include <string.h>
main(){
main(){
char re[80];
printf ("Digite a palavra: ");
scanf ("%s", &re);
int size=
size=strlen(re);
strlen(re);
printf ("Esta palavra tem %d caracteres.\
caracteres.\n", size);
size);
system("pause");
}
 Para copiar o conteúdo de uma string para outra
◦ strcpy(para, de);
 Precisa do #include <string.h>
#include <stdio
<stdio.h>
stdio.h>
#include <string.h>
main()
main()
{
char str[80];
str[80];
strcpy (str,
str, "Alo");
printf ("%s", str);
str);
system("pause");
}
 Exercício 9
◦ Escreva um programa que leia duas strings e as coloque na
tela. Imprima também a segunda letra de cada string.
 Funções
 São estruturas que permitem ao programador separar o
código do seu programa em blocos.
 Uma função tem a seguinte forma :
tipo_de_retorno nome_da_funcao (parâmetros){
/*corpo da função */
}
 Funções que não retornam valor
#include <stdio
<stdio.h>
stdio.h>
void ehPar (int x){
if (x % 2) {
printf ("O numero nao eh par!\
par!\n");
}
else {
printf ("O numero eh par!\
par!\n");
}
}
int main(){
char re[80];
ehPar (3);
system("pause");
return (0);
}
 Funções que retornam valor
#include <stdio.h>
int ehPar (int x){
int z = 0;
/* o operador % retorna o resultado da divisão por 2 */
if (x % 2) return 1;
}
int main(){
char re[80];
int i = ehPar (3);
if (i!=0){
printf ("O numero eh par!");
}
system("pause");
return (0);
}
 Exercício 10
◦ Elabore um programa que tenha uma função que retorne o
reverso de um número inteiro. Por exemplo, 932-> 239.
 Exercício 11 – sala/casa
casa.
casa.
◦ Construa um programa que possua uma função que dado um número de conta
corrente com cinco dígitos, retorne o seu dígito verificador, o qual é calculado da
seguinte maneira:
maneira:
Exemplo: número da conta: 25678
a) somar número da conta com seu inverso: 25678+87652=113330
b) multiplicar cada dígito pela sua ordem posicional e somar este resultado: 1 1 3 3 3 0
1 1 3 3 3 0
0 1 2 3 4 5
1 1 6 9 12 0 = 29
 Ponteiros
◦ Ponteiros, como o próprio nome diz, é um tipo de variável que
aponta para outra (de um tipo qualquer). Na verdade um ponteiro
guarda o endereço de memória (local onde se encontra na
memória) de uma variável.

Parada para ver um pouco sobre


Arquitetura e Organização de
Computadores!
 Ponteiros
◦ Para declarar um ponteiro temos a seguinte forma geral:
 tipo_do_ponteiro *nome_da_variável;

É o asterisco (**) que faz o compilador saber que a


variável não vai guardar um valor mas sim um
endereço para aquele tipo especificado.

Exemplo:
int *TOC2; /* declara um ponteiro para um inteiro (16bits) */
 Ponteiros
int teste=20;
int *p;
p=&teste;
 p irá armazenar o endereço de memória (0) da variável teste (20). Ou seja, p não armazena o valor 20, mas
sim o endereço (0) da variável teste.
 como chegar ao valor 20 usando a variável p?

0 20
1 int teste=20;
2 int *p;
3
4 p=&teste;
5 printf("%d\n",*p);
6
7
8
9
 Ponteiros
◦ Exemplo 1:
 char algo[5] = { 5, 4, 3, 2, 1 };
 char *c;
 c=&algo[2];
 Colocamos em c o endereço do terceiro elemento de algo:
 c[0]=3, c[1]=2 e c[2]=1.
 Se tivéssemos feito c=&algo[3], então:
 c[0]=2 e c[1]=1.
 Ponteiros
◦ Exemplo 2:
int vet_notas[50];
int *pont_notas;
pont_notas=vet_notas;
Para imprimir a primeira e a décima nota de nosso vetor, temos duas opções:

print ("A primeira nota é: %d", vet_notas[0]);


print ("A primeira nota é: %d", *pont_notas);

print ("A décima nota é: %d", vet_notas[9]);


print ("A décima nota é: %d", *(pont_notas+9));
 Ponteiros
◦ Exemplo 3:
 Consideremos o trecho de código abaixo:
 char linha[80], *p; *p1;
 p = &linha[0];
 p1 = linha; /* p1 e p possuem o mesmo endereço, i.é, */
 if (p==p1)
 puts(“iguais!”);
puts(“iguais!”); /* apontam para o 1º elemento da matriz! */
 Equivalência entre vetores e ponteiros
◦ vet_notas[0]==*(pont_notas);
◦ vet_notas[1]==*(pont_notas+1);
◦ vet_notas[2]==*(pont_notas+2);
 Exercício 12..
 Inverter os elementos de uma string, usando ponteiros.
ponteiros
◦ Solução: Pela maneira convencional teríamos:
main()
{
char str[80];
int i;
printf(“Digite uma palavra: “); gets(str);
for (i=strlen(str)-1;i>=0;i--)
printf(“%c”,str[i]);
}
Resolvendo com ponteiro:
◦ com ponteiros teríamos:
teríamos
main()
{
char str[80],*p;
int i;
printf(“Digite uma palavra: “); gets(str);
p = str;
for(i = strlen(str) - 1;i>=0;i--)
printf(“%c”,*(p+i));
}
 Fluxograma
 Exemplo: adivinhar um nº entre 0 e 7 em 3 tentativas (2).
Fluxograma

/= <>
 Exercício 13..
 Fazer cronograma de um programa que gerencie/simule as estruturas de dados estáticas
e dinâmicas (Problema 1)

Vous aimerez peut-être aussi