Ferramentas do usuário

Ferramentas do site


prog2:entrada_e_saida_padrao

Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anterior Revisão anterior
Próxima revisão
Revisão anterior
prog2:entrada_e_saida_padrao [2019/04/09 13:30]
maziero
prog2:entrada_e_saida_padrao [2019/08/21 13:28] (atual)
maziero [Exercícios]
Linha 1: Linha 1:
 +====== Entrada/​saída padrão ======
 +
 +Este módulo apresenta as funções básicas para entrada e saída de dados em programas C usando os arquivos de [[unix:​shell_avancado|entrada e saída padrão]], ''​stdin''​ e ''​stdout''​.
 +
 +===== A função printf =====
 +
 +A função ''​printf'',​ definida no arquivo ''​stdio.h'',​ permite escrever no arquivo de saída padrão (normalmente a tela do terminal).
 +
 +Sua sintaxe básica é:
 +
 +  int printf (formato, argumento, argumento, ...) ;
 +
 +O valor de retorno (que pode ser ignorado) indica o número de bytes que foram escritos na chamada.
 +
 +O parâmetro ''​formato''​ define o que será impresso. É basicamente uma string com caracteres fixos e campos reservados para a impressão dos demais argumentos da chamada. Por exemplo, a linha abaixo irá escrever o valor de duas variáveis inteiras ''​i''​ e ''​j''​ em decimal:
 +
 +  printf ("i vale %d e j vale %d\n", i, j) ;
 +  ​
 +A saída será:
 +
 +  i vale 10 e j vale -37
 +
 +O formato ''​%d''​ indica que o argumento deve ser escrito como um decimal. Há dezenas de formatos disponíveis,​ sendo os principais:
 +
 +| ''​\n''​ | nova linha | 
 +| ''​\t''​ | tabulação |
 +| ''​\b''​ | retorno |
 +| ''​\"''​ | aspas |
 +| ''​\\''​ | barra |
 +| ''​%%''​ | porcento % |
 +| ''​%c''​ | caractere simples |
 +| ''​%s''​ | string |
 +| ''​%d''​ ou ''​%i''​ | decimal |
 +| ''​%u''​ | decimal sem sinal |
 +| ''​%l''​ | decimal (long) |
 +| ''​%ll''​ | decimal (long long) |
 +| ''​%Nd''​ | decimal com N dígitos, com espaços à esquerda |
 +| ''​%0Nd''​ | decimal com N dígitos, com zeros à esquerda |
 +| ''​%f''​ | real |
 +| ''​%g''​ | real (double) |
 +| ''​%e''​ | real (em notação científica) |
 +| ''​%M.Nf''​ | real com M dígitos, sendo N após a vírgula |
 +| ''​%o''​ | octal |
 +| ''​%x''​ | hexadecimal |
 +
 +Uma descrição detalhada do formato usado no comando ''​printf''​ pode ser obtida [[https://​www.tutorialspoint.com/​c_standard_library/​c_function_printf.htm|nesta página]] ou [[http://​www.cplusplus.com/​reference/​cstdio/​printf/​| nesta página]].
 +
 +===== A função scanf =====
 +
 +A função ''​scanf''​ permite ler dados da entrada padrão (normalmente o teclado do terminal). Ela opera de forma similar à função ''​printf'',​ usando uma string de formato para indicar os tipos e formato dos dados a serem lidos.
 +
 +Por exemplo, a operação abaixo permite ler um valor inteiro e depositá-lo na variável ''​a'':​
 +
 +  scanf ("​%d",​ &a) ;
 +
 +<note important>​
 +O segundo argumento da função não é a variável ''​a'',​ mas **o endereço** da variável ''​a''​ (descrito como ''&​a''​). Isso é necessário porque, nas funções em C, a passagem de parâmetros é feita por valor. A função ''​scanf''​ precisa saber "onde fica" a variável ''​a''​ para poder depositar nela o valor lido, por isso é necessário informar o endereço de ''​a''​. ​
 +</​note>​
 +
 +Eis um exemplo de uso:
 +
 +<code c media.c>
 +// Cálculo da média simples de dois valores
 +#include <​stdio.h>​
 +
 +int main ()
 +{
 +  int a, b;
 +  float c;
 +
 +  printf("​entre com o valor de a: ") ;
 +  scanf("​%d",​ &a);
 +
 +  printf("​entre com o valor de b: ") ;
 +  scanf("​%d",​ &b);
 +
 +  // cálculo da média simples
 +  c = (a + b) / 2.0 ;
 +
 +  printf("​a = %d, b = %d\n", a, b) ;
 +  printf("​a media simples de a e b eh %f\n", c) ;
 +
 +  return (0) ;
 +}
 +</​code>​
 +
 +===== Entrada/​saída de caracteres =====
 +
 +Algumas funções estão disponíveis para a leitura e escrita de caracteres isolados. A função ''​getchar''​ lê um caractere da entrada padrão (normalmente o teclado):
 +
 +  c = getchar () ;
 +
 +Caso a entrada não tenha mais dados a serem lidos, essa função devolve um valor específico ''​EOF''​ (//​end-of-file//​),​ para indicar que a entrada encerrou.
 +
 +A função ''​putchar''​ escreve um caractere na saída padrão (normalmente a tela do terminal):
 +
 +  putchar ('​x'​) ;
 +
 +Exemplo de uso:
 +
 +<code c chars.c>
 +#include <​stdio.h>​
 +
 +int main ()
 +{
 +  char c ;
 +  ​
 +  c = getchar() ;      // lê um caractere de STDIN
 +  while (c != EOF)     // enquanto a entrada não terminar
 +  {
 +    if (c == ' '​) ​     // troca espaço por '​_'​
 +      c = '​_'​ ;  ​
 +
 +    putchar (c) ;      // escreve o caractere em STDOUT
 +
 +    c = getchar () ;   // lê o próximo caractere
 +  }
 +  return (0) ;
 +}
 +</​code>​
 +
 +===== Entrada/​saída de strings =====
 +
 +Algumas funções estão disponíveis para a leitura e escrita de strings:
 +
 +  * ''​gets (char *s)''​ : lê uma string da entrada padrão (**não usar**: tem problemas de segurança)
 +  * ''​puts (char *s)''​ : escreve uma string na saída padrão
 +
 +<note warning>
 +A função ''​gets''​ não limita o número de bytes lidos e pode provocar **estouro de buffer**, por isso não deve ser usada! Use a função ''​fgets''​ ao invés dela.
 +</​note>​
 +
 +===== Exercícios =====
 +
 +Escrever programas em C para:
 +
 +  - Ler um inteiro N e uma sequência de N inteiros, gerando na saída o valor de N, os valores máximo e mínimo observados (inteiros), a média (real) e o desvio padrão (real) dos N valores lidos.
 +  - Imprimir a seguinte sequência de números, até N=10000:<​code>​
 +    1     ​2 ​    ​3 ​    ​4 ​    ​5 ​    ​6 ​    ​7 ​    8
 +00001 00002 00003 00004 00005 00006 00007 00008
 +    9    10    11    12    13    14    15    16
 +00009 00010 00011 00012 00013 00014 00015 00016
 +...
 +</​code>​
 +  - Ler um texto da entrada padrão e produzir o mesmo texto na saída padrão, mas com as letras convertidas em maiúsculas. Sugestão: usar a função ''​getchar()''​ para ler caracteres da entrada (até encontrar um ''​EOF''​),​ a função ''​putchar()''​ para escrever caracteres na saída e uma estrutura ''​switch''​ (ou uma tabela) para converter os caracteres.\\ **Sugestão**:​ em C, caracteres são tratados como números inteiros; consulte uma [[https://​ascii.cl/​|tabela ASCII]] para ver seus valores respectivos. ​
 +  - Escreva um programa que imprima as raízes quadradas e os logaritmos (base 10) de todos os números inteiros entre 1 e 1000. Os valores devem ser impressos com 4 casas decimais, da seguinte forma:<​code>​
 +     ​1 ​  ​1.0000 ​ 0.0000
 +   ...
 +   ​500 ​ 22.3606 ​ 2.6989
 +   ...
 +   ​999 ​ 31.6069 ​ 2.9999
 +  1000  31.6227 ​ 3.0000
 +</​code>​