Baixe o app para aproveitar ainda mais
Prévia do material em texto
17/10/2018 Estácio file:///W:/2018.2/linguagem_de_programacao_i__conv010/aula3.html 1/27 Disciplina: Linguagem de Programação I Aula 3: Construindo os primeiros programas que interagem com o usuário Apresentação Uma das funções que iremos estudar nesta aula passou a fazer parte do dia a dia de todas as pessoas que usam cartões para pagar uma compra. Lembre-se das palavras da atendente: “- Pode digitar sua senha agora.” Nesse momento, a máquina é liberada para que você digite sua senha. Se você se atentar para esse procedimento, perceberá que a senha digitada deve ter sido armazenada em algum lugar para que possa ser comparada com a senha que está armazenada no banco de dados do seu banco. Para que possamos estudar essa função, em algumas linguagens, comandos, precisamos nos apropriar de alguns conceitos que são necessários para o perfeito funcionamento. Essa função que "libera" o teclado para que possamos digitar um valor, senha ou data de pagamento, possibilitando uma interação do usuário com um programa, nada mais é do que a função formatada da linguagem C, scanf(), presente na biblioteca stdio.h. Objetivos Listar os tipos de dados; Definir variável; 17/10/2018 Estácio file:///W:/2018.2/linguagem_de_programacao_i__conv010/aula3.html 2/27 Reconhecer o comando de atribuição e funções de entrada de dados via teclado: getchar, scanf, gets, fgets; Diferenciar variável global de variável local; Definir constante; Construir programas de forma sequencial com funções de entrada de dados, atribuição, e funções saída, usando, quando necessário, os operadores aritméticos. 17/10/2018 Estácio file:///W:/2018.2/linguagem_de_programacao_i__conv010/aula3.html 3/27 Dados Manipular dados/informações é, com certeza, uma das principais funções de um computador. O dado é um valor fornecido pelo usuário, gerado pelo programa ou lido de um arquivo. De modo geral, os dados podem ser: Primitivos Aqueles fornecidos pelas linguagens e que não serão, necessariamente, os mesmos em todas as linguagens. Compostos Aqueles que podem ser construídos em uma linguagem de programação a partir de dados primitivos e de outros dados compostos. Saiba mais A linguagem C, embora tenha várias normas para padronizá-la, infelizmente, parece que os fabricantes não se interessam em segui-las, dificultando a portabilidade, principalmente, no que dia respeito aos intervalos de dados para cada tipo. Aliado a isso, temos o problema das diferentes arquiteturas dos computadores. A linguagem C apresenta 4 tipos primitivos de dados: char int float 17/10/2018 Estácio file:///W:/2018.2/linguagem_de_programacao_i__conv010/aula3.html 4/27 double Os tipos compostos são formados a partir dos primitivos e agrupam variáveis , facilitando a sua manipulação. Atenção O tipo void, usado no retorno de funções, é considerado primitivo também, mas só trabalharemos com ele mais adiante. Variável Para que possamos declarar uma variável, primeiro precisamos definir que tipo de dado ela irá armazenar, pois necessitamos informar quanto de memória será necessário para esse armazenamento. A esse endereço será associado um nome. Na linguagem C, as variáveis precisam ser declaradas antes de serem usadas. Para declarar uma variável, usamos a seguinte sintaxe: tipo nomeDaVariavel ; double custo ; Saiba mais 1 17/10/2018 Estácio file:///W:/2018.2/linguagem_de_programacao_i__conv010/aula3.html 5/27 Se a variável armazena dado e se já foram definidos os tipos de dados da linguagem, é conclusivo que o tipo da variável deva coincidir com o tipo de dado que será armazenado. Caracteres válidos para se dar nome às variáveis Para se dar nome à variável, também conhecido como identificador da variável, é preciso seguir três regras: 1 Letras maiúsculas e minúsculas, dígitos de 0 a 9 e o caracter underscore poderão ser usados; 2 O primeiro caracter NÃO pode ser dígito; 3 Nenhuma palavra reservada deverá ser usada para nome de variável. Sugestões: Embora o caracter underscore possa ser o primeiro, não é aconselhável. Procure usá-lo nos nomes compostos. Você também pode adotar a “convenção” de usar letra maiúscula para a primeira letra de cada palavra, a partir da segunda, e não usar underscore. Procure dar nomes significativos, evitando muitos comentários no código. Nome de variáveis não devem ter mais do que 31 caracteres (alguns autores falam em 32) para tentar manter a portabilidade. ã á 17/10/2018 Estácio file:///W:/2018.2/linguagem_de_programacao_i__conv010/aula3.html 6/27 E o que não deverá ser usado como nome de variável? Nomes válidos num, idade, n1, alt, mediaDaTurma, media_aluno Nomes não válidos 2n, média geral, n#3, nota 1 Palavras reservadas As palavras reservadas não deverão ser usadas como nome de variáveis. São palavras reservadas: Palavras reservadas auto break case char const continue default do double else enum extern float for goto if 17/10/2018 Estácio file:///W:/2018.2/linguagem_de_programacao_i__conv010/aula3.html 7/27 int long register return short signed sizeof static struct switch typedef union unsigned void volatile while Palavras reservadas acrescentadas na norma C99 _Bool _Complex _Imaginary inline restrict Exemplos de declarações de variáveis e seus armazenamentos na Memória Principal: Não se esqueça do que já foi dito: embora a figura mostre cada variável representada por uma única célula, isso não é exatamente assim. Por exemplo, uma variável inteira ocupa, normalmente, 4 posições de memória, ou 8, dependendo da arquitetura. Uma variável do tipo caracter ocupa 1 posição de memória. Além disso, a sequência de armazenamento na MP poderá não ser exatamente esta, isto é, a primeira a ser armazenada será a última que foi declarada: sexo/ peso/ idade. Modificadores de Tipos Os modificadores servem para alterar as características de alguns tipos, possibilitando armazenamento só de números positivos e aumentando, ou diminuindo, a capacidade de armazenamento. Temos 4 modificadores: signed 17/10/2018 Estácio file:///W:/2018.2/linguagem_de_programacao_i__conv010/aula3.html 8/27 unsigned short long Sendo que os 3 primeiros ( signed, unsigned e short) só podem ser aplicados ao tipo int e o modificador long pode ser usado com double. Veja o que significa cada um deles: Modificador Significado signed Armazena positivos e negativos. unsigned Armazena só negativos, dobrando a capacidade de armazenamento. short Armazena inteiros / 2 bytes long Armazena inteiros / 4 bytes Combinações possíveis para inteiros – Padrão ANSI: Tipo de variável Tamanho (em bits)/bytes Intervalo int 16/2 -32768 a 32767 unsigned int 16/2 0 a 65535 short int 16/2 -32768 a 32767 unsigned short int 16/2 0 a 65535 long int 32/4 -2147483648 a 2147483647 unsigned long int 32/4 0 a 4294967295 Atenção 17/10/2018 Estácio file:///W:/2018.2/linguagem_de_programacao_i__conv010/aula3.html 9/27 1) Não usamos o modificador signed porque, por definição, todos os inteiros já são sinalizados. 2) Quando você usar os modificadores de tipos short e long com as funções printf() e scanf(), não deixe de preceder com h(short) e l(long). 3) Quando você usar o modificador de tipo unsigned com as funções printf() e scanf(), não deixe de usar %u (unsigned). Você poderá simplificar o uso dos modificadores unsigned, short ou long quando o tipo for int, observe as declarações: unsigned int idade; É equivalente a unsigned idade; long int matric; É equivalente a long matric; Observe o exemplo onde usamos e não o int, e tudo funciona sem problemas. Código: #include <stdio.h> #include <stdlib.h> int main() { 17/10/2018 Estácio file:///W:/2018.2/linguagem_de_programacao_i__conv010/aula3.html10/27 unsignedshort a = 65535; int b = 2147483647; unsigned long nt c = 4294967295; printf("\na: %u\tbytes:%d ", a, sizeof(a)); printf("\nb: %d\tbytes:%d ", b, sizeof(b)); printf("\nc: %u\tbytes:%d ", c, sizeof(c)); system("pause>NULL"); } Saída: Veja as combinações possíveis para char – Padrão ANSI: Tipo de variável Tamanho (em bits / bytes) Intervalo char 8/1 -128 a 127 unsigned char 8/1 0 a 255 signed char 8/1 -128 a 127 Agora, veja as combinação possível para double – Padrão ANSI: Tipo de variável Tamanho (em bits / bytes) Intervalo 17/10/2018 Estácio file:///W:/2018.2/linguagem_de_programacao_i__conv010/aula3.html 11/27 long double 80/10 3,4E-4932 a 1,1E+4932 Atenção Apesar de todas as normas, já falamos que não existe uma preocupação de usar a padronização. Sendo assim, para garantirmos que sempre os tipos que desejarmos usarão 2, 4 ou 8 bytes, é importante usarmos os modificadores na declaração. Vale destacar que os modificadores de tipo não são usados com float. Onde as variáveis são declaradas? A posição da declaração envolve os conceitos de variáveis locais e variáveis globais. Variáveis locais versus variáveis globais Até a aula 8, estaremos usando uma única função em nossos programas: a função main() e, por essa razão não teria sentido usar variáveis globais. Entenda as diferenças entre os tipos de variáveis: Variável global Também referenciada como externa, é a variável que é declarada fora de todas as funções, inclusive da main(). Esse tipo de variável pode ser manipulado por todas as funções. Variável local 17/10/2018 Estácio file:///W:/2018.2/linguagem_de_programacao_i__conv010/aula3.html 12/27 Também referenciada por automática, é a variável que é declarada dentro de uma função, inclusive da main(). Veja exemplo de programa usando variável global e local: #include <stdio.h> #include <stdlib.h> int teste; void func(); int main () { int numero = 12; teste = 8; printf("\nvalor de teste dentro da main: %d\n", teste); func(); printf("\nvalor de numero dentro da mains: %d\n", numero); system ("pause>NULL"); } void func(); { teste = teste * 2; printf(“\nvalor de teste dentro de func: %d\n”, teste); printf(“\nvalor de numero dentro de func: %d\n”, numero); } 17/10/2018 Estácio file:///W:/2018.2/linguagem_de_programacao_i__conv010/aula3.html 13/27 Por que deu errado? Observe que a variável numero foi declarada dentro da função main(), sendo assim, a função func() não tem acesso a ela e o compilador acusa erro de variável não declarada. Agora vamos comentar a linha que está dando erro e executar novamente. Comentar? O que é isso Comentar significa colocar a linha, ou linhas, entre os caracteres /* e */, significando que o compilador não deve tentar executá-la(s). Observe como se faz um comentário: /*Engenharia – Linguagem de programação I Data: 05/ 08 2012 */ //Comentário de uma linha acrescentado na norma C99 //Nem todos compiladores aceitam Não se preocupe em entender como funciona um programa com mais de 1 função porque estudaremos isso em outra aula. No momento, fique atento às posições onde as variáveis são declaradas. #include <stdio.h> #include <stdlib.h> int teste; void func(); 17/10/2018 Estácio file:///W:/2018.2/linguagem_de_programacao_i__conv010/aula3.html 14/27 int mains () { int numero = 12; teste = 8; printf(“\nvalor de teste dentro da main: %d\n”, teste); func(); printf(“\nvalor de numero dentro da main: %d\n”, numero); system(“pause>NULL”); } void func() { teste = teste * 2; printf(“\nvalor de teste dentro de func: %d\n”, teste); /* printf(“\nvalor de numero dentro de func: %d\n”, numero); */ } Veja a saída: Analisando o código A variável teste é declarada como global porque está fora de todas as funções. 17/10/2018 Estácio file:///W:/2018.2/linguagem_de_programacao_i__conv010/aula3.html 15/27 A variável numero é declarada como local na função main(). A função func() não tem variável local. O conteúdo da variável teste pode ser alterado pelas duas funções. Como os dados são armazenados nas variáveis? Nesse primeiro momento, aprenderemos de 2 maneiras: através do comando de atribuição ou das funções de entrada via teclado. Agora, aprenderemos sobre o comando de atribuição. O comando de atribuição Quando declaramos uma variável na linguagem C, endereços na MP são reservados para a variável em questão. A quantidade de endereços dependerá do tipo da variável como foi mostrado nos quadros anteriores. No entanto, nenhum valor é atribuído a esse(s) endereço(s) e um valor “aleatório” é armazenado. Alguns ambientes da linguagem C, por não seguirem o padrão, podem assumir zero o que não seria correto, mas acontece. Outros acusam que nenhum valor foi atribuído. Sendo assim, esse comando torna possível o armazenamento de constantes ou de resultados de operações. Sintaxe da Operação de atribuição nomeVariavel = expressão ; nomeVariavel representa a variável que irá receber o valor que se encontra depois do sinal de igual. Se a expressão for uma operação, primeiro será efetuada a operação para depois o resultado ser copiado na variável. 17/10/2018 Estácio file:///W:/2018.2/linguagem_de_programacao_i__conv010/aula3.html 16/27 Atenção Nunca fale que nomeVariavel é igual á expressão. Você deve se expressar assim: nomeVariavel recebe expressão. Exemplos: a = 23; a = (23 % 4); a = b; Você pode declarar e, ao mesmo tempo, atribuir valor a uma variável. Veja um exemplo: int soma = 0; 17/10/2018 Estácio file:///W:/2018.2/linguagem_de_programacao_i__conv010/aula3.html 17/27 Você pode declarar e, ao mesmo tempo, atribuir um único valor a várias variáveis. A isso chamamos de Atribuição Múltipla. Veja um exemplo: a = b = c = 0; Expressão de atribuição Nós estamos acostumados a ver essa expressão em muitos programas com o objetivo de acumular valores. nomeVariavel1 = nomeVariavel1 op expressão ; Saiba mais Para mais esclarecimentos, leia o texto Acumulador. <galeria/aula3/anexo/a03_doc1.pdf> Veja alguns exemplos: Exemplo 1 fatorial = fatorial * n ; A variável fatorial receberá o valor que estava armazenado nela, multiplicado pelo valor da variável n. Exemplo 2 soma = soma + numero ; 17/10/2018 Estácio file:///W:/2018.2/linguagem_de_programacao_i__conv010/aula3.html 18/27 A variável soma receberá o valor que estava armazenado nela, somado ao valor da variável numero. Operadores aritméticos de atribuição A linguagem apresenta uma forma de operar e atribui em uma única instrução, simplificando a expressão vista no item anterior. Isso é possível através dos operadores aritméticos de atribuição. Veja a sintaxe: nomeVariavel op= expressão ; Agora, veja os operadores: Operador Operação Equivalência += Soma e depois atribui. var = var + valor -= Subtrai e depois atribui var = var - valor *= Multiplica e depois atribui var = var * valor /= Divide e depois atribui var = var / valor %= Acha o resto e depois atribui var = var % valor Exemplos de expressões: soma += numero diferenca -= n ; fatorial *= n ; num /= 10 ; 17/10/2018 Estácio file:///W:/2018.2/linguagem_de_programacao_i__conv010/aula3.html 19/27 Código: #include <stdio.h> #include <stdlib.h> int mains () { int num = 375; teste = 8; printf(“\nnumero: %d\n”, num); num /= 10; printf(“\nnovo valor de numero: %d\n”, num); printf(“\nLembre-se desse exemplo!\n”);system(“pause>NULL”); } Saída: 17/10/2018 Estácio file:///W:/2018.2/linguagem_de_programacao_i__conv010/aula3.html 20/27 Operadores de incremento e decremento A linguagem C tem os operadores ++ e -- que são denominados, respectivamente, de operador de incremento e operador de decremento e são operadores do tipo int . Vamos saber o que eles fazem? Operador Operação Equivalência ++ Incrementa 1 à variável associada var = var + 1 -- Decrementa 1 à variável associada var = var - 1 Além disso, os operadores podem ser pré-fixados e pós-fixados: Operador Operação Equivalência ++ ++var ; var++ ; -- --var ; var-- ; Prefixado Incrementa antes que seja realizada uma operação com a variável associada a ele.var2 = ++var1 ; primeiro incrementa 1 ao valor de var1 para depois copiá-lo em var2. 17/10/2018 Estácio file:///W:/2018.2/linguagem_de_programacao_i__conv010/aula3.html 21/27 Pós-fixado Incrementa depois que for realizada uma operação com a variável associada a ele.var2 = var1++ ; primeiro copia o valor de var1 para var2 e depois, incrementa var1 de 1. Veja um exemplo: Código: #include <stdio.h> #include <stdlib.h> int mains () { int a=5, b=0, c=8, d=0; printf(“\na: %d\tb:%d”, a, b); b = a++; printf(“\na: %d\tb:%d”, a, b); 17/10/2018 Estácio file:///W:/2018.2/linguagem_de_programacao_i__conv010/aula3.html 22/27 printf(“\nc: %d\td: %d “, c, d); d = ++c; printf(“\nc: %d\td:%d”, c, d); system(“pause>null”); } Saída: Admitimos que essa diferença pode lhe confundir no início, mas vamos explicar bem detalhado. As variáveis foram inicializadas com valores para que pudessem ser visualizadas. Quando o comando: b = a++; foi executado, primeiro, o valor 5 foi copiado para a variável b e, depois, o valor da variável a foi incrementado de 1, passando a ser 6. Quando o comando d=++c; foi executado, primeiro, o conteúdo da variável c foi incrementado de 1, passando a valer 9 para depois, ser copiado para a variável d. O mesmo irá acontecer com o operador de decremento. Cast – o que é isso? Antes de passarmos para as funções de entrada, vamos falar sobre conversão de tipos que chamamos de Cast porque, assim que aprendemos o comando de atribuição, surgem algumas dúvidas como: 17/10/2018 Estácio file:///W:/2018.2/linguagem_de_programacao_i__conv010/aula3.html 23/27 Se armazenei em uma variável do tipo float, por que não aparece a parte decimal? Veja o exemplo: ... int n1, n2; float media; ... media = (n1 +n2) /2; Vamos analisar a linha onde está a variável media. É um comando de atribuição logo, primeiro é executado o que está do lado direito do operador = porque a execução desse comando vai da D para E. Como n1 e n2 são variáveis do tipo inteiro, o resultado da operação será um inteiro. Na linguagem C, lembra que já falamos sobre isso, inteiro dividido por inteiro, inteiro será. Como resolver esse problema? Usando a conversão no momento da operação. Veja a sintaxe: (tipo) expressão; O tipo é um dos que vimos. Nesse exemplo anterior, é uma conversão para float logo, o tipo será float. Observe o código e sua saída com, ou sem, conversão: 17/10/2018 Estácio file:///W:/2018.2/linguagem_de_programacao_i__conv010/aula3.html 24/27 Código: #include <stdio.h> #include <stdlib.h> int mains () { int n1 = 9, n2 = 8 float media; media = (n1 + n2)/2; printf(“\n1a nota\t2a nota\tmedia\n”); printf(“\n%d\t%d\t%.2f\n”, n1, n2, media); media = (float) (n1 + n2)/2; printf(“\n%d\t%d\t%.2f\n”,n1, n2, media); system(“pause>null”); } Saída: 17/10/2018 Estácio file:///W:/2018.2/linguagem_de_programacao_i__conv010/aula3.html 25/27 Funções de entrada de dados para o teclado Na linguagem C, as funções que liberam o teclado para digitação, sinalizam no display que estão sendo executadas com o cursor piscando. O teclado é considerado o dispositivo padrão de entrada. Estão disponíveis funções de leitura formatada e não formatada como, por exemplo: scanf(), getchar(), gets, fgets(), fgetc() e outras. Saiba mais Conheça mais detalhes das funções de leitura: 1 - Funções que podem ler um caracter do teclado <galeria/aula3/anexo/a03_doc2.pdf> 2 - Funções de entrada de dados <galeria/aula3/anexo/a03_doc3.pdf> 3 - Funções de entrada de dados <galeria/aula3/anexo/a03_doc4.pdf> 4 - Função scanf() <galeria/aula3/anexo/a03_doc5.pdf> 5 - Experimentando algumas sintaxes <galeria/aula3/anexo/a03_doc6.pdf> 6 - Constante <galeria/aula3/anexo/a03_doc7.pdf> 17/10/2018 Estácio file:///W:/2018.2/linguagem_de_programacao_i__conv010/aula3.html 26/27 Obs.: Não detalharemos agora as funções que trabalham com vetores de char, pois, como na linguagem C não existe o tipo String como em algumas linguagens, para lermos mais de um caracter, precisaremos declarar um conjunto de char. Sendo assim, só apresentaremos as sintaxes delas e um exemplo para você começar a se interessar pelo assunto. Notas Variáveis São as structs. Falaremos um pouco sobre elas depois. Referências DA MATTA, Roberto. Uma introdução à antropologia social. Rio de Janeiro: Rocco, 1993. DURKHEIM, Émile. As regras do método sociológico. São Paulo: Abril Cultura, 1978. LAPLANTINE, François. Aprender antropologia. São Paulo: Brasiliense, 2006. MAUSS, Marcel. Sociologia e antropologia. São Paulo: Cosac Naif, 2003. Próximos Passos Operadores relacionais e lógicos; Comandos de tomada de decisão simples e composta (if .../ if ... else) e casos de ifs encadeados; Estrutura do switch e casos nos quais a seleção de múltipla escolha (switch) pode ser aplicada; Desenvolvimento de pequenos programas; Desenvolvimento de um programa que funcione através de um menu, mas sem repetição. Explore mais 1 17/10/2018 Estácio file:///W:/2018.2/linguagem_de_programacao_i__conv010/aula3.html 27/27 Pesquise na internet sites, vídeos e artigos relacionados ao conteúdo visto. Se ainda tiver alguma dúvida, fale com seu professor online, utilizando os recursos disponíveis no ambiente de aprendizagem.
Compartilhar