Curso de C
Variáveis


  O C possui suas variáveis divididas em:

  CHAR / INT

  Variáveis do tipo inteiro.

  O char não é uma variável do tipo caractere? Não deveria guardar letras? Sim ela guarda o código ASCII da letra. Porém, pode ser usada normalmente como se fosse do tipo inteiro. O que vai diferenciar é na hora de escrever na tela. Exemplo:
#include <stdio.h>

char letra;

int main(void)
{
  /* Define o caractere 'a' */
  letra = 'a';

  /* Forma alternativa de declarar 'a', pelo código ASCII */
  letra = 0x61;

  /* Operação aritmética sobre 'a' */
  /* 'a' + 2 = 'c' */
  letra = letra+2;

  printf("Saida 1: %d\n",letra);
  printf("Saida 2: %c\n",letra);

  return 1;
}
  Resultado impresso na tela:
  Saida 1: 99
  Saida 2: c

  Obs:   As variáveis do tipo inteiro podem ser:

VARIÁVEL TAMANHO
char 1 byte
short int 1 byte
int 2 bytes
long int 4 bytes


  Número sinalizado x não sinalizado

  Na linguagem C, as variáveis são distinguidas em números sinalizados e não sinalizados.
  Os termos unsigned e signed indicam se o número é não sinalizado ou sinalizado, respectivamente. Quando for sinalizado, o último bit (o mais significativo) indica o sinal do número. O valor 0 indica um número positivo e o valor 1 indica um número negativo.
  Por exemplo, os números +4 e -8, se representados como char (1 byte ou 8 bits), terão as seguintes configurações em binário:
 bits  76543210
 --------------
  +4 = 00000100
  -8 = 11111000

  Um número sinalizado de 1 byte varia de -128 a 127, enquanto que um número não sinalizado de 1 byte varia de 0 a 255. Ex:
#include 

unsigned char a;
char b;

int main(void)
{
  a = 200;
  b = 200;

  printf("Valor de a: %d.\n", a);
  printf("Valor de b: %d.\n", b);

  return 1;
}
  Saída:
  Valor de a: 200.
  Valor de b: -56.

  A declaração de unsigned/signed deve sempre vir antes do tipo de dado. Observe que para o signed, não é necessário a indicação (default).

 



  FLOAT

  Variável que trabalha com números reais.

  Tipos de variáveis:

VARIÁVEL TAMANHO
float 4 bytes
double 4 bytes

  Exemplo:
#include <stdio.h>
#include <math.h>

#define M_PI 3.1415927
double angulo;

int main(void)
{
  angulo = M_PI/4.0;
  printf("O cosseno de pi/4 é %f.", cos(angulo));

  return 1;
}
  Saída:
  O cosseno de pi/4 é 0.707.

  O termo M_PI que aparece no programa é uma macro. Macro associa um nome a um conjunto de símbolos.
  Temos também uma constante no programa, que é um tipo de dado que associa um nome a um valor e este valor não pode ser modificado.

  As macros e constantes são declaradas da seguinte forma:

  Macro:
#define nome conjunto_de_simbolos
  Constante:
const nome_da_constante = valor

Exemplo:
#include <stdio.h>

#define M_PI 3.1415927
#define formula(x) (x*x)
const raio = 4;
double a;

int main(void)
{
  a = M_PI;
  printf("M_PI: %f\n", a);

  a = formula(4.0);
  printf("Fórmula: %f\n", a);

  printf("Raio: %d\n", raio);

  return 1;
}
  Saída:
  M_PI: 3.1415927
  Fórmula: 16.000000
  Raio: 4

  Observação importante:

  No Hi-Tech C, quando são utilizados pontos flutuantes (double, float), é obrigatória a indicação da biblioteca "libf" na compilação. No caso do exemplo acima, deve-se compilar assim:
A>c -lf teste
  Onde teste é referente ao nome de arquivo "teste.c".

  Caso não seja usada a opção "-lf", um erro em tempo de link acontece:
undefined symbol:
flmul



  STRING

  A variável string é declarada através de um vetor de char ou um ponteiro de char. Exemplo:
#include <stdio.h>
#include <string.h>

char nome[10];
char *endereco;

int main(void)
{
  strcpy(nome,"Cristiane");
  endereco = "Salvador";

  printf("A %s mora em %s.\n", nome, endereco);

  return 1;
}
  Saída:
  A Cristiane mora em Salvador.

  A manipulação de strings requer uma biblioteca chamada string.h. A função strcopy insere na variável nome o valor "Cristiane".

  A função "scanf", que recebe dados do teclado, utiliza como delimitador de strings o espaço em branco. Assim, para palavras compostas, devemos utilizar a função "gets". Veja os exemplos a seguir.
#include <stdio.h>

char nome[20];

main()
{
  printf("Entre com o nome: ");
  scanf("%s",nome);

  printf("Seu nome e': %s\n", nome);
}
  Saída:
  Entre com o nome: Salvador Dali
  Seu nome e': Salvador

#include <stdio.h>

char nome[20];

main()
{
  printf("Entre com o nome: ");
  gets(nome);

  printf("Seu nome e': %s\n", nome);
}
  Saída:
  Entre com o nome: Salvador Dali
  Seu nome e': Salvador Dali

  O uso do "scanf" antes do "gets" fará com que esse "gets" seja ignorado. Para resolver ess problema, temos que utilizar uma outra função "gets" antes. Veja os exemplos a seguir.
#include <stdio.h>

char nome[20];
int idade;

main()
{
  printf("Entre com a idade: ");
  scanf("%d",&idade);

  printf("Entre com o nome: ");
  gets(nome);

  printf("%s tem %d anos.\n", nome, idade);
}
  Saída:
  Entre com a idade: 60
  Entre com o nome:
    tem 60 anos.

#include <stdio.h>

char nome[20];

main()
{
  printf("Entre com a idade: ");
  scanf("%d",&idade);

  printf("Entre com o nome: ");
  gets(nome);
  gets(nome); /* Esse vale! */

  printf("%s tem %d anos.\n", nome, idade);
}
  Saída:
  Entre com a idade: 60
  Entre com o nome: Maria Jose
  Maria Jose tem 60 anos.



  Variáveis globais e locais

  As variáveis globais são aquelas que são declaradas fora de qualquer estrutura, têm a duração total do programa e podem ser acessadas em qualquer parte do programa. Veja o exemplo a seguir.
#include <stdio.h>

int x=12;

void testa_x()
{
  printf("Valor de x: %d\n", x);
}

main()
{
  testa_x();
}
  Saída:
  Valor de x: 12

  As variáveis locais são criadas dentro de uma estrutura, duram enquanto a estrutura estiver ativa e somente podem ser acessadas naquele local. Veja o exemplo a seguir.
#include <stdio.h>

void testa_y()
{
  int y=5;
  printf("Valor de y: %d\n", y);
}

main()
{
  testa_y();
}
  Saída:
  Valor de y: 5

  Agora, veja o que acontece se tentarmos ler o valor da variável local "y" fora da estrutura em que ela foi declarada.
#include <stdio.h>

void testa_y()
{
  int y=5;
}

main()
{
  printf("Valor de y: %d\n", y);
}
  O programa dá um erro de compilação, dizendo que a variável "y" não foi declarada. Isto acontece porque o compilador não enxerga as variáveis locais fora do ambiente em que elas foram declaradas.

  O mesmo acontece quando a variável é declarada dentro do corpo principal do programa.
#include <stdio.h>

void testa_y()
{
  printf("Valor de y: %d\n", y);
}

main()
{
  int y=5;
  testa_y();
}

  No caso do programa anterior, devemos passar o valor da variável "y" como parâmetro para a função para que ela passe a enxergar esse valor.
#include <stdio.h>

void testa_y(int y)
{
  printf("Valor de y: %d\n", y);
}

main()
{
  int y=5;
  testa_y(y);
}
  Saída:
  Valor de y: 5

  E se eu declarar uma variável local com o mesmo nome de uma variável global?
  Isso é possível, e a variável local prevalece sobre a global. Isto significa que dentro do ambiente da variável local, o valor dela é que vale. Exemplo:
#include <stdio.h>

int x=12;

void testa_x()
{
  int x=4;
  printf("Valor local de x: %d\n", x);
}

main()
{
  printf("Valor global de x: %d\n", x);
  testa_x();
}
  Saída:
  Valor global de x: 12
  Valor local de x: 4



  Passagem de argumentos pela linha de comando do DOS

  O C permite a passagem de argumentos pela linha de comandos do DOS, quando o programa é chamado.
  Os argumentos passados pela linha de comando são capturados por dois parâmetros da função main, que devem ser declarados nela:
main (int argc, char *argv[])
  O parâmetro "argc" indica o número de argumentos passados pela linha de comando, enquanto que "argv[]" é um vetor contendo os argumentos.

  Veja o exemplo a seguir.
#include <stdio.h>

main (int argc, char *argv[])
{
  int i;

  for (i=0; i<argc; i++)
    printf("Argumento %d: %s\n", i, argv[i]);
}

  Compilando o arquivo com o nome de TESTE.C, temos a partir da linha de DOS:
A:>TESTE Ola
Argumento 0: TESTE
Argumento 1: Ola
  O primeiro argumento é o próprio nome do programa.

  Os argumentos são separados por espaços em brancos. Por exemplo, o nome Rio de Janeiro se for passado como argumento, teremos:
A:>TESTE Rio de Janeiro
Argumento 0: TESTE
Argumento 1: Rio
Argumento 2: de
Argumento 3: Janeiro
  Cada nome separado por espaço foi considerado como um argumento. Para resolver isso, basta colocar o nome entre aspas:
A:>TESTE "Rio de Janeiro"
Argumento 0: TESTE
Argumento 1: Rio de Janeiro

  O programa a seguir recebe um argumento e o escreve na tela.
#include <stdio.h>

main (int argc, char *argv[])
{
  printf("Bom dia, %s.\n", argv[1]);
}
  Saída:
A:>TESTE Pedro
Bom dia, Pedro.


<< Anterior Linguagem C Próxima >>


/MARMSX/CURSOS/C