Você está na página 1de 51

LINGUAGEM C

TÉCNICAS E LINGUAGENS DE
PROGRAMAÇÃO - 11ºANO
ANO LECTIVO 2004/2005

TLP - 11ºANO 1
2 - Tipos de Dados Básicos

Tipos de Dados em C
Variáveis
 Atribuição
 Inteiros, Reais e Caracteres
Operadores Numéricos
Leitura e escrita de variáveis e expressões
Formatos de leitura e escrita
Caracteres vs. Inteiros
Alguns erros comuns

TLP - 11ºANO 2
Tipos de dados
Os tipos de dados são apenas 4:
 char - apenas 1 caracter alfanumérico

(geralmente ocupa 1 byte)

 int - nºs inteiros (geralmente ocupa 2 bytes)

 float - nºs fraccionários com precisão simples


ex.: 7.5 (geralmente ocupa 4 bytes)

 double - nºs fraccionários com precisão dupla


(geralmente ocupa 8 bytes)

TLP - 11ºANO 3
Variáveis

Uma variável é o nome dado a uma determinada


posição de memória para conter um valor de um
determinado tipo.
O valor contido na variável, varia ao longo da
execução do programa.
Uma variável deve ser definida sempre antes de ser
usada.
A definição de variáveis faz-se utilizando a seguinte
sintaxe:
tipo var1 [,var2,...,varn ];

TLP - 11ºANO 4
Variáveis

Exemplos:

int i; /* i é uma variável do tipo inteiro */


No Pascal Var i: integer;
char ch1, novo_char; /* ch1 e novo_char são variáveis
do tipo char*/
float pi, raio, perimetro;
double total, k123;

Nota – A declaração de variáveis tem que ser sempre


realizada antes da sua utilização e antes de qualquer
instrução.
TLP - 11ºANO 5
Variáveis

main()
{
declaração de variáveis
instrução1;
instrução2;
}

As variáveis são sempre armazenadas em memória.


O tipo que lhes está associado indica o n.º de bits
que vão ser utilizados para a sua declaração.

TLP - 11ºANO 6
Nomes de Variáveis
O nome de uma variável pode ser constituído por
letras do alfabeto (minúsculas ou maiúsculas), dígitos
(0,...9) e pelo caracter underscore (_).
O 1º caracter não pode ser um dígito. Terá que ser
uma letra ou caracter underscore. Este último é
desaconselhado como primeira letra de uma variável.
Maiúsculas e minúsculas representam caracteres
diferentes logo variáveis diferentes.
Uma variável não pode ter por nome uma palavra
reservada da própria linguagem.
Não é aconselhado o uso de caracteres acentuados (â,
õ, à, é, etc) no nome das variáveis, pois a maioria dos
compiladores não os aceita como caracteres
admissíveis.

TLP - 11ºANO 7
Nome de Variáveis(Cuidados a seguir)
O nome da variável deve descrever o que ela
armazena.
Ex: xxx,yyy vs. Id_Cliente, num_factura

Caso o nome de uma variável use mais que uma


palavra utiliza-se o underscore para a separar.
Ex: nome_principal_cliente

Não utilize o caracter underscore ( _ ) para iniciar o


nome de uma variável.

TLP - 11ºANO 8
Atribuição
Sempre que uma variável é declarada, estamos a
solicitar ao compilador espaço em memória para a
armazenar.
No caso do inteiro o espaço que lhe é reservado é de 2
Bytes.
Nota – Uma variável que é declarada fica sempre com
um valor, o qual resulta do estado aleatório dos Bits
que a constituem.
A atribuição de valores em C é realizada através do
sinal =, sendo a variável a alterar SEMPRE colocada do
lado esquerdo da atribuição e o valor a atribuir do lado
direito.
Sintaxe: variável = expressão;
Ex.: Para colocar o valor –17 na variável num faz-se:
int num; /* declaração da variável num */
num=-17; /* num passa a ter valor –17 */
TLP - 11ºANO 9
Atribuição
Nota – Uma variável pode ser automaticamente inicializada
quando se faz a sua declaração.

As duas linhas anteriormente escritas podiam-se agrupar


numa só linha:
int num=-17;
/* num é declarada do tipo int e automaticamente */
/* inicializada com o valor –17 */
int n1=3,n2=5;
/* n1 e n2 são declaradas e ficam com os valores */
/* 3 e 5 respectivamente */
int a=10, b, c=-123, d;
/* a e c são automaticamente inicializadas com os *valores 10
e –123.
* b e d ficam com um valor aleatório "Lixo"
*porque não foram inicializadas. */

TLP - 11ºANO 10
Atribuição

NOTA: Em C é possível atribuir o mesmo valor a


várias variáveis.

Ex: a = 5;
b = 5;
c = 5;
d = 5;

ou então a = b = c = d = 5;

TLP - 11ºANO 11
Inteiros - int

As variáveis declaradas do tipo inteiro são


utilizadas para armazenar valores que pertencem
ao conjunto dos números naturais ( sem parte
fraccionária ) positivos ou negativos.
Ex: 2, -345, +115,0.
Declaração de uma variável inteira
int num;

TLP - 11ºANO 12
Inteiros - int
Operações sobre inteiros
É possível realizar um conjunto de operações sobre os
inteiros, em que o resultado é sempre um valor inteiro:

Operação Descrição Exemplo Resultado


+ Soma 21 + 4 25
- Subtracção 21 – 4 17
* Multiplicação 21 * 4 84
/ Divisão Inteira 21 / 4 5
% Resto da D.I. 21 % 4 1
(Módulo)

TLP - 11ºANO 13
Inteiros - int
Operações sobre inteiros
NOTA: Qualquer operação entre inteiros devolve um
inteiro.
21 4
1 5

21/4 irá devolver o quociente


da divisão de 21 por 4

21%4 irá devolver o resto da divisão de 21 por 4

Vamos agora aprender como se podem escrever


inteiros no ecrã.

TLP - 11ºANO 14
Inteiros - int
Como escrever os inteiros no ecrã?

#include<stdio.h>
main()
{
int num = 123;
printf (“O valor de num = %d e o valor seguinte
= %d\n”, num, num+1);
}

TLP - 11ºANO 15
Comentário do exercício
Pode ler-se no programa anterior que a declaração
da variável num do tipo int é automaticamente
inicializada com o valor 123.
Nós queremos escrever no ecrã a seguinte string:
"o valor de num=123 e o valor seguinte =124"

Nota: O formato de escrita de um inteiro na função


printf é %d.
Neste caso o primeiro %d vai ser substituído pelo
valor da variável num e o %d seguinte será
substituído pelo resultado da soma de num+1.

TLP - 11ºANO 16
Inteiros - int
Da mesma forma que existe a função printf para
escrita de valores, existe uma função correspondente
para a leitura de valores scanf.

Exemplo:
#include<stdio.h>
main()
{
int num ;
printf(“Introduza um Nº: ”);
scanf(“ %d”, &num);
Printf(“O n.º introduzido foi %d\n”, num);
}

TLP - 11ºANO 17
Função scanf
A função scanf ( leitura formatada) funciona de
forma semelhante à função printf. Uma vez que ela
foi implementada para a leitura de valores, a string
inicial deve conter apenas o formato das variáveis
que queremos ler.
scanf(“%d”, &num);

Formato inteiro Nome da variável

Depois de especificados os formatos de leitura na


string, devem ser colocadas todas as variáveis
correspondentes pela ordem em que ocorrem os
formatos, precedidas de um & (excepto se forem
strings).

TLP - 11ºANO 18
Função scanf
NOTA: Para qualquer variável do tipo int, char,
float ou double utilizando a função scanf, tem que
preceder cada variável de um & (“E” comercial).
Caso não o faça, a execução do programa poderá
ter resultados inesperados.

NOTA: A string enviada para a função scanf não


deve conter outros caracteres que não sejam os
caracteres indicadores de formatos. Um erro
comum, é terminar a string com \n, o que está
completamente errado e faz com que a função
printf não termine a leitura dos valores assim que
estes são introduzidos.
TLP - 11ºANO 19
Exemplo
#include<stdio.h>
main()
{
int n1, n2 ;
printf(“Introduza dois Números: ”);
Scanf(“ %d%d”, &n1, &n2);
printf(“O resultado de %d + %d = %d\n”, n1, n2,n1+n2);
}

TLP - 11ºANO 20
Sumário
18/10/2004

Tipos de Dados em “C”:


 Inteiros e Variações;

 Caracteres.

Exercícios.

TLP - 11ºANO 21
Inteiros e Variações

O tamanho em Bytes de um inteiro varia de


computador para computador, sendo os valores
mais habituais, 2 ou 4 Bytes.

Para se saber a dimensão de um inteiro (ou de


qualquer outro tipo de variável), a Linguagem C,
disponibiliza um operador chamado sizeof, cuja
sintaxe é semelhante à utilizada para invocar uma
função.
A sintaxe do operador sizeof é:
sizeof <expressão> ou sizeof (<tipo>)

TLP - 11ºANO 22
Inteiros e Variações
Exemplo:
Escrever um programa que indique o
número de Bytes que ocupa um inteiro.
#include <stdio.h>
main()
{
printf ("O tamanho em Bytes de um
inteiro = %d\n”, sizeof(int));
}
TLP - 11ºANO 23
Exercício sizeof
Escreva um programa que indique qual o número de
Bytes que ocupam todos os tipos básicos em C:
#include <stdio.h>
main()
{
printf ("O tamanho em Bytes de um inteiro=%d
\n”,sizeof(int));
printf ("O tamanho em Bytes de um char=%d
\n”,sizeof(char));
printf ("O tamanho em Bytes de um float=%d
\n”,sizeof(float));
printf ("O tamanho em Bytes de um double=%d
\n”,sizeof(double));
}
(int=2; char=1;TLPfloat=4;
- 11ºANO
double=8) 24
Inteiros e Variações
Na declaração de um inteiro podem ser utilizados 4
prefixos distintos:

 short – inteiro pequeno (2 bytes)


 long – inteiro grande (4 bytes)
 signed – inteiro com sinal (nºs negativos e positivos)
 unsigned – inteiro sem sinal (apenas nºs positivos)

Declaração das variáveis:


 short int n; /*ou short n;*/ (n usa apenas 2 bytes)

 long int n; /*ou long n;*/ (n usa sempre 4 bytes)

TLP - 11ºANO 25
Inteiros e Variações

NOTA: o formato de leitura e escrita de variáveis


inteiras short e long nas funções scanf e printf deve
ser precedida dos prefixos h (short) e l (long).

Vamos ver um exemplo:


Escreva um programa que solicite ao utilizador a
idade, o montante a depositar e o número de conta
em que quer realizar o depósito, declarando
variáveis como short, int e long.

TLP - 11ºANO 26
Resolução:
#include <stdio.h>

main()
{
short int idade; /* ou short idade */
int montante;
long int n_conta; /* ou long n_conta*/

printf("Qual a Idade: "); scanf("%hd",&idade);


printf("Qual o montante a depositar: ");
scanf("%d",&montante);
printf("Qual o nº de conta: "); scanf("%ld",&n_conta);

printf("Uma pessoa de %hd anos depositou %d$00 na


conta %ld\n", idade, montante,n_conta);
}
TLP - 11ºANO 27
signed e unsigned
Por defeito var. tipo inteiro admite positivos e negativos.

Quando se pretende que contenha apenas valores positivos,


deverá ser declarada com o prefixo unsigned.

Ex: unsigned int Idade; /* ou unsigned Idade;*/

Nota: por defeito todos os inteiros são sinalizados (signed).

Nota: o formato de leitura de variáveis inteiras sem sinal


(unsigned int), utilizando as funções scanf e printf é %u em
vez de %d.
TLP - 11ºANO 28
Limites de inteiros
Tipo de NºBytes Valor Mínimo Valor Máximo
Variável
int 2 -32 768 32 767
short int 2 -32 768 32 767

long int 4 -2 147 483 648 2 147 483 648

unsigned int 2 0 65 535

unsigned 2 0 65 535
short int
unsigned 4 0 4 294 967 295
long int

TLP - 11ºANO 29
Reais – float e double
As var. tipo float e double são utilizadas para
armazenar valores numéricos com parte fraccionária
(reais ou de virgula flutuante)

A diferença entre float e double está no nº de bytes


reservados para armazenar o valor. No float são 4
bytes e no double são 8 bytes.

O Float pode armazenar nºs com precisão simples e


Double com dupla precisão.

Estes nºs são representados por uma parte inteira e por


uma parte decimal separadas por um ponto:
123456 . 789

Parte decimal
Parte inteira ponto
TLP - 11ºANO 30
Calcular o quadrado
A forma mais conhecida de calcular o quadrado de um
número é multiplicar o número por si próprio

(x*x)=x2

Em C não existe qualquer operador que permita calcular


o quadrado de um número.

É necessário inserir uma função que permita realizar


essa operação. É uma função de biblioteca e designa-se -
pow. Para elevar x a 2 escreve-se:

pow (x,2)

e obtém-se então o quadrado de x.

TLP - 11ºANO 31
Exercício com expoente
Escrever um programa que faça a conversão de toneladas para
quilos e gramas, escrevendo em notação tradicional (aaaa.bb) e
notação cientifica (aaaE± bb).

#include <stdio.h>
main()
{
float quilos=1.0E3; /*uma tonelada são 1000 quilos*/
double gramas=1.0E6; /*uma tonelada são1.000.000 gramas*/
float n_toneladas;
printf ("Quantas toneladas comprou: ");
scanf ("%f",&n_toneladas);
printf ("N.º de quilos = %f = %e\n",n_toneladas*quilos,
n_toneladas*quilos);
printf ("N.º de gramas = %f = %E\n",n_toneladas*gramas,
n_toneladas*gramas);
}

TLP - 11ºANO 32
Explicação do programa:

No exemplo anterior utilizaram-se dois


formatos de escrita para a notação cientifica
%e e %E.

A diferença está na forma como os valores são


depois apresentados. (com e 1.2e+5, ou com
E 1.2E+5)

TLP - 11ºANO 33
Caracteres - char
O tipo char permite armazenar UM ÚNICO
CARACTER.

Um dos erros mais frequentes de programação em


Linguagem C é pensar que o tipo char permite
armazenar strings ou conjuntos de caracteres
numa variável do tipo char.

O tipo char é sempre representado num único Byte.

Portanto o número de caracteres possíveis de


representar é 256.

TLP - 11ºANO 34
Caracteres - char
A declaração de uma variável do tipo char segue a
sintaxe já conhecida:

char var1,var2,var3;

NOTA - A representação de caracteres em Linguagem C


faz-se utilizando a plica ('A') e não aspas ("A").

char ch='A', v='$', nl='\n';

O formato de leitura e escrita para caracteres é %c

TLP - 11ºANO 35
Exercícios com char
#include <stdio.h>
#include <stdio.h>
main() main()
{ {
printf ("%clá mu%cdo char ch;
%c", 'O',‘n','\n'); printf ("Introduza um
caracter: ");
}
scanf (“%c",&ch);
Resultado printf ("O caracter
Olá mundo inserido foi
'%c'\n",ch);
$(cursor na nova linha)
}
Resultado
Escreva um programa que Introduza um caracter: A
leia um caracter e a seguir O caracter inserido foi 'A'
o escreva no ecrã. $
TLP - 11ºANO 36
Exercício com char
Escreva um programa que solicite, através da função
scanf, um caracter ao utilizador e em seguida solicite
outro. Por fim, mostre os dois caracteres.

#include <stdio.h>
main()
{
char ch1,ch2;
printf ("Introduza um caracter: ");
scanf ("%c",&ch1);
printf ("Introduza outro caracter: ");
scanf (“%c",&ch2);
printf ("Os caracteres introduzidos foram '%c' e
'%c'\n",ch1,ch2);
}

TLP - 11ºANO 37
Exercício com char
Resultado:
Introduza um caracter: a
Introduza outro caracter: Os caracteres
introduzidos foram 'a' e '
'
Como resolver este problema?

Basta colocar um espaço em branco ‘ ‘,


imediatamente antes do %c do segundo scanf,
mas dentro da string do formato.

TLP - 11ºANO 38
Sumário
25/10/2004

Trabalho com caracteres em “C”:


função getchar;
casting;

Exercícios.

TLP - 11ºANO 39
Função getchar()
A leitura de caracteres pode ser realizada sem ter de
recorrer à função scanf.

Pode-se utilizar outra função desenhada unicamente


para a leitura de um caracter - a função é getchar().

Esta função é invocada sem qualquer parâmetro. Lê


um caracter e devolve o caracter obtido como
resultado da função, evitando assim a escrita de
parâmetros.
caracter lido ← getchar();

TLP - 11ºANO 40
Exercício com getchar()
getchar() vs scanf()
#include <stdio.h>
main() A utilização da função
{ getchar() evita a presença do
char ch; formato de leitura (%c).
printf ("Introduza um O scanf é uma função
caracter: "); genérica de leitura
ch = getchar(); O getchar é uma função
especificamente para a
printf ("O caracter inserido leitura de caracteres.
foi '%c'\n",ch);
Como a variável não é
} passada como parâmetro à
função getchar, não precisa
de ser precedida pelo &.

TLP - 11ºANO 41
Caracteres e Inteiros
Na Linguagem C os caracteres são valores inteiros
guardados num único Byte.
Todas as operações realizadas com inteiros são também
aplicadas ao tipo char.
Depois de declarada a var char ch;
Há várias formas de colocar o caracter 'A' nesta variável:
ch= 'A'; /*Formato tradicional*/
ch= 65; /*Caracter cujo código ASCII é 65*/

Em C, trabalhar com caracter ou com o seu código


ASCII é a mesma coisa.
Por o código ASCII de um caracter ser um valor
numérico, podem ser realizadas com ele todas as
operações realizadas com um inteiro.

TLP - 11ºANO 42
Exemplo
#include <stdio.h>
main()
{
char ch;
printf ("Introduza um caracter: ");
scanf ("%c",&ch);
printf ("O caracter '%c' tem o ASCII nº %d\n", ch, ch);
}

Resultado:
Introduza um caracter: a
O caracter 'a' tem o ASCII nº97
$

TLP - 11ºANO 43
Explicação
Declara-se uma var. tipo char. Faz-se a sua leitura
através da função scanf.

Em seguida lê-se o caracter (%c) e correspondente


código ASCII, que é armazenado internamente como
se de um inteiro se tratasse.

printf ("O caracter '%c' tem o ASCII nº %d",ch,ch);

O valor contido dentro da variável ch é escrito uma


vez com o formato de caracter %c mostrando o
desenho do caracter, e na outra vez com o formato de
inteiro %d mostrando o inteiro armazenado na
variável ch (o seu código ASCII).

TLP - 11ºANO 44
(Casting)
Sempre que se tem numa var. um valor de um
determinado tipo e se quer modificar o tipo dessa var.,
para outro tipo (maior ou menor), é possível indicar
qual o tipo pretendido colocando-o entre ( ) antes do
valor.

No exemplo anterior, ficaria:

printf ("O caracter '%c' tem o ASCII nº %d",ch,(int)ch);

Assim já existe correspondência entre os formatos de


escrita (%c e %d e respectivamente ch, (int)ch) e os
tipos dos valores enviados para a função printf.

TLP - 11ºANO 45
Exercício

Escreva um programa que solicite ao


utilizador um inteiro (entre 0 e 255) e
depois mostre o inteiro seguinte e o seu
caracter correspondente.

TLP - 11ºANO 46
Resolução
#include <stdio.h>
main()
{
int num;
printf ("Introduza um número inteiro: ");
scanf ("%d",&num);
printf("Foi introduzido %d cujo caracter = '%c'\n", num, (char)num);
printf ("O caracter seguinte = '%c' tem o ASCII nº %d\n”, (char)
(num+1), num+1);
}
Resultado:
Introduza um número inteiro: 67
Foi introduzido 67 cujo caracter='C'
O caracter seguinte é 'D' tem o ASCII nº 68

Notar que no último printf, num+1, aparece entre parêntesis (num+1)


de forma a que seja o resultado da soma de num+1 que seja
"promovido" a char.

TLP - 11ºANO 47
Formatos de Leitura e Escrita Resumo:
Tipo Formato   Observações
char %c Um único caracter
int %d ou %i Um inteiro (Base decimal)
int %o Um inteiro (Base octal)
int %x ou %X Um inteiro (Base hexa)
short int %hd Um short inteiro (Base decimal)
long int %ld Um long inteiro(Base decimal)
unsigned short int %hu short inteiro positivo
unsigned int %u inteiro positivo
unsigned long int %lu long inteiro positivo
float %f ou %e ou  
%E
double %f ou %e ou  
%E TLP - 11ºANO 48
Resumo
O C tem 4 tipos de dados básicos – char, int, float e
double
A atribuição de valores a uma var. é realizada através
do sinal =
Podem ser realizadas atribuições encadeadas (a=b=c=2).
Neste caso estas são realizadas da direita para a
esquerda pois uma atribuição devolve sempre o valor
atribuído.
Uma variável pode ser inicializada assim que é
declarada, colocando o sinal atribuição seguido do valor
atribuir (Ex: int a = 234;).
O nome de uma variável deverá sempre representar a
informação que ela contém.

TLP - 11ºANO 49
Resumo (cont.)
Qualquer operação entre inteiros devolve sempre um
resultado inteiro. As operações mais comuns são a
soma(+), subtracção(-), multiplicação(*),divisão
inteira(/) e o resto da divisão inteira (% também
conhecida por módulo).
Podem ser utilizadas as operações anteriores com
reais, à excepção do módulo (%).
A leitura e a escrita de valores pode realizar-se através
das funções scanf e printf respectivamente, utilizando
os formatos adequados a cada tipo %d – int, %f – float
e double e %c – char.
No caso do scanf, cada variável deverá ser precedida de
um &.

TLP - 11ºANO 50
Resumo (cont.)
O tipo int permite algumas pequenas variações, quer
no tamanho quer na forma, através dos prefixos
short, long, signed e unsigned.
O tipo char permite as variações signed(-128 - 127) e
unsigned (0 - 255).
Sempre que seja necessário converter uma expressão
a um determinado tipo utiliza-se o casting (tipo)
Não se deve realizar a leitura de variáveis de um
determinado tipo, usando formato de leitura que não
corresponde a esse tipo.
Função getchar() é uma função especificamente
dedicada à leitura de caracteres.

TLP - 11ºANO 51

Você também pode gostar