Linguagem de Programação em C Anderson L. S. Moreira [email protected] http://alsm.cc Anderson Moreira Arquitetura de Computadores O que fazer com essa apresentação Anderson Moreira Arquitetura de Computadores 2 Introdução Por que programar ? Quando o homem necessita do auxilio do computador para executar algumas tarefas. O Que é um programa ? Conjunto de instruções de uma determinada linguagem através das quais, um computador executa algumas tarefas. Anderson Moreira Arquitetura de Computadores Introdução O Que é uma linguagem ? Uma linguagem consiste de um conjunto de palavras reservadas e regras de sintaxe que possibilita criar programas de computadores. Este conjunto de palavras possui estruturação lógica e sintática própria. Anderson Moreira Arquitetura de Computadores regras de Exemplos de Códigos: BASIC PseudoPseudo-código leia(num) para n de 1 até 10 passo 1 faça tab← ←num*n imprima(tab) fim-para; Anderson Moreira BASIC 10 input num 20 for n=1 to 10 step 1 30 let tab=num*n 40 print chr$(tab) 50 next n Arquitetura de Computadores Exemplos de Códigos: FORTRAN PseudoPseudo-código leia(num) para n de 1 até 10 passo 1 faça tab← ←num*n imprima(tab) fim-para; Anderson Moreira FORTRAN read (num) do 10 n=1:10 tab=num*n write(tab) 10 continue Arquitetura de Computadores Exemplos de Códigos: Assembly PseudoPseudo-código leia(num) para n de 1 até 10 passo 1 faça tab← ←num*n imprima(tab) fim-para; Anderson Moreira Assembly (Intel 8088) MOV CX,0 IN AX,PORTA MOV DX,AX LABEL: INC CX MOV AX,DX MUL CX OUT AX, PORTA CMP CX,10 JNE LABEL Arquitetura de Computadores Exemplos de Códigos: C PseudoPseudo-código leia(num) para n de 1 até 10 passo 1 faça tab← ←num*n imprima(tab) fim-para; Anderson Moreira C scanf(&num); for(n=1;n<=10;n++){ tab=num*n; printf(”\n %d”, tab); }; Arquitetura de Computadores Tipos de Linguagens: Baixo Nível São linguagens com foco na maquina, ou seja, utiliza instruções detalhadas que controla os circuitos internos do computador. Usualmente são genericamente chamadas de linguagens de maquina, Assembly ou de linguagem de montagem. Anderson Moreira Arquitetura de Computadores Tipos de Linguagens: Baixo Nível Vantagens: Maior velocidade de processamento e ocupam menor espaço na memória. Desvantagens: Pouca portabilidade, ou seja, o código é gerado para um tipo de processador não serve para outro. Anderson Moreira Arquitetura de Computadores Tipos de Linguagens: Alto Nível São linguagens voltadas para que haja uma maior interação entre o homem e a máquina. Necessitam de compiladores ou interpretadores para gerar as instruções do microprocessador. Anderson Moreira Arquitetura de Computadores Tipos de Linguagens: Alto Nível Vantagens: São compiladas ou interpretadas, têm maior portabilidade podendo ser executados em várias plataformas com pouquíssimas modificações. Desvantagens: São mais lentas e ocupam mais memória. Anderson Moreira Arquitetura de Computadores Histórico C foi originalmente desenvolvida por Dennis Ritchie e K. Thompson nos Laboratórios Bell nos anos 70.Derivadas de duas linguagens anteriores chamadas BCPL e B. Inicialmente para máquinas com o sistema operacional UNIX. Tornou-se uma das mais importantes e populares nos últimos dias. Foi projetada para o desenvolvimento de programas estruturados e modulares. Anderson Moreira Arquitetura de Computadores Histórico Nos anos seguintes, a popularidade da linguagem C aumentou consideravelmente, aumentando também o surgimento de ferramentas de desenvolvimento. Inicialmente, muitas implementações do C não traduziam fielmente a definição original, o que gerou alguns problemas de incompatibilidade A portabilidade proposta pela definição original ficou bastante comprometida. Anderson Moreira Arquitetura de Computadores Introdução O Padrão ANSI Buscando uma padronização na definição da linguagem C, a American National Standard ANSI), Institute (ANSI ANSI desenvolveu um padrão hoje bastante utilizado no mundo da linguagem C, chamado de C padrão ANSI ou C ANSI. Quase todas as ferramentas de desenvolvimento da linguagem C atuais, seguem este padrão. Anderson Moreira Arquitetura de Computadores Compiladores x Interpretadores A única linguagem que o computador entende é a linguagem de máquina. Programas escritos em um linguagem de alto nível, devem ser traduzidos para a linguagem de máquina. Os Programas que fazem esta tradução, classificam em: - INTERPRETADORES - COMPILADORES Anderson Moreira Arquitetura de Computadores Compiladores x Interpretadores Os INTERPRETADORES, traduzem o código fonte em linguagem de máquina através da interpretação de cada instrução feita a medida que o software é executado. Necessitam de um componente interpretador presente na máquina. Os COMPILADORES, por sua vez, traduzem o código fonte em linguagem de máquina através da geração de um programa .OBJ, que após ser linkeditado, torna-se um arquivo executável. Em C os programas são compilados. Anderson Moreira Arquitetura de Computadores Como criar um programa Basicamente três passos : 1) Digitar o programa em um editor de texto e gravar atribuindo a extensão “.C”; 2) Compilar o programa (fonte) criando um arquivo com extensão “.obj”. Chamado de programa objeto; 3) Link-editar o programa objeto criando finalmente o programa executado (com extensão “.exe”). Anderson Moreira Arquitetura de Computadores Estrutura básica de um programa Um programa em C consiste de uma ou várias funções, onde uma delas precisa ser denominada “main” e deve existir em algum lugar de seu programa. Esta função marca o início da execução do programa. Outras funções podem ser definidas pelo programador ou preencher a função main, porém em um programa executável em C, a função main deve sempre existir. Anderson Moreira Arquitetura de Computadores Estrutura básica de um programa main(Argumentos) /* início do corpo da função */ { } /* término do corpo da função */ Uma função deve conter : - Um header que consiste do nome da função - Uma lista de argumentos entre parênteses. - Um bloco de instruções delimitado por chaves. Anderson Moreira Arquitetura de Computadores Estrutura básica de um programa O nome da função, os parênteses e as chaves, são os únicos elementos obrigatórios de uma função Os comentários podem aparecer em qualquer lugar de um programa, devendo ser colocados entre os delimitadores /* e */ Letras minúsculas e maiúsculas não são equivalentes em C. Note que cada expressão dentro do bloco deve terminar com um ponto-evírgula. Anderson Moreira Arquitetura de Computadores Exemplo de um programa em C #include <stdio.h> /* programa que imprime: Boa Noite */ void main () { printf("Boa Noite"); } Anderson Moreira Arquitetura de Computadores Estrutura básica de um programa Se utilizamos uma função no corpo da função main(), devemos incluir a biblioteca que contenha esta função. Por exemplo : Se colocarmos a função pritnf() no corpo da função main(), devemos incluir a biblioteca stdio.h. Isto é feito com a diretiva : #include, Assim: #include <stdio.h> void main() { printf("Boa Noite"); } Anderson Moreira Arquitetura de Computadores O que é uma IDE (Integrated Development Environment) • Um conjunto de ferramentas para desenvolver bibliotecas, aplicações ou programas (debugger, compilador, linker, etc…) • Um ambiente baseado em janelas do tipo GUI Gerenciamento de projeto Configuações de construção Programação confortável Anderson Moreira Arquitetura de Computadores Code Blocks - Highlighting Editor Anderson Moreira Arquitetura de Computadores Auto completar Anderson Moreira Arquitetura de Computadores Diferentes compiladores Anderson Moreira Arquitetura de Computadores Organização em pastas Anderson Moreira Arquitetura de Computadores Folding Anderson Moreira Arquitetura de Computadores Questionário 1 • Onde a linguagem C foi desenvolvida e quando? • Explique a diferença entre programas interpretados e programas compilados. • Como é formada uma função na linguagem C? • Como inserir comentários em um programa em C? Anderson Moreira Arquitetura de Computadores Questionário 1 No programa abaixo, existem alguns erro, com a ajuda do compilador, tente descobri-lo #include <stdiox.h> #include <conio.h> Main () ( printf("Boa Noite"); getch(); ) Anderson Moreira Arquitetura de Computadores Regra de identificação • Todas as letras maiúsculas de A a Z e as minúsculas de a a z, os dígitos de 0 a 9 e alguns caracteres especiais, podem ser utilizados na criação de códigos em C. • Os nomes de variáveis, funções e matrizes em C, obedecem a regra de que você pode usar letras e números, porem o primeiro digito deve ser apenas uma LETRA ou o caractere especial underline (_). • Um nome não pode ser uma das palavras reservadas da linguagem C. Anderson Moreira Arquitetura de Computadores Regra de identificação • Exemplo de nomes válidos : a y12 soma1 _estoque • Exemplos de nomes não válidos : 2th (o primeiro caractere deve ser letra ou _ ) “a” (inicia com um caractere ilegal (“) ) numero-ordem (caractere ilegal (-)) nome completo (espaço em branco) Anderson Moreira Arquitetura de Computadores Regra de identificação • Um identificador de nome pode ter mais de 32 caracteres, porem somente os 32 primeiros serão reconhecidos. • Algumas implementações do C, reconhece apenas os 8 (oitos) primeiros, assim os nomes : taxa_dia e taxa_diaria, nestes sistemas não tem diferenca, pois o compilador reconhece apenas os oitos primeiros caracteres. Anderson Moreira Arquitetura de Computadores Palavras reservadas auto double break else case enum char extern const float continue for default goto do if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while São apenas 32 palavras reservadas que não podem ser utilizadas para outro propósito Anderson Moreira Arquitetura de Computadores Tipos de Dados Em C existem 5 tipos válidos: tipo Palavra Reservada Caracter Char Inteiro Bytes Faixa 8 1 -128 a 127 Int 16 2 -32768 a 32768 Ponto flutuante Float 32 4 3.4E-38 a 3.4E+38 Pont. Flutuante duplo Double 64 8 1.7E-308 a 1.7E+308 Sem valor void 0 0 Sem valor Anderson Moreira Quant. Bit Arquitetura de Computadores Tipos de Dados Modificadores de Tipos Com exceção do tipo void, os demais tipos podem ter alguns modificadores. Um modificador é usado para alterar o significado do tipo para adequá-los melhor às necessidades do programador. Anderson Moreira Arquitetura de Computadores Tipos de Dados Os modificadores são : signed, unsigned, long e short Exemplo de utilização: Se uma variável é declarada como char ela ocupa 8 bit e tem a faixa de valores de -128 a 127, mais se o modificador unsigned é colocado antes da palavra char, char ela continua ocupando 8 bits, mais sua faixa de valores vai de 0 a 255. Anderson Moreira Arquitetura de Computadores Tipo de Dados Inteiro • Os dados inteiros são caracterizados pelos números positivos ou negativos que não seja fracionário. Em C referenciamos este tipo de dados com os seguintes identificadores : Tipo do Inteiro Qt.Bit Faixa int 16 -32768 a 32767 long int 32 -2.147.483.648 a 2.147.483.648 unsigned int 16 De 0 até 65535 signed long int 32 De 0 até 4.292.967.295 Anderson Moreira Arquitetura de Computadores Tipo de Dados Reais • Os dados reais são caracterizados pelos números positivos, negativos, inteiros e os fracionários. Em C referenciamos este tipo de dados com os seguintes identificadores : Tipo do Inteiro Qt.Bit Faixa float 32 de 3.4e-38 até 3.4e+38 double 64 de 1.7e-308 até 1.7e+308 Long double 128 de -3.4e-4932 até 1.1e+4932 Anderson Moreira Arquitetura de Computadores Tipo de Dados Caracteres • Os dados caracteres são caracterizados pelas sequencias de letras, números e simbolos especiais delimitados por ( “ ” ) . Em C referenciamos este tipo de dados pelo identificadores : char podendo armazenar de 0 até 255 caracteres Anderson Moreira Arquitetura de Computadores Tipo de Dados Lógicos • Na linguagem C não existe o tipo de dados booleano , ou seja, não existe o valor lógico “false” ou “true” de forma predefinida. • Em C qualquer valor igual a 0 (zero), é considerado como valor lógico falso e qualquer valor diferente de 0 (zero), é considerado como valor lógico verdadeiro. Anderson Moreira Arquitetura de Computadores Constantes • Constantes são valores que permanecem fixos e na linguagem C temos 4 tipos básicos de constantes: - Inteiras ponto-flutuante caracteres string (cadeia de caracteres) Anderson Moreira Arquitetura de Computadores Constantes numéricas • As constantes do tipo Inteiras e de ponto-flutuante, representam números. • As constantes do tipo Inteiras podem ser escritas em três sistemas de numeração, sendo : • decimal (base 10) • octal (base 8) • hexadecimal (base 16) • Uma constante inteira decimal pode ser formada por qualquer combinação dos dígitos de 0 a 9. Se tem mais de dois dígitos, o primeiro não pode ser zero. Ex.: 5 Anderson Moreira 13 230 540 Arquitetura de Computadores Constantes numéricas • Uma constante inteira octal pode ser formada por qualquer combinação dos dígitos de 0 a 7 e o primeiro deve ser zero. Ex.: 0 013 0656 0540 • Uma constante inteira hexadecimal pode ser formada por qualquer combinação dos dígitos de 0 a 9 e de A a F (maiúsculas ou minúsculas). Deve sempre iniciar com 0x ou 0X. Ex.: 0x 0x1 0xABC 0xabc • Normalmente a magnitude de uma constante inteira é: Decimal = 32767 Octal = 07777 Hexa = 0x7FFF Anderson Moreira Arquitetura de Computadores Constantes numéricas • As constantes do tipo ponto-flutuante é um número na base 10 que contem casas decimais e/ou um expoente. Ex.: 0. 0.5 1.3 230.323 .540e2 • Observe que o caractere que separa a casa decimal é um ponto e não uma virgula • Para representar um número com expoente, trocamos a base 10 pela letra ´e´. Assim para representar 2 x 10², teremos: 200. ou Anderson Moreira 2e2 ou 2e+2 ou 2E2 ou 2.0e+2 Arquitetura de Computadores Constantes caracteres • As constantes do tipo caracter consiste em um simples caractere colocado entre apóstrofos. Ex.: ´A´ ´x´ ´5´ ´$´ • Uma constante de caractere tem valores inteiros correspondentes a um conjunto de caracteres específicos. • Normalmente os computadores utilizam o conjunto de caracteres ASCII, onde cada caractere é representado por uma combinação de 7 bits, Representando assim 2e+7 = 128 diferentes caracteres. • Desta forma, cada constante de caractere, tem um valor inteiro correspondente. Anderson Moreira Arquitetura de Computadores Constantes caracteres Caracter Valor Caracter Valor Caracter Valor Caracter Valor A 65 M 77 a 97 0 48 B 66 N 78 b 98 1 49 C 67 O 79 c 99 2 50 D 68 P 80 d 100 3 51 E 69 Q 81 e 101 4 52 F 70 R 82 f 102 5 53 G 71 S 83 g 103 6 54 H 72 T 84 h 104 7 55 I 73 U 85 i 105 8 56 J 74 V 86 j 106 9 57 K 75 W 87 k 107 DEL 127 L 76 X 88 l 108 ESC 27 Anderson Moreira Arquitetura de Computadores Constantes string • As constantes do tipo string consiste em um conjunto de caracteres colocado entre aspas. Ex.: “anderson” “bahia” “Recife” “Boa Noite !!!” “3235-2234” “2*(I+3)/J” • Algumas seqüências de caracteres podem ser incluídas dentro da string para possibilitar a formatação. Ex.: “Esta é a primeira linha\n e esta a segunda linha” Anderson Moreira Arquitetura de Computadores Seqüência de escape • Alguns caracteres especiais e os não-imprimíveis, são expressos como uma sequência de escape. • Uma sequencia de escape sempre começa com uma barra invertida (“\”) seguida por um caractere. Alguns comandos em C, são representados desta forma. Ex.: Caracter Seqüência de escape Valor ASCII Nova linha (line feed) FD \n 10 Campainha (bell) \a 07 Tabulação horizontal \t 09 Tabulação vertical \v 11 Aspas (“) \” 34 Apóstrofo (´) \´ ´ 39 Interrogação (?) \? 63 Barra invertida (\) \\ 92 Nulo (null) \0 00 Anderson Moreira Arquitetura de Computadores Variáveis As variáveis são o aspecto fundamental em qualquer linguagem de computador. Uma variável nada mais é que um espaço de memória reservado para armazenar um certo tipo de dado. Uma variável deve receber um nome para servir de referência e a cada instante ela pode conter valores diferente. Anderson Moreira Arquitetura de Computadores Declaração de Variáveis Declarar uma variável significa reservar um espaço em memória para um determinado tipo de dados e indicar que o conteúdo daquele espaço, será referenciado pelo o nome da variável. Uma declaração de variável consiste em um tipo seguido do nome da variável. Exemplo: // uma variável do tipo int int num; char a; // uma variável do tipo char Anderson Moreira Arquitetura de Computadores Declaração de variáveis: Para serem usadas, as variáveis precisam ser declaradas de modo que o compilador possa reservar espaço na memória para o valor a ser armazenado. A forma geral de uma declaração é: tipo lista_de_variaveis; Exemplos: int i; unsigned int a, b, c; double salario; Anderson Moreira Arquitetura de Computadores Atribuição de valores às variáveis Após ser declarada, a variável pode receber valores. O operador de atribuição "=" indica que o valor à direita será atribuído à variável. O valor inicial pode ser atribuído de duas formas: - Durante a declaração da variável Ex.: int i=0, j=10; - Durante execução de uma a função Anderson Moreira Arquitetura de Computadores Tipos de Variáveis O tipo de uma variável informa a quantidade de memória, em bytes, que ela irá ocupar e a forma como o seu conteúdo será armazenado. Os tipos de dados básicos do C visto anteriormente devem ser utilizados para prototipar uma variável conforme a necessidade do programa. Anderson Moreira Arquitetura de Computadores Nomes de Variáveis Você pode usar quantos caracteres quiser para um nome de variável com o primeiro caracter sendo obrigatoriamente um letra ou sublinhado(_). Uma variável não pode ter o mesmo nome de uma palavra reservada do C e não deverá ter o mesmo nome de um função. Na linguagem C, maiúsculas e minúsculas tem tratamento diferenciado, assim, cont, Cont e CONT são três variáveis distintas. Anderson Moreira Arquitetura de Computadores Atribuição de valores às variáveis É possível atribuir a uma variável o valor resultante de uma expressão. Ex.: int a; a = (8+2)/2; A atribuição de uma variável do tipo char, pode ser feita de duas formas: - Atribuindo uma constante de caractere: char b = ‘A’; - Atribuindo o código ASCII correspondente antecedido pela barra invertida: char b = ‘\65’ Anderson Moreira Arquitetura de Computadores Analisando um Programa Exemplo 01 02 03 04 05 06 07 08 09 10 11 #include <stdio.h> int a=5; int b=5; int soma; // declaração de um inteiro // declaração de um inteiro // declaração de um inteiro void main() { soma=a+b; printf("%d",soma); } Anderson Moreira Arquitetura de Computadores Analisando um Programa Exemplo 01 02 03 04 05 06 07 08 09 #include <stdio.h> int a=5, b=5, soma; void main() { soma=a+b; printf("%d",soma); } Anderson Moreira Arquitetura de Computadores Atribuição de valores às variáveis Na linguagem C, não temos o tipo ´string´ ´ pre-definido, o que nos leva a utilizar os vetores de caracter. Desta forma um string em C será atribuída a um vetor do tipo char na sua inicialização. char nome[20] = “Anderson Moreira”; A Atribuição de uma constante de caracter diretamente a um vetor de caracter já declarado e não inicializado, só pode ser feito com auxilio de outras funções.Ex.: char nome[20]; strcpy(nome,“Anderson Moreira”); Anderson Moreira Arquitetura de Computadores Analisando um Programa Exemplo #include <stdio.h> #include <conio.h> char nome[20]; void main() { printf("Digite o seu nome : "); scanf("%s", nome); printf("Ola! %s ",nome); getch(); } Anderson Moreira Arquitetura de Computadores Conversão de tipos Algumas vezes o compilador faz uma conversão automática quando vai atribuir um valor de uma expressão a uma variável. Ex.: sendo: void main() { float f1,f = 21.45; char c1,c = 'A'; int i1,i = 10; i1 = f; // i1 receberá printf("%d\n",i1); f1 = i; // f1 receberá printf("%f\n",f1); c1 = i; // c1 receberá printf("%d\n",c1); i1 = c; // i1 receberá printf("%d\n",i1); getch(); o valor 21 o valor 10.00 o valor 10 o valor 65 } Anderson Moreira Arquitetura de Computadores Conversão de tipos O Programador pode “forçar” a conversão. Ex.: sendo: void main() { int a = 65; float x = 2.1, y = 8.95, z; char c; c = (char)a; printf("Valor de c ( %c ) --> %d\n", c,c); c = (char)(a + (int)x); printf("Valor de c ( %c ) --> %d\n", c,c); z = (float)((int)x * (int)y); printf("Valor de z ( %f ) --> %d\n", z,z); z = (float)((x * y)); printf("Valor de z ( %f ) --> %d\n", z,z); getch(); } Anderson Moreira Arquitetura de Computadores Entrada e Saída Para que exemplos possam ser construídos, necessitamos conhecer um pouco sobre entrada e saída de dados. Um programa que não fornece resultados nem pede valores para operar não deve ter grande utilidade. A entrada de dados será feita pelo teclado e a saída poderá ser vista na tela do computador. Com isto, é possível resolver problemas bastante interessantes. Anderson Moreira Arquitetura de Computadores Biblioteca Padrão Para termos acesso à biblioteca que contém as funções, macros e variáveis que facilitam a entrada e saída de dados, o programa deve conter a declaração #include <stdio.h> no início do programa. Normalmente os programadores usam os símbolos menor (<) e maior (>), mas é possível a alternativa #include "stdio.h" Anderson Moreira Arquitetura de Computadores Saída - A Função printf A função printf permite que dados sejam escritos na tela do computador. O formato é de uso simples e bastante flexível, permitindo que os dados possam ser apresentados de diversas maneiras. Syntax: printf(controle, arg1, arg2, ...); Onde os argumentos são impressos de acordo com a maneira indicada pelo controle. Um exemplo simples pode tornar a explicação mais clara. Anderson Moreira Arquitetura de Computadores Saída - A Função printf O programa abaixo imprime o valor da variável ano. #include <stdio.h> #include <conio.h> ARGUMENTO // Biblioteca de entrada e saída main() { int ano = 2008; // Declarei ano como inteiro e ja defini seu valor. printf(“ Estamos no ano %d ", ano ); getch(); } Na tela do computador será impresso: Estamos no ano 2008; CONTROLE Anderson Moreira Arquitetura de Computadores Saída - A Função printf O controle, que deve aparecer sempre entre " ", define como serão impressos os argumentos. Neste controle podem existir dois tipos de informações: caracteres comuns e códigos de formatação. Os caracteres comuns, como no exemplo (Estamos no ano) ano) são escritos na tela sem nenhuma modificação. Os códigos de formatação, aparecem precedidos por um % e são aplicados aos argumentos na ordem em que aparecem. Anderson Moreira Arquitetura de Computadores Códigos de Formatação Deve haver um código de formatação para cada argumento. O código %d indica que o valor armazenado em ano deve ser impresso na notação inteiro decimal. Código %c %d %i %e %f %o %s %u %x %% Anderson Moreira Comentário Caractere simples Inteiro decimal com sinal Inteiro decimal com sinal Real em notação científica com e Real em ponto flutuante Inteiro em base octal Cadeia Caracteres Inteiro decimal sem sinal Inteiro em base hexadecimal (letras minúsculas) Imprime o caracter % Arquitetura de Computadores Saída justificada Um sinal de menos para especificar que o argumento deve ser tabulado a esquerda no seu campo de impressão pode ser acrescentado. Exemplo a seguir ilustra os dois tipos de justificação. Observe main() { int ano = 2007; printf("Justificado a esquerda Ano = %-8d\n", ano); printf("Justificado a direita Ano = %8d\n", ano); getch(); } Anderson Moreira Arquitetura de Computadores Especificador de Precisão O especificador de precisão consiste de um ponto que separa o número que define o tamanho do campo do número que especifica o máximo número de dígitos a serem impressos a direita do ponto em um número do tipo float ou double #include <stdio.h> #include <conio.h> Observe main() { float r = 1.0/3.0; printf("O resultado e = %9.5f\n", r); getch(); } Anderson Moreira Arquitetura de Computadores Códigos de Formatação Ao executar o exemplo verifique que \n não é impresso. A barra inclinada é chamada de seqüência de escape, indicando que o próximo caracter não é para ser impresso mas representa caracteres invisíveis, por exemplo. Alguns destes caracteres são: Código \n \t \b \f \0 Descrição Passa para uma nova linha Tabulação Retorna um caracter Salta uma página Caracter nulo Anderson Moreira Arquitetura de Computadores Entrada - A Função scanf A função scanf pode ser utilizada para entrada de dados a partir do teclado. Esta função é equivalente à função printf e seu formato é: Syntax: scanf(controle, arg1, arg2, ...); Uma diferença fundamental existe entre as duas funções é que os argumentos da função scanf são os endereços das variáveis que irão receber os valores lidos e não, como em printf, as próprias variáveis. Anderson Moreira Arquitetura de Computadores Entrada - A Função scanf A indicação que estamos referenciando um endereço e não a variável se faz pelo operador &. Por exemplo, o comando scanf("%d %d", &a, &b) espera que dois valores inteiros sejam digitados no teclado. O primeiro é armazenado na variável a e o segundo em b. Anderson Moreira Arquitetura de Computadores Entrada - A Função scanf Cada variável a ser lida, deverá ser precedida pelo caracter & Para sequência de caracteres (%s), o caractere & não deverá ser usado. Anderson Moreira Arquitetura de Computadores Entrada - A Função scanf int main() { int numero; char string[30]; printf("Digite uma string: "); scanf("%s",string); printf("Digite um numero: "); scanf("%d",&numero); printf("A string digitada foi: \t%s\n", string); printf("O numero digitado foi: \t%d\n", numero); } Anderson Moreira Arquitetura de Computadores Lendo e Imprimindo Caracteres Para ler e escrever caracteres do teclado as funções de entrada e saída mais simples são getchar e putchar que estão na biblioteca stdio.h #include <stdio.h> #include <conio.h> main() { char c; int i; printf("Entre com um caracter entre 0 e 9.\n"); c = getchar(); printf("O caracter lido foi o "); putchar(c); getch(); } Anderson Moreira Arquitetura de Computadores Lendo e Imprimindo Caracteres Na definição original da função getchar a entrada é armazenada até que a tecla ENTER seja apertada. Com isto caracteres ficam em um buffer esperando para serem tratados. Em ambientes onde é necessário tratar o caractere imediatamente esta função pode não ser útil. Muitos compiladores incluem funções para permitir entrada interativa de dados. As duas funções mais comuns são getch e getche e seus protótipos podem ser encontrados na biblioteca <conio.h>. Anderson Moreira Arquitetura de Computadores Lendo e Imprimindo Strings Um string em C é um vetor de caracteres. Para usar strings é preciso primeiro definir um espaço para armazená-los. Para isto é preciso declarar o tamanho e o tipo do vetor. Por exemplo: char nome[40]; Quando definir o tamanho do vetor observar que todo string em C termina com o caracter null ('\0'), que é automaticamente inserido pelo compilador. Portanto o vetor nome pode armazenar no máximo 39 caracteres. Anderson Moreira Arquitetura de Computadores Lendo e Imprimindo Strings Exemplo : #include <stdio.h> #include <conio.h> void main ( ) { char nome[40]; puts("Por favor, qual o seu nome."); scanf("%s", nome); printf(“Em que posso ajuda-lo %s?\n", nome); getch(); } Anderson Moreira Arquitetura de Computadores Expressões e Operadores Adição: Expressão1 + expressão2 Primeiros as duas expressões serão avaliadas e só depois a adição é realizada. Pode ter uma conversão de tipos, depois da avaliação das expressões: float x,y; int z; z=y+x; Anderson Moreira Arquitetura de Computadores Expressões e Operadores Subtração: Expressão1 - expressão2 As duas expressões são avaliadas, depois a subtração é realizada, e o valor obtido é o valor da expressão. - Expressão A semântica de (-expressão) é a mesma do que (0 - expressão). Anderson Moreira Arquitetura de Computadores Expressões e Operadores Multiplicação: Expressão1 * expressão2 As duas expressões são avaliadas, depois a multiplicação é realizada, e o valor obtido é o valor da expressão. Anderson Moreira Arquitetura de Computadores Expressões e Operadores Divisão: Expressão1 / expressão2 Diferente das outras linguagens, em C o “ / ” designa ao mesmo tempo a divisão dos inteiros e dos reais. Anderson Moreira Arquitetura de Computadores Expressões e Operadores Divisão: Caso os dois operandos inteiros sejam positivos, o sistema arredonda o resultado da divisão : 7 / 2 retorna 3 Caso os dois operandos inteiros sejam de sinal diferentes, o arredondamento depende do compilador. -7 / 2 ou 7 / -2retornam -3 ou -4 (geralmente -4) Anderson Moreira Arquitetura de Computadores O Módulo % Expressão1 % Expressão2 As duas expressões devem retornar valores de tipo inteiro O módulo retorna o resto da divisão inteira. 7 % 2 retorna 1 Caso um dois operadores sejam negativo, o sinal do módulo depende da implementação, mas é geralmente o sinal do primeiro 7 %2 -7 % 2 7 % -2 Anderson Moreira retornam 1 retornam -1 retornam 1 Arquitetura de Computadores Operadores Relacionais Expressão1 operador Expressão2 Operador == != > >= < <= Relação Igual Diferente Maior Maior ou igual Menor Menor igual O resultado da comparação será um valor lógico : 1 - Verdadeira e; 0 - Falsa. Anderson Moreira Arquitetura de Computadores Operadores Lógicos Expressão1 operador Expressão2 Operador && || ! Relação E (and) Ou (or) Negação (not) exemplos: (a && b) (a == 0) || (b != 0) ! ((a = = 0) && (b<3)) Anderson Moreira Arquitetura de Computadores Operador & É o operador de endereçamento (ponteiro): Ele permite apontar qualquer variável: &a é o endereço da variável a Anderson Moreira Arquitetura de Computadores Incremento x = x + 1; x++; ++x; s+=i; /* s=s+i*/ z = y++; /* z=y e depois y++ */ z = ++y; /* y++ e depois z = y (novo) */ Anderson Moreira Arquitetura de Computadores Decremento y = y - 1; /* isto decrementa y */ y--; /* isto decrementa y */ --y; /* isto decrementa y */ s-=i; /* s=s-i*/ z = y--; /* z =y e depois y- - */ z = --y; /* y-- e depois Anderson Moreira z=y (o novo)*/ Arquitetura de Computadores Condicional (IF) if (b >= 3.0) a = 2.0; else a = 10.5; Igual a : a = (b >= 3.0 ? 2.0 : 10.5 ); c = (a > b ? a : b); /* c=maior(a,b) */ c = (a > b ? b : a); /* c=menor(a,b) */ Anderson Moreira Arquitetura de Computadores Questionário 2 Baseado no que foi visto em sala de aula, responda: Escreva um programa que declare variáveis do tipo inteiro, char e float, inicializando-as, e imprima os seus valores. Faça um programa capaz de ler um valor real e escreve-lo com apenas uma casa decimal. Anderson Moreira Arquitetura de Computadores Questionário 2 Sabendo que os argumentos da função "printf" podem ser expressões (a+b, a/b, a*b...), e não somente argumentos, faça um programa capaz de ler um valor inteiro X e imprimir na tela o cubo, o quadrado e a metade de X. Ex.: para X= 6, imprimir Cubo = 18; Quadrado = 36; Metade = 3. Anderson Moreira Arquitetura de Computadores Exercícios Escreva um programa que leia 3 números reais e imprima a média aritmética destes números. Escreva um programa que ler uma temperatura em graus Celsius e apresenta o valor em Fahrenheit. (Formula: F = (9 X C + 160)/5) Escreva um programa que ler uma temperatura em graus Fahrenheit e apresenta o valor em Celsius. (Formula: C = (F 32) * (5/9) Anderson Moreira Arquitetura de Computadores Dúvidas Anderson Moreira Arquitetura de Computadores