Baixe o app para aproveitar ainda mais
Prévia do material em texto
Introdução à Linguagem C 1. Tipos de Dados em C Na maioria das linguagens de programação, é necessário definir o tipo de valor que será armazenado em cada espaço de memória. Isto é feito por meio de declarações das variáveis antes do seu uso. O número de bytes tamanho necessário em cada caso depende da linguagem de programação e da máquina. A tabela 1 apresenta os tipos de dados que podem ser utilizados em C, o tamanho que ocupam na memória, em bytes, e os intervalos de validade, ou seja, intervalo de valores que as variáveis podem assumir. Tipo Tamanho mais comum( bytes) Faixa de Valores char 1 Letras e símbolos da Tabela ASCII : 'a', 'b', '*', etc. int 2 ou 4 -32.768 a 32.767 ou -2.147.483.648 a 2.147.483.647 unsigned int 2 ou 4 0 a 65.535 ou 0 a 4.294.967.295 short 2 -32.768 a 32.767 Unsigned short 2 0 a 65.535 long int 4 -2.147.483.648 a 2.147.483.647 Unsigned long 4 0 a 4.294.967.295 float 4 1.2x10-38 a 3.4x1038(6 casas decimais de precisão) double 8 2.3x10-308 a 1.7x10308(15 casas decimais de precisão) long double 10 3.4x10-4932 a 1.1x10 4932 (19 casas decimais de precisão) void Nenhum Nenhum Obs: void é um tipo que serve para indicar que um resultado não tem um tipo definido. Uma das aplicações deste tipo em C é criar um tipo vazio que pode posteriormente ser modificado para um dos tipos anteriores. O tipo void declara explicitamente uma função que não retorna valor algum ou criar ponteiros genéricos, como será visto mais adiante no curso. Exemplos de declarações de variáveis em C: int A, B, C; float R, T; long int L; double x, y, z; 2. Operadores em C 2.1 Atribuição A atribuição ( ← )em C é feita por meio do operador = Ex: A = 15; // a variável A recebe o valor inteiro constante 15. Em C pode-se fazer atribuição múltipla. Por ex: x = y = z = 0; 2.2 Aritméticos Operação Símbolo Exemplo Soma + A + B Subtração - A - B Multiplicação * A * B Divisão / A / B Resto da divisão inteira (modulo) % A % B Negação - -A Observações: a) Na divisão (A/B), se ambos os operandos forem inteiros, o resultado será inteiro – divisão inteira. Caso contrário, ou seja, se um dos operandos forem reais, o resultado será real. b) Ao calcular A % B, que é o resto da divisão inteira de A por B, os operandos A e B devem ser números inteiros. c) O operador unário - A, conhecido como negação, inverte o sinal de A. 2.3 Aritméticos de Atribuição Em C pode-se combinar os operadores aritméticos ( +, - , *, /, %) com o operador de atribuição: m = m + 3; equivale a m += 3; l = l – 5; equivale a l -= 5; I = I * 4; equivale a I *=4; x = x/2; equivale a x /= 2; y = y % 4; equivale a y %= 4; 2.4 Operadores de Incremento e decremento Em C tem-se os operadores: ++ : incrementa de 1 o seu operando - - : decrementa de 1 o seu operandos (a) Forma pré-fixada ++ a => soma 1 e depois retorna o valor de a. Ex: Se a = 5 e n = ++a , como resultado tem-se que n vale 6 e a vale 6. - - a => subtrai 1 e depois retorna o valor de a Ex: Se a = 5 e n = - - a, como resultado tem-se que n vale 4 e a vale 4. (b) Forma pós-fixada a++ => retorna o valor de a e depois soma 1 em a. Ex: se a = 5 e n = a++, como resultado tem-se que n vale 5 e a vale 6. a - - => retorna o valor de a e depois subtrai 1 de a. Ex: se a = 5 e n = a - -, como resultado tem-se que n vale 5 e a vale 4. Obs: Fazer ++(a+b) ou (a+b)++ é ilegal! 2.5 Operadores Relacionais 2.6 Operadores Lógicos A base dos conceitos dos operadores lógicos e relacionais é a ideia de verdadeiro e falso. Em C, verdadeiro é qualquer valor diferente de zero e falso é zero. As expressões que usam operadores relacionais ou lógicos devolvem 0 para falso e 1 para verdadeiro. A tabela verdade dos operadores lógicos é apresentada a seguir, usando 0s e 1s: 2.7 Prioridades dos Operadores Em geral, a precedência em linguagem de programação segue a ordem de precedência matemática dos operadores. Isso é o padrão em C. A precedência dos operadores aritméticos é a seguinte: A tabela a seguir mostra a precedência dos operadores relacionais e lógicos: Tanto no caso das expressões aritméticas como no caso das expressões lógicas, é possível usar parênteses para alterar a ordem natural de avaliação de uma expressão aritmética, relacionai e/ou lógica. No caso de operadores de igual precedência, a expressão é avaliada da esquerda para a direita. Uma expressão matemática em C é qualquer combinação válida em C de variáveis, constantes, operadores e funções matemáticas. 2.8 Funções Matemáticas sobre tipos numéricos Em C as funções matemáticas estão definidas do arquivo math.h (#include math.h). A seguir é apresentada uma tabela com as principais funções matemáticas em C. Função Matemática Função Matemática em C Exemplo de uso em programa Arcos x double acos(double x) Y = acos(x); Arcsen x double asen(double x) Y = asen(x); Arctg x double atan(double x) Y = atan(x); Cos x double cos(double x) Y = cos(x); Sen x double sin(double x) Y = sin(x); Tg x double tan(double x) Y = tan(x); | x| double fabs(double x) Y = fabs(x); √ x double sqrt(double x) Y = sqrt(x); ex double exp(double x) Y = exp(x); ln( x) double log(double x) Y = log(x); log(x ) double log10(double x) Y = log10(x); Xy double pow(double x, double y) X1 = pow(x, y); Menor inteiro maior ou igual a x double ceil(double x) Y = ceil (x); se x = 2.4 → Y = 3 Maior inteiro menor ou igual a X double floor(double x) Y = floor(x); se x = 2.4 → Y = 2 3 Declaração de Variáveis Variável: nome simbólico usado para identificar posições de memória que contém informações. Sintaxe em C: Tipo_da_Variável Nome_da_Variável; ou Tipo_da_Variável Nome_variavel1, …, Nome_variavelN; 3.1 Regras para Nomes de Variáveis em C: i. Uma variável deve conter combinações de letras, números e o caractere '_' (sublinhado) sem espaços em branco. Existe distinção entre letras maiúsculas e minúsculas. ii. Uma variável deve sempre começar com uma letra. iii. Um nome de variável não pode ser uma palavra reservada da linguagem C, a qual possui um significado específico dentro do programa. Ex: int, char, float, double, long, e outros que serão vistos mais adiante. Exemplos de declaração de variáveis em C: int i, nome_dificil, var123; float altura_x, teste2; char C1, C_1; Incorretos: int 1cont, xa*num; char alo;1, arm-1; double %c1, alto-x; 3.2 Atribuição de valores a variáveis em C Atribuir um valor a uma variável significa dizer que a posição de memória ocupada pela variável receberá o valor especificado. Sintaxe em C: Var = valor_a_ser_atribuido; Ex: X = 35; Var_A = X; Total = Var_A + X * Var_A; Não é válido: 7 = 7; // neste caso Var é uma constante Var1 + Var2 = Var3; // Var é uma expressão 4. Definição de Constantes Constante: refere-se a uma posição de memória que terá um valor fixo durante a execução do programa e são inalteráveis. Sintaxe em C: #define a 0 #define b 20.0 #define PI 3.14159265 5. Uso de Biblioteca Uma biblioteca em C é um conjunto de funções que já foram codificadas por outro programador. Assim ao escrever um programa, o programador deve dizer ao compilador onde estão tudo o que será utilizado dentro do programa por meio de uma diretiva de compilação. Diretiva de Compilação: ➢ São mensagens ao compilador para que execute alguma tarefa no momento da compilação; ➢ São iniciadas pelo caractere # e cada diretiva deve estar em uma linha do programa. (a) Diretiva define: vista anteriormente – uma macro para associar um valor constante a um nome. Ou por meio do comando const: const a = 0; const b = 20.0; #define True 1 #define False 0 (b) Diretiva include: especifica arquivo (biblioteca) de funções que serão usadas no programa. Sintaxe: #include “nome_da_biblioteca” #include <nome_da_biblioteca> sendo que “ “ - busca o arquivo a partir do diretório de trabalho do usuário, passando pelos diretórios definidos pelo compilador, terminando com os diretórios padrões do sistema; < > - busca o arquivo começandodiretamente nos diretórios especificados ao compilador Exemplos de bibliotecas úteis e que serão bastante utilizadas: stdio.h → deve estar presente em todo programa, pois contém as definições básicas e entrada e saída de dados. math.h → contém as funções matemáticas não elementares, tais como seno, cosseno, etc. string.h → funções para manipular cadeia de caracteres. stdlib.h → funções envolvendo alocação de memória, controle de processs, conversões, etc. 6. Entrada de Dados Em C a entrada de dados (Leitura) é feita por meio de vários comandos diferentes, tendo como principal o scanf, que é uma função de entrada de uso geral, uma vez que pode ler todos os tipos de dados da linguagem C. Sintaxe: scanf (“%codigo, &nome_variavel); onde Código Significado d Lê um valor inteiro decimal i Lê um valor inteiro decimal f Lê um número em ponto flutuante (real) c Lê um caractere s Lê uma cadeia de caracteres lf Lê um double (ld lê um long int) – l (letra ele) é um modificador de acesso Exemplos: scanf(“%d”, &i); leitura de um valor inteiro e armazenado na variável i. scanf(“%d %f”, &N, &x); leitura de um valor inteiro e um valor real, separados por um espaço em branco e armazenados, respectivamente, nas variáveis N e x. scanf(“%d,%f, &n, &x); idem ao anterior, só que os valores deverão estar separados por uma vírgula. (Pode-se utilizar qualquer caractere como separador). 7. Saída de Dados Em C, existem várias funções que escrevem os dados na saída, sendo as principais: printf() e puts(). Sintaxe: printf(“Descrição da formatação de saída”, dados_de saída); puts(“Descrição da formatação de saída”); Exemplos: printf(“Valor = %d e Velocidade = %f \n”, val, vel); → escreve um inteiro e um real, em conjunto com as mensagens especificadas => Valor = 10 e Velocidade = 20.222 \n – indica que o próximo printf iniciará a escrita na linha de baixo. puts(“Digite um valor inteiro e depois uma palavra”); → escreve a mensagem que está entre aspas. Caracteres de Formatação \n Indica que se deve mudar para a linha seguinte \t Indica que se deve fazer uma tabulação \b Indica que se deve retroceder um caractere \\ Indica que se deve imprimir a barra reversa \ \'' Indica que se deve imprimir aspas \' Indica que se deve imprimir apóstrofo 8. Delimitadores e Comentários São utilizados para facilitar a clareza e legibilidade de um código de programa escrito em C. Em geral, utiliza-se algumas pequenas regras para que se obtenha um programa legível e de fácil entendimento. Por exemplo: • Uso de comentários – esclarecimentos sobre o que cada trecho de programa realiza; Programas precisam ser entendidos não só por computadores, mas também (e principalmente por seres humanos. Por isso, o leiaute (= layout) de um programa, ou seja, a disposição do programa na folha de papel e na tela do monitor, é tão importante. Os dois elementos fundamentais do leiaute são • a endentação, que é o recuo das linhas em relação à margem esquerda da página, e os • espaços entre as palavras (e outros símbolos) de uma linha. O leiaute é, portanto, a administração dos espaços em branco no texto de um programa. Ele segue essencialmente os mesmos princípios que o leiaute de qualquer outro tipo de texto. Caracteres de delimitação de comentário em C: // comentário usado em comentários de apenas uma linha /* comentário */ usado em comentários que ocupem uma ou mais linhas Outros delimitadores importantes: ; Indica o final de um comando ou expressão , Separa elementos em uma lista ( ) Usado para compor expressões ou funções { } Indicam o início e fim de uma sequência de comandos sequenciais, que tenham o mesmo nível hierárquico 10. Funções e a função main Um programa em C é construído a partir de um conjunto de funções, que ao serem executadas permitem a realização de uma tarefa. Todo programa em C deve ter uma função chamada main, que o compilador reconhece como sendo o ponto de partida do programa. Sintaxe de uma função em C: <tipo devolvido da função> NomeDaFunção(lista de parâmetros) { // indica o início da função // coloca-se aqui o corpo da função: variáveis locais e comandos } // indica o final da função Daremos ênfase, neste momento do curso, à função main e a estrutura de um programa em C. Mais adiante exploraremos com detalhes outras funções. Estrutura de um programa em C: # <diretivas para o compilador Declarações Globais <tipo devolvido> main() { // declarações das variáveis da função main // sequência de comandos do programa } Exemplo: Programa em C para ler 2 valores reais a e b e calcular e escrever a soma a + b printf(“a = %f \n”, a); printf(“b = %f \n”, b); printf(“soma = %f \n”, soma); system(“PAUSE”); // para manter a janela de saída no DevC Return 0; }// fim main #include <stdlib.h> #include<stdio.h> int main(){ float a, b, soma; printf("Digite o valor de a: "); scanf("%f", &a); printf("Digite o valor de b: "); scanf("%f", &b); Soma = a + b; 11. Tipos de Dados Caracteres São utilizados para manipular e armazenar informação não numérica. Por exemplo: Nome de pessoas, endereços e outras. Existem dois tipos básicos de dados caracteres: • caracteres individuais: tratados como caracteres char • caracteres reunidos em coleções ordenadas, formando palavras conhecidas como cadeia de caracteres ou strings. 11.1 Caracteres São representados internamente por códigos numéricos. Ocupam 1 byte (8 bits) e podem representar 256 caracteres possíveis. Códigos são associados em uma tabela de códigos. Por ex: a Tabela ASCII (American Standard Code for Information Interchange). A declaração em c é char c, x; x = 'a'; // atribuição de um valor para x 11.2 Cadeia de Caracteres É uma coleção de caracteres armazenados lado a lado. Os caracteres podem ser acessados de forma coletiva ou de forma individual. Declaração de cadeia de caracteres (strings) em C: char Nome[11], cidade[20]; Exemplo de uma cadeia de caracteres: JAU\0 – o símbolo \0 é um finalizador da cadeia de caracteres. 11.3 Manipulação de caracteres e cadeia de caracteres A manipulação de caracteres individuais é semelhante à manipulação de tipos numéricos. Ex: char letra; letra = 'k'; // atribuição de forma direta, porém o caractere deve estar entre aspas simples ('); A manipulação de cadeia de caracteres exige que sejam utilizadas funções especiais para o seu tratamento. Exemplos de algumas funções especiais para manipulação de strings: Obs: usar a diretiva de compilação #include<string.h> Sejam str1 e str2 variáveis do tipo cadeia de caracteres: char str1[10], str2[15]; • strcpy(str1, str2) – atribui a str1 o conteúdo de str2 (copia o valor de str2 em str1); ex: strcpy(frase, “Bom Dia”); • strcmp(str1, str2); - compara str1 e str2 e retorna: ◦ 0 – se str1 é igual a str2; ◦ valor negativo se str1 for lexicograficamente menor que str2; ◦ valor positivo se str1 for lexicograficamente maior que str2. 12. Conversão de Tipos (modelares ou casting) Em um programa em c, nem sempre se opera com valores do mesmo tipo. Por exemplo: int a = 16, b = 3; float x; ⁞ x = a/b; => a/b = 16/3 = 5 (divisão inteira), como resultado obtém-se x = 5.0; Porém, suponha que o programador gostaria de obter como resposta o valor 5.333. A linguagem C possui o mecanismo de casting para resolver situações como esta. Casting: converte uma expressão de um determinado tipo em outro tipo. A forma geral para se fazer a conversão de tipo em C é: nome_variavel = (nome_do_tipo) expressão; Exemplo: x = (float) a/b; Os parênteses são obrigatórios na expressão acima. Outro exemplo: int main() { int fahr = 5; float cels; printf(“Valor = %f\n”, (float) fahr); // Valor = 5.000 cels = (float) 5/9 * (fahr -32); // cel = -15.00012 printf(“Celsius = %d\n”, (int) cels); // Celsius = -15 system(“pause”); return 0; }
Compartilhar