Algoritmos e Programação Linguagens de Programação Teoria Aula 6 (12/05) [email protected] Universidade Federal do Vale do São Francisco - UNIVASF Colegiado de Engenharia de Computação – CECOMP Aulas de Reposição Próxima sexta (14/04), não haverá aula prática para alunos do prof. Mario. Haverá aula NORMAL do prof. Jadsonlee. Aulas de Reposição Teórica 4h; Sábado (05/06), das 14:00 às 18:00h. Prática 6h; Sábado (12/06), das 14:00 às 16:00h. (Laboratório); Sábado (19/06), das 14:00 às 18:00h. (Laboratório). 2 Avaliações Solução de problemas através de programação em C. Deverão ser escritos em papel. Serão cobrados comandos utilizados nas aulas práticas e teóricas. Avaliação 1 (Data: 02/06 – Quarta feira) Avaliação 2 (Data: 30/06 – Quarta feira) Avaliação de Reposição (Data: 07/07 – Quarta feira) Atestado médico. Avaliação Final (Data: 09/07 – Sexta feira) Todo o conteúdo. 3 Conversão de Tipos de Dados Conversão de Tipos - Implícita Implícita → tipos menores para tipos maiores Exemplos: char → int int → longint float → double 5 Conversão de Tipos - Explícita (cast) Explícita → de qualquer tipo, para outros tipos maiores utilizando (cast) Exemplos: char → int int → longint float → double Exemplo: int numero; char letra; numero = 555; letra = 'w'; numero = (int) letra; //O tipo maior recebe o tipo menor 6 Operadores Operadores Relacionais IMPORTANTE! 8 Operadores Lógicos p q falso falso falso verdadeiro Operador Ação && E || OU ! Não Não p Não q pEq p OU q !p !q p && q p || q falso falso falso falso verdadeiro falso verdadeiro falso verdadeiro falso falso verdadeiro verdadeiro verdadeiro verdadeiro falso verdadeiro verdadeiro verdadeiro verdadeiro 9 Hierarquia dos operadores Relacionais e Lógicos Hierarquia ou Precedência – prioridade com que os operadores são executados pelo compilador; Operadores com mesmo nível hierárquico executados da esquerda para a direita; são Podem ser alterada utilizando “(” “)”. 10 Operadores bit a bit Permite a manipulação de bits (baixo nível) Operador Descrição & AND | OR ^ XOR (OR exclusivo) << Deslocamento para esquerda >> Deslocamento para direita Não confundir com Operadores Lógicos 11 Operadores bit a bit O número é representado por sua forma binária; Poderemos fazer operações em cada um dos bits deste número; Programação de "baixo nível“; Só podem ser usadas nos tipos char, int e long int. Exemplo int i = 2; // Conteúdo em binário: 0000000000000010 ~i; // Ou seja, não i, resulta em binário: 1111111111111101 12 Operadores bit a bit Operadores de deslocamento Sintaxe valor >> número_de_deslocamentos valor << número_de_deslocamentos Exemplo: i == 0000000000000010; //2 decimal i << 3; i == 0000000000010000; //16 decimal 13 Funções de Entrada e Saída Funções de Entrada e Saída Formatada #include <stdio.h> io → input/output Forma geral: printf(string_de_controle, <lista_de_argumentos>); Indica as variáveis com suas respectivas posições através dos códigos de formato “%” mostrado a seguir. 15 Funções de Entrada e Saída Formatada Tabela de códigos de formato (%) 16 Funções de Entrada e Saída Formatada 17 Constantes de barra invertida Constante Significado \n new line \” Aspas \’ Apóstofro \0 Nulo (0 decimal) \\ Barra Invertida \t Tabulação Horizontal (TAB) 18 Funções de Entrada e Saída - scanf() scanf() - Leitura de dados; Sintaxe: scanf(string_de_controle, lista_de_argumentos); string_de_controle → descrição de todas as variáveis que serão lidas, com informações de seus tipos e da ordem em que serão lidas; lista_de_argumentos → lista com os identificadores das variáveis que serão lidas. Importante: colocar antes de cada variavel da lista_de_argumentos o caracter ‘&’ Exemplo: char letra; //Delcarando a variável “letra” scanf(“%c”, &letra); //Lendo dados digitados pelo usuário 19 Funções de Entrada e Saída Tabela de códigos de tipos de dados Exemplos: char letra; float nota; int quantDeFilhos; scanf(“%c”, &letra); scanf(“%f”, ¬a); scanf(“%d”, &quantDeFilhos); 20 Estruturas de Controle de Fluxo Estruturas de Controle de Fluxo - if Instrução condicional Sintaxe if(<condição>){ <instrução> } 22 Estruturas de Controle de Fluxo – if ... else Instrução condicional Sintaxe if(<condição>) { <instrução 1> ... <instrução N> } else { <instrução A> ... <instrução Z> } 23 Estruturas de Controle de Fluxo – if ... else Exemplo #include <stdio.h> int main () { char letra = 'a'; if (letra == 'a' ){ printf("Letra digitada eh: 'A'"); }else{ printf("Letra digitada DESCONHECIDA!"); } getchar(); return(0); } if ( (i > 3) && ( j <= 7) && ( i != j) ) { printf(“Entrou no if!”); }else{ printf(“NAO entrou no if!”); } 24 Estruturas de Controle de Fluxo – if ... else if ... else if (condição_1){ instrução 1; }else if (condição_2){ instrução 2; }else if (condição_3){ instrução 3; }else if (condição_n){ instrução n; }else{ instrução padrão; } int varNumero; printf ("Digite um numero: "); scanf ("%d", &varNumero); if (varNumero > 10){ printf ("Numero MAIOR que 10"); }else if (varNumero == 10){ printf (“Voce digitou: 10"); }else if (varNumero < 10){ printf (“Numero MENOR que 10"); } //substituir o último else if faz sentido? else { printf (“Numero MENOR que 10"); } 25 Estruturas de Controle de Fluxo – if ... else if ... else Os códigos funcionam? Existe diferença? int varNumero; printf ("Digite um numero: "); scanf ("%d", &varNumero); int varNumero; printf ("Digite um numero: "); scanf ("%d", &varNumero); if (varNumero > 10){ printf ("Numero MAIOR que 10"); }else if (varNumero == 10){ printf (“Voce digitou: 10"); }else if (varNumero < 10){ printf (“Numero MENOR que 10"); } if (varNumero > 10){ printf ("Numero MAIOR que 10"); } if (varNumero == 10){ printf (“Voce digitou: 10"); } if (varNumero < 10){ printf (“Numero MENOR que 10"); } 26 Estruturas de Controle de Fluxo – ifs aninhados float nota; nota = 9.5; if (nota >= 7){ printf(“Aprovado.”); if (nota >= 9){ printf(“Aprovado com louvor!!!”); } }else{ printf(“Aluno REPROVADO!”); } 27 Estruturas de Controle de Fluxo – operador ? if (condição){ instrução 1; }else{ } instrução 2; É equivalente a: condição?instrução1:instrução2; 28 Continuar 29 Estruturas de Controle de Fluxo – switch Próprio para se testar uma variável em relação a valores pré-estabelecidos. Testa o conteúdo da variável correspondente ao case; break, faz com que o switch seja interrompido; default é opcional; Não aceita expressões. e executa a instrução switch (variável) { case constante_1: instrução 1; break; case constante_2: instrução 2; break; ... default instrução_padrão; } 30 Estruturas de Controle de Fluxo – switch switch (varNumero) { case 9: printf ("O numero e igual a 9."); break; case 10: printf ("O numero e igual a 10."); break; default: printf ("O numero nao e nem 9 nem 10."); } 31 Loops de Repetição Loops de Repetição - while Estrutura de repetição Sintaxe while(<condição>) { <instrução 1> ... <instrução n> } 33 Loops de Repetição - while Exemplo #include <stdio.h> int main () { int numero; printf("Digite um numero: "); printf("\nDigite '0' para finalizar.\n\n"); while (numero != 0 ){ scanf("%d", &numero); printf("\n Voce digitou: %d \n Digite um novo numero: ", numero); } getchar(); return(0); } 34 Loops de Repetição – do ... while... do{ <instrução 1> .... <instrução n> }while(<condição>); int i; do { printf ("Escolha a fruta pelo numero:"); printf ("(1) Mamao"); printf ("(2) Abacaxi"); printf ("(3) Laranja"); scanf("%d", &i); } while ((i<1)||(i>3)); 35 Loops de Repetição – for Sintaxe for (inicialização; condição; incremento) { instrução; } Podemos omitir qualquer um dos elementos do for: (inicialização; condição; incremento). // int numero; for (int numero=1; numero<=100; numero++) { printf ("%d ", numero); } 36 Comando - break Faz com que a execução do programa continue na primeira linha seguinte ao loop ou bloco que está sendo interrompido. Utilizados para interromper os comandos: “switch”, “for”, “while” e “do while”. Exemplo for(;;) { printf("%d", count); count++; if(count==10) break; } 37 Comando - continue Funciona apenas dentro de um loop; Quando o comando continue é encontrado, o loop pula para a próxima iteração, sem o abandono do loop; 38 Comando - goto realiza um salto para um local determinado por um rótulo. tende a tornar o código confuso Sintaxe nome_do_rótulo: .... goto nome_do_rótulo; Exemplo início_do_loop: if (condição) { intrução; incremento; goto início_do_loop; } 39 Preparar... Estrutura de repetição Estrutura condicional ifs aninhados For Variáveis Locais e Globais break Continue Goto loop infinito MATRIZES e STRINGS strcpy (string_destino,string_origem); strcat (string_destino,string_origem); strlen (string); strcmp (string1,string2); FUNÇÕES, return, void 40 Material de apoio Dev C++ http://www.baixaki.com.br/download/dev-c-.htm http://mico.ead.cpdee.ufmg.br/cursos/C/c.html 41 Próxima Aula [email protected] Universidade Federal do Vale do São Francisco - UNIVASF Colegiado de Engenharia de Computação – CECOMP