Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Comandos de Controle de Programa em C

1,737 views

Published on

Comandos de Controle de Programa em C

Published in: Education
  • Be the first to comment

Comandos de Controle de Programa em C

  1. 1. Programação deComputadoresAula 209/08/2012Profª Ms. Engª Elaine Cecília GattoUnidade 2: Comandos de Controle de ProgramaCurso de Bacharelado em Engenharia de ComputaçãoUniversidade do Sagrado Coraçã – USCBauru/SP
  2. 2. 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. 2• Tempo de execução: são os eventos que ocorrem enquanto o seu programa está sendo executado.
  3. 3. 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
  4. 4. 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
  5. 5. Especificadores de tipo de classe dearmazenamento• 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
  6. 6. Especificadores de tipo de classe dearmazenamento• 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
  7. 7. Especificadores de tipo de classe dearmazenamento Arquivo 1 (módulo 1) Arquivo 2 (módulo 2)int x, y; extern int x, y;char ch; extern char ch;main(void) { funcao_2(void) {. x = y/10;. }. funcao_3( ) {} y = 10;funcao_1( ) { } x = 123; 7}
  8. 8. Especificadores de tipo de classe dearmazenamento• 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
  9. 9. 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
  10. 10. Código de formatação dafunçã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 scanf(“%e”, &num); científica%f Ler um número em ponto scanf(“%f”, 25.6); flutuante%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); 10%l Ler um inteiro long scanf(“%l”, &num);
  11. 11. 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. 11• Quando n for referenciada devolverá o valor 2.
  12. 12. 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
  13. 13. 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
  14. 14. 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
  15. 15. 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
  16. 16. 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}
  17. 17. 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
  18. 18. 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
  19. 19. 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
  20. 20. 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
  21. 21. 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
  22. 22. 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
  23. 23. sizeof#include <stdio.h>#include <stdlib.h> printf("Tamanho do a : %dn", sizeof(a)); printf("Tamanho do b : %dn", sizeof(b));main() printf("Tamanho do c : %dn", sizeof(c));{ printf("Tamanho do d : %dn", sizeof(d)); int a; printf("Tamanho do e : %dn", sizeof(e)); short int b; printf("Tamanho do f : %dn", sizeof(f)); long int c; printf("Tamanho do g : %dn", sizeof(g)); printf("Tamanho do h : %dn", sizeof(h)); unsigned int d; printf("Tamanho do i : %dn", sizeof(i)); unsigned short int e; printf("Tamanho do j : %dn", sizeof(j)); unsigned long int f; system("PAUSE"); float g; } double h; long double i; 23 char j;
  24. 24. Comandos de controle deprograma• 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
  25. 25. IF – SEif ( condição ) if ( condição ){ { Bloco de Bloco 1;comandos; }} else {if ( condição ) Bloco 2;else comandos; } 25
  26. 26. IF – SEif ( condição) {else if ( condição ) { }else if ( condição ) { }..else { }} 26
  27. 27. 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}
  28. 28. 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
  29. 29. Switch – chaveamentoswitch( expressão ) { • Comando de seleção múltipla.case constante1 • Testa sucessivamente o comandos; valor de uma expressão break; contra uma lista decase constante2 constantes inteiras ou de caractere. comandos; • Quando o valor break; coincide, os comandosdefault: associados àquela constante são comandos; 29 executados}
  30. 30. Switch – chaveamento#include <stdio.h> switch(ch) {#include <stdlib.h> case 1:main() printf("Esta e a opcao 1{ n"); char ch; break; case 2: printf("1. Testando a opcao 1 printf("Esta e a opcao 2n"); n"); printf("2. Testando a opcao 2 break;n"); case 3: printf("3. Testando a opcao 3 printf("Esta e a opcao 3n"); n"); break; ch=getchar(); default: printf("nenhuma opcao selecionada"); } 30 system("PAUSE"); }
  31. 31. 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
  32. 32. For – parafor ( inicialização; condição; incremento ) comando;OUfor ( inicialização; condição; incremento ){ comando;} 32
  33. 33. 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
  34. 34. 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
  35. 35. 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
  36. 36. While – enquantowhile ( 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
  37. 37. 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++; } 37 system("PAUSE");}
  38. 38. 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
  39. 39. 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
  40. 40. 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. 40• Funções do tipo void não tem return, pois são funções que não retornam nenhum valor.
  41. 41. 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;. 41.rótulo;
  42. 42. 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
  43. 43. 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
  44. 44. 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
  45. 45. Exemplos para testar nolaboratório#include <stdio.h>#include <stdlib.h>main(){ int conta; for(conta=0;conta<10;conta++); printf("conta=%d n", conta); system("PAUSE");} 45
  46. 46. Exemplos para testar nolaboratório#include <stdio.h>#include <stdlib.h>main(){ int conta; for(conta=9;conta<10;conta--); printf("conta=%d n", conta); system("PAUSE");} 46
  47. 47. Exemplos para testar nolaborató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
  48. 48. Exemplos para testar nolaborató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
  49. 49. Exemplos para testar nolaboratório#include <stdio.h>#include <stdlib.h>main(){ char ch; for(;(ch=getch())!=X;) printf("%c", ch+1); system("PAUSE");} 49
  50. 50. Exemplos para testar nolaboratório#include <stdio.h>#include <stdlib.h>main(){ for(;;printf("laco infinito n")) system("PAUSE");} 50
  51. 51. Exemplos para testar nolaboratório#include <stdio.h>#include <stdlib.h>main(){ char c; for(;(c=getch())!=X;printf("%c",c+1)) system("PAUSE");} 51
  52. 52. Exemplos para testar nolaborató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
  53. 53. Exemplos para testar nolaborató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
  54. 54. Exemplos para testar nolaborató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); } 54 } system("PAUSE");}
  55. 55. Mais exemplos• Pegar os livros da bibliografia básica e testar os exemplos dos capítulos. 55

×