Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

Curso C - Mecajun

No description
by

Luan Araujo

on 14 June 2016

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of Curso C - Mecajun

fat(int n)
{
if(n==0)
{
return 1;
}
else
{
return (n*fat(n-1));
}
}
1
Introdução
Conceitos Básicos
Lógica de programação em C
Vetores e matrizes
Funções
Ponteiros
Estruturas
Linguagens de Programação
Faça o que eu digo!
100011011010010
110010111101100
11101010011101 ?
Nem o melhor dos programadores tem um raciocínio lógico disciplinado o suficiente para falar binário fluentemente.
Seria muito pouco eficiente
e muito complicado construir
um computador que falasse
português ou qualquer outra
linguagem humana.
Comunicação falha, pois:
Programa para tradução.
Binário
Linguagem de programação
Linguagens de Programação
Linguagens de Baixo Nível
Linguagens de Alto Nível
Classificação quanto ao grau de abstração
Uma breve história do C
Dennis Ritchie e Brian Kernighan criam o C para desenvolver o sistema operacional Unix
1972
1983
O instituto norte-americano de padrões (ANSI) formou um comitê para estabelecer uma especificação do padrão da linguagem C.
1978
O padrão ANSI foi completo e K&R o encorporam na segunda edição do seu livro.
1989
O padrão ANSI C, após sofrer umas modificações menores, foi adotado pela Organização Internacional para Padronização (ISO).
1990
HOJE
Brian Kernighan e Dennis Ritchie publicam o primeiro manual do C, the C programming language.
Compilando um programa em C
Compilador
GCC
O GNU Compiler Collection é o compilador mais usado para o desenvolvimento de aplicações em C.
Como complilar um programa com o gcc?
$>gcc -ansi -Wall nome_codigo.c -o nome_programa
$>_
$>./nome_programa
Hello world!
$>_
Primeiro programa em C
/*Meu primeiro programa em C*/
#include<stdio.h>

int main()
{
printf("Hello world!\n");
return 0;
}
Algoritmo
Processo constituído por uma sequência ordenada e bem definida de passos que conduzem ao resultado almejado.
Por exemplo:
Receita de Pizza
Dados são: Números, medidas ou valores. Uma informação é basicamente a interpretação e compreensão de um conjunto de dados.
Dados e Informação
INGREDIENTES:
2 xícaras de farinha de trigo
2 colheres de sopa de manteiga
1 colher de chá de sal
2 colheres de sopa de fermento
2/3 de xícara de leite
Queijo muçarela
Queijo parmesão ralado
Tomate, cebola, azeitona e pimentão
Azeite doce
MODO DE FAZER:
Misture todos os cinco primeiros ingredientes. Caso fique duro, acrescente um pouco mais de leite. Unte a forma com óleo e espalhe a massa na própia forma. Cubra com fatias de muçarela, parmesão e o molho de tomate, além de fatias de cebola e tomate. Caso queira, acrescente um pouco de sardinha, atum ou peito de peru defumado. Leve ao fogo por uns 5 minutos ou ao forno para assar.
Especificidades do C
Estruturada
Sequencial
De Repetição
De Decisão
Case Sensitive
main ≠ mAin
Palavras Restritas
Variáveis
O que é uma variável?
Operadores
Entrada e Saída de Dados
...
...
...
nome
João
Tipos Primitivos de Variáveis
Modificadores de Tipos
short
long
signed
unsigned
Nomes das variáveis
Pode ser qualquer combinação de letras, números e "_", desde que:
Não comece com números
Não seja uma palavra reservada do C
Declaração
Inicialização
Declarar uma variável é criá-la para uso.
Como declarar uma variável em c?
tipo_variavel nome_variavel;
int x;
char sexo;
float altura;
int a, b;
É atribuir um valor inicial a ela.
Em C podemos fazer isso junto com a declaração.
int resposta = 42;
char letra = 'C';
float e = 2.718281;
double pi = 3.1415916538;
Escopo de Variáveis
Local
Global
É quando a variável é criada dentro de um função e só pode ser usada dentro dela.
É quando a variável é criada fora das funções e pode ser usada em qualquer uma delas.
int main()
{
int a;
}
int b;
int main()
{
int a;
}
Binários
Unários
Relacionais
==
Lógicos
1969
Ken Thompson cria a limguagem B.
stdio.h
printf
scanf
printf("Oi");
printf("Idade = %d", idade);
printf("R$ %.2f", custo);
Oi
Idade = 21
R$ 2.50
scanf("especificador", &variável);
scanf("%d", &idade);
scanf("%f", &custo);
Exercícios
1. Faça um programa que receba a quantidade de km de uma corrida de táxi e mostre na tela o total a ser pago. Sabendo que a bandeirada é R$ 3,00 e é cobrado R$0,40 por cada km rodado.
Estruturas de Decisão
if
if(condição)
{
comando 1;
comando 2;
...
comando n;
}
if(idade>=18)
{
printf("Maior de idade.");
}
Amor, vá à padaria e traga 2 caixas de leite, se tiver ovos, traga 12.
...
!?!
Amor, por que você comprou 12 caixas de leite?
Porque eles tinham ovos.
else
if(condição)
{
comando(s)
}
else
{
comando(s)
}
if(idade>=18)
{
printf("Maior de idade.");
}
else
{
printf("Menor de idade");
}
Exercícios
1. Em um determinado supermercado, as laranjas custam R$ 1,00 cada se forem compradas 12 ou mais, e R$ 1,30 se forem compradas menos que uma dúzia. Escreva um algoritmo que leia o número de laranjas compradas, calcule e mostre na tela o custo total da compra.

2. Escreva um algoritmo que leia o salário de quatro pessoas e escreva o maior deles.

3.Faça um algoritmo que leia a hora de início e fim de um jogo de Xadrez (considere apenas horas inteiras, sem os minutos) e calcule a duração do jogo em horas, sabendo-se que o tempo máximo de duração do jogo é de 24 horas e que o jogo pode iniciar em um dia e terminar no dia seguinte.
Estruturas de Repetição
Com teste no início
Com teste no final
Contada
Exercícios
1. Calcule e imprima a média aritmética das idades de um grupo de pessoas fornecidas pelo usuário, cada idade sendo maior que zero. A entrada dos dados é finalizada quando o usuário digitar um valor igual a 0 (zero).Teste o programa para a entrada 60,20,30,70,45,25,0. A resposta correta é: 41,66.

2. Partindo-se de um único casal de coelhos filhotes recém-nascidos, supondo que um casal de coelhos se torne fértil após dois meses de vida e a partir de então, produz um novo casal a cada mês e assumindo que os coelhos nunca morrem, a quantidade de casais de coelhos após n meses é dado pelo n-ésimo termo da seguinte sequência:
Fn = F n-2 + F n-1, n >= 2. E F0 = 0, F1 = 1. Esta sequência é chamada de sequência de Fibonacci. Faça um programa que mostre a quantidade de casais de coelhos após n meses, onde n é dado pelo usuário.

3. Imprima o valor de x , para valores de x e k (ambos maiores ou iguais a zero) informados pelo usuário. Informe quatro pares de valores. Quando x = k = 0, o programa deve retornar: Impossibilidade.
Execute o programa com os seguintes dados:
x = 4, k = 2; A resposta correta é: 16.
x = 3, k = 4; A resposta correta é: 81.
x = 10, k = 0; A resposta correta é: 1.
x = 2, k = 8; A resposta correta é: 256.

4. Modifique o problema anterior para, além do que foi solicitado:
a. Aceitar o coeficiente k negativo (exemplo: 2 = 1/2 = 1/8 = 0,125);
b. Aceitar os valores de x e k negativos (exemplos: (-2)=4, (-2)=-8, (-2)=1/(-2)=1/4=0.25).
while(condição)
{
comandos
}
printf("Digite um número positivo: ");
scanf("%d", &numero);
while(numero<=0)
{
printf("\aErro! O numero deve ser positivo, digite novamente: ");
scanf("%d", &numero);
}
do
{
comandos
}
while(condição);
do
{
printf("Digite um numero positivo: ");
scanf("%d", &numero);
}
while(numero<=0);
for(comando inicial; condição, incremento)
{
comandos
}
printf("Tabuada do 7:\n\n");
for(i=0; i<10; i++)
{
printf("7 x %d = %d\n", i+1, 7*(i+1));
}
Onde estudar?
...
...
Vetores
int a;
a = 42;
printf("%d", a);
a
42
...
...
int vet[3];
vet
0
1
2
vet[0]=12;
vet[2]=5;
vet[1]=13;
vet[3]=77;
?
?
12
5
13
Vetores
Strings
Matriz
string.h
k
O que é um vetor?
Como usar um vetor
Para declarar um vetor precisamos definir o seu tamanho (número de células) da seguinte forma:
int vetor[20];
E podemos acessar cada célula considerando o índice associado:
vetor[0] = 2;
vetor[1] = 3;
Vou ao banheiro.
Tem alguém sentado neste lugar?
Hã!? Claro que não! Tu es cego?
Tem sim, ela só foi ao banheiro.
Brasil
Portugal
Propósito
Binário
Assembly
C
MATLAB
Java
Basic
int main()
{
float nota, notas[30];
int i;

for(i = 0; i < 30 ; i++)
{
printf("Informe a nota do %d aluno: ", i+1);
scanf("%f", &nota);
notas[i] = nota;
}

return 0;
}
2 3
int main()
{
float notas[30];
int i;

for(i = 0; i < 30 ; i++)
{
printf("Informe a nota do %d aluno: ", i+1);
scanf("%f", &notas[i]);
}

return 0;
}
printf("%d %d\n", vetor[0], vetor[1]);
FALHA DE SEGMENTAÇÃO!!!
Strings são cadeias de caracteres, vetores de chars.
PALAVRAS
FRASES, PARAGRAFOS E TEXTOS.
...
...
m
e
c
a
j
u
n
'm'
'e'
'c'
'a'
'j'
'u'
'n'
|
'\0'
null-terminated string
#include<stdio.h>

int main()
{
char nome[30];

printf("Qual o seu nome? ");
scanf("%s", nome);
printf("Olá %s, meu nome é J.A.R.V.I.S.", nome);

return 0;
}
Qual o seu nome?
Olá Luan, meu nome é J.A.R.V.I.S.
Luan
int strlen (char *string)
Retorna o tamanho da string
Matriz é um vetor de vetores.
char* strcpy (char *stringdestino, char* stringorigem)
Copia a string fonte na string destino (que deve ser grande o suficiente para comportar a string fonte)
int strcmp (char *string1, char *string2)
Compara as strings 1 e 2 e retorna:
< 0, se string 1 < string2;
0, se string1 == string2;
> 0, se string1 > string2.
include<stdio.h>
include<string.h>

int main ()
{
int tam;
char nome[30];

printf("Informe seu primeiro nome: ");
scanf("%s", nome);

tam = strlen(nome);
printf("O seu nome tem %d letras.\n", tam);

return 0;
}
...
...
int mat[4][4];
include<stdio.h>
include<string.h>

int main ()
{
char string1[30], string2[30];
int comp;

printf("Informe o primeiro nome: ");
scanf("%s", string1);
printf("Informe o segundo nome: ");
scanf("%s", string2);

comp = strcmp(string1, string2);
if(comp < 0){
printf("Tamanho do nome 1 < Tamanho do nome 2\n");
}
else if (comp > 0){
printf("Tamanho do nome 1 > Tamanho do nome 2\n");
}
else{
printf("Tamanho do nome 1 == Tamanho do nome 2\n");
}
return 0;
}
mat
mat[0][2] = 2;
mat[3][1] = 4;
mat[2][2] = 4;
include<stdio.h>

int main ()
{
char palavra1[30], palavra2[30];
int i;

i = 0;
while (palavra1[i] != '\0')
{
palavra2[i] = palavra1[i];
i++;
}
palavra2[i] = '\0';

return 0;
}
4
2
4
0 0
0 1
0 2
0 3
1 0
1 1
1 2
1 3
2 0
2 1
2 2
2 3
3 0
3 1
3 2
3 3
1
2
3
4
5
include<stdio.h>
include<string.h>

int main ()
{
char palavra1[30], palavra2[30];

strcpy(palavra2, palavra1);

return 0;
}
NOOOOOOOO!!!!
Módulo, direção e sentido.
Qualquer ser vivo que transmite doenças.
Direção seguida por um míssil.
Uma sequência de variáveis ordenadas na memória.
6
7
8
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
0
0
1
2
3
4
5
6
7
Recursividade
float quadrado (float a)
{
float resultado;

resultado = a*a;

return resultado;
}
float quadrado (float a)
{
float resultado = a*a;

return resultado;
}
float quadrado (float a)
{
return (a*a);
}
int main()
{
float x;

scanf("%f", &x);
printf("%f ao quadrado eh %f", x, quadrado(x));
return 0;
}
2
2
2
fat(int n)
{
if(n==0)
{
return 1;
}
else
{
return (n*fat(n-1));
}
}
1
1
1
0
fat(int n)
{
if(n==0)
{
return 1;
}
else
{
return (n*fat(n-1));
}
}
0
0
2
1
1
Exercícios
1. Faça um programa que lê um vetor (A) com 15 elementos e constrói um vetor B do mesmo tipo e tamanho, onda cada elemento de B é o triplo do elemento correspondente de A.
1
2. Leia uma seqüência de n números inteiros e armazene em um vetor de 50 posições. Assuma que n <= 50. Seu programa deve determinar o segmento de soma máxima de elementos consecutivos dentro do vetor. Exemplo: Na seqüência 5, 2, -2, -7, 3, 14, 10, -3, 9, -6, 4, 1 , a soma do segmento (3, 14, 10, -3, 9) é 33.
Exercícios
Exercícios
1. Fazer um programa que lê dois valores inteiros m e n, onde m e n indicam, respectivamente, o número de linhas e colunas de uma matriz A do tipo real. Verificar se existem elementos repetidos em A e indicar quantas vezes aquele elemento aparece em A. Assuma que apenas um elemento pode se repetir na matriz.
2. Campo minado: Faça um programa que leia uma matriz 20 x 20 de caracteres do teclado. Cada caractere pode ser: * (asterisco) representa uma bomba na coordenada lida; - (traço) representa um local sem bomba. Crie uma matriz de inteiros 20 x 20 que contenha para cada posição [i,j] o número de bombas na vizinhança. Imprima essa matriz na
tela. Cada posição tem no máximo 8 vizinhos (as diagonais contam).
2. Faça um programa que leia, via teclado, duas strings formadas apenas por letras e espaços brancos. O programa deve imprimir uma lista das palavras que aparecem simultaneamente nas duas strings. Pode-se supor que em cada uma das strings não há palavras repetidas.
1. Crie um programa que leia o nome de uma pessoa (20 caracteres) e o escreva de trás para frente.
Usando uma matriz no C
int matriz[10][10];
matriz[0][1] = 50;
Podemos acessar cada célula da matriz utilizando dois laços de repetição contada (percorremos as linhas e as colunas da matriz)
Declaração
Acessando uma célula da matriz
(...)
for (i = 0; i < 10; i++)
{
for(j = 0; j < 10; j++)
{
matriz[i][j] = i * j;
}
}
(...)
2
Permitem a utilização de um bloco de código diversas vezes e em várias posições diferentes do programa.
Funções
tipo_de_retorno nome(tipo arg1, tipo arg2, ...,tipo argN)
{
...
bloco_de_código;
...

return (valor_retornado);
}
void oi (void)
{
printf("Oi!\n");
}
Iterativo:
Resolver problemas com diversas iterações em
estruturas de repetição.
● Recursivo:
Resolver problemas com uma função chamando a si mesma diversas vezes.

Recursividade e Iteratividade
int fatorial(int n)
{
int i;
int fat = 1;

for(i = 2; i <= n; i++)
{
fat *= i;
}
return fat;
}
-3
3
2
3
-2
2
Exercícios
1. Considere a definição para a série de Fibonacci:
F =0, F =1, F =F + F .
Crie uma função recursiva para resolver a série de Fibonacci para um número qualquer.
2. Escreva uma função recursiva que calcula e retorna a função potência x, onde o usuário deve informar valores para x e y.
y
Exercícios
1. Escreva um programa que leia um número de pessoas (n), e para cada pessoa leia a altura e o sexo da mesma. Este programa deve utilizar uma função, que recebe a altura e o sexo da pessoa e retorna o seu peso ideal. Para homens, calcular o peso ideal usando a fórmula peso_ideal = 72.7 x alt - 58 e para mulheres peso_ideal = 62.1 x alt - 44.7.
Obs: o peso ideal deve ser mostrado na main().

2. Faça um programa com uma função que calcule X elevado a Y, ou seja, X. Leia no programa principal os valores de X e Y, repasse-os para a função e a mesma deve retornar o resultado da chamada da sub-rotina. Obs: o resultado deve ser mostrado na tela na main(), e não na função. Exemplo:
2 elevado a 3 é igual a 2*2*2 = 8.
Y
É uma variável que aponta para outra.
Guardando o seu endereço na memória.
O que é?
Como?
Operadores
&
*
endereço da variavel
conteudo do endereço do ponteiro
...
1066
1070
1074
int a, b, c;
a
b
c
1066
1067
1068
1069
char tamanho;
1078
1079
tamanho
Declaração
tipo nome;
pointer p;
int *intp;
o conteudo do endereço guardado em intp
é um inteiro
char *charp;
o conteudo do endereço guardado em charp é um char
NÃO CONFUNDA
*intp
é inteiro
intp
é inteiro (pois é um endereço de memória)
*charp
é caractere
charp
é inteiro (pois é um endereço de memória)
int *p1;
char *p2;
p1
p2
1083
1087
a = 1;
b = 37;
c = 99;
tamanho = 'M';
1
37
M
99
p1 = b;
p1 = &b;
1070
p2 = &tamanho;
1078
printf("O conteudo do endereco %p eh %d\n", p1, *p1);
printf("O conteudo do endereco %p eh %c\n", p2, *p2);
O conteudo do endereco 1070 eh 37
O conteudo do endereco 1078 eh M
Exercício
Curiosidade
- Professor, existe ponteiro para qualquer variável?
- Sim, existe.
- E ponteiro é uma variável?
- Sim, é.
- Então... Existe ponteiro de ponteiro?
- Sim existe, quer ver como seria?
- Quero!
- Ok!
int **p3;
p3 = &p1;
p3
1079
- Ahhhh! Então eu tenho sempre que saber para quem eu vou apontar na hora de declarar o ponteiro?
- Sempre que possivel seria bom que fizesse isso. Mas as vezes nós somos obrigados a uzar ponteiros genéricos. Você consegue pensar em algum caso?
- E se eu quizesse fazer um ponteiro que aponte para ele mesmo?
- Bom, não sei qual seria a utilidade disso. Mas ta ai uma coisa que só dar pra fazer com pontéiros genericos. Fica assim...
void *p4;
p4
2375
p4 = &p4;
2375
Passagem para a função por parametro
O que é?
Para que serve?
Passar o endereço de uma variavel para função ao invés de uma cópia dela.
Para você alterar uma variável da macro na subrotina.
Como é???
3. Faça um programa que leia dois números inteiros (a e b), troque seus conteúdos e mostre-os na tela.

2. Faça um programa que receba o raio da base e a altura de um cilindro e mostre seu volume na tela. (V=pi*r*r*h, pi=3,14)
4. Faça um programa que leia as notas e os pesos de três provas de um aluno e, ao final, mostre a sua média.
Digamos que você queira fazer o seguinte exercício em uma função:
...
...
...
...
void troca(int a, int b)
{
int aux;

aux = a;
a = b;
b = aux;
}
int main()
{
int a, b;

scanf("%d", &a);
scanf("%d", &b);
troca(a, b);
printf("%d %d\n", a, b);

return 0;
}
void troca(int *ap, int *bp)
{
int aux;

aux = *ap;
*ap = *bp;
*b p= aux;
}
int main()
{
int a, b;

scanf("%d", &a);
scanf("%d", &b);
troca(&a, &b);
printf("%d %d\n" a, b);

return 0;
}
a
b
main
2
3
2 3
2
3
troca
a
b
2
3
aux
2
2
3
3 2
3
2
main
a
b
2
3
troca
ap
bp
aux
3
3456
3460
3456
3460
2
2
Exercício
1. Escrever uma função que receba como parâmetros 5 (cinco) variáveis do tipo float e retorne o maior e o menor valor. As 5 (cinco) variáveis devem ser lidas na main(), enviadas como parâmetros para a função, que deve retornar o maior e o menor valor à main().
Suponha que você esteja fazendo um programa para cadastro de 250 pessoas, no qual você tem que guardar o número de matrícula, o ano de nascimento e a quantidade de filhos, e você quer fazer isso em uma única estrutura de dados.
Fácil pois todos os dados são do mesmo tipo.
#include<stdio.h>

int main()
{
int cadastro[250][3];
int i;

for(i=0; i<250)
{
scanf("%d", &cadastro[i][0]);
scanf("%d", &cadastro[i][1]);
scanf("%d", &cadastro[i][2]);
}

return 0;
}
#include<stdio.h>

#define MATRICULA 0
#define ANO 1
#define FILHOS 2

int main()
{
int cadastro[250][3];
int i;

for(i=0; i<250)
{
scanf("%d", &cadastro[i][MATRICULA]);
scanf("%d", &cadastro[i][ANO]);
scanf("%d", &cadastro[i][FILHOS]);
}

return 0;
}
Ok! Mas esta solução falha se os dados não forem do mesmo tipo, como em geral não são (afinal que tipo de cadastro não contem o nome da pessoa?). Suponha agora que os dados para cadastro sejam nome, renda, cpf e sexo.
Um registro ou estrutura é uma coleção de campos, em que cada campo pode ser de um tipo de dado diferente. Por isso, os registros são conhecidos como variáveis compostas heterogêneas.
Definição
Declaração
Uso
struct nome_da_estrutura
{
elementos da estrutura
};
struct nome_da_estrutura estrutura;
estrutura.elemento
tipo_variavel
nome_variavel
include<stdio.h>

struct cadastro
{
char nome[50], sexo;
int cpf;
float renda;
}

int main()
{
struct cadastro funcionario[250];
int i;

for(i=0; i<250; i++)
{
scanf("%s", funcionario[i].nome);
scanf("%c", &funcionario[i].sexo);
scanf("%d", &funcionario[i].cpf);
scanf("%f", &funcionario[i].renda);
}

return 0;
}
Exercícios
1.Faça um programa que leia e guarde numa tabela cádigos e nomes de profissões. Dado o código de uma determinada profissão, encontre e imprima o respectivo nome. O usuário deve informar o tamanho da tabela no início do programa.

2. Faça um programa que leia os dados de uma agenda telefônica com a estrutura abaixo e imprima os contatos que fazem aniversário no mês de dezembro. A agenda deve conter 10 registros.
Agenda
Nome
Endereço
Telefone
Aniversário
Dia
Mês
Ano
3. Altere o programa do item anterior para que mostre os contatos em ordem alfabética de nome. Crie uma função para ordenar o vetor de registros.
0
1
n
n-1
n-2
printf("Tabuada do 7:\n\n");
for(i=1; i<=10; i++)
{
printf("7 x %d = %d\n", i, 7*i);
}
Full transcript