Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 UNIDADE 2: PECULIARIDADES DA LINGUAGEM C Operadores Aritméticos • Operadores aritméticos: utilizados para a realização de cálculos matemáticos Operador Função Exemplos + Adição 2 + 3, X + Y - Subtração 4 - 2, N - M * Multiplicação 3 * 4, A * B / Divisão 10 / 2, C / D % Resto da divisão inteira (módulo) 9 % 4 resulta 1 ++ Incremento (x=x+1) ++x -- Decremento (x=x-1) x-- 2 Prioridade das Operações para Operadores Aritméticos 1. Parênteses mais internos 2. ++, -- - (menos unário, i.e., sobre uma variável, ex. troca de valor do número) *, /, % 3. +, - Operadores Relacionais • Operadores relacionais: utilizados para a estabelecer relação de comparação entre valores Operador Função Exemplos == Igual a valor == 10 > Maior que valor > 10 < Menor que valor < 10 >= Maior ou igual a valor >= 10 <= Menor ou igual a valor <= 10 != Diferente de valor != 10 3 Operadores Lógicas • Operadores lógicos: utilizados para a efetuar avaliações lógicas entre valores Operador Função Exemplos ! “NOT” (Negação) !(10<9) && “AND” (Conjugação) (v>1) && (v<9) || “OR” (Disjunção) (v<10) || (v>20) • Tabelas Verdade: Conjunto de todas as possibilidades de cada operador lógico, onde 0=Falso e 1=Verdadeiro A B A e B 0 0 0 0 1 0 1 0 0 1 1 1 A B A ou B 0 0 0 0 1 1 1 0 1 1 1 1 A não A 0 1 1 0 Prioridade de todas as operações Maior ++, --, - (unário) *, /, % +, - <, <=, >, >= ==, != ! && Menor || 4 Palavras Reservadas • Palavras reservadas são palavras que têm um significado especial para a linguagem, e não podem ser utilizadas pelo programador como identificadores (variável, função, etc) auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if static while Exemplo de um programa • Um programa em C é composto por um conjunto de funções • A função pela qual o programa começa a ser executado chama-se main • Após cada comando deve-se colocar um ; (ponto e vírgula) • O programa deve ser indentado visando facilitar a leitura 5 Exemplo de um programa // Exemplo de programa em C // Isto é uma linha de comentário void main() { int a; //declara a variável "a" a = 3 + 2; //soma 3 com 2 } Identificadores • Identificadores: Nomes para variáveis e funções • Exemplos: Idade, Contador, PesoDoCarro, Usuario_1, CorDaPagina, RaioDoCirculo 6 Identificadores • Um identificador deve seguir algumas regras: � Deve iniciar por uma letra ou por um "_" (underscore) � A partir do segundo caractere, pode conter letras, números e underscore � Deve-se usar nomes significativos dentro do contexto do programa � C é case-sensitive, diferença entre nomes com letras maiúsculas e minúsculas, ex. Peso e peso são diferentes � Costuma-se usar maiúsculas e minúsculas para separar palavras, ex. PesoDoCarro � O nome deve ser diferente dos comandos da linguagem � Pode conter números a partir do segundo caractere Variáveis • Uma variável é uma posição de memória que pode ser identificada através de um nome • Podem ter seu conteúdo alterado por um comando de atribuição • Após a atribuição mudam de valor int a,b, SomaGeral; a = 3; //a recebe o valor 3 b = a * 2; //b recebe o dobro do valor de a c = a + b + 2; //c recebe 11 7 Tipos de Variáveis • Todas as variáveis tem um tipo ‒Há 5 tipos básicos em C: caractere, inteiro, ponto flutuante, ponto flutuante com precisão dupla, sem valor • Cada tipo define os valores que a variável pode armazenar, ocupando uma certa quantidade de memória Tipo Valores Válidos char letras e símbolos: 'a', 'b', 'H', '^', '*','1','0' int de -32767 até 32767 (apenas números inteiros) float de -3.4 x 1038 até +3.4 x 10+38 , com até 6 dígitos de precisão double de -1.7 x 10308 até +1.7 x 10+308 , com até 10 dígitos de precisão void não retorna valor ou cria ponteiros genéricos Declaração de variáveis • Todas as variáveis devem ser declaradas antes de serem usadas ‒Variáveis locais: Dentro das funções ‒Parâmetros formais: Na definição dos parâmetros das funções ‒Variáveis globais: Fora de todas as funções #include <stdio.h> void main() { int contador float PrecoDoQuilo; double TaxaDeCambio; char LetraDigitada; int IdadeManoel, IdadeJoao, IdadeMaria; // Pode colocar mais de uma variável na mesma linha double TaxaDoDolar, TaxaDoMarco, TaxaDoPeso, // Também pode trocar de linha no meio TaxaDoFranco; } 8 Inicialização de variáveis na declaração #include <stdio.h> void main() { int NroDeHoras = 0; // declara e inicializa com Zero float PrecoDoQuilo = 10.53; // declara e inicializa com 10.53 double TaxaDoDolar = 1.8, TaxaDoMarco = 1.956, TaxaDoPeso = 1.75, TaxaDoFranco = 0.2; ....... } Constantes • Constantes são identificadores que não podem ter seus valores alterados durante a execução do programa • Para criar uma constante, existe o comando #define que, em geral é colocado no início do programa-fonte 9 Constantes #define LARGURA_MAXIMA 50 // Não se coloca ponto-e-vírgula após o valor #define NRO_DE_DIAS_DA_SEMANA 7 #define NRO_DE_HORAS_DO_DIA 24 #define VALOR_DE_PI 3.1415 void main () { int TotalDeHoras; TotalDeHoras = 10 * NRO_DE_DIAS_DA_SEMANA * NRO_DE_HORAS_DO_DIA; printf("%d",TotalDeHoras); } String • C suporta um tipo de constante chamado string, que é uma sequência (cadeia) ordenada de caracteres entre aspas duplas: "exemplo de uma string em C" ‒Não confundir com caractere, que não é uma sequencia • Uma variável capaz de armazenar uma string deve ser declarada informando-se qual o número máximo de caracteres que ela poderá armazenar 10 String • Exemplo: char Nome[30]; // isto define que a variável poderá armazenar uma string de até 29 caracteres (1 caractere é nulo) • Ao trabalharmos com strings deve-se incluir o arquivo de cabeçalho string.h Comandos de entrada e saída Instruções de E/S Entrada de Dados Processamento de dados Saída de Dados 11 Comando de saída – Função printf • A função printf (“print formatted”) exibe um ou mais dados na tela • Ela deve receber pelo menos DOIS PARÂMETROS, separados por vírgula: – Um especificador de formato que define, através de caracteres especiais, os tipos dos dados a serem impressos e suas posições na linha de impressão – Um dado a ser impresso, podendo ser qualquer um dos vistos anteriormente • Exemplo: printf("%s","teste"); ‒Onde: "%s" : é o especificador de formato, "teste" : é o dado a ser impresso Comando de saída – Função printf • O especificador de formato define quais os tipos dos dados a serem impressos ‒No exemplo visto, o símbolo %s será substituído pelo dado que vem após a vírgula • Os dados definem quais os valores a serem impressos 12 Comando de saída – Função printf • Se necessário, uma string de formato pode definir que mais de um dado será impresso ‒Para tanto, dentro da string de formato, deve haver mais de um %, um para cada dado a ser impresso ‒Os dados devem vir após a string de formato separados por vírgulas • Exemplo: printf("%s %s","teste1", "outra string"); ‒ Irá imprimir o string teste1, deixar 1 espaço em branco, e imprimir ao lado o string outra string: teste1 outra string Comando de saída – Função printf #include <stdio.h> // Necessário para usar a função printf // A função printf exibe um ou mais dados na tela main () { printf("%s","Isto é uma string ....\n"); // note o '\n' no final da string; printf("%s","Outra string ...."); printf("%s","Terceira string\n"); }13 Comando de saída – Função printf • Exercício: Coloque a sequência de escape '\n' entre os %s na string de formato ‒printf("%s\n%s","teste1", "outra string"); Comando de saída – Função printf • É possível incluir um texto dentro da string de formato, que irá aparecer exatamente como for digitado no programa-fonte • Exemplo: #include <stdio.h> main () { printf("A aluna %s ficou doente","Maria"); } • Saída: A aluna Maria ficou doente 14 Constantes do tipo String #define INSTITUICAO "UNICARIOCA" // deve-se colocar entre aspas #include <stdio.h> main() { printf("%s",INSTITUICAO); // Imprime o nome representado pela constante } Impressão de inteiros • Para imprimir um inteiro com printf usa-se o símbolo %d // Impressão de Variáveis Inteiras #include <stdio.h> void main () { int Contador; int NroDeFilhos; Contador = 10; printf("Valor da Variável: %d\n", Contador); // No momento da execução sinal %d vai ser substituído pelo valor da variável Contador NroDeFilhos = 3; printf("Maria tem %d filhos", NroDeFilhos); // o inteiro pode ficar no meio da string } 15 Impressão de expressões aritméticas // Impressão de Expressões aritméticas #include <stdio.h> void main () { int NroDeAndares; int AlturaPorAndar; NroDeAndares = 7; AlturaPorAndar = 3; printf("Altura Total do Prédio: %d metros", NroDeAndares*AlturaPorAndar); // No momento da execução sinal %d vai ser substituído // pelo valor da multiplicação } Impressão de números reais // Impressão de números reais #include <stdio.h> void main () { float NotaDaP1, NotaDaP2; float Media; NotaDaP1 = 6.6; // Atribuição do Valores das médias NotaDaP2 = 8.2; Media = (NotaDaP1 + NotaDaP2) / 2.0; printf("Média Final : %f", Media); // No momento da execução sinal %f vai ser substituído pelo valor da variável Media com SEIS casas decimais // Média Final : 7.400000 } 16 Formato de números reais • No exemplo anterior, o resultado da média (7.4) foi impresso com 6 casas decimais (7.400000) • Isto sempre ocorre quando se manda imprimir um float da forma como foi feito no exemplo ‒O padrão da função printf é completar o número com zeros à direita, até que fique com seis casas decimais Formato de números reais • Para formatar de maneira diferente usa-se o especificador de formato %f, juntamente com: ‒Uma especificação de quantas casas decimais é desejável que o número tenha ‒O número total de caracteres do número a ser impresso • Exemplo: %6.3f ‒ Irá imprimir um float com 3 casas decimais e com tamanho total de 6 caracteres no total 17 Formato de números reais #include <stdio.h> void main() { float NotaDaP1, NotaDaP2; float Media; NotaDaP1 = 6.6; // Atribuição do Valores das médias NotaDaP2 = 8.2; Media = (NotaDaP1 + NotaDaP2) / 2.0; printf("Média Final : %6.3f", Media); // No momento da execução sinal %6.3f vai ser substituído // pelo valor da variável Media // Média Final : 7.400 } Regras para impressão de números reais • O número de casas decimais sempre será respeitado • Se for preciso, zeros serão acrescentados à direita do número • O tamanho total significa o número de caracteres do número, incluindo o ponto decimal, e um eventual sinal de menos (-), se for o caso ‒Se a soma de todos esses elementos for: * Menor do que o tamanho total especificado no formato: Espaços em branco serão acrescentados à esquerda da parte real do número * Maior do que o tamanho total especificado no formato: Apenas o número de casas decimais é respeitado 18 • Alinhamento de números à direita: – Nos exemplos anteriores os números ficavam sempre alinhados a partir da esquerda – Experimente colocar um sinal de menos logo depois do sinal de % e veja o que acontece: printf("%-7.3f\n", Numero); #include <stdio.h> void main() { float Numero; Numero = -2.5; printf("1234567890\n"); printf("%7f\n", Numero); printf("%7.0f\n", Numero); printf("%7.3f\n", Numero); printf("%8.3f\n", Numero); printf("%9.3f\n", Numero); printf("\n"); printf("%8.4f\n", Numero); printf("%8.1f\n", Numero); printf("%6.12f\n", Numero); } Resultados: 1234567890 -2.500000 -2 -2.500 -2.500 -2.500 -2.5000 -2.5 -2.500000000000 Especificações de formato – printf Código Conversão/Formato do argumento %d Número decimal inteiro (int). Também pode ser usado %i como equivalente a %d. %u Número decimal natural (unsigned int), ou seja, sem sinal. %o Número inteiro representado na base octal. Exemplo: 41367 (corresponde ao decimal 17143). %x Número inteiro representado na base hexadecimal. Exemplo: 42f7 (corresponde ao decimal 17143). Se usarmos %X, as letras serão maiúsculas: 42F7. %X Hexadecimal com letras maiúsculas %f Número decimal de ponto flutuante. No caso da função printf, devido às conversões implícitas da linguagem C, serve tanto para float como para double. No caso da função scanf, %f serve para float e %lf serve para double. %e Número em notação científica, por exemplo 5.97e-12. Podemos usar %E para exibir o E maiúsculo (5.97E-12). %E Número em notação científica com o “e” maiúsculo %g Escolhe automaticamente o mais apropriado entre %f e %e. Novamente, podemos usar %G para escolher entre %f e %E. %p Ponteiro: exibe o endereço de memória do ponteiro em notação hexadecimal. %c Caractere: imprime o caractere que tem o código ASCII correspondente ao valor dado. %s Sequência de caracteres (string, em inglês). %% Imprime um % https://pt.wikibooks.org/wiki/Programar_em_C/Entrada_e_sa%C3%ADda_simples 19 Sequências de escape – printf Sequência Significado \n Quebra de linha (line feed ou LF) \t Tabulação horizontal \b Retrocede o cursor em um caractere (backspace) \r Retorno de carro (carriage return ou CR): volta o cursor para o começo da linha sem mudar de linha \a Emite um sinal sonoro \f Alimentação de formulário (form feed ou FF) \v Tabulação vertical (em impressoras) \" Aspa dupla \' Aspa simples \\ Barra invertida \0 Caractere nulo (caractere de valor zero, usado como terminador de strings) \N O caractere cuja representação octal é N (dígitos de 0 a 7) \xN O caractere cuja representação hexadecimal é N (dígitos de 0 a 9 e de A a F) https://pt.wikibooks.org/wiki/Programar_em_C/Entrada_e_sa%C3%ADda_simples Comando de entrada – Função scanf • A função scanf() lê dados da entrada padrão (teclado) e os guarda em variáveis do programa • Assim como em printf(), usamos uma string de formatação para especificar como serão lidos os dados • A sintaxe é: scanf ("string de formatação", &arg1, &arg2, ...); 20 Comando de entrada – Função scanf • A sintaxe é quase igual a de printf(), com exceção do E comercial (&), que é um operador que retorna o endereço de memória uma variável • Isso é necessário pois a função scanf() DEVE MODIFICAR as variáveis, e quando não usamos o operador de endereço, passamos apenas o valor de uma variável para a função Comando de entrada – Função scanf int var1; char var2; float var3; scanf ("%d %c %f", &var1,&var2,&var3); • Entrada: 120 z 17.63 • Saída: var1 igual a 120, var2 igual ao caractere 'z' e var3 igual ao número 17,63 21 Comando de entrada – Função scanf //programa para ler e escrever o seu nome e a sua idade #include <stdio.h> main( ) { int idade; char nome[30]; printf (“Digite o seu nome:\n”); scanf(“%s”, nome); printf (“Digite a sua idade:\n”); scanf (“%d”, &idade); printf(“A idade do(a) %s é %d”, nome, idade); } Especificações de formato – scanf %i não é mais sinônimo de %d. O que %i faz é interpretar o valor digitado como hexadecimal, se iniciar-se por 0x ou 0X; como octal, se iniciar-se por 0; ou como decimal, caso nenhuma dessas condições seja verificada. %a, %e/%E e %g são sinônimos de %f. %lf deve ser usado para variáveis do tipodouble. %s lê uma sequência de caracteres não-brancos (qualquer caractere exceto espaço, tabulação, quebra de linha etc.), ou seja, uma palavra. %c lê uma sequência de caracteres, sem ignorar espaços. O padrão é ler um caractere, se não for especificada a largura do campo. %[...] lê uma sequência de caracteres, sem ignorar espaços, especificando entre colchetes quais caracteres devem ser aceitos, ou, se o primeiro caractere dentro dos colchetes for um acento circunflexo (^), quais não devem ser aceitos. https://pt.wikibooks.org/wiki/Programar_em_C/Entrada_e_sa%C3%ADda_simples 22 Modificadores – scanf O modificador * (asterisco) especifica que o valor atual deve ser lido da maneira especificada, mas não será guardado em nenhuma variável, e portanto não deve haver um ponteiro correspondente a esse valor. Por exemplo, poderíamos ter um programa que espera ler uma palavra e depois um número, mas não importa qual palavra é. Nesse caso usaríamos o modificador *: scanf ("%*s %d", &numero). O programa leria a palavra e guardaria o número na variável numero. Como na função printf(), existe o especificador de largura do campo, que deve aparecer antes do especificador de conversão, mas em scanf() ele especifica a largura máxima. Se a largura máxima foi definida como n, scanf() pulará para o próximo campo se já tiver lido n caracteres. Por exemplo, scanf("%4d", &num) lerá um número de até quatro algarismos. Se o usuário digitar mais, o excedente será não será lido por essa chamada, mas poderá ser lido por uma próxima chamada a scanf. https://pt.wikibooks.org/wiki/Programar_em_C/Entrada_e_sa%C3%ADda_simples Comparação de Caracteres e Impressão #include <stdio.h> void main(){ char *nome; printf("%s", "Digite o pais: f para Franca ou i para Italia:"); scanf("%s", &nome); if (nome == 'f'){ printf("%s", "pao frances"); } if (nome == 'i'){ printf("%s", "presunto de parma"); } } 23 Comparação de Caracteres e Impressão #include <stdio.h> void main(){ char *nome; printf("%s", "Digite o pais: f para Franca ou i para Italia:"); scanf("%s", &nome); if (nome == 'f'){ printf("%s", "pao frances"); } if (nome == 'i'){ printf("%s", "presunto de parma"); } } Comparação de Strings e Impressão #include <stdio.h> #include <string.h> void main(){ char *nome[10]; int compare1, compare2; printf("%s", "Digite o pais franca ou italia:"); scanf("%s", &nome); compare1 = strcmp(nome, "franca"); compare2 = strcmp(nome, "italia"); if (compare1 == 0){ printf("%s", "pao frances"); } if (compare2 == 0){ printf("%s", "presunto de parma"); } } 24 Comparação de Strings e Impressão #include <stdio.h> #include <string.h> void main(){ char *nome[10]; int compare1, compare2; printf("%s", "Digite o pais franca ou italia:"); scanf("%s", &nome); compare1 = strcmp(nome, "franca"); compare2 = strcmp(nome, "italia"); if (compare1 == 0){ printf("%s", "pao frances"); } if (compare2 == 0){ printf("%s", "presunto de parma"); } }
Compartilhar