08/03/10 (c) Paula Rodrigues 1
INF1005: Programação 1
Introdução à Linguagem CVariáveis e Expressões
Tópicos Principais
• Programando em C• Funções• Variáveis• Define• Operadores e Expressões• Entrada e Saída• Exemplos
08/03/10 (c) Paula Rodrigues 2
#include <stdio.h>
int main (void) { float cels; float fahr; printf(“Digite a temperatura em oC: “); scanf(“%f”, &cels); fahr = 1.8 * cels + 32; printf(“Temperatura em oF: ”); printf(“%f”, fahr); return 0;}
Programando em CEm C, devemos informar o tipo dos nossos dados.Assim, o compilador sabe alocar (reservar) oespaço de memória ideal.TEMOS QUE SABER QUAL O TIPO (PARAALOCAR O TAMANHO ESPECÍFICO DE BYTES)E QUAL O NOME QUE SERÁ USADO PARAREPRESENTAR O ESPAÇO QUE ESTÁ SENDOALOCADO (DEFINIÇÃO DO NOME DAVARIÁVEL).
OBS: COMANDOS EM C TERMINAM COM UM ;
08/03/10 (c) Paula Rodrigues 3
#include <stdio.h>
int main (void) { float cels; float fahr; printf(“Digite a temperatura em oC: “); scanf(“%f”, &cels); fahr = 1.8 * cels + 32; printf(“Temperatura em oF: ”); printf(“%f”, fahr); return 0;}
Programando em C
FUNÇÃO DE ESCRITA DE C.UMA FUNÇÃO EM C É UM PROCEDIMENTOQUE QUANDO EXECUTADO PODE RECEBERALGO COMO PARÂMETRO.
FUNÇÃO DE LEITURA EM C.FUNÇÃO PODE RETORNAR UM VALORATRAVÉS DO PARÂMETRO RECEBIDO.
NOTE QUE O SINAL = EM C É ATRIBUIÇÃO.O VALOR DA DIREITA ESTÁ SENDOATRIBUÍDOAO ESPAÇO DE MEMÓRIA REPRESENTADOPELA VARIÁVEL DA ESQUERDA.
08/03/10 (c) Paula Rodrigues 4
#include <stdio.h>
int main (void) { float cels; float fahr; printf(“Digite a temperatura em oC: “); scanf(“%f”, &cels); fahr = 1.8 * cels + 32; printf(“Temperatura em oF: ”); printf(“%f”, fahr); return 0;}
Programando em C
Inclusão da interface da biblioteca auxiliar de E/Spara utilizar as funções printf e scanf.
Ponto de entrada de todo programa em C.
Retorno necessário, pois a função principalretorna um número inteiro.
08/03/10 (c) Paula Rodrigues 5
Programando em C
• Indentação e comentários são MUITO importantes para oentendimento do código
08/03/10 (c) Paula Rodrigues 6
/* Programa para converter temperatura de Celsius em Fahrenheit */#include <stdio.h>
int main (void) { float cels; /* armazena temperatura em oC */ float fahr; /* armazena temperatura em oF */
/* captura valor fornecido via teclado */ printf(“Digite a temperatura em oC: “); scanf(“%f”, &cels);
/* faz a conversão */ fahr = 1.8 * cels + 32;
/* exibe resultado na tela */ printf(“Temperatura em oF: ”); printf(“%f”, fahr); return 0;}
Estrutura de um Programa C
Comando do Pré-Processador (inclusão de bibl. aux.): #include <nome>
Definição de tipo (constantes): #define nome valor
Funções auxiliares (cap. 3 para INF1005)
Função Principal (início da execução de um programa): int main(void)
Comentários em qualquer trecho de um código C: /*isto é um comentário */
Funções
• As funções têm a seguinte estrutura:
tipo_de_retorno nome_da_funcao (parametros) { variaveis locais
instrucoes em C (comandos = expressoes eoperadores)
}
Variáveis
• Variável é um espaço reservado na memória do computador paraarmazenar um tipo de dado. Devem receber nomes para poderemser referenciadas e modificadas quando necessário.
• Toda variável tem:– um nome (identificador)– um tipo de dado– um valor
• Restrição para nomes: não é permitido começar o nome com umalgarismo (0-9), alguns caracteres não são válidos (*, -, /, +, ...), epalavras reservadas não podem ser utilizadas (main, if, while, ...).
Tipos de Variáveis na Linguagem C
• Tipos básicos na linguagem C:
Tipo Tamanho Menor valor Maior valor
char 1 byte -128 +127
unsigned char 1 byte 0 +255
short int (short) 2 bytes -32.768 +32.767
unsigned short int 2 bytes 0 +65.535
int (*) 4 bytes -2.147.483.648 +2.147.483.647
long int (long) 4 bytes -2.147.483.648 +2.147.483.647
unsigned long int 4 bytes 0 +4.294.967.295
float 4 bytes -1038 +1038
double 8 bytes -10308 +10308
Variáveis
• Declaração de variável:– variáveis devem ser explicitamente declaradas– variáveis podem ser declaradas em conjunto
int a; /* declara uma variável do tipo int */
int b; /* declara uma variável do tipo int */
float c; /* declara uma variável do tipo float */
int d, e; /* declara duas variáveis do tipo int */
08/03/10 (c) Paula Rodrigues 12
Variáveis: Bits, Bytes e Palavras
• Organização da memória– Bit:
• menor unidade• armazena 0 ou 1
– Byte:• seqüência de 8 bits
0 1 2 3 4 5 6 7
1 0 0 1 1 1 0 0 1 0
1 1 1 0 0 1 1 1 0
2 0 1 1 1 0 0 1 0
3 0 0 0 0 0 0 0 0
2 0 1 1 1 0 1 0 1 0
1 0 0 0 0 0 0 0 0
2 1 1 1 1 1 1 1 1
3 0 0 0 0 0 0 0 0
08/03/10 (c) Paula Rodrigues 13
Variáveis: Números Inteiros em um Byte
Bits Valor
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7
Byte Valor
00000000 0
00000001 1
00000010 2
00000011 3
… …
11111101 253
11111110 254
11111111 255
08/03/10 (c) Paula Rodrigues 14
Variáveis: Como lidar com númerosnegativos?
Bits Valor
011 3
010 2
001 1
000 0
101 -1
110 -2
111 -3
Com sinal
O valor de umaposição de memóriadepende do tipo queestá armazenado lá!
08/03/10 (c) Paula Rodrigues 15
Variáveis: Como representar um número real?
IEEE standart 754 Floating Point
s eeee…eeee mmmmmmmmm…mmmmmm
051526263
Precisão dupla (double)
310123456.456.123 !=
s eeeeeeee mmmmmmmm…mmmmmm
022233031
Precisão simples (float)
mantissaexpoente
08/03/10 (c) Paula Rodrigues 16
Variáveis: Armazenando Texto
01101111 01101001 00100000 01100001 01101110 01100001 00000000
111 105 32 61 110 61 0
'i''o' ' ' 'a' 'a''n' ‘\0'
"oi ana"
08/03/10 (c) Paula Rodrigues 17
Variáveis: Como representar caracteres?
Variáveis em INF1005
int
float
double
Define
• A diretiva #define associa um identificador a um valor. O padrão CANSI refere-se ao identificador como um nome de macro e aoprocesso de substituição como substituição de macro.
• Formato: #define nome_macro valor
• É usual definir o nome das macros com letras maiúsculas
• Exemplos:– #define UM 1– #define MSG “Digite S para sair”
• Expressão = combinação de variáveis, constantes e operadoresque, quando avaliados, resulta em um valor.
Exemplo: float cels = 10; float fahr = 1.8 * cels + 32;
08/03/10 (c) Paula Rodrigues 20
Operadores e Expressões
variavel = expressao,
onde a expressao pode ser formada por várias operações
Sinal de atribuição
Operadores e Expressões
• Operadores aritméticos ( + , - , * , / , % ):– operações são feitas na precisão dos operandos
• o operando com tipo de menor expressividade é convertido parao tipo do operando com tipo de maior expressividade
• divisão entre inteiros trunca a parte fracionária
int a
double b, c;
a = 3.5; /* a recebe o valor 3 */
b = a / 2.0; /* b recebe o valor 1.5 */
c = 1/3 + b; /* 1/3 retorna 0 pois a operação será sobre inteiros */
/* c recebe o valor de b */
•No capítulo 4, veremos ainda os operadores lógicos e relacionais.
Operadores e Expressões
• Operadores aritméticos (cont.):– o operador módulo, “%”, aplica-se a inteiros– precedência dos operadores: * , / , - , +
x % 2 /* o resultado será 0, se x for par;
caso contrário, será 1 */
a + b * c / d é equivalente a (a + ((b * c) / d))
Operadores e Expressões
• Operadores de atribuição : ( = , += , -= , *= , /= , %= )– C trata uma atribuição como uma expressão
• a ordem é da direita para a esquerda– C oferece uma notação compacta para atribuições
em que a mesma variável aparece dos dois ladosvar op= expr é equivalente a var = var op (expr)
i += 2; é equivalente a i = i + 2;
x *= y + 1; é equivalente a x = x * (y +1);
Operadores e Expressões
• Operadores de incremento e decremento ( ++ , -- ):– incrementa ou decrementa de uma unidade o valor de uma variável
• os operadores não se aplicam a expressões• o incremento pode ser antes ou depois da variável ser utilizada
n++ incrementa n de uma unidade, depois de ser usado++n incrementa n de uma unidade, antes de ser usado
n = 5;
x = n++; /* x recebe 5; n é incrementada para 6 */
x = ++n; /* n é incrementada para 6; x recebe 6 */
a = 3;
b = a++ * 2; / b termina com o valor 6 e a com o valor 4 */
Expressões e Operadores
• EXEMPLO: cálculo do volume de uma esfera (4/3 * pi * r^3) – comoa linguagem C não tem o operador de exponenciação, ou se usauma biblioteca externa (math.h) ou são feitas três multiplicaçõesconsecultivas.
#include <stdio.h>int main ( void){ float raio; /* raio da esfera */ float vol; /* volume calculado */ printf (”Entre com o raio da esfera: ” ) ; scanf(“%f”, &raio); vol = (4.0 / 3.0) * 3.14159 * raio * raio * raio; printf(”Volume da esfera : %f”, vol) ; return 0;}
08/03/10 (c) Paula Rodrigues 25
Expressões e Operadores
#include <stdio.h>
#define PI 3.14159
int main ( void){ float raio; /* raio da esfera */ float vol; /* volume calculado */ printf (”Entre com o raio da esfera: ” ) ; scanf(“%f”, &raio); vol = (4.0 / 3.0) * PI * raio * raio * raio; printf(”Volume da esfera : %f”, vol) ; return 0;}
Para evitar o uso de uma constante numérica para o PIpode-se definir uma CONSTANTE SIMBÓLICA.
08/03/10 (c) Paula Rodrigues 26
Expressões e Operadores
#include <stdio.h>#include <math.h>
#define PI 3.14159
int main ( void){ float raio; /* raio da esfera */ float vol; /* volume calculado */ printf (”Entre com o raio da esfera: ” ) ; scanf(“%f”, &raio); vol = (4.0 / 3.0) * PI * pow(raio, 3); printf(”Volume da esfera : %f”, vol) ; return 0;}
UsandoA biblioteca matemática
<math.h>com sua função pow(base, expoente)
08/03/10 (c) Paula Rodrigues 27
Entrada e Saída
• Função “printf”:– possibilita a saída de valores segundo um determinado formato
printf ("%d %g", 33, 5.3);
tem como resultado a impressão da linha:
33 5.3
printf (formato, lista de constantes/variáveis/expressões...);
printf ("Inteiro = %d Real = %g", 33, 5.3);
com saída:
Inteiro = 33 Real = 5.3
Entrada e Saída
• Especificação de formato:%c especifica um char%d especifica um int%u especifica um unsigned int%f especifica um double (ou float)%e especifica um double (ou float) no formato científico%g especifica um double (ou float) no formato mais apropriado
(%f ou %e)%s especifica uma cadeia de caracteres
Entrada e Saída
• Especificação de tamanho de campo:
Entrada e Saída
• Impressão de texto:
printf("Curso de Programação 1\n");
exibe na tela a mensagem:
Curso de Programação 1
Entrada e Saída
• Função “scanf”:– captura valores fornecidos via teclado
int n;
scanf ("%d", &n);
valor inteiro digitado pelo usuário é armazenado na variável n
scanf (formato, lista de endereços das variáveis...);
Entrada e Saída
• Especificação de formato:%c especifica um char%d especifica um int%u especifica um unsigned int%f,%e,%g especificam um float%lf, %le, %lg especificam um double%s especifica uma cadeia de caracteres
Entrada e Saída
• Função “scanf” (cont.):– caracteres diferentes dos especificadores no formato servem para
cercar a entrada– espaço em branco dentro do formato faz com que sejam "pulados"
eventuais brancos da entrada– %d, %f, %e e %g automaticamente pulam os brancos que precederem
os valores numéricos a serem capturados
scanf ("%d:%d", &h, &m);
valores (inteiros) fornecidos devem ser separados pelocaractere dois pontos (:)
Vamos programar?
Aritmética Inteira
• Qual o erro na expressao abaixo????– V = 4/3 * PI * pow(raio, 3);– O erro não está na expressão e sim no resultado. Como 4 e 3 são
valores inteiros, o resultado dessa divisão é um número inteiro e portantoseria 1, e não 1.3333...
• Outro exemplo:
5/2 = 2Como está sendo armazenado
em um float, o valor dessa divisão em cé 2.0
08/03/10 (c) Paula Rodrigues 36
Aritmética Inteira
• A linguagem C oferece um operador aritmético adicional paraoperandos inteiros chamado operador módulo (%)
int a;a = 8 % 3; /* a recebe o valor 2 */
08/03/10 (c) Paula Rodrigues 37
Aritmética Inteira#include <stdio.h>
int main ( void){ int tot; /* numero total de segundos */ int hor, min, seg; /* numero total de horas, minutos e segundos */
printf(“Entre com o numero de segundos transcorridos: “); scanf(“%d”, &tot);
hor = tot / 3600; min = (tot % 3600) / 60; seg = tot % 60;
printf(“Tempo transcorrido: “); printf(“horas = %d “, hor); printf(“minutos = %d “, min); printf(“segundos = %d “, seg);
return 0;}
Quando essa truncagemé útil???
Chinês: 4320s = 1h 1min 12s
(c) Paula Rodrigues 38
Aritmética Mista
• Se em uma expressão aritmética os operandos forem de tiposdiferentes, a operação é feita na representação do tipo de maiorexpressividade: double > float > int:– 4.0 / 3 = 1.3333...– 4 / 3.0 = 1.333...
• Se temos duas variáveis inteiras e queremos que a divisão sejafeita em representação real, podemos usar um operador deconversão de tipo:
No caso, o (float) converte a em 5.0e depois divide por 2.Note que o valor da variável continuasendo do tipo inteiro.O valor de a não é alterado.
08/03/10 (c) Paula Rodrigues 39
Aritmética Mista
• Outros casos em que a conversão de tipo também é útil:
O compilador iria gerar uma mensagemde advertência (warning), para evitar:
08/03/10 (c) Paula Rodrigues 40
Exercícios do Capítulo 2
42
Referências
Waldemar Celes e Roberto Ierusalimschy, Apostila de Programação(disponível para download no site da disciplina)
• Capítulo 2 – Introdução à Linguagem C