55
CONTROLE DE PROGRAMA Profª Ms. Engª Elaine Cecília Gatto Curso de Bacharelado em Engenharia de Computação Universidade do Sagrado CoraçãO – USC Bauru/SP

Linguagem C - Controle de Programa

Embed Size (px)

DESCRIPTION

Linguagem C - Controle de Programa

Citation preview

Page 1: Linguagem C - Controle de Programa

CONTROLE DE PROGRAMA

Profª Ms. Engª Elaine Cecília GattoCurso de Bacharelado em Engenharia de ComputaçãoUniversidade do Sagrado CoraçãO – USCBauru/SP

Page 2: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

• 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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

• 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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

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ço é 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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

IF – SE

if ( condição ){

Bloco de comandos;}

if ( condição )else comandos;

if ( condição ){

Bloco 1;}else{

Bloco 2;}

25

Page 26: Linguagem C - Controle de Programa

IF – SE

if ( condição) { else if ( condição ) { }else if ( condição ) { }..else { } }

26

Page 27: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

Switch – chaveamento

switch( expressão ) {case constante1

comandos;break;

case constante2comandos;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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

For – para

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

OU

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

comando;}

32

Page 33: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

Exemplos para testar no laboratório

#include <stdio.h>#include <stdlib.h>main(){ for(;;printf("laco infinito \n")) system("PAUSE");}

50

Page 51: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

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: Linguagem C - Controle de Programa

Mais exemplos• Pegar os livros da bibliografia básica e testar os exemplos dos

capítulos.

55