Buscar

Roteiro_1

Prévia do material em texto

Prof. MsC. Halysson Freitas 
 
01 - Os cinco tipos básicos de dados (char, int, 
float, double e void) 
 
Os cinco tipos básicos de dados dão suporte à representação de alguns dados que usamos 
no dia à dia. Eles podem formar estruturas de dados mais complexas, mas isso veremos 
mais à frente. 
 
O primeiro tipo de dado básico é o ​char ​. Este nome é um encurtamento da palavra 
character ​(traduzido do inglês: carácter). Na nossa língua portuguesa e em inúmeras outras 
línguas, o carácter é a base para construção das palavras. Em C, o suporte a palavra como 
um dado não é fornecido como um tipo básico de dado, de outra forma, como um tipo de 
dado composto de vários dados do tipo char, será visto no futuro. 
 
Podemos citar como exemplo qualquer letra do alfabeto, números e outros símbolos. Fica 
bem óbvio que uma letra como ‘a’, ‘i’, ou ‘x’ pode ser classificada como do tipo char. 
Todavia, nem sempre fica óbvio com números. Dado que lhe seja fornecido o seguinte dado 
‘1’, você poderia interpretá-lo como do tipo básico de dado ​int​, mas não é. Duas 
diferenciações devemos fazer. A primeira está no conceito de caracteres e a segunda na 
forma de escrita. Um carácter é uma simbologia que representa algo, mas não é este algo, 
por exemplo: o carácter ‘a’ representa um padrão de sonoridade que pode ser emitido pelos 
seres humanos e combinado com várias outras sonoridade, mas ‘a’ como símbolo sem 
semântica não é esta sonoridade. 
 
Finalizando o char, todo dado deste tipo é sempre posto entre aspas simples e só pode ter 
um símbolo dentro destas aspas. Diferentemente, o tipo int não utiliza destas aspas e pode 
ter uma representação com vários caracteres numéricos, como no número 512. Este 
número tem o carácter 5, 1 e 2, sobretudo, são indissociáveis, formando uma unidade de 
dado completa. 
 
Matematicamente falando, o tipo int dá suporte à representação dos números inteiros, 
sejam estes positivos ou negativos. Logo, se tens um número com parte decimal como o 
1,28 este não poderá ser estabelecido como do tipo int. 
 
Para o 1,28 pode-se utilizar dois dos tipos básico de dados, o ​float ​e o ​double​. Este dois 
tipos suportam dados do tipo real na matemática. Daí surge a pergunta, por quê os dois 
para representar a mesma coisa? Neste ponto temos que estabelecer uma ideia que 
permeia toda computação, o recurso disponível e a sua otimização. Vamos a um exemplo 
simples, sua mochila cabe apenas 4 livros e ela custou R$100 reais, era o preço que você 
podia pagar. Já a mochila que cabe 6 livros custava R$ 200 reais, lhe atenderia com mais 
folga de carga, mas você não tinha o dinheiro. Deste modo, você se adapta a carga 
possível na sua mochila, realiza a tarefa, com o recurso que tens. O float têm menor 
capacidade que o double e vamos abordar em breve este assunto. 
 
Por último, e muito importante, temos o ​void​. Este define que não tem nenhum valor, de 
forma explícita. Na linguagem C, se isso não fosse feito, em algumas situações será padrão 
interpretar o dado como int, como no caso do retorno das funções. 
 
No padrão ANSI, cada tipo tem um tamanho definido em bits: char (8 bits), int (16 bits), float 
(32 bits), double (64 bits), e long double (80 bits). 
02 - Modificadores de tipos básico (signed, 
unsigned, long, short). Só explicar a ideia. 
Como visto anteriormente, cada tipo de dado básico tem um tamanho em bits, ou seja, esse 
tamanho é o espaço consumido de memória, seja memória RAM, HD, ou o local onde estão 
armazenados. Existem formas de aumentar ou diminuir esse tamanho padrão. Para isso 
pode-se usar os modificadores ​long ​(para aumentar) e ​short ​(para diminuir). 
 
Um dado do tipo int utiliza 16 bits de memória, como já visto. Isso significa que ele tem um 
número máximo de representações, ou seja, tem 65.536 (2^16) arranjos binárias. Isso não 
significa que teremos números de 1 a 65.536. Nesse número de combinações temos que 
subtrair um arranjo para representar o 0 (zero) e metade vai para os números negativos. 
Logo, temos 32.768 arranjos para cada lado. 
 
Por padrão, todos os tipos básicos de dados utilizam o modificador ​signed​, sem nem 
mesmo precisar explicitá-lo. Assim, temos 32.768 arranjos para cada lado. No uso do 
modificador ​unsigned ​não haverá representação dos negativos. 
03 - Nomes de Identificadores 
Os identificadores são os nomes atribuídos a variáveis, rótulos, funções, constantes, etc. 
Regras: 
● primeiro caractere deve ser uma letra ou um sublinhado 
● os demais podem ser letras, números ou sublinhado 
● no máximo 31 caracteres 
 
É importantíssimo ressaltar que a linguagem C é ​case sensitive ​, ou seja, “Java” é diferente 
de “java”. 
04 - Variáveis: conceito básico, variáveis e os 
tipos de dados, inicialização 
Na construção de um algoritmo dados devem ser armazenados para servirem de 
parâmetros para as operações. A título de exemplo, um algoritmo que soma dois números 
digitados pelo usuário deve armazenar esses números antes que a operação ocorra. Para 
guardar os dois números usamos a memória do computador. 
 
Para utilizar a memória do computador deve-se alocar um espaço exato para o tipo de dado 
desejado, que pode ser desde um dado básico como um int, ou como outras estruturas 
compostas e mais complexas. 
 
O espaço alocado deve receber um identificador (nome) que será usado no restante do 
algoritmo para o acesso a este espaço de memória específico. Denomina-se ​variável ​o 
espaço de memória nomeado. 
 
Ao alocar um espaço de memória, não se sabe o que tem lá, por isso é necessário antes de 
usar ela em operações fazer uma inicialização, ou seja, atribuir um valor conhecido. 
 
Declarando uma variável: 
int idade; 
int nota1, nota2, nota3, nota4; 
char primeiraLetraDoNome; 
char _classificacao; 
float altura; 
 
Inicializando uma variável: 
idade = 50; 
nota1 = nota2 = nota3 = nota4 = 8; 
primeiraLetraDoNome = ‘H’; 
_classificacao = ‘1’; 
altura = 3,742; 
 
Declarando e inicializando uma variável: 
double distanciaAteOSolEmMetros = 149600000000,8; 
float raioDaMoleculaEmMicrometros = 196,12; 
05 - Entrada e saída: o básico do printf e scanf, 
constantes string, barra invertida (sinais de 
controle) 
Os programas construídos em C geralmente são executados na linha de comando de um 
shell, como o CMD no Windows. São programas textuais que emitem mensagens na tela e 
aguardam uma entrada de dados vinda do teclado. 
 
O comando printf é responsável por imprimir na tela uma mensagem. O verbo imprimir pode 
te arremeter a impressoras de papel, mas não se engane, aqui será usado como a ação de 
fazer uma mensagem aparecer na tela. Abaixo um exemplo de como imprimir seu nome na 
tela: 
 
printf (“joão de oliveira”); 
Este comando fará o texto entre aspas duplas aparecer na tela. Mais para frente vamos 
estudar que todo texto dentro de aspas duplas formam uma ​string​, um tipo de dado 
composto. Da forma que escrevemos, se houvesse mais um printf à ser executado, o texto 
deste novo printf iria aparecer colado no final “joão de oliveira”, à exemplo: 
printf (“joão de oliveira”); 
printf (“o mar é azul”); 
 
Que resultaria: 
joão de oliveirao mar é azul 
 
Para resolver isso podemos usar caracteres especiais chamados de Constantes Caracteres 
de Barra Invertida, como à exemplo o ‘\n’, que quebra umalinha na hora da impressão, à 
exemplo: 
printf (“joão de oliveira\n”); 
printf (“o mar é azul”); 
 
Que resultaria: 
joão de oliveira 
o mar é azul 
 
O comando scanf tem a função de capturar uma informação vinda da entrada padrão, o 
teclado, e atribuir esse dado a uma variável, à exemplo: 
int numeroDeFolhas; 
scanf (“%d”, &numeroDeFolhas); 
 
Inicialmente declaramos uma variável com identificador numeroDeFolhas. O comando scanf 
tem dois parâmetros. O primeiro “%d” diz que espera-se que o valor vindo do teclado é do 
tipo int. O segundo diz que esse valor vindo do teclado será armazenado na variável 
numeroDeFolhas. No segundo parâmetro o carácter ‘&’ é colocado anterior ao identificador 
(nome) da variável, isso será explicado bem mais adiante na matéria, mas por hora, se faz 
necessário para todos os tipos básicos de dados. 
 
Agora, para imprimir esse valor que veio do teclado vamos fazer assim: 
printf (“%d”, numeroDeFolhas); 
 
Observe que o %d foi usado entre aspas duplas. Lembre, que no printf e dentro das aspas 
duplas onde colocamos o texto que vai ser impresso na tela. O %d indica que um valor 
inteiro vai ser acessado de uma variável expressa logo após as aspas duplas. Desta forma, 
se digitarmos 10 o scanf atribui este valor a numeroDeFolhas e printf acessa este valor para 
imprimir na tela. Para ficar mais amigável na tela, pode-se fazer: 
printf (“O livro de programação tem %d folhas.”, numeroDeFolhas); 
 
Dado que numeroDeFolhas tenha o valor 350, na tela aparecerá: 
O livro de programação tem 350 folhas. 
 
Observe 
 
06 - Operador de atribuição: básico, conversão de 
tipos em atribuições, atribuições múltiplas 
O operador de atribuição já foi mostrado lá na inicialização de variáveis. Usa-se ele para 
armazenar um valor dentro de uma variável. Dado que já temos uma variável com nome 
diaDoMes declarada como int, segue-se: 
diaDoMes = 5; 
 
Neste exemplo o espaço de memória reservado pelo identificador diaDoMes recebe o 
número 5. Este número é considerado uma constante, somente o número, pois é imutável. 
No código fonte acrescido de: 
diaDoMes = 10; 
Agora, a variável diaDoMes passa a ter o valor de 10. Novamente, 10 e uma constante. A 
constante 5 foi apagada do espaço de memória reservado por diaDoMes para dar lugar a 
constante 10. 
 
Uma atribuição pode ser feita entre duas variáveis: 
int x, y; 
x = 30; 
y = x; 
 
Logo, o valor contido no espaço de memória reservado por y é 30. Perceba que tanto x 
quanto y são do tipo int, mas isso não é regra. Podemos ter atribuições entre variáveis com 
tipos diferente. Para isso, devemos nos lembrar que cada tipo de dado básico um tamanho 
de espaço em memória é reservado. A regra é, o maior tem espaço para aceitar o menor, e 
o menor corta as casas mais significativas do maior até caber. 
 
É importante lembrar que as variáveis do tipo char são na verdade números tabelados 
(tabela ANSI) que representa os caracteres, logo, um char pode tanto atribuir como ser 
atribuído por outros tipos. 
 
A atribuição múltipla também já foi mostrada na inicialização de variáveis. É simplesmente 
uma única expressão onde mais que uma variável recebe o mesmo valor, como segue: 
char indice1, indice2, indice3, indice4; 
indice1 = indice2 = indice3 = indice4 = ‘B’; 
07 - Operadores aritmético: operadores, regras 
dos operadores de incremento, precedência 
Os operações aritméticos servem para operações matemáticas já bem conhecidas por nós. 
Existem os operadores unários, que só precisa de um operando, e os binários, que 
necessitam de dois operandos. 
Operador Ação 
- Subtração, também menos unário 
+ Adição 
* Multiplicação 
/ Divisão 
% Módulo da divisão (resto) 
-- Decremento 
++ Incremento 
 
Pontos interessantes de serem ressaltado está na divisão e nos operadores de incremento 
e decremento. A divisão de inteiros sempre retorna um inteiro, o resto não vira casas 
decimais. Nos operadores de decremento e incremento se postos antes do operando ele 
tem precedência ao operador de atribuição, se postos pós operando ele não tem 
precedência ao operador de atribuição. 
 
Assim como na matemática, os operadores têm preferências em detrimento de outros 
operadores. Os parênteses podem ser utilizados para modificar preferências. 
 
Precedência dos operadores: 
Mais alta ++ -- 
- (menos unário) 
* / % 
Mais baixa + - 
08 - Exercício sobre variáveis e operadores 
1 - Em toda nova linguagem de programação há um rito de passagem que consiste 
escrever um algoritmo que imprime na tela um “Hello World!” em sua língua. Escreva um 
código que imprima na tela a mensagem: Olá mundo! 
 
2 - Juliana fechou a prova de programação, ela tirou 10. Só de zueira, Juliana fez um 
algoritmo em C que declarou uma variável do tipo int, atribuiu 10 a essa variável, e imprimiu 
esse valor na tela. Faça como Juliana. 
 
3 - A galera que viu o resultado na tela de Juliana não entendeu, ela ficou revoltada, mas se 
acalmou e percebeu que o problema é que a mensagem não foi amigável. Ajude Juliana e 
faça um algoritmo com uma mensagem bacana para mostrar sua nota. 
4 - Juliana fez mais uma prova, ela não foi tão bem quanto na primeira, tirou 6,5. Juliana 
resolveu fazer um algoritmo para calcular sua média e concluiu que ficou com 8,25 de 
média. Exemplifique como Juliana chegou a esse algoritmo fazendo um igual. 
 
5 - O professor de Juliana disse que ela fez o cálculo fora do padrão da faculdade. Todas as 
notas de prova com número que contenham casas decimais, o próprio aluno deve 
arredondá-los para cima. O somatórios das notas deve ser dividido por divisão inteira, e o 
resto da divisão é perdido. Demonstre essa solução. 
 
09 - Operadores Lógicos: tabela verdade, 
precedência, equação lógica 
A Lógica Matemática é base para representar muita coisa no nosso universo, no nosso dia 
a dia, e nos algoritmos é primordial o conhecimento ao mínimo de alguns operadores 
lógicos mais básicos. São eles os binários a conjunção (&&), a disjunção (||), e o unário a 
negação (!). Os operandos das equações lógicas são chamados proposições, e podem ter 
valor de verdade ou falsidade. Em C, 0 é falso e tudo diferente de 0 é verdadeiro. 
 
A tabela verdade nos mostra o resultado de uma equação lógica com os operadores 
básicos que foi apresentado, dado duas proposições, p e q: 
 
p q p&&q p||q !p 
0 0 0 0 1 
0 1 0 1 1 
1 0 0 1 0 
1 1 1 1 1 
 
A ordem de precedência dos operadores são: negação, conjunção e disjunção. Equações 
lógica também usam parênteses para alterar precedência. Assim como nas equações 
aritméticas quando temos um operando dentro de parênteses, o operando externo será 
multiplicado pelo resultado do parênteses. Para a equação lógica ( a||!b (a&&b) ) um 
exemplo de equação lógica e seus possíveis resultado: 
 
a b a&&b !b !b (a&&b) a||!b (a&&b) 
0 0 0 1 0 0 
0 1 0 0 0 0 
1 0 0 1 0 1 
1 1 1 0 0 1 
10 - Exercícios com equações lógicas 
Construa a tabela verdade das equações abaixo: 
a) !(x && y) || (x && y) 
b) d && e && !f 
c) (a || b) || (a && b)

Continue navegando