Aqui você encontra infomações sobre Informática, Eletrônica, Elétrica, Mecânica e Automação

terça-feira, 12 de abril de 2011

Linguagem C (parte 3)

Printf: lendo os valores de usuário O programa anterior é bom, mas seria melhor se ele lesse os valores 5 e 7 inseridos pelo usuário, em vez de usar constantes. Em vez disso, tente este programa:
#include <stdio.h>    

int main()
{
      int a, b, c;
      printf("Entre o primeiro valor:");
      scanf("%d", &a);
      printf("Entre o segundo valor:");
      scanf("%d", &b);
      c = a + b;
      printf("%d + %d = %d\n", a, b, c);  
      return 0;
  } 
Eis como este programa funciona ao ser executado:
Faça as alterações, depois compile e rode o programa para certificar-se de que funciona. Observe que scanf usa as mesmas strings de formato que printf (digite man scanf para mais informação). Observe também o & na frente de a e b. Este é o operador de endereço em C: ele retorna o endereço da variável (isto não fará sentido até aprendermos sobre os ponteiros). Você tem de usar o operador & em scanf em qualquer variável do tipo char, int ou float, bem como tipos de estrutura (que discutiremos em breve). Se excluir o operador &, você receberá um erro ao executar o programa. Tente executá-lo para ver que tipo de erro ocorre.
Vamos ver algumas variações para entender printf completamente. Eis uma instrução simples de printf:
      printf("Hello");  
Esta chamada para printf tem uma string de formatos que diz ao printf para enviar a palavra "Hello" para a saída padrão. Compare-a com:
      printf("Hello\n");
A diferença entre as duas é que a segunda versão exibe a palavra "Hello" seguida de uma quebra de linha.
As linha seguintes mostram como exibir o valor de uma variável usando printf.
      printf("%d", b);  
O %d é uma expressão de controle que será substituída pelo valor da variável b quando a instrução printf for executada. Freqüentemente, você vai desejar incluir o valor entre outras palavras. Uma forma de fazer isso é:
    printf("A temperatura é ");
    printf("%d", b);
    printf(" degrees");
Um modo mais fácil de dizer isso é:
      printf("A temperatura é %d graus\n", b);
Você também pode usar múltiplas expressões de controle %d em uma instrução printf:
      printf("%d + %d = %d\n", a, b, c);
Na instrução printf, é extremamente importante que o número de operadores na string de formato corresponda exatamente ao número e tipo de variáveis que a seguem. Por exemplo, se a string de formatos contém três operadores %d, então ela deve ser seguida por exatamente três parâmetros do mesmo tipo e ordem que aqueles especificados pelos operadores.
Você pode imprimir todos os símbolos normais na linguagem C com printf usando expressões de controle diferentes:
  • int (valores inteiros) usam %d
  • float (valores de ponto flutuante) usam %f
  • char (valores de caractere simples) usam %c
  • strings de caracteres (matrizes de caracteres, discutiremos mais tarde) usam %s
Você pode aprender mais sobre as nuances do printf em uma máquina UNIX digitando man 3 printf. Qualquer outro compilador de C que você utilize provavelmente virá acompanhado de um manual ou arquivo de ajuda que contém uma descrição do printf.

Scanf A função scanf permite aceitar entradas do dispositivo padrão, que, para nós, é geralmente o teclado. A função scanf pode fazer muitas coisas diferentes, mas pode ter resultados incertos quando não usada de forma simples. É falível pois não lida muito bem com erros humanos. Mas para programas simples, ela é boa o suficiente e fácil de usar.
A aplicação mais simples de scanf se parece com:
      scanf("%d", &b); 
O programa lerá um valor inteiro digitado pelo usuário usando o teclado (%d é para inteiros, como em printf, assim b deve ser declarado como um int) e o colocará em b.
A função scanf usa as mesmas expressões de controle da printf:
  • int usa %d
  • float usa %f
  • char usa %c
  • strings de caracteres (abordados mais tarde) usam %s
Você DEVE colocar & na frente da variável usada em scanf. A razão para isso ficará clara assim que você aprender sobre os ponteiros. É fácil esquecer o sinal &, e se você esquecer, seu programa quase sempre apresentará problemas ao ser executado.
Em geral, é melhor usar scanf como mostrado aqui, lendo apenas um valor do teclado. Use múltiplas chamadas do scanf para ler valores múltiplos. Em qualquer programa real, você usará as funções gets ou fgets em vez de ler o texto em uma linha por vez. Então você fará a "análise" da linha para ler seus valores. Isso serve para detectar erros na entrada e controlá-los da maneira que achar adequada.
As funções printf e scanf exigirão um pouco de prática para serem inteiramente compreendidas, mas uma vez dominadas serão extremamente úteis.
Tente isto!
  • Modifique este programa para que ele aceite 3 valores em vez de 2 e some todos eles juntos:
    #include <stdio.h>
    
    int main()
    {
          int a, b, c;
          printf("Entre o primeiro valor:");
          scanf("%d", &a);
          printf("Entre o segundo valor:");
          scanf("%d", &b);
          c = a + b;
          printf("%d + %d = %d\n", a, b, c);
          return 0;
     }    
  • Tente apagar ou adicionar caracteres ou palavras aleatórias em um dos programas anteriores e veja como o compilador reage a tais erros de compilação. Por exemplo, apague a variável b na primeira linha do programa anterior e veja o que o compilador faz quando você se esquece de declarar uma variável. Apague um ponto-e-vírgula e veja o que acontece. Omita uma das chaves. Remova um dos parênteses próximos à função principal. Faça uma alteração por vez e compile o programa para ver o que acontece. Simulando erros como esses você pode aprender sobre diferentes erros de compilação, o que facilitará futuras detecções quando você os cometer.
Erros a serem evitados na linguagem C
  • Usar letras maiúsculas e minúsculas aleatoriamente. Letras maiúsculas e minúsculas são importantes na linguagem C, portanto você não pode digitar Printf ou PRINTF. É obrigatório que seja printf.
  • Esquecer de usar o & em scanf.
  • Parâmetros em excesso ou a falta deles após a instrução de formato em printf ou scanf.
  • Esquecer de declarar o nome de uma variável antes de utilizá-la.

Desvio e looping Em C, as instruções if e loops while regem-se pelos princípios das expressões Booleanas. Eis um programa simples em C que demonstra uma instrução if:
#include <stdio.h>

int main()
{
int b;
printf("Digite um valor:");
scanf("%d", &b);
if (b < 0)
printf("O valor é negativo ");
return 0;
}
Este programa aceita um número do usuário. Ele então testa esse número utilizando uma instrução if para ver se ele é menor que 0. Se for, o programa imprime uma mensagem. Caso contrário, o programa não faz nada. A parte (b < 0) do programa é a expressão booleana. A linguagem C avalia esta expressão para decidir se imprime ou não a mensagem. Se a expressão booleana se mostra Verdadeira, então a linguagem C executa a linha imediatamente posterior à instrução if (ou um bloco de linhas entre chaves logo após a instrução if). Se a expressão booleana se mostrar Falsa, então a linguagem C pula a linha ou bloco de linhas logo após a instrução if.
Eis um exemplo um pouco mais complexo:
#include <stdio.h>

int main()
{
int b;
printf("Digite um valor:");
scanf("%d", &b);
if (b < 0)
printf("O valor é negativo ");
else if (b == 0)
printf("O valor é zero ");
else
printf("O valor é positivo ");
return 0;
}
Neste exemplo, as seções else if e else avaliam tanto para valores positivos como zero.
Eis uma expressão booleana mais complicada:
if ((x==y) && (j>k))
z=1;
else
q=10;
Esta instrução diz: "Se o valor da variável x for igual ao valor da variável y, e se o valor da variável j for maior que o valor da variável k, então defina a variável z como 1; de outro modo, defina a variável q como 10". Você usará instruções if como esta em todos os seus programas C para tomar decisões. De um modo geral, a maioria das decisões será simples como o primeiro exemplo, mas, eventualmente, as coisas podem ser um pouco mais complicadas.
Observe que a linguagem C utiliza == para testar a igualdade, enquanto utiliza = para atribuir um valor a uma variável. O símbolo && em C representa uma operação booleana AND.
Aqui estão todos os operadores booleanos em C:
  igualdade         ==
  menor que         < 
  maior que         >    
  menor ou igual    <= 
  maior ou igual    >=  
  desigualdade      != 
  e                 &&  
  ou                || 
  não               !
Você descobrirá que as instruções while são tão fáceis de utilizar como as instruções if. Por exemplo:
while (a < b)
{      
   print("%d\n", a);  
   a = a + 1;
}
Isso faz com que duas linhas entre chaves sejam executadas repetidamente até que a seja maior ou igual a b. Em geral, a instrução while funciona assim:
A linguagem C também oferece uma estrutura do-while:
  do
  {
      printf("%d\n", a);
      a = a + 1;
  }
  while (a < b);   
O loop for na linguagem C é apenas um atalho para expressar uma instrução while. Por exemplo, suponha que você tenha o seguinte código em C:
  x=1;
  while (x<10)
  {
      blá blá blá
      x++; /* x++ é o mesmo que dizer x=x+1 */
  } 
Você pode converter isso em um loop for da seguinte forma:
  for(x=1; x<10; x++)
  {
      blá blá blá
  }   
Observe que o loop while contém uma etapa de inicialização (x=1), uma etapa de teste (x<10) e uma de incremento (x++). O loop for permite colocar as três partes em uma única linha, mas você pode colocar qualquer coisa nelas. Por exemplo, suponha que você tenha o seguinte loop:
  a=1;
  b=6;
  while (a < b)
  {
      a++;
      printf("%d\n",a);
  }   
Você também pode colocá-lo para indicação:
  for (a=1,b=6; a < b; a++,printf("%dn",a));  
É um pouco confuso, mas é possível. O operador vírgula permite separar diversas instruções diferentes nas seções de inicialização e incremento do loop for (porém não na seção de teste). Muitos programadores de linguagem C gostam de concentrar muitas informações em uma única linha de código. Outros acham que isto torna o código mais difícil de entender, e portanto desmembram essas instruções.
= versus == em expressões booleanas
O sinal == é um problema na linguagem C pois freqüentemente você se esquece e digita apenas = em uma expressão booleana. Este é um erro comum de ocorrer, mas para o compilador há uma diferença significativa. A linguagem C aceitará = e == em uma expressão booleana, mas o comportamento do programa mudará consideravelmente quando usamos um ou outro.
As expressões booleanas em C avaliam os inteiros e os inteiros podem ser usados dentro de expressões booleanas. O valor inteiro 0 em C é Falso, enquanto qualquer outro valor inteiro é Verdadeiro. É código seguinte é permitido em C:
  #include <stdio.h>  

  int main()
  {
      int a;
      printf("Digite um número:");
      scanf("%d", &a);
      if (a)
      {
          printf("O valor é verdadeiro\n");
      }
      return 0;
  }  
Se a for qualquer número diferente de 0, a instrução printf é executada.
Em C, uma instrução como if (a=b) significa: “Atribuir b para a, e então testar a para seu valor Booleano". Assim, se a retornar o valor 0, a instrução if é Falsa. Caso contrário, é Verdadeira. O valor de a muda durante o processo. Este não é o comportamento desejado se você pretendeu digitar == (embora esta característica seja útil quando usada corretamente), assim, tenha cuidado com o uso de = e ==.

Nenhum comentário: