Baixe o app para aproveitar ainda mais
Prévia do material em texto
N575 - Algoritmos e Programação de Computadores Modelo Algorítmico - Estrutura Sequencial: Introdução Prof. Raphael Torres Santos Carvalho N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 1 Roteiro Objetivo Estrutura Sequencial Declaração de Variáveis Inicialização de Variáveis Funções de entrada e saída Função de saída: printf() Função de entrada: scanf() Funções para caracteres N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 2 Objetivo Definir a estrutura sequencial para programação. Entender como é a declaração das variáveis. Conhecer as funções de entrada e saída de dados na Linguagem C. N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 3 Estrutura Sequencial Assim como o algoritmo, a linguagem C é sequencial. Isto é, os comandos são executados uma linha depois da outra. Para montar um algoritmo, primeiro divide-se o problema apresentado em três fases fundamentais: N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 4 Entrada Processamento Saída Estrutura Sequencial /*Incluir bibliotecas*/ #include <....> ... int main () { /* Declaracao de Variaveis */ ... /* Entrada/Saída de Dados */ ... /* Processamento*/ ... return(0); } N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 5 Estrutura Sequencial #include <stdio.h> int main () { /* Declaracao de Variaveis */ int Dias; float Anos; /* Entrada de Dados */ printf ("Entre com o número de dias: "); scanf ("%d",&Dias); /* Conversao Dias->Anos */ Anos=Dias/365.25; printf ("\n\n%d dias equivalem a %f anos.\n",Dias,Anos); return(0); } N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 6 Estrutura Sequencial #include <stdio.h> int main () { /* Declaracao de Variaveis */ int Dias; float Anos; /* Entrada de Dados */ printf ("Entre com o número de dias: "); scanf ("%d",&Dias); /* Conversao Dias->Anos */ Anos=Dias/365.25; printf ("\n\n%d dias equivalem a %f anos.\n",Dias,Anos); return(0); } N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 7 FUNÇÃO PRINCIPAL QUE RETORNA UM NÚMERO INTEIRO Estrutura Sequencial #include <stdio.h> int main () { /* Declaracao de Variaveis */ int Dias; float Anos; /* Entrada de Dados */ printf ("Entre com o número de dias: "); scanf ("%d",&Dias); /* Conversao Dias->Anos */ Anos=Dias/365.25; printf ("\n\n%d dias equivalem a %f anos.\n",Dias,Anos); return(0); } N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 8 COMENTÁRIOS Estrutura Sequencial #include <stdio.h> int main () { /* Declaracao de Variaveis */ int Dias; float Anos; /* Entrada de Dados */ printf ("Entre com o número de dias: "); scanf ("%d",&Dias); /* Conversao Dias->Anos */ Anos=Dias/365.25; printf ("\n\n%d dias equivalem a %f anos.\n",Dias,Anos); return(0); } N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 9 DECLARAÇÃO DE VARIÁVEIS Estrutura Sequencial #include <stdio.h> int main () { /* Declaracao de Variaveis */ int Dias; float Anos; /* Entrada de Dados */ printf ("Entre com o número de dias: "); scanf ("%d",&Dias); /* Conversao Dias->Anos */ Anos=Dias/365.25; printf ("\n\n%d dias equivalem a %f anos.\n",Dias,Anos); return(0); } N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 10 ENTRADA (LEITURA) E SAÍDA (ESCRITA) DE DADOS Estrutura Sequencial #include <stdio.h> int main () { /* Declaracao de Variaveis */ int Dias; float Anos; /* Entrada de Dados */ printf ("Entre com o número de dias: "); scanf ("%d",&Dias); /* Conversao Dias->Anos */ Anos=Dias/365.25; printf ("\n\n%d dias equivalem a %f anos.\n",Dias,Anos); return(0); } N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 11 INSTRUÇÕES Declaração de Variáveis A declaração de todas as variáveis de um programa em C deve ser feita no início do código, antes de ser realizado a leitura/escrita e processamento dos dados. Exemplo: #include <stdio.h> int main () { /* Declaracao de Variaveis */ int Dias; float Anos; /* Entrada/Saída de Dados */ ... /* Processamento*/ ... return(0); } N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 12 Inicialização das variáveis Para alterar ou inicializar uma variável, utiliza-se o comando atribuição. É a operação mais simples do C, e consiste em atribuir um valor constante ou valor de uma expressão a uma variável. Sintaxe: variável = expressão ou constante; Observações: Não confundir este operador com o sinal aritmético de igualdade. Reparar qual o tipo de variável que vai receber a atribuição. O que está do lado direito do operador de atribuição deve ser do mesmo tipo do que está do lado esquerdo. N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 13 Funções de Entrada e Saída Na linguagem C, os dados são trocados com o usuário através do teclado e do monitor. Para que os dados sejam lidos (entrada pelo teclado) e mostrados (saída pelo monitor), são utilizadas funções. As funções de entrada e saída em C são: Printf() Scanf() N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 14 Função de Saída: printf() A função printf() é parte de um conjunto de funções pré- definidas armazenadas em uma biblioteca padrão de rotinas de entrada e saída da linguagem C (stdio.h) Permite apresentar na tela os valores de qualquer tipo de dado. Utiliza o mecanismo de formatação, que permite traduzir a representação interna na memória de variáveis, para a representação composta de caracteres ASCII, que pode ser apresentada na tela (e entendida pelos “humanos”). N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 15 Função de Saída: printf() printf("string de formato", arg1, arg2, ... ); A string de formato é uma sequência de caracteres entre aspas, contendo o conteúdo a ser apresentado. Esta string (que sempre deve estar presente) pode especificar atravésde tags especiais (as sequências de conversão) quantos outros argumentos estarão presentes nesta chamada da função. Os outros argumentos serão variáveis cujos valores serão formatados e apresentados na tela. N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 16 string de formato variáveis Função de Saída: printf() Exemplo: Seja o valor de uma variável inteira x é 12, então a execução da função: int x = 12; printf("Valor de x = %d", x); Imprime na tela a frase: Valor de x = 12. N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 17 Função de Saída: printf() Exemplo: Seja y uma variável do tipo caráter com valor ‘A’, então a execução da instrução: char y = ‘A’ printf("x = %d e y = %c", x, y); Imprime na tela a frase: x = 12 e y = A. Observe que uma tag (sequência de conversão) pode ocorrer dentro de qualquer posição na string de formato. N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 18 Função de Saída: printf() A função printf() não tem um número fixo de argumentos. Em sua forma mais simples, pelo menos um argumento deve estar presente – a string de controle. Uma string de controle sem nenhuma sequência de conversão será literalmente impressa na tela. Com variáveis adicionais, a única forma de saber qual o número de variáveis que será apresentado é por inspeção da string de controle. Desta forma, cuidado deve ser tomado para que o número de variáveis após a string de controle esteja de acordo com o número de sequências de conversão presente na string de controle. Além de ter o número correto de argumentos e sequências de conversão, o tipo de cada variável deve estar de acordo com a sequência de conversão especificada na string de controle. N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 19 Função de Saída: printf() A seqüência de conversão pode ser reconhecida dentro da string de controle por iniciar sempre com o caráter '%'. N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 20 Especificador Saída Exemplo c caractere a d ou i inteiro decimal com sinal 392 e notação científica (mantissa/expoente) usando o caractere 'e' 3.9265e+2 E notação científica (mantissa/expoente) usando o caractere 'E' 3.9265E+2 f ponto flutuante decimal 392.65 g Usa %e ou %f (o que for mais curto) 392.65 G Usa %E ou %F (o que for mais curto) 392.65 s seqüência de caracteres casa u inteiro decimal sem sinal 7235 x inteiro hexadecimal sem sinal 7fa X inteiro hexadecimal sem sinal (letras maiúsculas) 7FA p apontador de endereços B800:0000 % Um caractere '%' seguido de outro caractere '%' imprimirá % % Função de Saída: printf() As tags também podem conter sub-especificadores flags, width, length e precision, que são opcionais e seguem as seguintes especificações: N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 21 flags Descrição - Justifica à esquerda dentro da largura de determinado campo; Justificativa à direita é o padrão + Força o resultado a preceder com um sinal + ou - mesmo para números positivos. Por padrão, apenas os números negativos são precedidos por um sinal -. espaço Se nenhum sinal vai ser escrito, um espaço em branco é inserido antes do valor. # Usado com os especificadores x ou X o valor é precedido de 0x ou 0X, respectivamente, para valores diferentes de zero. Usado com e, E e f, que força a saída conter um ponto decimal, mesmo se nenhum dígito viesse seguir. Por padrão, se nenhum dígito seguir, nenhum ponto decimal é escrito. Utiliza-se com g ou G, o resultado é o mesmo que com e ou E, mas zeros à direita não são removidos. 0 Preenche o número com zeros à esquerda em vez de espaços, onde o preenchimento é especificado. Função de Saída: printf() As tags também podem conter sub-especificadores flags, width, length e precision, que são opcionais e seguem as seguintes especificações: N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 22 width Descrição número Número mínimo de caracteres a serem impressos. Se o valor a ser impresso é inferior a este número, o resultado será preenchido com espaços em branco. O valor não é truncado mesmo que o resultado seja maior. * A largura não é especificada na string de formato, mas será um argumento adicional de valor inteiro que antecede o argumento que tem que ser formatado. Função de Saída: printf() As tags também podem conter sub-especificadores flags, width, length e precision, que são opcionais e seguem as seguintes especificações: N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 23 .precision descrição .numero Para os especificadores de inteiro (d, i, u, x, X): precisão especifica o número mínimo de dígitos a serem escritos. Se o valor a ser escrito é inferior a este número, o resultado será preenchido com zeros à esquerda. O valor não é truncado mesmo se o resultado for mais longo. A precisão de 0 significa que nenhum caractere é escrito para o valor 0. Para os especificadores e, E e f: este é o número de dígitos a ser impresso após o ponto decimal. Para os especificadores g e G: Este é o número máximo de algarismos significativos a ser impresso. Para s: este é o número máximo de caracteres a serem impressos. Por padrão todos os caracteres são impressos até que o caractere nulo \’0’ final seja encontrado. Para o tipo c: ele não tem efeito. Quando nenhuma precisão for especificada, o default é 1. Se o “ponto” for especificado sem um valor explícito para a precisão, é assumido 0. .* A precisão não é especificada na string de formato, mas, como um argumento adicional de valor inteiro que precede o argumento de que tem que ser formatado. Função de Saída: printf() As tags também podem conter sub-especificadores flags, width, length e precision, que são opcionais e seguem as seguintes especificações: N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 24 length descrição h Quando utilizado, o argumento é interpretado como um short int ou short int unsigned (só se aplica aos especificadores de inteiro: i, d, u, x e X). l Quando utilizado, o argumento é interpretado como um long int ou unsigned long int para os especificadores de inteiros (i, d, u, x e X), e como largura um de caractere ou de uma cadeia de caracteres para os especificadores c e s. Função de Saída: printf() #include <stdio.h> int main(void) { char ch ='M'; signed int si = -175; float f = 175.0; printf("Caractere = %c\n", ch); printf("Inteiro decimal com sinal = %d\n", si); printf("Inteiro decimal com sinal = %i\n", si); printf("Real em ponto flutuante = %f\n", f); printf("Real com notacao cientifica com E = %E\n", f); printf("Real com notacao cientifica com e = %e\n", f); printf("Inteiro decimal sem sinal = %u\n", si); printf("Inteiro em base hexadecimal= %X\n", si); printf("Inteiro em base hexadecimal = %x\n", si); printf("Caractere %c\n", '%'); printf("Caractere %%\n"); return(0); } N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 25 Função de Saída: printf() Sequência de escape Ao executar os exemplos verifique que ‘\n’ não é impresso. A barra inclinada é chamada de sequência de escape, indicando que o próximo caractere não é para ser impresso mas representa caracteres invisíveis ou caracteres que não estão representados no teclado, por exemplo. Alguns destes caracteres são: N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 26 Código Descrição \n Passa para uma nova linha \t Tabulação \b Backspace \\ Exibe o caractere ‘\’ \” Exibe o caractere ‘”’ #include <stdio.h> int main(void) { printf("Primeira linha.\nSegunda linha.\n"); printf("\n\tQuarta linha com 'tab'\n"); printf("Mar\bia\n"); printf("Caractere contra barra: \\\n"); printf("Caractere aspas duplas: \"\n"); return 0; } Função de Entrada: scanf() A função scanf() pode ser utilizada para entrada de dados a partir do teclado e seu protótipo é: scanf(“string de controle”, arg1, arg2, ...); Uma diferença fundamental existe entre esta função e a função printf(). Os argumentos 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. A indicação que estamos referenciando um endereço e não a variável se faz pelo operador unário & (o endereço de). Não confundir com os operadores binários && relacional ou & bit-a- bit. N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 27 Função de Entrada: scanf() scanf("%d", &var); Espera que um valor inteiro sejam digitados no teclado. O dado digitado é armazenado na variável com o endereço. N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 28 Tipo de dado da variável Endereço da variável(“&” na frente) Nome da variável Função de Entrada: scanf() Exemplo incluindo variáveis reais é: int i; float x; scanf("%d %f", &i, &x); Assumindo que a linha de entrada no teclado fosse 34 56.43, a execução do exemplo iria terminar com o valor 34 sendo armazenado em i e 56,43 em x. N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 29 Função de Entrada: scanf() Usualmente o campo de controle só contém especificações de conversão, que são utilizadas para interpretar os dados que serão lidos. No entanto outros caracteres podem aparecer. O campo de controle pode conter: Especificações de conversão, consistindo do caractere %, um caractere opcional de supressão da atribuição (caractere *), um número opcional para especificar o tamanho máximo do campo, e um caractere de conversão; Espaços, caracteres de tabulação ou linefeeds (tecla enter) que são ignorados; Caracteres comuns (não %) que devem casar com o próximo caractere diferente de branco da entrada. N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 30 Função de Entrada: scanf() Para que os valores digitados sejam separados por vírgulas, o comando deveria ser escrito da seguinte maneira: scanf("%d, %f", &i, &x); Observar que deve haver uma correspondência exata entre os caracteres não brancos do controle e os caracteres digitados. Neste caso a entrada deveria ser: 35, 46.3 N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 31 Função de Entrada: scanf() Exemplo: #include <stdio.h> int main (void) { char c; int num1, num2; printf("Programa para ilustrar a funcao scanf.\n"); printf("Entre com um caracter qualquer.\n"); scanf("%c", &c); printf("O codigo ASCII do caractere %c vale %d.\n", c, c); printf("Agora entre com dois numeros inteiros "); printf("separados por virgula.\n"); scanf("%d, %d", &num1, &num2); printf("A soma destes numeros vale %d.\n", num1+num2); return 0; } N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 32 Funções getchar() e putchar() Para ler e escrever caracteres do teclado as funções de entrada e saída mais simples são getchar() e putchar() e seus protótipos são: int getchar(void); e int putchar(int c); Apesar da função getchar() retornar um parâmetro inteiro é possível atribuir este valor a uma variável do tipo char porque o código do caractere está armazenado no byte ordem mais baixa. O mesmo acontece com a função putchar() que recebe um inteiro, mas somente o byte de ordem mais baixa é passado para a tela do computador. N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 33 Funções getchar() e putchar() Exemplo: #include <stdio.h> int main() { char c; int i; printf("Entre com um caractere entre 0 e 9.\n"); c = getchar(); printf("O caracter lido foi o "); putchar(c); return 0; } N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 34 Funções getchar() e putchar() Qual a diferença em usar “getch” e “scanf”? A principal diferença é que utilizando getch() o usuário simplesmente aperta a tecla e o sistema lê diretamente a tecla pressionada. Enquanto que com o scanf() é necessário apertar <ENTER>. N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 35 Função gets() Para a leitura de strings, utiliza-se a função gets(). Esta função coloca o terminador nulo “\0” quando o usuário aperta <ENTER>. Exemplo: #include <stdio.h> int main () { char string[100]; printf ("Digite uma string: "); gets (string); printf ("\n\nVoce digitou %s\n",string); return(0); } N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 36 Dúvidas? N 5 7 5 - A lg o ri tm o s e P ro gr am aç ão d e C o m p u ta d o re s 37
Compartilhar