Comandos de Controle de Programa em C

55
Programação de Computadores Aula 2 09/08/2012 Profª Ms. Engª Elaine Cecília Gatto Unidade 2: Comandos de Controle de Programa Curso de Bacharelado em Engenharia de Computação Universidade do Sagrado Coraçã – USC Bauru/SP

description

Comandos de Controle de Programa em C

Transcript of Comandos de Controle de Programa em C

Page 1: Comandos de Controle de Programa em C

Programação de Computadores

Aula 2

09/08/2012

Profª Ms. Engª Elaine Cecília Gatto

Unidade 2: Comandos de Controle de Programa

Curso de Bacharelado em Engenharia de Computação

Universidade do Sagrado Coraçã – USC

Bauru/SP

Page 2: Comandos de Controle de Programa em C

Termos Importantes

• Código-fonte: é o texto de um programa que um usário pode ler. É a entrada para o compilador C.

• Código-Objeto: é a tradução do código-fonte de um programa em código de máquina. É a entrada para o linkeditor.

• Linkeditor: é um programa que combina as funções da biblioteca C padrão com o código-fonte que você escreveu gerando um executável.

• Biblioteca: é um arquivo contendo as funções padrão que podem ser utilizadas pelo seu programa.

• Tempo de compilação: são os eventos que ocorrem enquanto o seu programa está sendo compilado. Um erro de sintaxe é uma ocorrência em tempo de compilação.

• Tempo de execução: são os eventos que ocorrem enquanto o seu programa está sendo executado.

2

Page 3: Comandos de Controle de Programa em C

Variáveis

• Variáveis locais: uma variável local é aquela que é declarada dentro de uma função e só pode ser utilizada naquele “local” do seu código-fonte.

• Variáveis globais: uma variável global é aquela que é declarada fora de funções e podem ser utilizadas por qualquer “parte” do seu código-fonte. Uma variável global guarda o valor armazenado por ela, durante toda a execução do programa.

3

Page 4: Comandos de Controle de Programa em C

Modificadores de tipo de acesso

• const: é uma variável que não pode ser modificada, possui um valor fixado.

• volatile: uma variável desse tipo pode ser alterada de maneira não explicitamente especificada no programa. Exemplo: hora e data do sistema. A variável que armazena o valor do sistema é alterada pelo sistema operacional e não por você.

4

Page 5: Comandos de Controle de Programa em C

• Variáveis globais static: funcionam como variáveis globais dentro de um módulo. São variáveis globais que não são e, nem podem ser, conhecidas em outros módulos. Isto é útil quando queremos isolar pedaços de um programa para evitar mudanças acidentais em variáveis globais.

• Variáveis locais static: são variáveis cujo valor é mantido de uma chamada da função para a outra.

5

Especificadores de tipo de classe de armazenamento

Page 6: Comandos de Controle de Programa em C

Especificadores de tipo de classe de armazenamento • extern: define variáveis que serão usadas em um arquivo

apesar de terem sido declaradas em outro. Podemos ter programas de milhares de linhas. Estes podem ser divididos em vários arquivos (módulos) que serão compilados separadamente. Digamos que para um programa grande tenhamos duas variáveis globais e estas variáveis são declaradas normalmente em um dos arquivos (módulos) do programa. Num outro arquivo (módulo) do programa temos uma rotina que deve usar as variáveis globais. Então nesse caso devemos usar extern para que esses módulos possam encontrar as variáveis.

6

Page 7: Comandos de Controle de Programa em C

Arquivo 1 (módulo 1)

int x, y;

char ch;

main(void) {

.

.

.

}

funcao_1( ) {

x = 123;

}

Arquivo 2 (módulo 2)

extern int x, y;

extern char ch;

funcao_2(void) {

x = y/10;

}

funcao_3( ) {

y = 10;

} 7

Especificadores de tipo de classe de armazenamento

Page 8: Comandos de Controle de Programa em C

• register: o computador tem a memória principal e os registradores da CPU. As variáveis e o programa são armazenados na memória. Register diz ao compilador que a variável em questão deve ser armazenada em um registrador da CPU ao invés de uma posição da memória. Usado apenas para variáveis locais e parâmetros formais de uma função.

8

Especificadores de tipo de classe de armazenamento

Page 9: Comandos de Controle de Programa em C

Parâmetros formais

• Normalmente uma função utiliza argumentos que, na verdade são variáveis. Essas variáveis são utilizadas dentro da função e são passadas como parâmetros para a função.

funcao(argumentos ou parâmetros formais) { }

exemplo:

int contador( numero ) {

numero = numero + 1;

return 0;

}

9

Page 10: Comandos de Controle de Programa em C

Código de formatação da função scanf()

Código Função Exemplo

%c Ler um único caracter scanf(“%c”, ‘a’);

%d Ler um inteiro decimal scanf(“%d”, 20);

%e Ler um número em notação científica

scanf(“%e”, &num);

%f Ler um número em ponto flutuante

scanf(“%f”, 25.6);

%o Ler um inteiro octal scanf(“%o”, 012);

%s Ler uma série de caracteres scanf(“%s”, ‘abcdeteste’);

%x Ler um número hexadecimal scanf(“%x”, 0x80);

%u Ler um decimal sem sinal scanf(“%u”, &num);

%l Ler um inteiro long scanf(“%l”, &num); 10

Page 11: Comandos de Controle de Programa em C

Operador de endereço (&)

• A memória do seu computador é dividida em bytes

• Estes bytes são numerados de 0 até o limite da memória da sua máquina.

• Estes números são chamados de endereços de bytes.

• Um endereçoo e o nome que o computador usa para identificar a variável.

• Toda variável ocupa uma certa localização na memória.

• Seu endereço é o do primeiro byte ocupado por ela.

• Um inteiro ocupa 2 bytes.

• Suponha uma variável n do tipo inteira.

• Suponha que tenha atribuido a ela o valor 2.

• Quando n for referenciada devolverá o valor 2.

11

Page 12: Comandos de Controle de Programa em C

Operador de endereço (&)

• Se você referenciar n precedido de & - &n – então será devolvido o endereço do primeiro byte onde n está armazenada.

• Exemplo:

main() {

int num;

num = 2;

printf(“ \n Valor=%d, endereco=%u”, num, &num);

}

12

Page 13: Comandos de Controle de Programa em C

Função getche() e getch()

• getche(): Lê o caracter do teclado e permite que já seja impresso na tela, diferente de scanf() em que é necessário apertar enter.

• getch(): lê o caracter do teclado e não permite que seja impresso na tela.

• Ambas não aceitam argumentos e devolvem o caracter lido para a função que a chamou.

13

Page 14: Comandos de Controle de Programa em C

Função getche() e getch()

#include <stdio.h>

#include <stdlib.h>

main()

{

char ch;

printf("\n Digite algum caracter: ");

ch = getche();

printf(" \n A tecla digitada e: %c ", ch , " \n ");

system("PAUSE");

}

14

Page 15: Comandos de Controle de Programa em C

Função getche() e getch()

#include <stdio.h>

#include <stdlib.h>

main()

{

char ch;

printf("\n Digite algum caracter: ");

ch = getch();

printf(" \n A tecla digitada e: %c ", ch , " \n ");

printf(" e a sua sucessora ASCII e: %c ", ch+1, " \n ");

system("PAUSE");

}

15

Page 16: Comandos de Controle de Programa em C

Função getchar()

• A função getchar() lê um caracter e retorna um inteiro que é ou o código do caracter, ou o valor -1 que corresponde a fim de arquivo.

#include <stdio.h>

#include <stdlib.h>

main()

{

int c;

c=getchar();

printf("%d",c);

system("PAUSE");

}

16

Page 17: Comandos de Controle de Programa em C

Função putchar()

• É o complemento de getchar().

• Aceita um argumento cujo valor será impresso.

#include <stdio.h>

#include <stdlib.h>

main()

{

int c;

c=getchar();

putchar(c);

system("PAUSE");

} 17

Page 18: Comandos de Controle de Programa em C

Incremento

#include <stdio.h>

#include <stdlib.h>

main()

{

int num=0;

printf(" \n %d num", num);

printf(" \n %d ++num", ++num);

printf(" \n %d num", num);

printf(" \n %d ++num", ++num);

printf(" \n %d num", num);

system("PAUSE");

} 18

Page 19: Comandos de Controle de Programa em C

Incremento

#include <stdio.h>

#include <stdlib.h>

main()

{

int num=0;

printf(" \n %d num: ", num);

printf(" \n %d num++: ", num++);

printf(" \n %d num: ", num);

printf(" \n %d num++: ", num++);

printf(" \n %d num: ", num);

system("PAUSE");

} 19

Page 20: Comandos de Controle de Programa em C

Decremento

#include <stdio.h>

#include <stdlib.h>

main()

{

int num=10;

printf(" \n %d num: ", num);

printf(" \n %d --num: ", --num);

printf(" \n %d num: ", num);

printf(" \n %d --num: ", --num);

printf(" \n %d num: ", num);

system("PAUSE");

} 20

Page 21: Comandos de Controle de Programa em C

Decremento

#include <stdio.h>

#include <stdlib.h>

main()

{

int num=10;

printf(" \n %d num: ", num);

printf(" \n %d num--: ", num--);

printf(" \n %d num: ", num);

printf(" \n %d num--: ", num--);

printf(" \n %d num: ", num);

system("PAUSE");

} 21

Page 22: Comandos de Controle de Programa em C

sizeof

• É um operador em tempo de compilação unário.

• Retorna o tamanho, em bytes, da variável ou especificador de tipo, em parênteses, que ele precede.

• Devemos usá-lo para garantir portabilidade.

22

Page 23: Comandos de Controle de Programa em C

sizeof

#include <stdio.h>

#include <stdlib.h>

main()

{

int a;

short int b;

long int c;

unsigned int d;

unsigned short int e;

unsigned long int f;

float g;

double h;

long double i;

char j;

printf("Tamanho do a : %d\n", sizeof(a));

printf("Tamanho do b : %d\n", sizeof(b));

printf("Tamanho do c : %d\n", sizeof(c));

printf("Tamanho do d : %d\n", sizeof(d));

printf("Tamanho do e : %d\n", sizeof(e));

printf("Tamanho do f : %d\n", sizeof(f));

printf("Tamanho do g : %d\n", sizeof(g));

printf("Tamanho do h : %d\n", sizeof(h));

printf("Tamanho do i : %d\n", sizeof(i));

printf("Tamanho do j : %d\n", sizeof(j));

system("PAUSE");

}

23

Page 24: Comandos de Controle de Programa em C

Comandos de controle de programa

• Seleção: if e switch (condicional)

• Iteração: while, for e do-while (laço)

• Desvio: break, continue, goto e return (salto)

• Rótulo: case, default e label

• Um valor verdadeiro em C pode ser um número positivo ou negativo – é qualquer valor diferente de zero.

24

Page 25: Comandos de Controle de Programa em C

IF – SE

if ( condição )

{

Bloco de comandos;

}

if ( condição )

else comandos;

if ( condição )

{

Bloco 1;

}

else

{

Bloco 2;

}

25

Page 26: Comandos de Controle de Programa em C

IF – SE

if ( condição) {

else if ( condição ) { }

else if ( condição ) { }

.

.

else { }

}

26

Page 27: Comandos de Controle de Programa em C

IF – SE

#include <stdio.h> #include <stdlib.h> main() { int num1; int num2; printf("Digite dois números \n"); scanf(" %d %d", &num1, &num2); if(num1 > num2){ printf("O numero num1 e maior que num2"); printf("\n"); } else { printf("O numero num1 e menor que num2"); printf("\n"); } system("PAUSE"); }

27

Page 28: Comandos de Controle de Programa em C

IF – SE

#include <stdio.h>

#include <stdlib.h>

main()

{

int a, b;

printf("Digite dois numeros \n");

scanf("%d %d", &a, &b);

if(b) printf("resultado: %d \n", a/b);

else printf("não pode dividir por zero \n");

system("PAUSE");

} 28

Page 29: Comandos de Controle de Programa em C

Switch – chaveamento

switch( expressão ) {

case constante1

comandos;

break;

case constante2

comandos;

break;

default:

comandos;

}

• Comando de seleção múltipla.

• Testa sucessivamente o valor de uma expressão contra uma lista de constantes inteiras ou de caractere.

• Quando o valor coincide, os comandos associados àquela constante são executados

29

Page 30: Comandos de Controle de Programa em C

Switch – chaveamento #include <stdio.h> #include <stdlib.h> main() { char ch; printf("1. Testando a opcao 1 \n"); printf("2. Testando a opcao 2 \n"); printf("3. Testando a opcao 3 \n"); ch=getchar();

switch(ch) { case '1': printf("Esta e a opcao 1 \n"); break; case '2': printf("Esta e a opcao 2 \n"); break; case '3': printf("Esta e a opcao 3 \n"); break; default: printf("nenhuma opcao selecionada"); } system("PAUSE"); }

30

Page 31: Comandos de Controle de Programa em C

Switch – chaveamento

• Switch avalia a expressão entre parenteses, após a palavra switch, e compara seu valor com os rótulos dos casos.

• A expressão entre parenteses deve ser de valor inteiro ou caractere.

• O comando break causa uma saída imediata do switch.

• Se break é omitido, a execução continua pelos próximos comandos case até que o fim do switch seja encontrado.

31

Page 32: Comandos de Controle de Programa em C

For – para

for ( inicialização; condição; incremento ) comando;

OU

for ( inicialização; condição; incremento )

{

comando;

}

32

Page 33: Comandos de Controle de Programa em C

For – para

• É útil quando queremos repetir algo um número fixo de vezes.

• inicialização: instrução de atribuição, executada uma única vez antes do laço ser iniciado. [ x = 0 ]

• condição: instrução que controla o laço. Avalia como verdadeira ou falsa toda vez que o laço for iniciado ou reiniciado. Se verdadeira, o corpo do laço é executado. Quando falsa, o laço é terminado. [ x > 5 ]

• incremento: instrução executada toda vez após a execução do corpo do laço. [ x++ ]

33

Page 34: Comandos de Controle de Programa em C

For – para

#include <stdio.h>

#include <stdlib.h>

main()

{

int conta;

for(conta=0; conta<10; conta++)

printf(" conta = %d \n", conta);

system("PAUSE");

}

34

Page 35: Comandos de Controle de Programa em C

For – para

#include <stdio.h>

#include <stdlib.h>

main()

{

int conta, numero;

printf("Digite um numero inteiro \n");

scanf("%d", &numero);

for(conta=0; conta<numero; conta++)

printf(" conta = %d \n", conta);

system("PAUSE");

} 35

Page 36: Comandos de Controle de Programa em C

While – enquanto

while ( condicao ) comando;

• O laço se repete quando a condição for verdadeira. Quando a condição for falsa, o controle do programa passa para a linha após o código do laço.

• Seu uso é apropriado em situações em que o laço pode ser terminado inesperadamente por condições desenvolvidas dentro do laço

36

Page 37: Comandos de Controle de Programa em C

While – enquanto

#include <stdio.h>

#include <stdlib.h>

main()

{

int num1, num2;

printf(" \n Digite um numero inteiro entre 0 e 10 \n");

scanf("%d", &num1);

while(num1<10){

printf(" \n enquanto num1 for menor que 10, imprima isto! %d", num1);

printf(" \n ");

num1++;

}

system("PAUSE");

}

37

Page 38: Comandos de Controle de Programa em C

Do-While

• Este laço verifica a condição no final do laço. Portanto, o laço do-while sempre será executado pelo menos uma vez. O laço do-while repete até que a condição se torne falsa.

do {

comandos;

}

while;

38

Page 39: Comandos de Controle de Programa em C

Do-While

#include <stdio.h>

#include <stdlib.h>

main()

{

int num;

do{

printf(" \n Digite um numero entre 0 e 51 \n ");

scanf("%d", &num);

}

while(num<=50);

system("PAUSE");

} 39

Page 40: Comandos de Controle de Programa em C

Return

• É usado para retornar um valor de uma função.

• É um comando de desvio.

• Faz com que a execução retorne ao ponto em que a chamada à função foi feita.

return expressão;

• A expressão é o valor da função

• Uma função pára de executar quando encontra o primeiro return.

• As chaves ( } ) funcionam como um return.

• Funções do tipo void não tem return, pois são funções que não retornam nenhum valor.

40

Page 41: Comandos de Controle de Programa em C

Goto – vá para

• Fornece compatibilidade com linguagens como BASIC e FORTRAN. Está em desuso.

• Pertence a uma classe à parte, a dos comandos de salto incondicional. O goto realiza um salto para um local especificado. Este local é determinado por um rótulo. Um rótulo, na linguagem C, é uma marca no programa. Você dá o nome que quiser a esta marca.

• O goto pode saltar para um rótulo que esteja mais à frente ou para trás no programa. Uma observação importante é que o rótulo e o goto devem estar dentro da mesma função.

goto rótulo;

.

.

rótulo;

41

Page 42: Comandos de Controle de Programa em C

Break

• Pode ser usado para terminar um case em um comando switch.

• Pode ser usado para forçar um término imediato de um laço.

• Quando break é encontrado dentro de um laço, o laço termina e o controle retorna para o comando seguinte.

• Pode ser usado no corpo de qualquer estrutura de laço.

42

Page 43: Comandos de Controle de Programa em C

Continue

• Força a próxima interação do laço e pula o código que estiver abaixo.

• While e do-while: faz com que o controle vá para o teste e depois continua o processo do laço

• For: primeiro executa o incremento do laço, depois faz o teste condicional e no fim continua o laço.

• Salta uma parte do programa, pula o código que estiver em seguida.

43

Page 44: Comandos de Controle de Programa em C

Exit()

• Força o término do programa inteiro.

• void exit(int codigo_de_retorno);

• O valor código_de_retorno e retornado ao processo chamador, que é normalmente o sistema operacional.

• O número zero é normalmente usado como código de retorno.

• Usado normalmente quando uma condição mandadatória para a execução do programa não é satisfeita.

44

Page 45: Comandos de Controle de Programa em C

Exemplos para testar no laboratório #include <stdio.h>

#include <stdlib.h>

main()

{

int conta;

for(conta=0;conta<10;conta++);

printf("conta=%d \n", conta);

system("PAUSE");

}

45

Page 46: Comandos de Controle de Programa em C

Exemplos para testar no laboratório #include <stdio.h>

#include <stdlib.h>

main()

{

int conta;

for(conta=9;conta<10;conta--);

printf("conta=%d \n", conta);

system("PAUSE");

}

46

Page 47: Comandos de Controle de Programa em C

Exemplos para testar no laboratório #include <stdio.h>

#include <stdlib.h>

main()

{

int x,y

for(x=0, y=0; x+y < 100; x=x+1, y=y+1);

printf("%d \n", x+y);

system("PAUSE");

}

47

Page 48: Comandos de Controle de Programa em C

Exemplos para testar no laboratório #include <stdio.h>

#include <stdlib.h>

main()

{

char ch;

for(ch='a'; ch<='z'; ch++);

printf("o valor ASCII de %c e %d \n ", ch, ch);

system("PAUSE");

}

48

Page 49: Comandos de Controle de Programa em C

Exemplos para testar no laboratório #include <stdio.h>

#include <stdlib.h>

main()

{

char ch;

for(;(ch=getch())!='X';)

printf("%c", ch+1);

system("PAUSE");

}

49

Page 50: Comandos de Controle de Programa em C

Exemplos para testar no laboratório #include <stdio.h>

#include <stdlib.h>

main()

{

for(;;printf("laco infinito \n"))

system("PAUSE");

}

50

Page 51: Comandos de Controle de Programa em C

Exemplos para testar no laboratório #include <stdio.h>

#include <stdlib.h>

main()

{

char c;

for(;(c=getch())!='X';printf("%c",c+1))

system("PAUSE");

}

51

Page 52: Comandos de Controle de Programa em C

Exemplos para testar no laboratório #include <stdio.h>

#include <stdlib.h>

main()

{

int conta, total;

for(conta=0, total=0; conta<10; conta++) {

total+=conta;

printf("conta=%d, total=%d \n", conta, total);

}

system("PAUSE");

} 52

Page 53: Comandos de Controle de Programa em C

Exemplos para testar no laboratório #include <stdio.h>

#include <stdlib.h>

main()

{

int conta, total;

for(conta=0, total=0; conta<10; conta++) {

total+=conta;

printf("conta=%d, total=%d \n", conta, total);

}

system("PAUSE");

} 53

Page 54: Comandos de Controle de Programa em C

Exemplos para testar no laboratório

#include <stdio.h> #include <stdlib.h> main() { int i, j, k; printf("\n"); for(k=0; k<=1; k++){ printf("\n"); for(i=1; i<5; i++) printf("Tabuada do %3d ", +i+4*k+1); printf("\n"); for(i=1; i<=9; i++){ for(j=2+4*k; j<=5+4*k; j++) printf("%3d x%3d = %3d ", j, i, j*i); } } system("PAUSE"); }

54

Page 55: Comandos de Controle de Programa em C

Mais exemplos

• Pegar os livros da bibliografia básica e testar os exemplos dos capítulos.

55