CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo III Declarações e Comandos de Atribuição Capítulo III – Declarações e Comandos de Atribuição 3.1 – Identificadores e palavras reservadas 3.2 – Elementos de comandos de atribuição 3.3 – Constantes 3.4 – Variáveis e suas declarações 3.5 – Declaração de tipos 3.6 – Operadores de expressões 3.7 – Funções e macros da biblioteca de C 3.8 – Expressões e atribuições especiais de C 3.1 – Identificadores e Palavras Reservadas 3.1.1 – Níveis de complexidade de um programa Nível de subprogramas: um programa é uma composição de subprogramas e de declarações globais Nível de comandos: um subprograma é uma composição de declarações e de comandos Este capítulo Nível atômico: cada comando ou cada declaração é uma composição de átomos do programa Nível de caracteres: cada átomo é uma sequência de caracteres Átomos dos comandos de um programa já vistos: Palavras reservadas: if, while, int, else, etc. Nomes de variáveis (identificadores): i, n, fat, soma, etc. Constantes: 12, 43.2, ‘#’, etc. Cadeias de caracteres: “o fatorial de”, “media”, etc. Operadores aritméticos e lógicos: +, -, *, <, <=, and, or, etc. Separadores: ;, {, }, etc. Palavras reservadas: Palavras que têm um papel especial dentro de certas construções da linguagem Não podem ser usadas em contextos fora dessas construções Palavras reservadas da Linguagem C Identificador: É uma sequência de letras, dígitos e underscores (‘_’), nunca iniciada por um dígito Identificadores são usados para dar nome às variáveis, constantes, funções e outras entidades de um programa É boa prática escolher identificadores que sirvam de mnemônicos para tais entidades Exemplos: fat (para fatorial), soma, r (para razão), p (para precisão) O underscore é usado para substituir o espaço em branco em nomes com mais de uma palavra Exemplos: numero_de_eleitores, ler_matriz, etc. Em muitas linguagens de programação, é proibido usar palavras reservadas como identificadores No padrão ANSI C, caso dois identificadores tenham os mesmos 31 primeiros caracteres, eles representam a mesma entidade Capítulo III – Declarações e Comandos de Atribuição 3.1 – Identificadores e palavras reservadas 3.2 – Elementos de comandos de atribuição 3.3 – Constantes 3.4 – Variáveis e suas declarações 3.5 – Declaração de tipos 3.6 – Operadores de expressões 3.7 – Funções e macros da biblioteca de C 3.8 – Expressões e atribuições especiais de C 3.2 – Elementos de comandos de atribuição Forma geral de um comando de atribuição em C: Variável = Expressão; Execução: calcula-se o valor de Expressão, atribuindo-o a Variável Possíveis elementos de uma expressão: Constantes, variáveis, operadores, separadores e chamadas de funções O resultado de uma expressão deve ser um único valor, de um determinado tipo: Número inteiro, número real, caractere ou valor lógico Capítulo III – Declarações e Comandos de Atribuição 3.1 – Identificadores e palavras reservadas 3.2 – Elementos de comandos de atribuição 3.3 – Constantes 3.4 – Variáveis e suas declarações 3.5 – Declaração de tipos 3.6 – Operadores de expressões 3.7 – Funções e macros da biblioteca de C 3.8 – Expressões e atribuições especiais de C 3.3 – Constantes Constantes que aparecem em expressões podem ser: Inteiras Reais Caracteres Simbólicas Identificadores declarados como constantes 3.3.1 – Constantes inteiras Constantes inteiras podem ser decimais, octais (ou expressas na base 8) e hexadecimais (ou expressas na base 16) Exemplos: Obs.: em C, 0712 ≠ 712 • 0712 está em octal • 712 está em decimal Decimais: 5; 2314; -801 Octais: 011 ( (11)8 = (9)10 ); 0712 ( (712)8 = (458)10 ) Hexadecimais: 0x182 ou 0X182 ( (182)16 = (386)10) ); 0xA27 ou 0xa27 ((A27)16 = (2599)10 ) 3.3.2 – Constantes reais Constantes reais podem ser expressas em notação decimal ou exponencial Exemplos: Notação decimal: 13.47; 0.0072; .92; 47. Notação exponencial: 5.2e20 (equivale a 5.2*1020); 0.03E-7 (equivale a 0.03*10-7) 3.3.3 – Constantes caracteres Constante caractere: ocupa 1 byte; é expressa por um ou dois caracteres entre apóstrofos (‘ ’) Exemplos: Um caractere: ‘a’, ‘B’, ‘+’, ‘;’ Dois caracteres: ‘\n’, ‘\t’, ‘\0’, ‘\\’ Observação: ‘\x’ = ‘x’ mas ‘\n’ ≠ ‘n’ Cada constante caractere tem sua representação interna, de acordo com a tabela ASCII Tabela ASCII básica: 0 0 nul 10 nl 1 2 3 4 5 6 7 8 9 bel bs ht Em C, constantes caracteres são encaradas como inteiros de 8 bits cr 20 esc 30 sp ! “ # $ % & ‘ 40 ( ) * + , - . / 0 1 50 2 3 4 5 6 7 8 9 : ; 60 < = > ? @ A B C D E 70 F G H I J K L M N O 80 P Q R S T U V W X Y 90 Z [ \ ] ^ _ ` a b c 100 d e f g h i j k l m 110 n o p q r s t u v w 120 x y z { | } ~ del São permitidas expressões do tipo ‘a’ + ‘;’ + ‘5’ – 37 Esta expressão equivale a 97 + 59 + 53 - 37 = 172 Em muitas linguagens, isso não é permitido Tabela de caracteres especiais e de controle: Exemplo: escrita de caracteres de controle: Seja a execução do seguinte trecho de programa: #include <stdio.h> #include <stdlib.h> int main () { printf ("abcde\nabcde\rxxx\nabcde"); - - - - } Vídeo abcde_ _ abcde abcde a _ xxxde bcde_ _ abcde_ _ Exemplo: Acionamento da campainha: O seguinte programa emite alguns toques de campainha: int main () { int i; i = 1; while (i <= 15) { printf ("\a"); i = i+1; } printf ("\n\n"); system ("pause"); return; } Exercício 3.3.3: 1. Dado o trecho de programa a seguir, dizer o que será mostrado no vídeo, quando ele for executado, sem usar ambiente de programação int i = 1; while (i <= 5) { printf ("i=%d;", i); i = i + 1; } printf ("\n\n"); i = 11; while (i <= 15) { printf ("i=%d;\r", i); i = i + 1; } printf ("\n\n"); i = 21; while (i <= 25) { printf ("i=%d;\n", i); i = i + 1; } 3.3.4 – Constantes cadeias de caracteres Constante cadeia de caracteres: sequência de caracteres comuns, especiais e/ou de controle, tudo entre aspas (“ ”) Os caracteres ocupam bytes consecutivos na memória Encerando a sequência, aparece um caractere ‘\0’ Exemplo: a cadeia de caracteres “abc + xyz” é composta dos caracteres: ‘a’, ‘b’, ‘c’, ‘ ’, ‘+’, ‘ ’, ‘x’, ‘y’, ‘z’, ‘\0’ Constantes e variáveis do tipo cadeia de caracteres não figuram em expressões Não comportam apenas um valor, mas vários valores do tipo caractere Serão abordadas no capítulo de variáveis indexadas 3.3.5 – Constantes simbólicas São constantes criadas por diretivas define Exemplo: as diretivas #define pi 3.14159 #define raio 6 Podem ser usadas nas expressões dos comandos: perimetro = 2 * pi * raio; area = pi * raio * raio; Como foi visto, o pré-processador substitui pi e raio por 3.14159 e 6, respectivamente 3.3.6 – Identificadores de constantes A palavra const precedendo qualquer declaração de variáveis torna constantes essas variáveis O compilador não admite que elas sejam alteradas por nenhum comando do programa Exemplo: c4 e c10 são constantes Proibidos: const int c4 = 4, c10 = 10; printf ("c4 = %d; c10 = %d;", c4, c10); scanf (“%d”, &c4); c10 = c10 + 3; Capítulo III – Declarações e Comandos de Atribuição 3.1 – Identificadores e palavras reservadas 3.2 – Elementos de comandos de atribuição 3.3 – Constantes 3.4 – Variáveis e suas declarações 3.5 – Declaração de tipos 3.6 – Operadores de expressões 3.7 – Funções e macros da biblioteca de C 3.8 – Expressões e atribuições especiais de C 3.4 – Variáveis e suas Declarações 3.4.1 – Obrigatoriedade de declarações Variável: identificador ao qual está associado um local de memória, cujo valor pode ser alterado durante a execução Declarações de variáveis: construções não-executáveis da linguagem; servem para: Dar nomes às variáveis Reservar-lhes espaço na memória Especificar o tipo de valores que elas devem guardar Na grande maioria das linguagens de programação, toda variável de um programa deve ser declarada antes de ser referenciada por seus comandos Fortran: linguagem que não exige declarações Variáveis de nomes iniciados por I, J, K, L, M ou N: por default seu tipo é inteiro Variáveis de nomes iniciados por qualquer outra letra: por default, seu tipo é real Tipos primitivos de uma linguagem: tipos padronizados para suas variáveis Tipos primitivos da Linguagem C: vários tipos para inteiros, reais e caracteres C também possui artifícios para que o programador crie novos tipos, conforme seus intentos Forma geral das declarações de variáveis de tipo primitivo em C: Tipo Variável, Variável, ... , Variável; 3.4.2 – Variáveis inteiras Tipos primitivos para inteiros: Quando C foi projetada: int – 2 bytes short – 1 byte long – 4 bytes 3.4.3 – Variáveis reais Tipos primitivos para reais: Sistemas de ponto-flutuante são imprecisos; exemplo: float x = 3426171.8390176294015; Comandos double y = 3426171.8390176294015; printf ("x = %24.19e;\ny = %24.19e;", x, y); x = 3.4261717500000000000e+06; y = 3.4261718390176296200e+06; Resultado Valor impresso de x: correto até o 7º dígito significativo Valor impresso de y: correto até o 16º 3.4.4 – Variáveis caracteres Tipos primitivos para caracteres: Variáveis desses tipos equivalem a inteiros de 1 byte Podem fazer parte de expressões contendo inteiros e reais Exemplo: escrita de expressões com variáveis caracteres Programa Resultado no vídeo Formato %c: escreve o caractere Formato %d: escreve a representação interna do caractere 3.4.5 – Variáveis lógicas Diferentemente de outras linguagens, C não disponibiliza um tipo de variável específico para armazenar valores lógicos (true e false) No entanto, o programador pode utilizar, dessa linguagem, a capacidade de criar novos tipos, para trabalhar com variáveis e valores lógicos Isso será ilustrado no Tópico 3.5 deste capítulo 3.4.6 – Declarações com inicialização A Linguagem C possibilita que variáveis sejam inicializadas em suas declarações Programa Exemplo: Resultado no vídeo 3.4.7 – Outras classificações de variáveis Variáveis escalares: Destinadas a guardar apenas um valor, num dado momento da execução x Todas as variáveis vistas até agora são escalares Variáveis estruturadas: Destinadas a guardar vários valores, num dado momento da execução A Classificação das variáveis estruturadas Variáveis indexadas: São variáveis estruturadas homogêneas, ou seja, seus valores são todos do mesmo tipo (vetores e matrizes) B Estruturas: São variáveis estruturadas heterogêneas, ou seja, seus valores podem ser de tipos diferentes E Até agora foram mencionadas e estudadas variáveis destinadas a guardar valores (inteiros, reais, caracteres, lógicos) x Ponteiros: variáveis escalares destinadas a guardar endereços de outras variáveis p 48.2 48.2 x Há também variáveis indexadas de ponteiros e estruturas em que alguns valores são ponteiros B E Variáveis indexadas, estruturas e ponteiros serão estudados em capítulos específicos Capítulo III – Declarações e Comandos de Atribuição 3.1 – Identificadores e palavras reservadas 3.2 – Elementos de comandos de atribuição 3.3 – Constantes 3.4 – Variáveis e suas declarações 3.5 – Declaração de tipos 3.6 – Operadores de expressões 3.7 – Funções e macros da biblioteca de C 3.8 – Expressões e atribuições especiais de C 3.5 – Declaração de Tipos Declaração de tipos: possibilita ao programador criar seus próprios tipos de variáveis Exemplo: as declarações typedef char letra, digito; typedef int comprimento; typedef float preco; Permitem a declaração de variáveis de tipos letra, dígito, comprimento e preco, tais como: letra l1, l2, l3; digito d1, d2; comprimento c1, c2, c3; preco p1, p2; O uso de typedef para tipos escalares tem apenas a vantagem de se ter nomes de tipos que reflitam melhor a natureza das variáveis Para variáveis indexadas e estruturas, uma boa vantagem é a abreviação de longas declarações, como será visto em capítulos específicos Exemplo: simulação de variáveis e valores lógicos Foi criado o tipo ‘logic’ e as constantes ‘False’ e ‘True’ O tipo ‘char’ foi escolhido como equivalente, pois é o que ocupa menos memória && e ||: versões em C dos operadores ‘and’ e ‘or’ Programa Resultado