Вы находитесь на странице: 1из 15

CAPTULO 1

Introduo

A linguagem C foi implementada primeiramente por Dennis Ritchie em um computador DEC PDP-11 que utilizava o sistema operacional UNIX. Ela teve origem na linguagem B, inventada por Ken Thompson na dcada de 70, a qual teve origem na linguagem BCPL. As primeiras verses da linguagem C foram fornecidas com o sistema operacional UNIX. Com o advento dos microcomputadores, surgiram vrias implementaes da linguagem C, ocasionando algumas diferenas entre elas. Em 1983 o ANSI (rgo de padronizao norte americano) estabeleceu um comit para criar um padro para a linguagem C, a qual ficou conhecida como ANSI C. A linguagem C voltada principalmente para implementar softwares bsicos de suporte e apoio como: sistemas operacionais, programas montadores e compiladores, editores de texto, gerenciadores de impresso, banco de dados e utilitrios de modo geral. uma linguagem considerada de mdio nvel, pois combina elementos de linguagem de alto nvel com a funcionalidade da linguagem assembly. C permite a manipulao de bits, bytes e endereos. Uma das principais vantagens de C sua grande portabilidade. Isso significa que fica fcil migrar um programa escrito em C de uma plataforma de Hardware e sistema operacional para outras. uma linguagem estruturada assim como o Pascal e, a principal caracterstica de uma linguagem estruturada a utilizao de blocos. Um bloco um conjunto de instrues que esto ligadas logicamente. A linguagem C baseia-se no conceito de blocos construtivos. Os blocos construtivos so denominados funes. Um programa C portanto, uma coletnea de uma ou mais funes. Assim, para escrever um programa C, primeiro deve-se criar as funes para depois junt-las. Uma funo uma sub-rotina formada por uma ou mais declaraes C, que executa uma ou mais subtarefas.

1.1. A FUNO main( )


Todo programa em C um conjunto de funes, inclusive o programa principal que tem um identificador reservado denominado main( ).

Apostila de Linguagem C Introduo

A funo main( ) especial por ser a primeira a ser chamada quando seu programa executado. Significa o incio de seu programa. obrigatria a existncia de main( ) em algum ponto do programa, para que o compilador C consiga determinar onde iniciar a execuo. A forma bsica de um programa em C a seguinte: /* definies de pr-processamento */ . . . /* declaraes de variveis globais */ . . . void main( ) { /* declaraes de variveis locais . . . /* corpo do programa principal */ . . . } /* definio de outras funes */ . . . Exemplo de um programa em C: /* Este programa mostra a mensagem Hello World!! na tela */ #include <stdio.h> void main( ){ printf(Hello World!!\n); } Observaes:
1)

*/

A declarao #include serve para referenciar arquivos de bibliotecas. No exemplo acima a biblioteca referenciada a <stdio.h>, a qual a biblioteca padro para as funes de I/O (Entrada/Sada) e que contm a funo printf( ) utilizada no corpo da funo main( ); Os blocos so delimitados por abre-chave {, para indicar o incio do bloco e fechachave } para indicar o fim do bloco; A linguagem C sensvel ao case, ou seja, a linguagem diferencia letras maisculas de letras minsculas. Assim, todo comando de C deve ser escrito em letras minsculas; printf( ) no um comando de C e sim uma funo de sada de dados que se encontra na biblioteca padro stdio.h; Os comentrios na linguagem C devem estar entre /* ..... */;
2

2) 3)

4) 5)

Apostila de Linguagem C Introduo 6)

Toda funo em C pode receber parmetros e retornar valores. Portanto, deve-se declarar qual o tipo do valor retornado pela funo. A funo main( ) tambm poder receber valores passados na linha de comando ou retornar valores., entretanto, no caso da funo main( ), em geral ela no retorna valores. Para dizer ao compilador que uma funo no retornar valores, utiliza-se a declarao void. Um segundo programa em C:

/**************************************************************** * Este programa solicita um nome via teclado e imprime o nro de * * de caracteres digitados. * *****************************************************************/ #include <stdio.h> #define MAX 15 /*Define uma constante chamada MAX igual a 15*/ char cadeia[MAX]; /*Vetor global de MAX posies de caracteres */ void main(void) { int i=15; puts(Digite um nome com no mximo 14 caracteres); gets(cadeia); while (cadeia[i] != \0) i++; printf(Esta cadeia tem %d caracteres\n, i); }

1.2. IDENTIFICADORES
Os identificadores nomeiam as variveis, as constantes, tipos das variveis, funes e at mesmo o controle do fluxo de um programa escrito em C. A construo de um identificador em C muito parecida com a regra de outras linguagens, principalmente com o Pascal: a) o conjunto de caracteres que podem compor um identificador so letras maisculas e minsculas, sublinha( _ ) e dgitos; b) todo identificador comea com letra ou sublinha ( _ ); c) como j foi dito anteriormente, em C os caracteres maisculos so diferentes dos minsculos. Portanto, o identificador X1 diferente do identificador x1; d) o nmero de caracteres significativos de um identificador depende do compilador utilizado. Por exemplo, o Turbo C 2.0 os 32 primeiros caracteres so significativos, ou seja, pode-se usar at 32 caracteres para diferenciar um identificador de outro. Exemplificando, temos que os identificadores a seguir: Var_Contadora_Tempo_Cpu_Program1; Var_Contadora_Tempo_Cpu_Program2; so considerados diferentes pelo Turbo C 2.0. Por outro lado, os identificadores a seguir:
3

Apostila de Linguagem C Introduo

Var_Contadora_Tempo_Cpu_Programa1; Var_Contadora_Tempo_Cpu_Programa2; so considerados iguais, pois seus 32 primeiros caracteres so idnticos. e) no se deve utilizar como identificadores nenhuma das palavras-chave em C, as quais so listadas a seguir: auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while

1.3. DECLARAO DE VARIVEIS


A declarao de variveis em C deve obedecer o seguinte formato: <tipo> lista_de_identificadores_de_variveis; Por exemplo: int Contador; int i, j, x; char opcao; Para declarar uma varivel em C pode-se usar os tipos primitivos prdeterminados pela linguagem. Para tal considere a tabela: Tipo primitivo char int float double void Bytes de Memria 1 2 4 8 0 Escala de Valores -127 a 127 -32.767 a 32.767 3.4E-38 a 3.4E+38 1.7E-308 a 1.7E+308 sem valor

Os tipos primitivos de dados podem ser modificados pelos modificadores de tipos, os quais se aplicam a todos os tipos primitivos com exceo do tipo void. So eles: short long
4

Apostila de Linguagem C Introduo

unsigned signed A utilizao de um modificador junto a um tipo primitivo, influenciar a quantidade de bytes de memria utilizada pela varivel e tembm a escala, conforme definido no padro C ANSI e descrito na tabela a seguir: Tipo primitivo ou Modificador char unsigned char signed char int unsigned int signed int short int unsigned short int signed short int long int signed long int unsigned long int float double long double Bytes de Memria 1 1 1 2 2 2 2 2 2 4 4 4 4 8 16 Escala de Valores -127 a 127 0 a 255 -127 a 127 -32.767 a 32.767 0 a 65.535 o mesmo que int o mesmo que int 0 a 65.535 o mesmo que short int -2.147.483.647 a 2.147.483.647 o mesmo que long int 0 a 4.294.967.295 3.4E-38 a 3.4E+38 1.7E-308 a 1.7E+308 Dez dgitos de preciso

Os valores da tabela acima podem mudar de acordo com a arquitetura de Hardware e do compilador utilizado. Portanto, costuma-se restringir seu uso aos modificadores unsigned (aplicado aos tipos char e int), signed (aplicado ao tipo char) e long (aplicado ao tipo int). Exemplos: int i; short int x; unsigned char j; unsigned long int dado; O tipo void tambm chamado tipo vazio, no contm nenhum valor. Ou seja, o conjunto de valores assumidos pelo tipo void vazio, logo no existem variveis deste tipo. Ele usado para passagem de parmetros nulos para funes, para indicar que as funes no retornam valores e na criao de ponteiros genricos. Embora seja usado para representar caracteres, o tipo char tambm armazena valores. Isso porque em C um caracter (como uma letra por exemplo), representado por seu valor ASCII. Exemplo:

Apostila de Linguagem C Introduo

main( ) { char ch; /*Declara ch como tipo char*/ ch=a; /*Atribui o caracter a para a varivel ch*/ ch=ch+1; /* OK! pois o valor decimal de ch 65 */ printf(\nCaracter representado por ch=%c, cujo valor ASCII = %d,ch,ch); } A execuo do programa acima mostrar na tela a seguinte mensagem: Caracter representado por ch=b, cujo valor ASCII =66 Os tipos float e double so reservados para tratar nmeros que exigem preciso numrica utilizando a notao de ponto flutuante. Neste tipo de notao, os valores so armazenados na memria em duas partes, denominadas mantissa e expoente. Por exemplo, o nmero 12345 em notao de ponto flutuante representado por .12345e5, onde o nmero que segue o (e) o expoente, e .12345 o valor do nmero. Seu armazenamento na memria feito da seguinte maneira:

3 bytes

1 byte

.12345
Mantissa

5
Expoente

Na linguagem C, no existe o tipo lgico (como por exemplo, no PASCAL existe o tipo Boolean), mas existe valores lgicos. Foi convencionado que 0 falso e qualquer valor no nulo verdadeiro. Exemplo:

Apostila de Linguagem C Introduo

main( ) { int flag; flag=1; /*Atribui-se 1 para a varivel flag para sinalizar VERDADEIRO*/ if (flag) printf(\n VERDADEIRO, pois flag 1, que um valor diferente de zero); flag=0; /*Atribui-se ZERO para a varivel flag para sinalizar FALSO*/ if (flag) printf(\n Verdadeiro); /*No ser executado*/ else printf(\n FALSO, pois flag ZERO); flag=1; /*Atribui-se 1 para a varivel flag para sinalizar VERDADEIRO*/ if (flag=0) printf(\n Verdadeiro) /*No ser executado*/ else printf(Sempre FALSO, pois est atribuindo ZERO para flag dentro
do if. CUIDADO!!);

}/*fim da funo main*/

1.3.1 Inicializao de Variveis em tempo de Declarao


Em C, existe a possibilidade de declararmos uma varivel e inicializ-la com um certo valor, um valor inicial. Veja: main( ) { int cont=0; float taxa=1.2, taxa_anual=1.4; char opcao=A; printf(\n Valor de cont=%d, cont); printf(\n Valor de taxa=%f, taxa); printf(\n Valor de taxa_anual=%f, taxa_anual); printf(\n Valor de opcao=%c, opcao); } /*Fim funo main*/

1.4. OPERADORES
1.4.1. Operador de Atribuio: atribui um valor a uma varivel. usado o smbolo =.
Exemplo:
7

Apostila de Linguagem C Introduo

main( ) { int a, b = 10,c,d; a = b * 2; c = d = a; printf(\n a=%d \n b=%d \n c=%d \n d=%d, a,b,c,d); } /*Fim funcao main*/

1.4.2. Operadores Aritmticos: so utilizados: + * / %


Exemplo: main( ) { int a,b,c,d; a = 10; b = c = a*2; d = c%a; printf(\n a=%d \n b=%d \n c=%d \n d=%d,a,b,c,d); } /*Fim main*/ Adio Subtrao Multiplicao Diviso Mdulo - retorna o resto da diviso inteira

1.4.3. Operadores de incremento (++) e decremento (- -): estes operadores


quando aplicados a uma varivel, incrementam (++) em 1 ou decrementam (- -) em 1 o valor da varivel. Exemplo: main( ) { int a=0,b=1; a++; /*Equivalente a fazer: a=a + 1 */ b--; /*Equivalente a fazer: b=b - 1 */ printf(\n Valor de a=%d \n Valor de b=%d, a,b); }/*Fim main*/

Estes operadores trabalham em dois modos: o ps-fixado, quando o operador vem depois da varivel e o pr-fixado, quando o operador vem antes da varivel. A diferena entre os dois modos que:
8

Apostila de Linguagem C Introduo

no ps-fixado o valor da varivel usada e depois seu valor incrementado (ou decrementado); no pr-fixado o valor da varivel incrementado (ou decrementado) antes de seu valor ser usado.

Exemplo: main( ) { int x, y=0; x=y++; /*Aps a execuo as variveis tero os valores: x=0 e y=1 */ printf(\n Pos-incremento: valor de x=%d, valor de y=%d,x,y); y=0; x= ++y; /*Aps a execuo as variveis tero os valores: x=1 e y=1 */ printf(\n Pre-incremento: valor de x=%d, valor de y=%d,x,y); y=1; x=y - -; /*Aps a execuo as variveis tero os valores: x=1 e y=0 */ printf(\n Pos-decremento: valor de x=%d, valor de y=%d,x,y); y=1; x= - -y; /*Aps a execuo as variveis tero os valores: x=0 e y=0 */ printf(\n Pre-decremento: valor de x=%d, valor de y=%d,x,y); } /*Fim main*/

1.4.4. Operadores Relacionais: Como j foi dito anteriormente, na linguagem C no

existe tipo lgico, mas existem valores lgicos. Para as expresses que resultam em um valor lgico, ficou convencionado que quando o valor retornado pela expresso for 0(zero) significa FALSO e quando for 1(um) significa VERDADEIRO. Os sinais usados para expressar as relaes so: > < >= <= == != Exemplo: maior menor maior ou igual menor ou igual igualdade diferente

Apostila de Linguagem C Introduo

main( ) { int verdadeiro, falso; verdadeiro = (15 < 20); falso = (15 == 20); printf(\n VERDADEIRO=%d, } /*Fim main*/

FALSO=%d, verdadeiro, falso);

1.4.5. Operadores Lgicos: Os operadores lgicos so :


&& || ! para lgica and para lgica or para lgica not

1.5. ABREVIAES DE OPERAES DE ATRIBUIO


Existe a possibilidade de reduzirmos ou abreviarmos algumas operaes onde o resultado da operao ser atribudo a um de seus operandos. Por exemplo: a a a a a a += b -= b *=b /= b %= b +=3 o mesmo que a = a + b o mesmo que a = a - b o mesmo que a = a * b o mesmo que a = a / b o mesmo que a = a % b o mesmo que a = a + 3

1.6. FUNES DE ENTRADA E SADA


Como a linguagem C manipulada e estruturada sob a forma de funes, para que possamos efetuar uma entrada ou uma sada de dados ser necessrio o uso de funes. No entanto so muitas as funes que efetuam tais operaes, e as principais se encontram em uma biblioteca chamada <stdio.h>.

1.6.1. printf( ): Tem a finalidade de enviar um conjunto de caracteres para a sada


padro (Monitor). A sintaxe da funo : int printf( expresso de controle,lista de argumentos) O valor int retornado pela funo o tamanho da string impressa. Para imprimir expresses (ou variveis) devemos efetuar a formatao de acordo com os valores desejados na impresso. Assim, usa-se as seguintes formataes:

%s %c %d

para imprimir string para caractere para decimal


10

Apostila de Linguagem C Introduo

%i %f %x %e %o %u %ld %lf

para int para float para hexadecimal para notao cientfica para octal para decimal sem sinal para decimal longo para ponto flutuante longo (double)

Entre o sinal de % e a mascara pode ser informado o nmero de caracteres a serem impressos. Formatao da sada. Ex: %5.2f Exemplo: # include <stdio.h> main ( ) { int car = A; printf( O caractere %c \n , car); printf( E em decimal %d \n , car); printf( e em hexadecimal %x \n , car); printf( Nro. de bytes que ocupa na memoria=%d \n, sizeof(car)); }/*Fim main*/ Como percebe-se foi usado um caracter especial \ n que significa um <ENTER> aps a impresso. Existem outros como: \a \b \\ \n \t \ \f apito retrocede uma posio o caractere \ nova linha e outros coloca um TAB o caractere aspas () salta pgina de formulrio

1.6.2. scanf( ): Tem a finalidade de ler um conjunto de caracteres contidos no buffer do


teclado. Para a leitura dos valores deve-se formatar cada valor de entrada. A sintaxe similar sintaxe da funo printf( ). scanf( expresso de controle, lista de argumentos) Exemplo:

11

Apostila de Linguagem C Introduo

#include <stdio.h> main( ) { char nome[25]; int idade; printf(\n Entre com seu Nome:); fflush(stdin); scanf(%s,nome); printf(Entre com sua idade:); fflush(stdin); scanf(%d,&idade); printf(\n Ol %s, voce tem %d anos!, nome, idade); } /*Fim main*/ Observaes: 1) O smbolo & utilizado para expressar o endereo de memria da varivel que vai armazenar o valor entrado. Quando o valor entrado uma string (vetor de caracteres) no necessrio colocar o &, pois a linguagem C j trata uma string pelo endereo de seu primeiro caractere; 2) Como a leitura feita no buffer do teclado necessrio limp-lo antes de efetuar uma entrada, para isto utiliza-se a funo: fflush (stdin); /* stdin a entrada padro que no caso o teclado */

3) A funo scanf( ) no consegue fazer a leitura de uma string que contenha espao em branco entre as palavras. Por exemplo, considere a execuo do programa anterior como a seguir: Entre com seu nome: Janaina Macdonald Entre com sua idade: 25 Ola Janaina, voce tem 25 anos! Verifique que o sobrenome (Macdonald) foi ignorado pela funo scanf( ). Portanto, ela no recomendada para entrada de cadeia de caracteres.

1.6.3. puts( ): Tem a finalidade de enviar uma string para a sada padro. Aps
imprimir a string, puts( ) j posiciona o cursor na prxima linha. Exemplo: # include <stdio.h> void main ( ) { char nome[7]=Antonio; puts(Esta uma string ! ); puts(nome); }/*Fim main*/
12

Apostila de Linguagem C Introduo

1.6.4. gets( ): Faz a leitura de uma string.


Exemplo: # include <stdio.h> void main ( ) { char nome [30]; puts (\n Digite o seu nome: ); fflush(stdin); gets (nome); printf (\n Oi ... %s !, nome); } /*Fim main*/

1.6.5. putchar( ): Tem a finalidade de imprimir um caractere na sada padro na

posio do cursor. Aps a impresso o cursor permanece na posio seguinte ao caracter impresso. Exemplo: # include <stdio.h> void main ( ) { char ch=A; putchar(ch); putchar (65); /*Ser mostrado na tela o caracter cujo cdigo ASCII 65*/ putchar (B); }/*Fim main*/

1.6.6. getchar( ): L da entrada padro um caractere.


Exemplo:

13

Apostila de Linguagem C Introduo

# include <stdio.h> void main ( ) { unsigned int car; printf ( \n Digite um caractere :); fflush(stdin); car = getchar( ); printf ( \n O caractere digitado = %c \ n , car); } /*Fim main */

1.6.7. getche( ): L um caractere da entrada padro, ecoando-o na tela. A diferena

desta funo para a funo getchar( ), que com getche( ) no necessrio digitar <ENTER> aps digitar o caractere. Exemplo: #include <stdio.h> main( ) { char ch; printf(\n Digite algum caractere: ); fflush(stdin); ch=getche( ); printf(\n A tecla digitada foi %c., ch); } /*Fim main*/

1.6.8. getch( ): L um caractere da entrada padro, porm no ecoa o caracter na tela.


Esta funo recomendada quando deve-se esconder as teclas digitadas (no caso de senhas) ou deve-se tratar a tecla antes de ecoar na tela (no caso de editores de texto, por exemplo).

OBS. Existem muitas outras funes de entrada e sada de dados, pertencentes a diversas bibliotecas. Para us-las basta consultar o Help do Turbo C da Borland quanto aos formatos e estruturas.

1.7. EXERCCIOS
1.) Elabore um programa que leia 2 valores int ( x e y) e calcule o resto da diviso de x por y. 2.) Elabore um programa que leia 2 valores int (x e y) e calcule a mdia entre eles. 3.) Considere o programa abaixo. Antes de test-lo, diga qual a sada de dados. Teste-o e compare com sua resposta.

14

Apostila de Linguagem C Introduo

#include <stdio.h> main( ) { int n=5; char ch=A; printf(\n %d, %d, %d, %d, n, n++, n+1, ++n); printf(\n %c, %c, %c, ch, ch++, ++ch); } /*Fim main*/ 4.) Faa um programa para solicitar a entrada de uma idade em anos e imprima a idade em dias, em horas, em minutos e em segundos.

15

Вам также может понравиться