Um programa em C é um conjunto de funções definidas pelo programador, funções que utilizarão outras funções definidas pelo programador e algumas funções oferecidas pelo sistema (as funções oferecidas pelo sistema sao chamadas funções de biblioteca ou funções predefinidas).
Estrutura de um programa em C
main() {
}
Tipos de Dados
Tipo | Número de bytes | Faixa de valores |
char | 1 | Caracteres da tabela ASCII |
int | 2 | Números inteiros de –32768 a 32767 |
long ou long int | 4 | Números inteiros de –65536 a 65535 |
float | 4 | Números reais de –3,4x1038 a –3,4x10-38 e 3,4x10-38 a 3,4x1038 |
double | 8 | Números reais de –1,7x10308 a -1,7x10-308 e 1,7x10-308 a 1,7x10308 |
void | 0 | Conjunto vazio |
Variáveis
<tipo> <identificador>; <tipo> <identificador> = <valor-inicial>; <tipo> <lista-ident-sep-por-vírgula>;
Exemplos:
char caractere; int idade; long totalAlunos; float valor; double dividaExterna;
Comentários
Usando // comenta-se apenas a linha corrente a partir de onde o // foi colocado. Já usando /* */, o texto que fica entre /* e */ torna-se um comentário, mesmo que esteja contido em mais de uma linha.
main() { // Isto é um comentário /* Isto também é um comentário Continua sendo comentário aqui */ }
Constantes
const <tipo> <identificador> = <valor>;
Exemplos:
const float PI = 3.1416; const int MIN = 0, MAX = 100;
Comandos de atribuição
<var> = <valor>;
<var>++;
<var>--;
++<var>;
--<var>;
Exemplos:
x = 1; x++; // incrementa o valor de x para 2 x--; // decrementa o valor de x para 1 y = x++; // y recebe o valor de x (1) e x é incrementado para 2 z = ++x; // o valor de x é incrementado para 3 e depois z recebe 3
O comando de atribuição, além de guardar o valor na variável, retorna este valor, o que permite que um comando de atribuição seja usado como uma expressão (em um if, por exemplo).
Expressões aritméticas
Operador | Operação |
+ | adição |
- | subtração |
* | multiplicação |
/ | divisão |
% | módulo (resto da divisão) |
Exemplos:
2 + 2 // resulta em 4; 10 % 3 // resto da divisão de 10 por 3 = 1
Associando Atribuições e Operações Aritméticas
Operador | Operação |
+= | adição e atribuição |
-= | subtração e atribuição |
*= | multiplicação e atribuição |
/= | divisão e atribuição |
%= | módulo e atribuição |
Exemplos:
int x = 0; x += 3; // equivale a x = x + 3; x *= 2; // equivale a x = x * 2; x -= 1; // equivale a x = x - 1;
Operadores Relacionais
Quando a operação relacional resulta em verdadeiro, ela retorna o valor 1. Quando falso, retorna o valor 0.
Operador | Operação |
> | maior |
< | menor |
>= | maior ou igual |
<= | menor ou igual |
== | igual |
!= | diferente |
Exemplos:
2 == 2 // 2 é igual a 2? 3 != 2 // 3 é diferente de 2? 3 >= 2 // 3 é maior ou igual a 2?
Expressões Lógicas
Operador | Operação lógica | Tipo |
&& | e | Binário |
|| | ou | Binário |
^^ | ou exclusivo | Binário |
! | negação | Unário |
Avaliação de Expressões Lógicas | ||||||
A | B | A && B | A || B | A ^^ B | !A | !B |
1 | 1 | 1 | 1 | 0 | 0 | 0 |
1 | 0 | 0 | 1 | 1 | 0 | 1 |
0 | 1 | 0 | 1 | 1 | 1 | 0 |
0 | 0 | 0 | 0 | 0 | 1 | 1 |
Entrada dos dados
A função scanf é usada para efetuar a entrada de dados. Ela está disponível na biblioteca de funções stdio (standard input output). Para que seja possível usar a função scanf, é preciso fazer um include (inclusão) do arquivo de cabeçalho stdio.h no programa.
A função scanf recebe uma expressão de controle seguida de uma lista de argumentos. A expressão de controle contém mensagens e códigos de formatação (veja tabela abaixo) que indicam o tipo de dado esperado na expressão de controle. Os valores lidos são armazenados em seqüência na lista de argumentos (variáveis) passada após a expressão de controle. É importante notar que os nomes das variáveis devem ser precedidos de & para indicar que será passada a referência para a variável e não uma cópia do valor da mesma. Isso permite que a função altere internamente o valor do parâmetro associado à variável e esta alteração seja refletida na variável passada.
Tabela de Conversão da função scanf | |
Código de formatação | Valor Armazenado |
%c | um caractere |
%d | um inteiro no sistema decimal |
%i | um inteiro no sistema decimal |
%o | um inteiro no sistema octal |
%x | um inteiro no sistema hexadecimal |
%ld | um inteiro do tipo long |
%e | um número na notação científica |
%f | um número em ponto flutuante |
%s | uma cadeia de caracteres |
Exemplo:
// leitura de um caractere char letra; scanf("%c", &letra);
// Leitura de dia mes e ano int dia, mes, ano; scanf("%d/%d/%d", &dia, &mes, &ano);
Para a leitura de um caractere, podemos usar as funções getch e getche, que capturam e retornam o caractere digitado no teclado. A diferença entre as duas funções é que getch não exibe o caractere digitado na tela. Ambos são definidos na biblioteca de funções conio.
Exemplo: Lendo caracteres e repetindo 3 vezes
main() { char c = getch(); printf("Caractere digitado: %c%c%c", c, c, c); printf("\n"); char c2 = getche(); printf(" Caractere digitado: %c%c%c", c2, c2, c2); }
Saída de dados
A saída de dados pode ser feita através da chamada à função printf também pertencente à biblioteca de funções stdio. Desta forma, o procedimento de declaração include desta biblioteca é também requerido.
Exemplo: Usando códigos de formatação
main() { printf("%c", 'A'); // exibe o caractere A printf("%d", 'A'); // exibe o número 65 printf("%d", 65); // exibe o número 65 printf("%c", 65); // exibe o caractere A printf("%o", 65); // exibe o número octal 101 printf("%x", 65); // exibe o número hexadecimal 41 }
Exemplo: Leitura das partes de uma data
main() { // Leitura de dia mes e ano int dia, mes, ano; printf("Digite uma data: "); scanf("%d/%d/%d", &dia, &mes, &ano);
// Imprime dia, mes e ano separadamente printf("dia %d\n", dia); printf("mes %d\n", mes); printf("ano %d\n", ano); }
Exemplo: Formatação de números fracionários
main() { printf("%8.2f\n", 12.54321); printf("%8.2f\n", 123.54321); printf("%8.2f\n", 1234.54321); printf("%8.2f\n", 12345.54321); }
O resultado da execução do programa acima é mostrado abaixo. O código de formatação %8.2f indica que o formato de impressão do número do tipo float será de tamanho total 8, sendo 2 o tamanho da parte fracionária.
12.54 123.54 1234.54 12345.54
Códigos Especiais
De acordo com a
tabela de códigos especiais abaixo, podemos exibir alguns caracteres, como ", %
e \, dentro de uma mensagem e a realização de ações que permitem a formatação da
saída, como quebra de linha, tabulação e retrocesso.
Tabela de Códigos Especiais | |
Código | Ação |
\n | executa uma quebra de linha |
\t | executa uma tabulação |
\b | executa um retrocesso (backspace) |
\f | leva o cursor para a próxima página |
\a | executa um sinal sonoro (beep) |
\" | mostra o caractere " |
\\ | mostra o caractere \ |
\% | mostra o caractere % |
Exemplos:
main() { printf("abc\b\b\bABC\n"); // Imprime abc, apaga e depois imprime ABC e quebra a linha printf("xyz\tXYZ"); // Imprime xyz, a tabulação e XYZ printf("\\"); // Imprime uma barra printf("\""); // Imprime aspas }
A tabela abaixo contém uma lista das funções predefinidas disponíveis.
Função | Parâmetros | Retorna |
tolower(c) | char | caractere minúsculo correspondente a c |
toupper(c) | char | caractere maiúsculo correspondente a c |
fabs(n) | double | valor absoluto de n |
sqrt(n) | double | raiz quadrada de n |
power(x,y) | double, double | x elevado a y |
sin(x) | double | seno de x |
cos(x) | double | coseno de x |
tan(x) | double | tangente de x |
log(n) | double | logaritmo natural de n |
log10(n) | double | logaritmo decimal de n |