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 |