Академический Документы
Профессиональный Документы
Культура Документы
com/group/aprendaC
2007
Sumrio
Captulo 1 ............................................................................................................................................... 3 Tipos de dados bsicos: ...................................................................................................................... 3 Identificadores: .................................................................................................................................. 3 Tipos de variveis: .............................................................................................................................. 4 Int (Inteiros) ................................................................................................................................... 4
1
char (Caracteres) ............................................................................................................................ 4 float (Reais).................................................................................................................................... 4 double (Reais com dupla preciso) ................................................................................................. 4 Void (vazio) .................................................................................................................................... 4 Variveis: ........................................................................................................................................... 5 FUNO main() ................................................................................................................................. 5 DIRETIVA include: ............................................................................................................................... 5 FUNO printf() ................................................................................................................................. 6 Primeiro programa em C: ................................................................................................................... 7 Operadores Aritmticos: .................................................................................................................... 9 Operadores Relacionais: ..................................................................................................................... 9 Operadores Lgicos: ........................................................................................................................... 9 FUNO scanf()................................................................................................................................ 10 FUNES getch() e getche() ............................................................................................................. 12 Estruturas Condicionais .................................................................................................................... 13 IF - ELSE: ...................................................................................................................................... 13 IF - ELSE aninhados....................................................................................................................... 15 SWITCH ()..................................................................................................................................... 16 Operador ternrio (?) ................................................................................................................... 18 Comentrios:.................................................................................................................................... 19 Praticando Conhecimento ................................................................................................................ 20 Soluo: ....................................................................................................................................... 20
http://groups.google.com/group/aprendaC
Captulo 2 ............................................................................................................................................. 23 Operadores Compostos .................................................................................................................... 23 Operadores de incremento e decremento ........................................................................................ 23 Estruturas de Repetio ................................................................................................................... 24 For: .............................................................................................................................................. 24 While: .......................................................................................................................................... 26 Do-While:..................................................................................................................................... 28 Praticando Conhecimento ................................................................................................................ 30 Soluo: ....................................................................................................................................... 30 Bibliografia: .......................................................................................................................................... 32
2007
Linguagem de programao C
Captulo 1
A linguagem C portvel e no efetua nenhuma verificao em tempo de execuo, uma linguagem case sensitive, ou seja, diferencia maisculas de minsculas, estruturada e utiliza o conceito de blocos de programao, mas essa teoria toda ser aprendida na prtica. Existem algumas palavras reservadas da linguagem, so elas: Auto switch extern continue volatile* long Double case return for do int enum * const * signed * if struct register float void * static break typedef short default while else char unsigned goto sizeof
1.7E-308 a 1.7E308
dez dgitos de preciso
sem valor
A definio do tipo de dados permite que o computador aloque e mantenha livre um espao exato de memria que vai ser utilizado pelo programa.
Identificadores:
So as expresses definidas pelo usurio como nomes de variveis e funes. Existem regras para declarao de variveis, apenas letras, nmeros e underscore (_) so permitidos com exceo apenas para o cifro ($) que representa variveis de ambiente, mas deixem essa declarao para o C avanado. Devem comear sempre por letra, ou underscore (_), como foi dito antes a linguagem case sensitive, ou seja, maisculas e minsculas so diferentes e no pode ser igual a uma palavra reservada da linguagem. Exemplos corretos: nome, casa, teste1,x, nome_completo Exemplos incorretos: 1teste,&numero,123,aniversrio, numero!
http://groups.google.com/group/aprendaC
Tipos de variveis:
A linguagem C tem um sistema de tipos semelhante ao de alguns descendentes da linguagem Algol, tais como Pascal. Possui tipos para nmeros inteiros de vrios tamanhos com e sem sinal, nmeros de ponto flutuante, caracteres e estruturas (structs), mas isso ser explicado futuramente. Int (Inteiros) O tipo de dados int (inteiro) serve para armazenar valores numricos inteiros. Existem vrios tipo de inteiros, cada um de um tamanho diferente (dependendo do SO): int, pode possuir 16, ou 32 bits, dependendo se o processador de 16 ou 32 bits. short int, possui tamanho de 16 bits long int, possui tamanho de 32 bits long long int (s em compiladores C99), possui tamanho de 64 bits Um int pode ser por padro um long int ou um short int dependendo da plataforma onde est a correr. Todos estes tipos de inteiros podem ainda ser declarados precedidos da clusula unsigned, o que faz com que s suporte nmeros positivos. Isto faz com que, com o mesmo tamanho, uma varivel suporte mais nmeros positivos do que um signed (todos os inteiros so signed por omisso). char (Caracteres) O tipo char ocupa 1 byte, e serve para armazenar caracteres. Isso significa que o programa reserva um espao de 8 bits na memria RAM do computador para armazenar um valor. Com o tipo char tambm possvel armazenar strings, que so cadeias de caracteres. float (Reais) O tipo de dados float serve para armazenar nmeros de ponto flutuante, ou seja, com casas decimais. double (Reais com dupla preciso) O tipo de dados double serve para armazenar nmeros de ponto flutuante de dupla preciso, tem o dobro do tamanho do float e portanto o dobro da capacidade. Void (vazio) Este tipo serve para indicar que um resultado no tem um tipo definido. Uma das aplicaes deste tipo em C criar um tipo vazio que pode posteriormente ser modificado para um dos tipos anteriores. Vejam na seqncia as regras para declarar variveis, como na imagem ao lado.
2007
Variveis:
Posio nomeada de memria usada para guardar um valor que pode ser modificado pelo programa, todas variveis em C devem ser declaradas antes de serem usadas Forma geral da definio de varivel <tipo de dado> <identificador>; onde <tipo de dado> qualquer tipo vlido mais qualquer modificador <identificador> um ou mais nomes de identificadores separados por , Exemplos: char letra; int x,y,z,numero;
FUNO main()
A funo main obrigatria em um programa na linguagem C, e marca o ponto de incio da execuo do programa, se um programa consistir em apenas uma funo esta ser main(). Todas as instrues devem estar dentro das chaves que iniciam e terminam a funo (bloco de instruo) e so executadas na ordem seqencial de escrita no programa.
DIRETIVA include:
Provoca a incluso de um programa fonte em outro, instruindo ao compilador a ler e agregar o arquivo no programa que tiver a diretiva include. #include <arq> arquivo no diretrio padro ou
Ex: main{ 1) A linguagem C baseada em blocos, como j foi explicado.
#include arq arquivo no diretrio atual arq - est representando o nome do arquivo a ser includo O smbolo de sustenido #, antes da diretiva include, um sinal para o pr-processador, que tm a funo de examinar o programa fonte em C e executar certas modificaes, baseadas nas instrues das diretivas O include importa as bibliotecas. A biblioteca padro da linguagem C stdio.h. Ex: #include stdio.h
} As chaves representam o incio({) e o final(}) do bloco de programao. 2) Em C o compilador vai interpretando a linha at encontrar (;) ponto e virgula, ele indica o final da instruo. Ex: char nome;
http://groups.google.com/group/aprendaC
FUNO printf()
Uma das funes de sada que pode ser usada em C, a <expresso controle> pode conter caracteres que sero exibidos na tela e cdigos de formatao dos argumentos, a <lista de argumentos> formada pelos argumentos que sero usados pela funo, faz parte da biblioteca padro da linguagem C (stdio.h) e pode receber um nmero varivel de argumentos (separados por ,) printf(<expresso controle>,<lista de argumentos>); Exemplo: printf(Escrevendo um programa);
printf(Esta a letra %c, C); printf(Escreva o valor %d \n %s,2, por extenso); Alguns caracteres no podem ser obtidos diretamente do teclado (como mudana de linha) por isso tem a sua representao feita por cdigos especiais usando a \ com a combinao de outro caractere. Cdigo Significado \n \r \t \b \ \\ \f \0 \x nova linha retorno do cursor tab retrocesso aspas barra salta pgina de formulrio nulo caractere grfico (este smbolo escreve cdigos acima de 127 decimal) \xdd onde dd hexad. %% Cdigo Formato %c %d %e %f %g %o %s %u %x %ld %lf caractere simples (char) decimal (int) notao cientfica ponto flutuante (float) %e ou %f (o mais curto) octal cadeia de caracteres (string) decimal sem sinal hexadecimal decimal longo (long int) ponto flutuante longo (Double)
Em linguagem C podemos utilizar recursos do sistema operacional, um exemplo disso pausar a execuo do programa (system ()) atravs do comando PAUSE, exemplo: System (PAUSE);
2007
Primeiro programa em C:
Agora j temos base para o nosso primeiro programa em C. Estarei utilizando o compilador Dev C/C++ nestas aulas, ele open source e pode-se fazer o download no seguinte endereo http://www.bloodshed.net/devcpp.html Vamos parar de conversa e ir logo aos exemplos: 1) --------------------------------------------------------------------------------------------------------------------------
Para compilar e executar um programa em C utilizando o Dev C/C++ basta apertar a tecla F9 e salvar o arquivo como (*.c).
http://groups.google.com/group/aprendaC
Atribuio de variveis:
Em C valores podem ser atribudos arbitrariamente, sendo necessrio apenas que o valor que esteja sendo atribudo seja do mesmo tipo da varivel declarada. Utilizamos o sinal de =, igual, para atribuir valores. Ex: numero = 10; Podemos tambm atribuir valores na prpria declarao da varivel. Ex: int numero = 10;
2) --------------------------------------------------------------------------------------------------------------------------
3) --------------------------------------------------------------------------------------------------------------------------
Notem que o exemplo 3 est igual ao exemplo 2 diferenciando apenas o modo da atribuio, como foi visto no quadro cima.
Visite o grupo e participe!
2007
Operadores Aritmticos:
Os operadores em linguagem de programao so usados como na matemtica, vejamos alguns deles. + (Adio) - (Subtrao) * (Multiplicao) / (Diviso Real)
Soma nmeros. Ex: numero = 15 + 5; Desta forma, numero estar recebendo o resultado do calculo 15 + 5, no caso 20. Subtrai nmeros. Ex: numero = 15 - 5; Desta forma, numero estar recebendo o resultado do calculo 15 - 5, no caso 10. Multiplica nmeros. Ex: numero = 15 * 10; Desta forma, numero estar recebendo o resultado do calculo 15 * 10, no caso 150. Divide nmeros. Ex: numero = 15 / 3; Desta forma, numero estar recebendo o resultado do calculo 15 / 3, no caso 5. No caso de dois nmeros inteiros, a operao de diviso arredondar o resultado, por isso se voc deseja um valor preciso utilize pelo menos 1 nmero float ou Double. Recebe o resto da diviso. Ex: numero = 20 % 2; Desta forma, numero estar recebendo o resto do resultado do calculo 20%2 , no caso 0 pois 20 divisvel por 2 e possui resto 0.
% (Resto)
Operadores Relacionais:
== (Igualdade)
Compara dois valores e retorna 1 (verdadeiro) se forem iguais ou 0 (se forem verdadeiros), lembrando que == diferente de =, este atribui valores as variveis enquanto == compara dois valores verificando se so iguais. Verifica se um valor maior do que outro. Verifica se maior ou igual. Verifica se um valor menor do que outro. Verifica se menor ou igual. Compara dois valores e retorna 1 (verdadeiro) se forem diferentes ou 0 (se forem iguais).
> (Maior que) >= (Maior ou igual) < (Menor que) <= (Menor ou igual) != (Diferente)
Operadores Lgicos:
Os operadores lgicos servem para interligar mais de uma operao relacional. E assim como os relacionais retornam zero para falso e um para verdadeiro. && (E lgico) || (OU lgico)
Retorna verdadeiro se ambos os operandos so verdadeiros e falso nos demais casos. Exemplo: if( val1<2 && val2<6). Retorna verdadeiro se um ou ambos os operandos so verdadeiros e falso se ambos so falsos. Exemplo: if( val1>3 || val2<4). Usada com apenas um operando. Retorna verdadeiro se este falso e vice-versa. Exemplo: if( !var ).
! (NO lgico)
http://groups.google.com/group/aprendaC
FUNO scanf()
Funo de entrada/sada que pode ser usada em C, permite ler dados formatados da entrada padro (teclado). Sua <expresso controle> deve conter os cdigos compatveis com a formatao dos argumentos, a <lista de argumentos> nesta funo deve conter os endereos das variveis (usando o operador de endereo & em C). O smbolo %* indica que ser lido um valor do tipo especificado, mas no ser atribudo a nenhuma varivel (no devendo ter parmetros na lista de argumentos) Faz parte da biblioteca padro da linguagem C (stdio.h) e pode receber um nmero varivel de argumentos (separados por ,)
10
Um endereo o nome que o computador usa para identificar varivel, pois toda varivel ocupa uma localizao na memria e seu endereo o do primeiro byte ocupado por esta varivel.
Cdigo %c %d %e %f %o %s %u %x %l %lf
Formatao da Funo leia um nico caractere leia um inteiro decimal leia um nmero em notao cientfica leia um nmero em ponto flutuante leia um inteiro octal leia uma srie de caracteres leia um decimal sem sinal leia um nmero hexadecimal leia um inteiro longo leia um double
Note que no campo voc informar apenas o tipo do dado que voc quer ler, seguindo os padres apresentados ao lado, depois disso separamos com uma vrgula (,) e informamos o endereo da varivel na qual receberemos o dado, no caso, idade. O operador (&) retorna o endereo da varivel.
2007
11
Figura 7 Cdigo.
Figura 8 Execuo.
System (cls); Esta funo efetua a limpeza de toda a tela (ou janela). Esta limpeza consiste em apagar todos os smbolos (ou caracteres) que estavam sendo apresentados em instrues anteriores. Com a limpeza de toda a tela o cursor fica posicionado na primeira posio dela, ou seja, no canto superior esquerdo. Existe a funo clrscr(); mas ela pertence a biblioteca conio.h, estudaremos sobre esta biblioteca mais a frente.
Notem que o comando system (cls); foi inserido depois da leitura do dado, apenas para apresentar o resultado, confiram a execuo do programa.
http://groups.google.com/group/aprendaC Execuo: Em um primeiro momento, esperando que o usurio pressione ENTER para confirmar a idade informada, no caso 19:
12
Execuo:
2007
Estruturas Condicionais
Com as estruturas condicionais podemos estabelecer condies para que comandos sejam executados ou no.
IF - ELSE:
Pode-se utilizar uma ou mais instrues verdadeiras e falsas no if. Caso seja mais de uma deve-se colocar entre chaves. Se a condio verdadeira sero executadas apenas as instrues localizadas aps a instruo if. Caso contrario somente as instrues aps o else sero executadas. O else opcional conforme mostra o exemplo abaixo que efetua a soma de dois nmeros e avisa ao usurio quando o resultado obtido for um nmero par.
13
Figura 9 Cdigo.
14
Explicando a expresso: soma % 2 == 0 Como foi visto o operador (%) mod, ou resto, retorna o resto da diviso inteira, portanto se queremos descobrir se um nmero par ou mpar devemos apenas dividi-lo por 2, se o resto da diviso for zero (0) por que o nmero par seno mpar. Se o resultado for zero (0) significa que a expresso verdadeira entrando assim no bloco de comando do if, caso a expresso seja falsa entrar no bloco de comando do else.
2007
IF - ELSE aninhados
A linguagem C padro tambm permite o uso de ifs alinhados, obedecendo forma: If(condio) Instruo; Else If(condio) Instruo; Else If(condio) Instruo; . . . Else Instruo; Exemplo:
15
Figura 13 - Cdigo
Figura 14 Execuo
http://groups.google.com/group/aprendaC
SWITCH ()
O switch realiza uma funo semelhante ao if-else aninhado, ele possui uma srie de condies para varivel em teste. O comando switch prprio para se testar uma varivel em relao a diversos valores pr-estabelecidos. Quando falamos de switch devemos explicar tambm o comando break, muitos programadores iniciantes acreditam que o break utilizado apenas no switch, e isso no verdade. O comando break realiza uma quebra de ciclo, ou seja, ele interrompe a execuo de determinada rotina no momento em que executado, no caso do switch ns possumos diversos comandos (cases) agrupados necessitando de uma quebra entre eles, para que quando um comando (case) for executado ele no execute os demais quando terminar, vejamos a sintaxe do switch. Switch (condio){ case (): Break; Case(): Break; . . . } Exemplos: 1)
16
Figura 15 - Cdigo
2007
17
Figura 17 - Execuo, escolhendo opo +
Notem que os cases podem ser testados com qualquer tipo, no caso do exemplo, utilizei char para realizar meus testes. Podemos inserir no switch um case programado para receber apenas as opes que no se adequarem aos cases propostos, se chama default. Este opcional. 2) Neste exemplo estou utilizando um inteiro (int) para receber o valor a ser testado pelo meu switch. Percebam tambm que depois de colocar todas as possibilidades do meu switch eu adicionei o default que ira receber todas as opes que no se adequarem aos cases anteriores, no caso 1,2,3,4. switch muito usado na criao de menus. O
http://groups.google.com/group/aprendaC Execuo:
18
Executando o programa vrias vezes utilizando opes diferentes, notem que no ltimo exemplo a opo escolhida 9 no est definida em um case, por isso o default chamado exibindo a frase opo invlida.
Vejam a diferena entre o condicional if-else e o operador ternrio, valor receber 5 se nmero for menor que 50 ou 3 se for maior.
2007
Comentrios:
Como na maioria das linguagens, C permite a insero de comentrios no cdigo do programa, isso facilita o entendimento. Nesta linguagem podemos comentar de duas formas nosso cdigo: 1) Comentrio de linha (//) 2) Comentrio em bloco (/**/) Para comentarmos em linha basta digitar os caracteres // que a linha em que voc esta ser convertida em comentrio. J em bloco utilize os caracteres /* para abrir o bloco e */ para fechar. Vejamos alguns exemplos:
19
Notem que neste exemplo utilizei os dois tipos de comentrio, em linha e em bloco, eles no afetam a execuo do seu programa por isso so fortemente recomendados a todos os programadores, lembrem-se programa bem comentado um programa de fcil compreenso. Em qualquer compilador o usurio pode definir as cores do seu cdigo, por isso no se assuste se o seu comentrio estiver com outra cor, neste caso eu que troquei a cor para rosa, visando facilitar a visualizao pois a cor default, padro, do meu compilador era pouco visvel.
http://groups.google.com/group/aprendaC
Praticando Conhecimento
Exerccio final do captulo, usaremos grande parte do conhecimento aprendido neste captulo, ento vamos ao exerccio: Desenvolva uma calculadora simples que permita soma, subtrao, multiplicao e diviso de dois nmeros reais (float). Faa de forma a no ocorrer diviso por zero, e verifique se operador informado existe na sua calculadora.
Soluo:
Primeira parte da soluo: Declarando variveis e lendo valores.
20
2007
21
22
2007
Captulo 2
A linguagem C foi criada na dcada de 1970 por Dennis Ritchie e Ken Thompson para ser usada no sistema operacional UNIX. Desde ento espalhou-se por muitos outros sistemas operativos, e tornou-se uma das linguagens de programao mais usadas. A linguagem tem como ponto-forte a sua eficincia tem preferncia para o desenvolvimento de software de sistemas, apesar de tambm ser usada para desenvolver aplicaes. muito usada no ensino de cincias da computao, mesmo no tendo sido projetada para estudantes e apresentando algumas dificuldades no seu uso.
23
Operadores Compostos
Os operadores compostos so usados para simplificar expresses. A = A + B; A = A B; A += B; A -= B; Operador composto da adio Operador composto da subtrao
A operao composta pode ser aplicada com a maioria dos operadores, o sinal do operador antes da igualdade idntica a composio, ele garante que a varivel que est recebendo aquele calculo ainda seja operada no final da conta seja somando, dividindo, subtraindo etc. X = X*(A+B); X = X/Y; X *= (A+B); X /= Y; Operando com a multiplicao Operando com a diviso
Notem que quando fizemos x++ o valor de x foi aumentado em um (1), e quando realizamos x- seu valor decresceu em 1 unidade, vejamos outro exemplo.
http://groups.google.com/group/aprendaC
24
Notem que o IF (x++ > 0) no apresentou seu resultado pois o x foi incrementado apenas depois de verificado.
Estruturas de Repetio
A linguagem C possuir trs estruturas de repetio que so o for, while e do-while. Cada uma dessas estruturas possui caractersticas diferentes, vejamos essas estruturas:
For:
Obedece seguinte sintaxe for (<inicializao>; <condio>; <incremento>) <instruo>; O loop for utilizado quando sabemos exatamente a quantidade de vezes que o ciclo ser executado, por exemplo, quando queremos somar dez (10) nmeros, a quantidade conhecida, no caso 10. Vejamos o funcionamento do for. <inicializao> Este parmetro indica como devemos comear, o nosso ponto de partida. Ele recebe uma varivel e a inicializa. Como exemplo, utilizaremos x = 1. <condio> Como o prprio nome diz, este parmetro indica a nossa condio de parada, o momento em que nosso loop ser finalizado. Seguindo o nosso exemplo, teremos x <= 10. <incremento> Aqui ns vamos mover o nosso loop, a varivel utilizada para contagem ser acrescida neste parmetro utilizando a lgica de incremento explicada anteriormente, no caso x++. Com isso teremos: for (x = 1; x <= 10; x++) <instruo>; Como em qualquer estrutura em C o for pode ser colocado em bloco, permitindo assim a execuo de mais de uma instruo, ficando da seguinte forma:
2007
for (x = 1; x <= 10; x++){ <instruo>; } Vejamos nosso exemplo: Criar um programa que some de 1 a 10.
25
Execuo:
Neste exemplo utilizei algumas estruturas aprendidas anteriormente, vamos revisar: resposta = 0; Neste comando eu declarei a varivel resposta e a inicializei com zero (0), pois se esta varivel ir armazenar a soma dos nmeros ela deve comear com zero. resposta += x; Aqui eu utilizei o operador composto += para somar resposta com x, reduzindo a expresso resposta = resposta + x; int main (void){ A funo main est diferente da utilizada anteriormente, por que? Como j foi explicado no primeiro captulo, a linguagem possui alguns tipos de dados e isto inclui as funes, toda funo possui um tipo de dado de retorno e um tipo de entrada, neste caso a funo main do tipo inteiro, int, e no est recebendo nada como parmetro, por isso, ela recebe void, que vazio, como entrada. Mas no se preocupem isso ser explicado mais para frente, estou apenas apresentando para vocs o molde de uma funo, para quando estudarmos funes vocs j tenham se acostumado com a sintaxe. Algumas perguntas muito comuns sobre o uso do loop for: Eu posso inicializar o meu x com qualquer valor? R: Sim, o x pode receber qualquer valor. Posso utilizar outra varivel no for ou apenas x? R: Pode-se utilizar qualquer varivel INTEIRA no for, desde que voc a declare antes. Na condio do loop eu posso utilizar outro operador condicional? R: Sim, a condio montada pelo programador, podendo ser >,>=,<,<= etc. O meu for pode ser executado subtraindo? R: Sim, a sua sintaxe pode ser: for (x=10; x>=1; x--) <instruo>
Produzido por: Tlio Ornelas (ocultokx@gmail.com)
http://groups.google.com/group/aprendaC
Observaes importantes:
A inicializao executada uma nica vez antes do loop ser iniciado. A seqncia de comandos ser repetida enquanto a condio for verdadeira. Quando ela for falsa os comandos aps o loop so executados. O incremento define como ser alterada a varivel de controle do lao, cada vez que ele for repetido, sendo executado logo aps o fim do corpo do loop.
Professor Vandor Rissoli, Universidade Catlica de Braslia. Com alteraes.
26
While:
Obedece seguinte sintaxe while ( <condio> ) <instruo>; Esta estrutura utilizada quando queremos que a nossa condio seja verificada antes da execuo do loop. Vejamos o funcionamento do while: <condio> Como no for, aqui temos a nossa condio de parada. Vejam que no while a inicializao e incrementao fica por conta do programador, deste modo o loop ser executado eternamente at que a condio de parada ocorra ou o encerramento do loop seja forado por algum comando, veremos isso a seguir. Se tivssemos que somar 10 nmeros, a while ficaria desta forma: while (x <= 10) <instruo>; O while pode ser escrito na forma de bloco: While (x <= 10){ <instrues>; } Vejamos a soma de 10 nmeros como ficaria utilizando o while:
Execuo:
Visite o grupo e participe!
2007
Vejamos as diferenas do cdigo utilizando o while: Notem que a varivel de controle do loop, x, teve que ser inicializada x = 1. A nossa condio manteve-se igual, x <= 10. E tivemos que adicionar o nosso prprio operador de incremento, x++; No loop while as instrues so executadas enquanto a condio for verdadeira, ou seja diferente de zero (0), a condio verificada no incio de cada ciclo de repetio, ou seja, ela verifica se a condio estiver verdadeira o loop executado, assim que as instrues forem executadas volta-se para o incio do loop e verifica novamente se a condio de parada est verdadeira, se estiver o loop continua. Existem outras formas de terminar o loop while, se utilizarmos o comando break, estudado no captulo sobre switch(), poderemos encerrar o loop e continuar com o programa. Esta tcnica no recomendada, mas vejamos um exemplo:
27
Execuo:
Notem que o loop foi encerrado quando x era igual a 4, realizando apenas a conta: 1 + 2 + 3 + 4 = 10 O comando break encerrou o loop while antes que sua condio fosse falsa.
http://groups.google.com/group/aprendaC Algumas perguntas sobre o while: Se eu colocar no parmetro de condio o nmero 1 o que acontece? R: Em C o nmero 1 representa verdadeiro, portanto o seu loop while ser infinito, parando apenas com um comando break. Posso utilizar um operador de decremento no while? R: Sim, pode at mesmo utilizar um operador composto, se assim desejar.
Se eu utilizar o 1 na condio e no parar com o break o que acontece? R: O seu while simplesmente no vai parar, seu programa ficar preso no while.
28
Do-While:
Segue a seguinte sintaxe: do{ <instrues>; }while ( <condio> ); Esta estrutura utilizada quando queremos que a nossa condio seja verificada depois da execuo do cdigo. Vejamos o funcionamento do do-while: No do-while assim como no while a inicializao e incrementao ficam por conta do programador, o loop ser chamado at que a condio seja falsa, de modo que no do-while as instrues so executadas pelo menos uma vez. O do-while pode ser utilizado sem as chaves de bloco, porm estas favorecem a legibilidade do cdigo e so altamente recomendadas. Vejamos um exemplo de do-while: Construa um programa que apresente um menu de opes e saia apenas quando o usurio utilizar a opo de sair do menu. O programa deve obedecer ao seguinte layout:
2007
29
Execues:
http://groups.google.com/group/aprendaC
Praticando Conhecimento
Um fazendeiro deseja descobrir qual a vaca com o maior peso e a com o menor peso de sua criao, faa um programa que leia 200 nmeros de identificao e 200 pesos e ao final da execuo apresente o maior e o menor peso, juntamente com suas respectivas matrculas.
30
Soluo:
2007
Execues:
31
Explicando:
Nesta linha eu atribui as variveis que receberiam o maior e o menor peso. Mas porque esses valores -999999 e 99999? A resposta simples, neste exerccio utilizamos um mtodo chamado estouro de varivel, o que seria isso? Este mtodo consiste em atribuir valores mximos e contrrios as variveis, neste caso, peso_maior deveria armazenar o maior peso por isso recebeu o menor valor possvel na sua inicializao, de forma que o primeiro peso informado seria automaticamente o maior peso. O mesmo aconteceu com o menor peso, com isso o primeiro peso seria o maior e o menor, e conforme os demais pesos fossem sendo informados o maior e o menor seriam alterados pela nossa condio, vejamos a condio utilizada: A condio criada foi a seguinte, se o peso que informamos na varivel peso for maior que o maior_peso, no caso da primeira execuo -999999, a varivel mair_peso recebe o peso informado e a matricula do maior peso recebe a matrcula informada, o mesmo ocorre com o menor_peso, conforme formos informando os pesos os valores em maior e menor peso sero alterados. Alguns de vocs devem estar se perguntando o porqu de -999999 j que no existe peso negativo. O valor negativo poderia ser substitudo sem prejuzo por 0 (zero), porm preferi utilizar o valor -999999 pra mostrar que este mtodo tambm funciona com valores negativos. O nmero de vacas propostas, 200, apenas para dificultar o processo, pode-se usar um nmero menor para testar o programa, como o que eu fiz, utilizei apenas 6 vacas.
http://groups.google.com/group/aprendaC
Captulo 3
A seqncia em que esta apostila foi preparada capacita o estudante a desenvolver pequenos problemas utilizando a linguagem estudada, cumprindo com a proposta da apostila, que ensina a linguagem de maneira prtica e descomplicada, porm algumas estruturas necessitam de maiores detalhes, e neste captulo estudaremos estes tipos de estruturas.
String
Uma string um conjunto de caracteres agrupados, uma palavra. No captulo 1 estudamos o tipo de dado char, que armazena um caractere, as strings so um conjunto de caracteres, logo um conjunto de chars. Podemos dizer que as strings so um tipo de dado homogneo, pois todos os dados pertencentes a esse conjunto so do mesmo tipo, char. So sempre terminadas pelo caractere nulo (\o), por isso so acrescidas de 1 em seu tamanho real, o compilador ir ler o conjunto de caracteres at encontrar o elemento nulo, est a nica maneira de identificar a string. Cada char ocupa um byte na memria, como foi visto antes, por isso, cada caractere da string ocupa 1 byte, no caso da palavra casa teramos 4 bytes. Sintaxe de declarao da string: char <nome da varivel> [Tamanho] ; Vamos declarar uma varivel string que ir armazenar um nome: char nome[50]; Esta varivel possui um espao em memria para armazenar 49 caracteres. O nmero dentro dos colchetes chamado de ndice da string, no caso da varivel nome temos do ndice 0 ao 48 para armazenarmos as letras do nome e o ndice 49 para armazenar o caractere nulo (\0). O caractere nulo no adicionado pelo compilador, ou seja, o programador deve programar a sua insero ou utilizar funes que j faam a insero do \0.
32
2007
Notem que no utilizamos o operador de endereo & para recebermos o endereo da string, utilizamos apenas seu nome como foi explicado agora a pouco. Vejamos um exemplo completo da utilizao do scanf na leitura de strings:
33
Execuo:
Queremos que o usurio informe seu nome completo, vejamos a execuo do programa:
http://groups.google.com/group/aprendaC Notem que na apresentao do nome no foi impresso nome completo, por qu? A funo scanf no mais apropriada para a leitura de strings, pois ela atribui (\0) aos espaos em branco da string, finalizando-a no primeiro espao. No exemplo dado Tulio nome completo ficaria Tulio\0nome\0completo e a string seria finalizada no primeiro (\0) encontrado pelo compilador.
Funo gets()
A funo gets() seria get string que significa receber string. Esta uma funo mais apropriada a leitura de strings, sua sintaxe seria:
34
gets ( <primeiro endereo da string, seu nome> ); Vejamos o exemplo anterior utilizando a funo gets():
Execuo:
Notem que o nome foi apresentado corretamente, porm como em todas as funes de leitura de string na linguagem C, a funo gets() tambm possui alguns problemas ela no verifica o tamanho da string, o que seria isso, se o usurio digitasse 200 caracteres na nossa varivel nome[50] de 48 caracteres ele causaria uma invaso de memria, podendo invadir a memria do prprio sistema operacional. Voc deve estar se perguntando, como resolver esse problema? Sua pergunta ser respondida em breve.
2007
Funo puts()
puts = put string = colocar string. A funo puts tem a funo de apresentar uma string, nada que um printf no resolva, porm fica a cargo do programador decidir o que ir usar. O puts imprime apenas uma string por vez e sempre salta um linha no final, vejamos um exemplo:
35
Execuo:
Como a funo puts() apresenta um string inteira de uma vez podemos utilizar o seguinte recurso:
http://groups.google.com/group/aprendaC
Concatena, cola, a string 2 no final da string 1 e retorna a string 1. Compara as duas strings, retorna zero (0) se ambas forem iguais. Retorna a diferena em ASCII entre os dois primeiros caracteres diferentes. Copia o contedo da string2 para string1, isso apaga a string 1. Encontra a primeira ocorrncia da string2 na string1, retorna nulo se no encontrar. Converte a string para um nmero inteiro. Caso a string contenha letras ela retorna zero (0). Funciona da mesma forma que o atoi() para nmeros reais (float). Converte a string para caracteres maisculos. Converte a string para caracteres minsculos. Compara duas strings ignorando letras maisculas e minsculas. Retorna zero (0) se forem iguais.
36
atoi ( <string> );
2007
Bibliografia:
SCHILDT, H., C Completo e Total, Editora Makron Books do Brasil Editora Ltda, 1996. EVARISTO, J., Aprendendo a programar programando em linguagem C, Book Express, 2001. MIZRAHI, V. V., Treinamento em Linguagem C, Curso Completo, Mdulos 1 e 2, Makron Books do Brasil Editora Ltda,1990. DEITEL, H. M. e Deitel, P. J., C++ Como Programar, 2001.
37
pt.wikipedia.org/wiki/Linguagem_de_programao_C Universidade Catlica de Braslia - site http://www.ucb.br/programar (opo Linguagens)