Valdir Gil Pillat
1 1. Introdução a Linguagem C
1.1 História
Entre 1969 e 1973, Dennis Ritchie inventou a linguagem C e foi o primeiro a implementá-la usando um computador DEC PDP-11, que utilizava o sistema operacional Unix. Essa linguagem é resultante de um processo evolutivo de linguagens. O marco inicial foi uma linguagem chamada BCPL, desenvolvida por Martin Richards, que teve forte influência em uma linguagem denominada B, inventada por Ken Thompson. Na década de 1970, B levou ao desenvolvimento de C. Em 1973, a linguagem C tinha se tornado suficientemente poderosa para que grande parte do núcleo do Unix, originalmente escrito na linguagem de programação PDP-11/20 Assembly, fosse reescrito em C.
Durante alguns anos, o padrão da linguagem C foi aquele fornecido com a versão 5 do sistema operacional Unix. Em 1978, Ritchie e Kernighan publicaram a primeira edição do livro The C Programming Language. Esse livro conhecido pelos programadores de C como "K&R", serviu durante muitos anos como uma especificação informal da linguagem. Devido a popularização dos microcomputadores, várias implementações de C foram criadas, gerando, assim, muitas discrepâncias. Para resolver tal situação, o " American National Standards Institute" - ANSI estabeleceu, em 1983, um comitê para definir um padrão que guiasse todas as implementações da linguagem C. Esta versão da linguagem é referenciada como C ANSI. Em 1990, o padrão C ANSI, após sofrer modificações menores, foi adotado pela Organização Internacional de Padrões (ISO) como ISO/IEC 9899:1990. Um dos objetivos do processo de padronização C ANSI foi o de produzir um sobreconjunto do C K&R, incorporando muitas das características não oficiais subsequentemente introduzidas. Entretanto, muitos programas tinham sido escritos e que não compilavam em certas plataformas, ou com um certo compilador, devido ao uso de bibliotecas de funções não padrão e ao fato de alguns compiladores não aderirem ao C ANSI.
A linguagem C++ é uma extensão da linguagem C. As instruções que fazem parte desta última representam um subconjunto da primeira. Os incrementos encontrados na linguagem C++ foram feitos para dar suporte à programação orientada a objetos. A sintaxe desta linguagem é basicamente a mesma da linguagem C.
Valdir Gil Pillat
2 1.2 Conceitos básicos
O objetivo desta seção é instruir o leitor na compreensão das principais estruturas, comandos e funções da linguagem C.
Um programa em C tem a seguinte estrutura: //Inclusão das bibliotecas
//Declaração de variáveis globais - opcional //Declaração de funções - opcional
int main() //estrutura principal do programa dentro das suas chaves são chamadas todas as funções e variáveis utilizada no programa.
{
//declaração de variáveis //código
}
Outros conceitos interessantes { - indica início de um bloco de nível } – indica fim de um bloco de nível // - comentar uma linha
/* - início do comentário de múltiplas linhas */ - final do comentário de múltiplas linhas
; - necessário no final de toda linha que represente: instrução, atribuição e declaração.
Bibliotecas mais utilizadas
stdio.h – contem os comandos básicos de entrada e saída do programa stdlib.h – contem os comandos básicos da linguagem C
conio.h – geralmente é utilizada em programas básicos para utilizar a função “getch();” utilizado para colocar o programa em modo de espera da próxima ação do usuário, muito útil para visualizar os resultados de um programa.
math.h – contem os comandos matemáticos mais avançados, por exemplo, cálculo de potências, pow(número, potência).
Para inserir uma biblioteca no código C, basta inserir a seguinte linha: #include <nomebiblioteca.h>
Por exemplo: #include <stdio.h> #include <conio.h>
Declaração dos principais tipos de variáveis
int – para variáveis numéricas (números inteiros). Ex.: int a,b,c;
float – para variáveis numéricas (números flutuantes, ou seja, com casas decimais). Ex.: float a,b,c;
double – para variáveis numéricas (números flutuantes, ou seja, com casas decimais), com uma precisão maior que o float. Ex.: double a,b,c;
Valdir Gil Pillat
3 Tipos de variáveis
Tipo Faixa de valores Tamanho(aproximado)
char -128 a 127 8 bits
unsigned char 0 a 255 8 bits
int -32.768 a 32767 16 bits
unsigned int 0 a 65.535 16 bits
short int -32.768 a 32767 16 bits
long -2.147.483.648 a 2.147.483.647 32 bits unsigned long 0 a 4.294.967.295 32 bits float 3.4 x 10-38 a 3.4 x 1038 32 bits
double 1.7 x 10-308 a 1.7 x 10308 64 bits
long double 3.4 x 10-4932 a 1.1 x 104932 80 bits
Comandos de entrada
O comando de entrada é utilizado para receber dados digitados pelo usuário. Os dados recebidos são armazenados em variáveis. Os comandos de entrada mais utilizados na linguagem C são gets e scanf.
Exemplo gets(a);
scanf(“%t”, &a);
Nota: este comando busca o endereço da variável por isto é necessário inserir o símbolo “&”.
Obs.: para os comandos de entrada e saída são utilizadas as variáveis %t, sendo que "t" pode ser:
inteiro: %d ou %i
float: %f ou limitando o número de casas decimais %.2f double: %d
char: %c ou %s para uma cadeia de caracteres Comandos de saída
O comando de saída é utilizado para mostrar dados na tela ou na impressora. Os comando de saída mais utilizado é o printf.
Exemplo
printf(“Texto para o usuário %t”, a); Comandos utilizados na saída. \t - insere uma tabulação \n - insere uma quebra de linha
Operadores e funções predefinidas em C
Lógico
Operador Exemplo Comentário
&& x>5 && x<10 E
|| x>5 || x<10 Ou
Valdir Gil Pillat
4 Aritméticos
Operador Exemplo Comentário
= x = y O conteúdo da variável y é atribuído à variável x. (Poder ser atribuído a uma variável o conteúdo de outra variável, uma constate, ou ainda o resultado de uma função.
+
- x+y x-y Soma o conteúdo de x e y Subtrai o conteúdo de x e y.
* x*y Multiplica o conteúdo de x pelo conteúdo de y / x/y Obtém o quociente da divisão de x por y.
% x%y Obtém o resto da divisão de x por y. (só pode ser utilizado com parâmetros do tipo inteiro.
+= x+=y Equivale a x=x+y
-= x-=y Equivale a x=x-y
*= x*=y Equivale a x=x*y
/= x/=y Equivale a x=x/y
%= x%=y Equivale a x=x%y
++ x++ Equivale a x=x+1
++ y=++x Equivale a x=x+1 e depois y=x ++ y=x++ Equivale a y=x e depois x=x+1
-- x-- Equivale a x=x-1
-- y=--x Equivale a x=x-1 e depois y=x -- y=x-- Equivale a y=x e depois x=x-1 Funções matemáticas
Função Exemplo Comentário
abs abs(x) Obtém o valor absoluto de x.
ceil ceil(x) Arredonda um número real para cima. Por exemplo, ceil(3.2) é 4.
cos cos(x) Calcula o cosseno de x (x de estar representado em radiano).
exp exp(x) Obtém o logaritmo natural e elevado à potência X.
floor floor(x) Arredonda um número real para baixo. Por exemplo, floor(3.2) é 3.
log log(x) Obtém o logaritmo natural de x. log10 log10(x) Obtém o logaritmo de base 10 de x. M_PI M_PI Retorna o valor de π
modf z=modf(x,&y) Decompões o número armazenado em x em duas partes: y recebe a parte fracionária e z, a parte inteira do número.
pow pow(x,y) Calcula a potência de x elevado y.
sin sin(x) Calcula o seno de x (x de estar representado em radiano).
sqrt sqrt(x) Calcula a raiz quadrada de x.
tan tan(x) Calcula a tangente de x (x de estar representado em radiano).
Valdir Gil Pillat
5 Relacionais
Operador Exemplo Comentário
== x==y O conteúdo de x é igual ao conteúdo de y. != x!=y O conteúdo de x é diferente ao conteúdo de y. <= x<=y O conteúdo de x é menor ou igual ao conteúdo de y. >= x>=y O conteúdo de x é maior ou igual ao conteúdo de y. < x<y O conteúdo de x é menor que o conteúdo de y. > x>y O conteúdo de x é maior que o conteúdo de y. Estrutura condicional (seleção ou decisão)
As estruturas condicionais são utilizadas quando existe a necessidade de verificar condições para a realização de uma instrução ou de uma sequência de instruções. Essas estruturas podem ser simples ou composta para transformar o exemplo abaixo em uma estrutura condicional simples remova a instrução else. if (nota<5) { printf(“Aluno Reprovado”); } else { printf(“Aluno Aprovado”); } Estruturas de repetição
Uma estrutura de repetição é utilizada quando um trecho do algoritmo ou até mesmo o algoritmo inteiro precisa ser repetido. O número de repetições pode ser fixo ou estar atrelado a uma condição. Assim, existem estruturas para tais situações, descritas a seguir.
for(i=0;i<=100;i=i+1) {
printf(“Mostre o numero %d”, i); } do { if (n>m) { m=n; } }while(n!=0); while(n!=0) { if (n>m)
Valdir Gil Pillat 6 { m=n; } }
1.1 Trabalhando com vetores e matrizes
Vetor também é conhecido como variável composta homogênea unidimensional. Isto quer dizer que se trata de um conjunto de variáveis de mesmo tipo, que possuem o mesmo identificador (nome) e são alocadas sequencialmente na memória. Como as variáveis têm o mesmo nome, o que as distingue é um índice que referencia sua localização.
Matriz é uma variável composta homogênea multidimensional. Ela é formada por uma sequência de variáveis, todas do mesmo tipo, com o mesmo identificador (mesmo nome), e alocadas sequencialmente na memória. Uma vez que as variáveis têm o mesmo nome, o que as distingue são índices que referenciam sua localização dentro da estrutura. Uma variável do tipo matriz precisa de um índice para cada uma de suas dimensões.
A utilização de vetores ou matrizes na linguagem C pode seguir estes passos: Declaração
Neste exemplo é declarado um vetor com 10 posições: int vetorexemplo[9];
Obs.: Os vetores na linguagem C começam a contar do zero.
Para declarar uma matriz de bidimensional com 4 linhas e 4 colunas: int matrizexemplo[3][3];
Atualizando valores de vetores/matrizes por atribuição
vetorexemplo[0]=10; // atribui o valor 10 para a posição 0 do vetor vetorexemplo[1]=2; // atribui o valor 2 para a posição 1 do vetor Valores do vetorexemplo: 10,2,0,0,0,0,0,0,0,0.
matrizexemplo[0][0]=1; // atribui o valor 1 para a linha 0 e coluna 0 da matriz matrizexemplo[1][1]=1; // atribui o valor 1 para a linha 1 e coluna 1 da matriz matrizexemplo[2][2]=1; // atribui o valor 1 para a linha 2 e coluna 2 da matriz matrizexemplo[3][3]=1; // atribui o valor 1 para a linha 3 e coluna 3 da matriz Valores da matrizexemplo:
1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
Atualizando valores de vetores/matrizes utilizando o scanf
scanf(“%d”,vetorexemplo[0]); //guarda valor digitado na posição 0 do vetor scanf(“%d”,matrizexemplo[0][0]); //guarda valor digitado na linha 0 e coluna 0 da matriz.
Valdir Gil Pillat
7 Obs.: Para mostrar os valores de vetores/matrizes na tela pode ser utilizado o comando printf. Por exemplo:
Mostrando valores de vetores/matrizes utilizando printf printf(“O valor do vetor na posição %d eh %d”, i, vetorexemplo[i]);
printf(“O valor da matriz na linha %d e coluna %d eh %d”, i, j, matrizexemplo[i][j]);
Comandos para trabalhar com textos em C
Na linguagem C para trabalhar com textos (strings) é necessário trabalhar com vetores de caracteres, como no exemplo a seguir:
Declaração
char letra; //permite armazenar um caractere
char nome[20]; //permite armazenar um texto com até 20 caracteres
char listanome[10][20]; //permite armazenar um vetor de 10 textos com até 20 caracteres cada. Atribuição letra = ‘a’ strcpy(nome,“Apostila C”); strcpy(listanome[0],“Primeiro Nome”); Comando de entrada scanf(“%c”, &letra); scanf(“%s”, &nome); scanf(“%s”, &listanome[0]); Comando de saída
printf(“A letra digitada eh %c”, letra); printf(“O nome inserido eh %s”, nome);
printf(“O nome na posição zero da lista eh %s”, listanome[0]); Comandos para manipular textos
Para utilizar os comandos abaixo deve ser inserido a biblioteca “string.h”. Com o seguinte comando: #include <string.h>
strcmp(texto1,texto2); //compara texto1 e texto 2, caso eles sejam iguais retorna o valor zero.
strcat(texto1,texto2); //concatena o texto1 com o texto 2 strcpy(texto1,texto2);//copia texto2 para texto1.
strlen(texto);//retorna o número de caracteres da variável texto
*x=strtok(texto,”token”); //cria uma lista de palavras separadas pelo token. Conversão de texto em número (necessita da biblioteca stdlib.h) x=atoi(texto); //converte texto em inteiro
x=atof(texto); //converte texto em float x=atol(texto); //converte texto em long
Valdir Gil Pillat
8 Bibliografia
Ascencio, Ana Fernanda Gomes; de Campos, Edilene Aparecida Veneruchi. Fundamentos da programação de computadores: Algoritmos, Pascal, C/C++, e Java, 2 ed., Pearson, 2007
Barros, A.M.S. ANSI C para quem tem pressa. 2003. Disponível em: http://www.dei.isep.ipp.pt/~abarros/docs/ANSI_C.pdf Acessado em: 06/08/2012.
Huss, E. The C Library Reference Guide, 1997. Disponível em: http://www.acm.uiuc.edu/webmonkeys/book/c_guide/ Acessado em: 06/08/2012.
Puga, S.; Rissetti, G. Lógica de programação e estruturas de dados com aplicações em Java, 2 ed, Pearson, 2009.
cplusplus.com Disponível em: http://www.cplusplus.com/reference/ Acessado em: 10/02/2014