Buscar

Apostila Básica de Linguagem C

Prévia do material em texto

Apostila Básica de Linguagem C
 
Antes de começar:
 
          A linguagem C é "case sensitive". Isto significa que esta linguagem diferencia maiúsculas de minúsculas. Por exemplo, uma variável chamada NOME é diferente de uma variável chamada nome.
          Você pode utilizar o compilador TURBOC tanto para escrever como para compilar e executar os seus programas. Com o TURBOC é também possível gerar um arquivo executável de seus programas.
          Acostume-se a escrever seus programas em Linguagem C sempre em minúsculas. Alguns programadores apreciam quase tudo escrito em minúsculas e, somente as variáveis em maiúsculas. Todas as palavras reservadas no C como while, if e else contém apenas letras minúsculas.
          Programas escritos em C possuem extensão de arquivo ".C"
          O C++ corresponde a um superconjunto do C, fornece muitos recursos que tornam a linguagem C mais "atraente". Porém o mais importante é que ela fornece recursos para a programação orientada a objetos. Esta apostila não aborda a POO.
          Esta apostila não aborda também a criação de funções (sub-rotinas).
          ANSI C é a versão da linguagem de programação C padronizada em 1989 tanto nos EUA, através do American National Standard Institute (ANSI), como em todo o mundo, através da International Standards Organization (ISO).
          Para um programa em C ser executado, ele passa geralmente por seis fases: edição, pré-processamento, compilação, linking, carregamento e execução. Resumindo, o compilador traduz o programa em C para linguagem de máquina.
          Um pré-processador obedece a diretivas que indicam normalmente que outros arquivos devem ser incluídos no arquivo a ser compilado e que símbolos especiais devem ser substituídos por texto de programa.
          Um linker liga o código-objeto ao código de funções que estejam faltando de modo a produzir uma imagem executável (com todas as partes necessárias).
          Um loader apanha uma imagem executável do disco e a transfere para a memória.
          Para se tornar um bom programador C, estude e use as funções da biblioteca padrão do C.
 
 
Tipos de Dados e Declaração de Variáveis
 
Exemplos de declarações de variáveis:
 
int x; ( declara uma variável chamada x do tipo de dado inteiro
char nome[40] ( declara uma variável chamada nome do tipo de dado literal c/máximo de 40 posições
float y; ( declara uma variável chamada y do tipo de dado real
int numeros[10] ( declara um vetor chamado numeros de números inteiros de dez posições
int mat[10][5] ( declara uma matriz chamada mat de números inteiros com dez linhas por 5 colunas
 
Notas: - Em C, um vetor inicia-se na posição 0 e vai até 9, para um vetor de 10 posições.
 - Não faça comparações de igualdade com valores de ponto flutuante.
 
Definição de Tipos de Dados
 
Enumeração é um tipo de construção existente na Linguagem C. Como esta linguagem não possui o tipo de dado booleano, podemos defini-lo utilizando este conceito.
 
ENUM boolean { F, V }
 
Onde: O primeiro elemento (F) tem o valor 0 (zero), enquanto o segundo elemento (V) tem o valor 1 (um)
 e assim por diante, a não ser que valores explícitos sejam declarados. Se nem todos os valores
 forem declarados, aqueles que não foram continuam a progressão a partir do último valor
 especificado.
 
Exemplo: main()
 { enum boolean { F, V };
 enum boolean x;
 x = F; ( este comando atribui 0 (zero) à variável x
 }
 
 
Sequências de Escape
 
	Sequência de Escape
	Descrição
	\n
	Nova linha. Posiciona o cursor no início da nova linha
	\t
	Tabulação horizontal
	\r
	Posiciona o cursor no início da linha atual. Não avança para a próxima linha
	\a
	Faz soar a campainha do sistema
	\\
	Imprime um caractere de barra invertida
	\"
	Imprime um caractere de aspas duplas
 
Estrutura Básica de um Programa em C
 
#include <stdio.h>
main()
{ 
 <declaração de variáveis>
 <comandos>
 }
 
Notas: - Coloque um espaço depois de cada vírgula para tornar o programa mais legível.
 - Todas as variáveis devem ser declaradas com um nome e um tipo de dado imediatamente após a
 chave esquerda do corpo de main.
 - "stdio.h" corresponde a um arquivo da biblioteca padrão C para uso de comandos de entrada
 e saída. Para funções matemáticas use "math.h". Para limpeza de tela (clrscr()) e outras
 funções relacionadas, use a biblioteca "conio.h".
 
Arquivos de Cabeçalho da Biblioteca Padrão
 
Você programador, pode criar arquivos de cabeçalho (chamados de headers) personalizados. Os arquivos de cabeçalho definidos pelo programador também podem terminar em .h. Um arquivo de cabeçalho pode ser incluído no programa usando a diretiva de pré-processador #include. Veja no programa exemplo acima a inclusão da diretiva #include <stdio.h>. A seguir, uma listagem dos arquivos que acho serem mais usados:
 
<stdio.h> Contém protótipos de funções da biblioteca padrão de entrada e saída de dados
<time.h> Contém funções para manipular horários e datas
<math.h> Contém funções da biblioteca matemática
<strings.h> Contém funções para manipulação de strings
<conio.h> Contém funções para manipulação de vídeo
<stdlib.h> Contém funções para conversão de números em texto e vice-versa, alocação de memória,
 números aleatórios, etc.
 
Veja o programa exemplo:
 
 #include <stdio.h>
 #include <stdlib.h>
 main()
 {
 int i;
 for (i=1; i<=20; i++)
 {
 printf("%10d", 1 + rand() % 6));
 if (i%5 == 0)
 printf("\n");
 }
 return 0;
 }
 
Comentários
 
Use "/*" para iniciar e "*/" para terminar um comentário. Em algoritmos utilizamos as chaves "{" e "}" para iniciar e terminar um comentário, respectivamente.
 
Veja o programa exemplo:
 
#include <stdio.h>
main() {
 char nomecli[50]; /* variável para leitura do nome do cliente */
 float saldo; /* conterá o saldo atual do cliente */
 ... }
 
Comando de Atribuição
 
Use o caractere "=" para executar uma atribuição a uma variável. Em algoritmos utilizamos o sinal "(".
 
Exemplos: nome = "Joana Pereira\0";
 x = 10;
 saldo = 1250.32;
 num = a % b; ( Coloca na variável num o resto da divisão de a por b
 Em algoritmos seria: num ( a mod b
 
Você pode também atribuir um valor à uma variável no mesmo comando da declaração. Veja os exemplos:
 
int x = 23;
float y = 123.456789;
char nome[] = "José Ricardo Cosme Lérias Ribeiro";
 
Operadores de Incremento e Decremento
 
São eles: += -= *= /= %=
 
x++ ( incremente x de 1 e depois usa o valor de x na expressão onde x se localiza (pré-incremento)
++x ( usa o valor de x na expressão onde x se localiza e depois incrementa x de 1
 
Notas: - O mesmo para --x, x-- e os outros.
 - Percebe-se uma melhoria muito grande quando um aperfeiçoamento supostamente insignificante
 é colocado em um loop que pode se repetir muitas vezes.
 
Operadores Relacionais
 
São eles: == != > < >= <=
 
Exemplos:
 
if (x == 10)
 {
 printf("a variável x possui o valor 10");
 }
 
if (x != 10)
 {
 printf("a variável x possui um valor diferente de 10");
 }
 
Tabela de Conversão de Tipos para uso com Funções de Entrada e Saída
 
 
	Tipo de Dado
	Printf
	Scanf
	Long double
	%lf
	%lf
	Double
	%f
	%lf
	Float
	%f
	%f
	Unsigned long int
	%lu
	%lu
	Long int
	%ld
	%ldUnsigned int
	%u
	%u
	Int
	%d
	%d
	Short
	%hd
	%hd
	Char
	%c
	%c
 
 
 
 
 
Formatos para serem usados com a função Printf()
 
	Formato
	Descrição
	%f
	Ponto flutuante
	%6f
	Ponto flutuante com pelo menos seis caracteres
	%.2f
	Ponto flutuante com dois caracteres após o ponto decimal
	%6.2f
	Ponto flutuante com pelo menos seis caracteres e dois após o ponto decimal
	%d
	Inteiro
	%6d
	Inteiro com pelo menos seis caracteres
	%ld
	Inteiro longo
	%o
	Octal
	%x
	Hexadecimal
	%s
	String (cadeia de caracteres)
 
Estrutura de Seleção Composta (se...então...senão...fim-se)
 
Exemplos:
 
if (x > 5)
 { printf("a variável x possui um valor maior que 5"); }
else
 { printf("a variável x possui um valor menor que ou igual a 5"); }
 
Notas: - Pode-se ter mais de um comando dentro do então ou do senão.
 - Pode-se ter instruções if aninhadas, ou seja, umas dentro de outras.
 
Estrutura de Seleção Múltipla (caso...fim-caso)
 
Exemplos:
 
switch (x) {
 case 1:
 printf("a variável x possui o valor 1");
 break;
 case 2:
 printf("a variável x possui o valor 2");
 break;
 case 3:
 printf("a variável x possui o valor 3");
 break;
 default;
 printf("a variável x possui outro valor...");
 break;
 }
 
switch (letra) {
 case 'A':
 printf("a variável letra possui a letra A");
 break;
 case 'B' : 'C':
 printf("a variável letra possui as letras B ou C");
 break;
 default;
 printf("a variável letra possui outra letra...");
 break;
 }
 
Estrutura de Repetição WHILE (enquanto...fim-enquanto)
 
Exemplo:
 
contador = 0;
while (contador <= 100)
 {
 printf(contador);
 contador++;
 }
Estrutura de Repetição FOR (para...fim-para)
 
Exemplo:
 
for (contador=1; contador <= 100; contador ++)
 {
 printf("%d", contador);
 }
 
Notas: - Se a segunda expressão for omitida, o programa entra em loop infinito.
 - Pós-incremento e pré-incremento produzem aqui o mesmo efeito.
 - A primeira expressão pode ser omitida, caso a variável já tenha sido iniciada antes.
 - A terceira expressão pode ser omitida, caso o laço não precise de incremento.
 - Pode-se interromper uma estrutura for com o comando break ou realizar nova iteração com
 continue. Estes dois comandos funcionam também na estrutura while.
 
Comando de Saída de Dados
 
Você deve utilizar a função printf(). Esta função equivale ao comando escreva em algoritmo.
 
Exemplos:
 
printf("%9.3f", 123.456789); ( imprime 123.457
printf("%4d", 2); ( imprime 2 (alinhado pela direita)
printf("%4d", 12); ( imprime 12 (alinhado pela direita)
printf("%4d", 123); ( imprime 123 (alinhado pela direita)
printf("%4d", -20); ( imprime -20 (alinhado pela direita)
printf("%.6d", 873); ( imprime 000873
printf("%.3f", 123.94536); ( imprime 123.945
printf("%.3g", 123.94536); ( imprime 124
printf("%.11s", 'Professor José Ricardp'); ( imprime "Professor J"
printf("%+d", 345); ( imprime +345
printf("% d", 345); ( imprime 345 (com um espaço antes do número)
printf("%#g", 1427); ( imprime 1427.00
printf("%10s%10d%10c%10f", "Fach", 7, 'a',1.23);
 ( imprime " Fach 7 a 1.230000" (alinhando pela direita)
printf("%-10s%-10d%-10c%-10f", "Fach", 7, 'a',1.23);
 ( imprime "Fach 7 a 1.230000 " (alinhando pela esquerda)
 
Comando de Entrada de Dados
 
Você deve utilizar a função scanf(). Esta função equivale ao comando leia em algoritmo.
 
Exemplos:
 
scanf("%d", &x); ( lê um inteiro decimal com sinal opcional
scanf("%i", &x); ( lê um inteiro decimal, octal ou hexadecimal com sinal opcional
scanf("%u", &x); ( lê um inteiro decimal sem sinal
scanf("%f", &x); ( lê um número de ponto flutuante (use também o especificador de conversão "f")
scanf("%c", &x); ( lê um caractere sendo x declarado como: char x;
scanf("%s", x); ( lê uma string sendo x declarado como: char x[9];
scanf("%[aeiou]", x); ( lê uma string aceitando apenas os caracteres aeiou sendo x: char x[9];
 exemplo: digitando "ooeeooahah", será colocado em x apenas "ooeeooaa"
scanf("%[^aeiou]", x); ( lê uma string aceitando o inverso do exemplo anterior
 exemplo: digitando "String", será colocado em x apenas "Str"
scanf("%2d", &x); ( lê um inteiro decimal de apenas 2 dígitos
 exemplo: digitando 12345, será colocado em x apenas 12
 
scanf("%d-%d-%d", &dia, &mês, &ano); ( lê três inteiros ignorando os travessões na entrada de
 uma data. Embora esse comando elimine os travessões na
 digitação, é possível que a data seja fornecida como
 26/08/02

Continue navegando