Buscar

Interação com o Usuário em Linguagem C

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.

Continue navegando