CeMatlab SLIDES Aula3
CeMatlab SLIDES Aula3
Linguagem C e MATLAB
Aula 03
07/abr/2011
2
Refresh
` printf( ), scanf( ), sizeof( ),
getch( )
◦ Chamada de função, formatos de
impressão, leitura formatada, operador &
` if
` while
` IDE
3
Controle de fluxo e loop
` controle de fluxo = tomada de decisão
` loop = repetição
` Usados junto de expressões relacionais
(comparações).
` Exemplos do uso de operadores relacionais:
1. 2.
while (num < 6) while (ch != ‘s’)
{ {
printf(“O numero é baixo.\n”); count++;
scanf(“%d”, &num); scanf(“%c”, &ch);
} }
4
Stephen Prata, C Primer Plus, 5th Ed.
Prog01 true e false
#include <stdio.h>
#include <conio.h>
int main(void)
{
int true_val, false_val;
getch();
return 0;
}
Imprime:
true = 1; false = 0
5
Stephen Prata, C Primer Plus, 5th Ed.
Prog02 true
#include <stdio.h>
#include <conio.h>
int main(void)
{
int n = 3;
while (n)
printf("%2d is true\n", n--);
printf("%2d is false\n", n);
n = -3;
while (n)
printf("%2d is true\n", n++);
printf("%2d is false\n", n);
getch();
return 0;
}
6
Stephen Prata, C Primer Plus, 5th Ed.
Prog02 true Imprime:
3 is true
2 is true
#include <stdio.h> Pós-decremento: 1 is true
#include <conio.h> primeiro utiliza o 0 is false
valor e depois faz -3 is true
int main(void) o decremento. -2 is true
{
int n = 3; -1 is true
0 is false
while (n)
printf("%2d is true\n", n--);
printf("%2d is false\n", n);
n = -3; Em C:
while (n)
printf("%2d is true\n", n++); • Diferente de 0 é
printf("%2d is false\n", n); considerado true.
getch();
• Apenas o 0 é
return 0; reconhecido como falso.
}
7
Stephen Prata, C Primer Plus, 5th Ed.
Controle de
if fluxo e loop
Forma 1 if(expressão){
A instrução é executada se a
instrução
}
expressão for verdadeira
Estrutura
Um ciclo é
chamado de
iteração
#include <stdio.h>
#include <conio.h>
int main(void)
{
int n = 5;
while (n < 7)
{
printf(“n = %d\n”, n);
n++;
printf(“Agora n = %d\n”, n);
}
printf(“Saiu do loop.\n”);
getch();
return 0;
}
10
Stephen Prata, C Primer Plus, 5th Ed.
Controle de
Prog03 Saída do loop fluxo e loop
return 0;
}
11
Stephen Prata, C Primer Plus, 5th Ed.
for Controle de
fluxo e loop
for (inicialização ; teste ; atualização){
instrução
}
for(count=1; count<=number; count++)
printf(“Be my Valentine!\n”); 1. A inicialização é
feita apenas uma vez,
1. Estrutura na entrada do loop.
2. A condição teste é
avaliada a cada
2. 3. potencial iteração.
Quando a condição
for falsa o loop é
terminado.
3. A atualização é
executada ao final de
cada iteração.
12
Stephen Prata, C Primer Plus, 5th Ed.
Controle de
Exemplo
#include <stdio.h>
#include <conio.h> Imprime:
int main(void) n n^2
{ 1 1
int num; 2 4
printf(" n n^2\n");
3 9
4 16
for (num = 1; num <= 6; num++) 5 25
printf("%5d %5d\n", num, num*num); 6 36
return 0;
}
13
Stephen Prata, C Primer Plus, 5th Ed.
Controle de
Variações
14
Stephen Prata, C Primer Plus, 5th Ed.
Controle de
Variações
15
Stephen Prata, C Primer Plus, 5th Ed.
do while
Controle de
fluxo e loop
do{
A instrução é executada enquanto
instrução
expressão for verdadeira
}while(expressão);
Estrutura
16
Stephen Prata, C Primer Plus, 5th Ed.
do while
Controle de
fluxo e loop
Exemplo
do
{
printf("Entre a senha: ");
scanf("%d", &senhaIn);
} while (senha != senhaIn);
printf("Senha confere.\n");
getch();
return 0;
}
17
Stephen Prata, C Primer Plus, 5th Ed.
switch
Controle de
fluxo e loop
18
Stephen Prata, C Primer Plus, 5th Ed.
switch
Controle de
fluxo e loop
Exemplo
switch(op)
{
#include <stdio.h> case 'a':
#include <conio.h> printf("a+b = %f\n", a+b);
break;
int main(void) case 's':
{ printf("a-b = %f\n", a-b);
float a, b; break;
char op; case 'm':
printf("a*b = %f\n", a*b);
printf("Entre a operacao: "); break;
scanf("%c", &op); case 'd':
printf("Entre o numero a: "); printf("a/b = %f\n", a/b);
scanf("%f", &a); break;
printf("Entre o numero b: "); default:
scanf("%f", &b); printf(“Op. invalida");
}
getch();
return 0;
}
19
switch
Controle de
fluxo e loop
Float
Não é permitido, por exemplo:
float a;
switch(a)
{...
Expressão
Não é permitido, por exemplo:
int a;
switch(a)
{
case a>10:
...
20
Controle de
Prog04 Loops aninhados fluxo e loop
getch();
}
IDE
Step Over: F8
Add Watch: Ctrl+F5
21
break e continue
Controle de
fluxo e loop
22
Stephen Prata, C Primer Plus, 5th Ed.
Controle de
Prog05 break fluxo e loop
O que será
#include <stdio.h>
#include <conio.h>
impresso?
int main(void)
{
int count, loop=0;
23
Controle de
Prog05 break fluxo e loop
#include <stdio.h>
Imprime
#include <conio.h>
24
Controle de
Prog06 continue fluxo e loop
O que será
#include <stdio.h>
#include <conio.h>
impresso?
int main(void)
{
for(int x=0; x<100; x++)
{
if(x%2)
continue;
printf("%d ", x); Interrompe o loop e
} devolve o controle
getch(); para o for.
return 0;
}
25
Controle de
Prog06 continue fluxo e loop
#include <stdio.h>
#include <conio.h>
int main(void)
{ Imprime
for(int x=0; x<100; x++) os números pares entre 0 e 99:
{
if(x%2)
continue; 0 2 4 6 8 … 98
printf("%d ", x);
}
getch();
return 0;
}
26
Funções
` Uma função é um bloco de programa que realiza uma
determinada tarefa.
` Evita a repetição de código
◦ Se é necessário realizar uma tarefa várias vezes, basta
escrever uma função e utilizá-la todas as vezes. Pode-se
também utilizá-la em outros programas.
` Ajuda a organizar o programa
◦ Torna o programa mais modular e, com isso, mais fácil
de ler, modificar e depurar.
27
Stephen Prata, C Primer Plus, 5th Ed.
Prog07
Funções
Função void
#include <stdio.h>
#include <conio.h>
void starbar(void) //definição
#define NOME "XPTO 2000 LTDA" {
#define END "CURITIBA" int cnt;
#define L 40
for (cnt = 1; cnt<=L; cnt++)
void starbar(void); //protótipo printf("%c", '*');
printf("\n");
int main(int argc, char **argv) }
{
int cnt = 1;
void: vazio, sem efeito
starbar(); //chamada #define: instrução para o pré-processador
printf("%s %d\n", NOME, cnt++);
printf("%s %d\n", END, cnt); Variável cnt: escopos diferentes. “Um não
starbar(); //chamada tem nada a ver com o outro”.
IDE
getch();
return 0;
} Step Into: F7
Add Breakpoint: F5
28
Stephen Prata, C Primer Plus, 5th Ed.
Prog07
Funções
Função que recebe parâmetros
#include <stdio.h>
#include <conio.h>
getch();
return 0;
}
29
Stephen Prata, C Primer Plus, 5th Ed.
Prog08
Funções
Função com return
#include <stdio.h>
#include <conio.h>
//chamada
printf("minimo = %d", min(x,y));
getch();
return 0;
}
30
Stephen Prata, C Primer Plus, 5th Ed.
Prog09
Funções
Função com mais de um return
#include <stdio.h>
#include <conio.h>
if (par(x)) //chamada
printf("par");
else
printf("impar");
getch();
return 0;
}
i p
Endereço qualquer
5 de memória.
32
Ponteiros
Operador & (reference)
Permite referenciar um ponteiro a uma variável, isto é, fazer um
ponteiro apontar para uma variável.
Este procedimento também é chamado de inicialização do ponteiro.
a b p
int a, b, *p; ? ? ?
330 334 400 Endereços
de memória
a b p
a = b = 7; 7 7 ?
330 334 400
a b p
p = &a; 7 7 330
330 334 400
33
Ponteiros
Operador * (dereference)
Após inicializar o ponteiro - fazer o ponteiro apontar para uma variável -
pode-se agora usar o ponteiro para acessar o conteúdo desta variável.
Isto é feito através do operador *
int a, b, *p;
a = b = 7;
p = &a;
Imprime
printf(“*p = %d”, *p); *p = 7
Portanto:
34
Ponteiros
Atenção
Não acessar o conteúdo de um ponteiro que
ainda não foi inicializado.
35
Stephen Prata, C Primer Plus, 5th Ed.
Ponteiros
Prog10 Ponteiros
#include <stdio.h>
#include <conio.h>
int main(void)
{
int a=3, b=7, *p1=&b;
int n=5, x, y, *p2;
int z, *p3=&z;
getch();
return 0;
}
36
Arrays
Exemplo
int pots[8];
` Os colchetes [] caracterizam pots como um vetor.
` pots é um vetor de 8 elementos do tipo int.
` O acesso a cada elemento do vetor é feito através do índice i da
seguinte forma: pots[i]
` O primeiro elemento é pots[0] e o último é pots[7]
37
Arrays
Inicialização de um array
float x[7] = {-1.1,0.2,33.0,4.4,5.05,0.0,7.7};
seqüência de valores separados por vírgula.
38
Arrays
Prog11 Array
#include <stdio.h>
#include <conio.h>
#define MESES 12
int main(void)
{
int dias[MESES] = {31,28,31,30,31,30,31,31,30,31,30,31};
int i;
getch();
return 0;
}
39
Arrays
Prog11 Array
Testando...
#include <stdio.h>
#include <conio.h>
O compilador não verifica
#define MESES 12 o limite do array.
int main(void)
{
int dias[MESES] = {31,28,31,30,31,30,31,31,30,31,30,31};
int i;
getch();
return 0;
}
40
Arrays e ponteiros
Um ponteiro é uma variável que recebe endereços como valores.
p a
int a=20,*p; ? 20
100
p a
p = &a; 100 20
100
41
Arrays e ponteiros
Um array é um endereço fixo e pode ser considerado como
ponteiro a um endereço fixo.
int a[5];
6
0
8
00
01
01
00
00
o1
o1
o1
o1
o1
a
reç
reç
reç
reç
reç
de
de
de
de
de
1000
en
en
en
en
en
7 8 11 16 23
0 1 2 3 4
42
Arrays e ponteiros
Ao declarar:
tipo nomeArray[tam]
tam x sizeof(tipo);
nomeArray[i] ↔ *(nomeArray + i)
43
Arrays e ponteiros
a
1000 a[0]
1004 a[1]
5 1008 a[2]
int a[tam]
a[2] = 5 1012
*(a+2) = 5 1016
1020
Internamente: tam x sifeof(int)
1024
*(1000 + 2 x sizeof(int)) = 5
1028
1000
….
Obs: O compilador sabe que deve
avançar 4 bytes pois a variável …
foi declarada como do tipo int
xxxx a[tam-1]
44
Arrays e
Aritmética de ponteiros ponteiros
45
Arrays e
Prog12 Ponteiros ponteiros
#include <stdio.h>
#include <conio.h>
#define N 4 p = a; → assinala a p o
endereço base do array, ou
seja, a[0];
int main(void)
{
int a[N] = {1,2,3,4}, *p;
int soma = 0;
p++; → os incrementos
for (p=a; p < &a[N]; p++)
sucessivos de p são
soma += *p;
equivalentes a
printf("soma = %d", soma); &a[0],&a[1],...,&a[N-1]
getch();
return 0;
}
46
Arrays e
Prog13 Ponteiros ponteiros
y = 0;
p = &y;
x = *p;
x = 4;
(*p)++;
x--;
(*p)+=x;
getch();
return 0;
}
47
Strings
Uma string é uma seqüência de caracteres que
termina com o caractere nulo (‘\0’).
a b c \0
48
Strings
Para ler uma string do
teclado pode-se usar a
função gets() definida
na biblioteca stdio.h.
char str;
gets(str);
49
Strings
O caractere nulo (‘\0’) é interpretado
como o final da string.
50
gets(string) lê uma seqüência de caracteres do console e
armazena na variável string. A função gets troca o caracter
‘\n’ pelo caracter terminador de string ‘\0’
51