Vamos Programar? – Introdução à Programação #7
Tipos int, float, double e char.
O mundo está constantemente a evoluir: desde o mais pequeno inseto à espécie Humana. Evolução, mudança, futuro – são das palavras que mais são ouvidas atualmente.
A tecnologia tem revolucionado o mundo das mais diversas formas. Se quer entrar no mundo da tecnologia e deixar a sua marca, pode começar aqui.
Visualize este vídeo no YouTube
Tipo int
O tipo de dados int é, como já deve saber, referente a números inteiros. Int quer dizer integer number, ou seja, números inteiros. C, como é uma linguagem que trabalha muito com o hardware do computador, permite-nos definir o tamanho de cada variável deste (e de outros) tipos.
Primeiramente, como se declara uma variável int em C? É muito simples. No seguinte exemplo pode visualizar como declarar uma variável e, posteriormente, imprimi-la:
#include <stdio.h> int main() { int a = 20; printf("O número que guardei é %d.", a); //Imprime: O número que guardei é 20. return 0; }</stdio.h>
Antes de continuar, deve ter reparado que foi utilizado um %d dentro do primeiro parâmetro. Este caractere é substituído pelo valor da variável a quando é imprimido no ecrã.
Função printf e números inteiros:
Utiliza-se %d quando se quer imprimir o valor de uma variável dentro de uma frase. A variável deve ser colocada nos parâmetros seguintes, por ordem de ocorrência. Exemplo:
#include <stdio.h> int main() { int a = 20; int b = 100; printf("O primeiro número é: %d.\n", a); //Imprime: O primeiro número é: 20. printf("O segundo número é: %d.\n", b); //Imprime: O segundo número é: 100. printf("O primeiro e segundo números são %d e %d.\n", a, b); //Imprime: O primeiro e segundo números são 20 e 100. return 0; }</stdio.h>
Este tipo de variáveis ocupa, normalmente, entre 2 a 4 bytes na memória de um computador mas, e se quiser utilizar uma variável para um número pequeno? Não poderei gastar menos recursos? E se acontecer o contrário e precisar de um número maior?
Nestas situações, pode utilizar long e short para controlar os gastos de recursos. Estes modificadores permitem-nos criar variáveis que ocupem um maior ou menor número de bytes, respetivamente.
Um número inteiro de...
- 1 byte armazena de -128 a +127
- 2 bytes armazena de -32 768 a +32 767
- 4 bytes armazena de -2 147 483 648 a +2 147 483 647
- 8 bytes armazena de -9 223 372 036 854 775 808 a +9 223 372 036 854 775 807
A utilização destes modificadores é feita da seguinte forma:
short int nomeDaVariavel = 20; //Ou "long"
O número de bytes atribuída utilizando um destes modificadores pode depender do computador onde o código está a ser executado. Para descobrirmos qual o tamanho de bytes que utiliza o seu sistema, basta utilizar a função sizeof da seguinte forma:
#include <stdio.h> int main() { printf("int : %d bytes\n", sizeof(int) ); printf("short int: %d bytes\n", sizeof(short) ); printf("long int: %d bytes\n", sizeof(long) ); return 0; }</stdio.h>
No computador que estou a utilizar, por exemplo, short refere-se a 2 bytes, long a 8 bytes e o tamanho padrão de int é 4 bytes.
Como sabe, os números inteiros podem assumir forma positiva e negativa. Por vezes, na programação, os números negativos podem atrapalhar (ou então ajudar), dependendo do caso.
Para termos controlo sobre a positividade ou negatividade de um número, podemos atribuir os modificadores signed e unsigned.
Para que uma variável possa conter tanto números positivos como negativos, devemos utilizar o modificador signed. Caso queira que o número seja apenas positivo, incluindo 0, utilize unsigned
Tipo float e double
Além dos números inteiros, existem outros tipos de dados que nos permitem armazenar números que, ao invés de serem inteiros, são decimais.
Existem dois tipos de dados que nos permitem armazenar valores do tipo decimal/real. Estes tipos são float e double. Devem ser utilizados da seguinte forma:
float pi = 3.14; double pi = 3.14159265359;
Como pode ter reparado, em C (e na maioria das linguagens de programação), não se utiliza a vírgula, mas sim um ponto para separar a parte inteira da decimal.
A diferença entre float e double é que o segundo ocupa mais memória que o primeiro logo, consegue armazenar números de maior dimensão.
Normalmente, o tipo float ocupa 4 bytes de memória RAM enquanto o segundo tipo, double, ocupa 8 bytes de memória. Mais uma vez, relembro que estes valores podem alterar de máquina para máquina.
Para quem precise de fazer cálculos mais precisos, o tipo de dados double é o mais aconselhado pois é o que permite uma maior extensão do valor.
Função printf e números decimais:
Utiliza-se %f quando se quer imprimir o valor de uma variável dos tipos float ou double dentro de uma frase. A variável deve ser colocada nos parâmetros seguintes, por ordem de ocorrência. Exemplo:
#include <stdio.h> int main() { float piMinor = 3.14; double piMajor = 3.14159265359; printf("Pi pode ser %f mas, de forma mais exata, é %f.", piMinor, piMajor); //Imprime: Pi pode ser 3.140000 mas, de forma mais exata, é 3.141593. return 0; }</stdio.h>
Pode visualizar que, quando se utiliza %f, é utilizado um número específico de casas decimais. Caso o número de casas decimais seja mais pequeno do que o da variável original, o número é arredondado.
Pode definir o número de casas decimais que quer que sejam apresentadas da seguinte forma: %.{Número de Casas Decimais}f. Veja o seguinte exemplo, baseado no anterior:
#include <stdio.h> int main() { float piMinor = 3.14; double piMajor = 3.14159265359; printf("Pi pode ser %.2f mas, de forma mais exata, é %.11f.", piMinor, piMajor); //Imprime: Pi pode ser 3.14 mas, de forma mais exata, é 3.14159265359. return 0; }</stdio.h>
Notação Científica
Certamente conhece notação científica, ou seja, números no formato NUM1 X 10^NUM2 (NUM vezes dez elevado a NUM2). Podemos utilizar notação científica nas variáveis do tipo float e double. Veja o seguinte exemplo:
#include <stdio.h> int main() { float num = 24E-5; //24 x 10 elevado a -5 printf("%f\n", num); //Imprime: 0.000240 num = 2.45E5; //2.45 x 10^5 printf("%.0f", num); //Imprime: 245000 return 0; }</stdio.h>
Tipo char
Há algumas semanas atrás, falámos do tipo string: um tipo de dados que nos permite armazenar sequências de caracteres, ou seja, de forma geral, frases.
Por agora, ainda não abordaremos este tipo, mas sim char. Este é um tipo de dados que nos permite armazenar um único caractere. É declarado da seguinte forma:
char letra = 'P';
Como pode visualizar, a variável "letra" agora contém o caractere "P". Pode, ao invés de utilizar este tipo de notação, utilizar números hexadecimais, octais e decimais. Clique aqui para descarregar uma tabela ASCII em pdf com os códigos que pode utilizar em C.
Função printf e caracteres:
Utiliza-se %c quando se quer imprimir o valor de uma variável dos tipos char dentro de uma frase. A variável deve ser colocada nos parâmetros seguintes, por ordem de ocorrência. Exemplo:
#include <stdio.h> int main() { char letra = 'P'; printf("O nome Pplware começa por %c.", letra); return 0; }</stdio.h>
Exercícios
- Imprima o nome "Pplware" recorrendo a variáveis do tipo "char".
- Imprima a sua idade numa frase do tipo "A minha idade é X." recorrendo às funcionalidades da função printf.
- Imprima o número 125.2485215487514 com apenas duas casas decimais.
- Descubra o tamanho dos tipos signed, unsigned, int, short e long que são utilizados no seu computador.
- Descubra o tamanho do tipo char recorrendo à função sizeof.
Na próxima semana, as coisas vão começar a tornar-se mais interessantes. Começaremos a pedir dados ao utilizador e a criar condições.
Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, pode sempre utilizar os comentários para colocar a questão. Caso o faça, pedimos que utilize a keyword [DUVIDA] no início do seu comentário.
Este artigo tem mais de um ano
Só faltou falar na diferença entre signed e unsigned, de resto pareceu-me bem.
Está presente:
“Para termos controlo sobre a positividade ou negatividade de um número, podemos atribuir os modificadores signed e unsigned.
Para que uma variável possa conter tanto números positivos como negativos, devemos utilizar o modificador signed. Caso queira que o número seja apenas positivo, incluindo 0, utilize unsigned”
Exato 🙂
qual o programa que executa esta programação?
Olá Simão!
Depende do teu Sistema Operativo. Nós estamos a utilizar o IDE Netbeans que é multi-plataforma. Veja mais aqui.
Que software IDE recomendam para C, no linux?
Na minha opinião pessoal, recomendaria o NetBeans como IDE. Realçando que uma vez que utiliza Linux, podia utilizar um editor de texto como o Geany (Este editor de texto possui também características de IDE como a compilação e arranque do programa) e utilizar o terminal para fazer a compilação e arranque do programa.
Eu neste momento trabalho com uma virtualbox com um intel32 bits. Tens o geany e o terminal, se queres correr basta um makefile e depois é sempre igual.
isso vai depender do que estas a fazer, mas eu penso que tal como os colegas dizzeram, o geany é uma máquina!
cmps
Muito bom, pena é chegar tarde porque já passei essa parte de C e já estou em Assembly, mas um tutorial muito bom e em Português. Para o pessoal que quer complementar esta informação, aconselho o livro do Luís Damas, EXCELENTE.
Já passaste esta parte do C e já estás em assembly?
Gosto mais do percurso contrário :p
+1
realmente passar de C para Assembly e andar de cavalo para burro XD
Normalmente o int o seu tamanha pode variar entre 2 e 4 bytes quando declarado apenas como int. Com o short e long firmamos qual deles vais ser.
Exato =D
Carissimos.. .
?alguem conhece um bom REPL para C++ Win32
pequeno e rapido,,, nada de bloatwares!!!
Ou um short-ide… do genero -> ecran split em 2…
metes o snippet de C na parte de cima e o tipo está a compilar e a apresentar na metade de baixo…
Olá ZEE!
Não sei se compreendi bem a tua questão mas dá uma olhadela aos seguintes links:
1 – CINT
2 – Cling
é isso mesmo q pretendo… um REPL para testes de C++
os 2 referidos já conheço e testei durante algum tempo… para além de serem enormes (bloatware), falham constantemente (crashes, erros, etc…)
ninguem conhece nada melhor???
qq coisa do género de um “Mono C#REPL” ou um “CShell REPL by Arnova”… mas para C++
[DUVIDA]
olá Henrique e parabéns pela iniciativa!
então e as correcções dos exercícios?
Obrigado!
Boas, é so de mim, ou o exercicio em que é suposto utilizar o tipo de variavel char, com PPlware, não esta explicado no texto?
Pelo menos, eu nao consegui usar uma variavel tipo char, para fazer print de PPlware. tive de utilizar uma variavel string.
Isso é normal?
Obrigado
Olá Pedro!
Em primeiro lugar vou corrigir um pequeno pormenor no que disseste: o tipo string não existe de forma literal na linguagem C. Esta é uma matéria que será abordada mais à frente.
O nosso objetivo com essa questão era que os leitores criassem uma array do tipo char com as diversas letras que constituem o nome “Pplware”.
Realmente, concordo com o facto de isto não ser assim muito direto, pois, realmente, falta a indicação de que podemos imprimir uma array de caracteres com “%s”.
Então, a resolução deste exercício poderia ser efetuada da seguinte forma: