Algoritmo e Lógica de Programação II

199
ALGORITMOS E LÓGICA DE PROGRAMAÇÃO II GRADUAÇÃO ANÁLISE E DESENVOLVIMENTO DE SISTEMAS SISTEMAS PARA INTERNET MARINGÁ-PR 2012 Professora Me. Gislaine Camila Lapasini Leal ISBN 978-85-8084-284-5

description

Apostila de Algoritmos e Lógica de Programação II - curso de graduação da UNICESUMAR, Análise e desenvolvimento de Sistemas.

Transcript of Algoritmo e Lógica de Programação II

  • ALGORITMOS E LGICA DE PROGRAMAO II

    GRADuAO

    AnLISE E DESEnvOLvIMEnTO DE SISTEMAS

    SISTEMAS PARA InTERnET

    MARInG-PR2012

    Professora Me. Gislaine Camila Lapasini Leal

    ISBN 978-85-8084-284-5

  • Reitor: Wilson de Matos Silvavice-Reitor: Wilson de Matos Silva FilhoPr-Reitor de Administrao: Wilson de Matos Silva FilhoPresidente da Mantenedora: Cludio Ferdinandi

    nEAD - ncleo de Educao a Distncia

    Diretoria do nEAD: Willian Victor Kendrick de Matos SilvaCoordenao Pedaggica: Gislene Miotto Catolino RaymundoCoordenao de Polos: Diego Figueiredo DiasCoordenao Comercial: Helder MachadoCoordenao de Tecnologia: Fabrcio Ricardo LazilhaCoordenao de Curso: Danilo Xavier SaesSupervisora do ncleo de Produo de Materiais: Nalva Aparecida da Rosa MouraCapa e Editorao: Daniel Fuverki Hey, Fernando Henrique Mendes, Luiz Fernando Rokubuiti e Thayla Daiany Guimares CripaldiSuperviso de Materiais: Ndila de Almeida Toledo Reviso Textual e normas: Cristiane de Oliveira Alves, Janana Bicudo Kikuchi, Jaquelina Kutsunugi e Maria Fernanda Canova Vasconcelos

    CENTRO UNIVERSITRIO DE MARING. Ncleo de Educao a Distncia:C397 Algoritmos e lgica de programao II / Gislaine Camila Lapa sini Leal. Maring - PR, 2012. 199 p.

    Graduao em Anlise e Desenvolvimento de Sistemas e Sistemas para Internet- EaD. 1. Algoritmos. 2. Programao. 3. EaD. I. Ttulo.

    CDD - 22 ed. 005.1 ISBN 978-85-8084-284-5 CIP - NBR 12899 - AACR/2

    Ficha catalogrfica elaborada pela Biblioteca Central - CESUMAR

    Av. Guedner, 1610 - Jd. Aclimao - (44) 3027-6360 - CEP 87050-390 - Maring - Paran - www.cesumar.brNEAD - Ncleo de Educao a Distncia - bl. 4 sl. 1 e 2 - (44) 3027-6363 - [email protected] - www.ead.cesumar.br

  • ALGORITMOS E LGICA DE PROGRAMAO II

    Professora Me. Gislaine Camila Lapasini Leal

  • 5ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    APRESEnTAO DO REITOR

    Viver e trabalhar em uma sociedade global um grande desafio para todos os cidados. A busca por tecnologia, informao, conhecimento de qualidade, novas habilidades para liderana e soluo de problemas com eficincia tornou-se uma questo de sobrevivncia no mundo do trabalho.

    Cada um de ns tem uma grande responsabilidade: as escolhas que fizermos por ns e pelos nossos far grande diferena no futuro.

    Com essa viso, o Cesumar Centro Universitrio de Maring assume o compromisso de democratizar o conhecimento por meio de alta tecnologia e contribuir para o futuro dos brasileiros.

    No cumprimento de sua misso promover a educao de qualidade nas diferentes reas do conhecimento, formando profissionais cidados que contribuam para o desenvolvimento de uma sociedade justa e solidria , o Cesumar busca a integrao do ensino-pesquisa -extenso com as demandas institucionais e sociais; a realizao de uma prtica acadmica que contribua para o desenvolvimento da conscincia social e poltica e, por fim, a democratizao do conhecimento acadmico com a articulao e a integrao com a sociedade.

    Diante disso, o Cesumar almeja ser reconhecido como uma instituio universitria de referncia regional e nacional pela qualidade e compromisso do corpo docente; aquisio de competncias institucionais para o desenvolvimento de linhas de pesquisa; consolidao da extenso universitria; qualidade da oferta dos ensinos presencial e a distncia; bem -estar e satisfao da comunidade interna; qualidade da gesto acadmica e administrativa; compromisso social de incluso; processos de cooperao e parceria com o mundo do trabalho, como tambm pelo compromisso e relacionamento permanente com os egressos, incentivando a educao continuada.

    Professor Wilson de Matos SilvaReitor

  • 6 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Caro(a) aluno(a), ensinar no transferir conhecimento, mas criar as possibilidades para a sua produo ou a sua construo (FREIRE, 1996, p. 25). Tenho a certeza de que no Ncleo de Educao a Distncia do Cesumar, voc ter sua disposio todas as condies para se fazer um competente profissional e, assim, colaborar efetivamente para o desenvolvimento da realidade social em que est inserido.

    Todas as atividades de estudo presentes neste material foram desenvolvidas para atender o seu processo de formao e contemplam as diretrizes curriculares dos cursos de graduao, determinadas pelo Ministrio da Educao (MEC). Desta forma, buscando atender essas necessidades, dispomos de uma equipe de profissionais multidisciplinares para que, independente da distncia geogrfica que voc esteja, possamos interagir e, assim, fazer-se presentes no seu processo de ensino-aprendizagem-conhecimento.

    Neste sentido, por meio de um modelo pedaggico interativo, possibilitamos que, efetivamente, voc construa e amplie a sua rede de conhecimentos. Essa interatividade ser vivenciada especialmente no ambiente virtual de aprendizagem AVA no qual disponibilizamos, alm do material produzido em linguagem dialgica, aulas sobre os contedos abordados, atividades de estudo, enfim, um mundo de linguagens diferenciadas e ricas de possibilidades efetivas para a sua aprendizagem. Assim sendo, todas as atividades de ensino, disponibilizadas para o seu processo de formao, tm por intuito possibilitar o desenvolvimento de novas competncias necessrias para que voc se aproprie do conhecimento de forma colaborativa.

    Portanto, recomendo que durante a realizao de seu curso, voc procure interagir com os textos, fazer anotaes, responder s atividades de autoestudo, participar ativamente dos fruns, ver as indicaes de leitura e realizar novas pesquisas sobre os assuntos tratados, pois tais atividades lhe possibilitaro organizar o seu processo educativo e, assim, superar os desafios na construo de conhecimentos. Para finalizar essa mensagem de boas-vindas, lhe estendo o convite para que caminhe conosco na Comunidade do Conhecimento e vivencie a oportunidade de constituir-se sujeito do seu processo de aprendizagem e membro de uma comunidade mais universal e igualitria.

    Um grande abrao e timos momentos de construo de aprendizagem!

    Professora Gislene Miotto Catolino Raymundo

    Coordenadora Pedaggica do NEAD- CESUMAR

  • 7ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    APRESEnTAO

    Livro: ALGORITMOS E LGICA DE PROGRAMAO IIProfessora Me. Gislaine Camila Lapasini Leal

    Caro(a) aluno(a)! Bem-vindo(a) disciplina de Algoritmos e Lgica de Programao II. Sou a professora Gislaine Camila e nesta disciplina aprenderemos a utilizar a linguagem C na construo de nossos programas. Para tanto, retomaremos alguns conceitos vistos na disciplina de Algoritmos e Lgica de Programao I.

    Nesta disciplina voc aprender os conceitos iniciais da linguagem de programao C. uma linguagem que vem se popularizando por ser uma linguagem de propsito geral e no ser vinculada a um hardware especfico ou qualquer outro sistema.

    Apresento a voc o livro que nortear seus estudos nesta disciplina, auxiliando no aprendizado da linguagem C. Em cada unidade sero apresentados exemplos de programas em C. importante que voc compile cada um desses programas gerando o executvel e verifique o funcionamento dos mesmos. Apenas a leitura dos exemplos no suficiente, o aprendizado requer prtica.

    Na Unidade I veremos o histrico da linguagem C, suas caractersticas, os conceitos iniciais sobre programao, destacando as etapas para a criao de um programa, bem como sua estrutura. Estudaremos os tipos de dados disponveis na linguagem C, como nomear identificadores, declarar variveis, constantes, realizar operaes de atribuio, entrada e sada de dados. Conheceremos, tambm, as palavras reservadas da linguagem C, os operadores e funes intrnsecas. A partir destes contedos iniciaremos a construo de nossos primeiros programas em C.

    Na Unidade II aprenderemos a construir programas com desvio de fluxo, isto , vamos impor condies para a execuo de uma determinada instruo ou conjunto de instrues. Trataremos como construir programas em C utilizando a estrutura condicional simples, composta e a estrutura case.

    A Unidade III aborda a construo de programas com repetio de um determinado trecho de cdigo sem a necessidade de reescrev-lo vrias vezes. Estudaremos as estruturas de repetio disponveis na linguagem C: estrutura for, estrutura while e estrutura do while.

  • 8 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Discutiremos sobre as diferenas de cada uma delas e como utiliz-las.

    Na Unidade IV sero apresentados os conceitos sobre estruturas de dados homogneas (vetores e matrizes) e estruturas de dados heterogneas (structs). Essas estruturas permitem agrupar diversas informaes em uma nica varivel. Aprenderemos como declar-las e manipul-las nas operaes de entrada, atribuio e sada. Trataremos questes relacionadas pesquisa de um elemento em um vetor e a ordenao de um vetor segundo algum critrio. Estudaremos tambm como manipular as cadeias de caracteres (strings) e conheceremos as funes disponveis na linguagem C que nos permitem concatenar, comparar, verificar tamanho, converter os caracteres para maisculo/minsculo e outros.

    Por fim, na unidade V, trabalharemos com a modularizao de nossos programas utilizando funes. Abordaremos os conceitos relacionados ao escopo de variveis e a passagem de parmetros por valor e por referncia, prottipo de funo e recursividade. Estudaremos as funes disponveis para manipulao de arquivos que nos permitem abrir um arquivo, verificar erro durante a abertura, verificar fim de arquivo, fechar um arquivo, ler e gravar caractere, cadeia de caracteres e demais tipos de dados. Sero apresentados programas que ilustram o funcionamento de cada uma dessas funes.

    Em cada unidade deste livro voc encontrar indicaes de leitura complementar, as quais enriquecero o seu conhecimento e apresentaro mais exemplos de programas em C. Preste ateno nos momentos REFLITA, pois eles apresentam informaes importantes que voc precisa pensar com calma e que te auxilia a consolidar o conhecimento adquirido. Alm disso, sero apresentadas ATIvIDADES DE AuTOESTuDO que permitem que voc coloque em prtica os conhecimento e EXERCCIOS DE FIXAO, que apresentam exerccios resolvidos que podem te auxiliar no aprendizado e sanar eventuais dvidas.

    Desejo a voc um bom estudo!

  • SuMRIO

    unIDADE I

    CONCEITOS INICIAIS

    LINGUAGEM C 16

    CONCEITOS INICIAIS DE PROGRAMAO 18

    ESTRUTURA DE UM PROGRAMA EM C 19

    IDENTIFICADORES 23

    PALAVRAS RESERVADAS 26

    CONSTANTES 28

    EXPRESSES E OPERADORES 28

    FUNES INTRNSECAS 33

    ATRIBUIO 34

    ENTRADA DE DADOS 35

    SADA DE DADOS 37

    CONSTRUINDO UM PROGRAMA 41

    unIDADE II

    ESTRUTURA CONDICIONAL

    ESTRUTURA CONDICIONAL SIMPLES 58

    ESTRUTURA CONDICIONAL COMPOSTA 62

    ESTRUTURA CASE 65

  • unIDADE III

    ESTRUTURAS DE REPETIO

    ESTRUTURA FOR 91

    ESTRUTURA WHILE 94

    ESTRUTURA DO WHILE 96

    PROBLEMA 1 98

    PROBLEMA 2 102

    unIDADE Iv

    VETORES, STRINGS, MATRIZES E ESTRUTURAS

    VETORES 119

    ORDENAO EM VETOR 125

    PESQUISA EM VETOR 127

    STRINGS 130

    MATRIZES 135

    ESTRUTURAS 138

    PROBLEMA 144

  • unIDADE v

    FUNES E ARQUIVOS

    FUNES 164

    ESCOPO DE VARIVEIS 168

    PASSAGEM DE PARMETROS 169

    PASSAGEM DE PARMETROS POR VALOR 171

    PASSAGEM DE PARMETROS POR REFERNCIA 172

    PROTTIPO DE FUNES 175

    RECURSIVIDADE 176

    ARQUIVOS 178

    COnCLuSO 195

    REFERnCIAS 199

  • unIDADE I

    COnCEITOS InICIAISProfessora Me. Gislaine Camila Lapasini Leal

    Objetivos de Aprendizagem

    Conhecerosconceitosiniciaisdeprogramao,dalinguagemCeaestruturadeum programa em C.

    Estudarostiposdedados,variveis,constantes,expresseseoperadores.

    Entendercomorealizaratribuio,entradaesadadedados.

    Plano de Estudo

    A seguir, apresentam-se os tpicos que voc estudar nesta unidade:

    LinguagemC

    ConceitosIniciaisdeProgramao

    EstruturadeumProgramaemC

    Identificadores

    TiposdeDados

    PalavrasReservadas

    Variveis

    Constantes

    ExpresseseOperadores

    FunesIntrnsecas

  • Atribuio

    EntradadeDados

    SadadeDados

    Construindoumprograma

  • 15ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    InTRODuO

    Nesta primeira unidade, voc ser introduzido ao universo da Linguagem de Programao C, uma linguagem poderosa e que tem se tornado cada vez mais popular.

    Primeiramente, voc conhecer o histrico da linguagem C, suas caractersticas, pontos fortes e fracos e compiladores disponveis para essa linguagem. Estudar os conceitos bsicos relacionados programao que possibilitam entender como um cdigo-fonte convertido em um programa executvel. Alm disso, ter contato com a interface do compilador que adotaremos na construo de nossos programas.

    Estudaremos a estrutura bsica de um programa em C e os elementos que a compe. Ao construir nossos programas precisamos guardar algumas informaes do problema. Para isso, veremos o conceito de variveis e constantes e sua sintaxe em C. Conheceremos os tipos de dados disponveis na linguagem, expresses e operadores, funes intrnsecas e como utiliz -los em nossos programas. Para obter dados dos usurios, mostrar mensagens e resultados de processamento estudaremos as funes relacionadas entrada de dados, que nos permitem interagir como usurio; comando de atribuio que possibilita atribuir valor s variveis; e funes de sada de dados que permitem o envio de mensagens e exibio dos resultados do processamento.

    Ao final desta unidade, voc ter adquirido conhecimento sobre a estrutura de um programa, variveis, constantes, palavras reservadas da linguagem C, expresses e operadores, funes intrnsecas, comando de atribuio, funo de entrada de dados e funo de sada de dados. Com esses conceitos voc saber construir os primeiros programas em C. Vamos l?

  • 16 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    LInGuAGEM C

    A linguagem C foi concebida e implementada, inicialmente, para o sistema operacional UNIX, na dcada de 70 por Dennis Ritchie nos Laboratrios Bell da companhia AT & T (KERNINGHAN; RITCHIE, 1988).

    C uma linguagem de programao de propsito geral, com uma sintaxe muito compacta e que permite a combinao de operadores de diferentes tipos. Alm disso, no est vinculada a um hardware especfico ou qualquer outro sistema. De modo que fcil escrever programas que sero executados sem mudanas em qualquer mquina que suporta C (KERNINGHAN; RITCHIE, 1988).

    Segundo Rocha (2006), a principal caracterstica da linguagem C que ela combina as vantagens de uma linguagem de alto nvel com a eficincia da linguagem de montagem assembly. Em C possvel realizar operaes aritmticas sobre ponteiros e operaes sobre palavras binrias.

    Podemos dizer que esta liberdade oferecida pela linguagem C uma faca de dois gumes, pois ao passo que permite com que programadores experientes escrevam cdigos mais compactos

    Font

    e: S

    HuTT

    ERST

    OCK.

    COM

  • 17ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    e eficientes, possibilita que programadores inexperientes realizam construes sem sentido, as quais so aceitas como vlidas pelo compilador. Deste modo, ao construir programas utilizando C devemos ficar atento s construes da linguagem (ROCHA, 2006).

    Ascencio e Campos (2010) destacam que durante alguns anos, o padro da linguagem C foi fornecido com a verso do sistema operacional UNIX. No entanto, com a popularizao dos microcomputadores foram criadas vrias implementaes da linguagem C o que ocasionou vrias discrepncias. Em 1983, o ANSI (American National Standards Institute) criou um comit para definir um padro que guiasse todas as implementaes da linguagem C.

    Na literatura podemos encontrar diversos compiladores C, sendo os principais: GCC, Dev C++, C++ Builder, Turbo C e Visual C#. Em nossa disciplina de Algoritmos e Lgica de Programao II adotaremos o Turbo C (Figura 1).

    Figura 1- Interface Turbo C

  • 18 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    COnCEITOS InICIAIS DE PROGRAMAO

    A programao inicia-se com a escrita do programa (cdigo-fonte) e encerra com a gerao de um programa executvel. A escrita do programa deve ser realizada em um editor de textos. Aps a criao do programa temos que compil-lo. O processo de compilao analisa o cdigo e o converte para um cdigo objeto, que a verso em linguagem de mquina do programa. Se o programa possui chamada s funes de bibliotecas, o lincador (ligador) rene o programa objeto com as bibliotecas referenciadas e gera o cdigo executvel (ROCHA, 2006).

    A Figura 2 ilustra o processo de criao de um programa, desde a criao do cdigo-fonte at a gerao de um programa executvel.

    Cdigo-Fonte Compilador

    Bibliotecas

    Programa - objeto

    Ligador

    Programa - executvel

    Figura 2 - Etapas para a criao de um programaFonte: adaptado de Rocha (2006)

    Em nossa disciplina escreveremos nossos programas utilizando o Turbo C (Figura 1). Na Figura 3 so mostrados os menus em que as operaes compilar, ligar e executar so realizadas.

  • 19ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Figura 3 - Turbo C

    ESTRuTuRA DE uM PROGRAMA EM C

    Kerninghan e Ritchie (1988) destacam que a nica maneira de aprender uma nova linguagem de programao escrevendo programas nela. Com isto, para entender a estrutura de um programa em C, vamos construir nosso primeiro programa Hello, world (Quadro 1).

    Quadro 1 - Programa HelloWorld

    # include main(){ printf(Hello, World); return (0);}

  • 20 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Fique tranquilo!! Vamos analisar o programa acima linha a linha e entender o que cada um destes elementos significa.

    Na primeira linha temos a instruo #include , que indica ao compilador que deve incluir o contedo do arquivo pr-definido chamado de stdio.h. Este arquivo chamado de arquivo de cabealho e contm declaraes de funes para entrada e sada de dados. Portanto, no podemos esquecer de inserir esta linha em nossos programas.

    Em seguida, temos a instruo main (), que identifica uma funo denominada main. Os programas em C so formados por chamadas de funo. Obrigatoriamente, todo programa deve possuir uma funo main, a qual chamada quando o programa executado. Note que o contedo da funo delimitado por chaves, de modo anlogo ao incio e fim do algoritmo. Isto quer dizer que o contedo entre as chaves ser executado sequencialmente quando o programa for executado.

    Dentro das chaves temos duas instrues, a primeira dela printf, que uma funo previamente definida no arquivo de cabealho stdio.h que imprime na tela a sequncia de caracteres Hello, World. A ltima linha, return (0), indica o valor de retorno da funo. No caso 0, indica que o programa terminou sem erros. Observe que ao final de cada instruo h um ponto e vrgula, isto , todos os comandos em C terminam com ;.

    Agora que vimos cada um dos elementos, voc deve estar se perguntando como executar isso. Para visualizar nosso programa precisamos escrever o cdigo no Turbo C, conforme Figura 4. Observe que alm do cdigo apresentado no Quadro 1, h outras informaes que esto entre /* */. Este comando utilizado para escrever comentrios em nosso cdigo, isto , o compilador desconsidera qualquer coisa que esteja entre estes dois pares de smbolos. Um comentrio pode ter mais de uma linha.

    Os comentrios so textos que podem ser inseridos com o objetivo de document-lo. Em nossos programas adotaremos como padro a escrita de comentrios. Eles nos auxiliam a

  • 21ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    entender o funcionamento dos programas.

    Figura 4 - Primeiro programa em C Cdigo

    Aps escrever o cdigo do programa temos que compil-lo (ALT + F9). neste momento que sero realizadas as verificaes de sintaxe. E para visualizar o resultado do programa basta execut-lo. No caso do Turbo C podemos ir ao menu Run ou pressionar as teclas Ctrl + F9.

    Ao executar o cdigo temos como resultado a impresso na tela da cadeia de caracteres Hello, World, conforme pode ser visualizado na Figura 5.

  • 22 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Figura5-PrimeiroprogramaemCSada

    A estrutura geral de um programa em C apresentada no Quadro 2.

    Quadro 2 - Estrutura geral de um programa em C

    main(){ conjunto de instrues; return (0);}

  • 23ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    IDEnTIFICADORES

    Os identificadores consistem nos nomes que utilizamos para representar variveis, constantes, tipos, funes e rtulos do programa. Um identificador uma sequncia de uma ou mais letras, dgitos ou sublinhas, que comea com uma letra ou sublinha. Em geral, evita-se iniciar um identificador com sublinhas, pois este tipo de notao reservado para o compilador (PAPPAS; MURRAY, 1991).

    A linguagem C case sensitive, isto , o compilador considera letras maisculas e minsculas como caracteres distintos. Os comandos em C s podem ser escritos em minsculos, seno o compilador ir interpret-los como variveis. O Quadro 3 apresenta alguns exemplos de identificadores vlidos e invlidos.

    Font

    e: S

    HuTT

    ERST

    OCK.

    COM

  • 24 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Quadro 3 - Exemplo de identificadores

    Identificadores vlidos Identificadores invlidos

    A 2

    a b@

    media media idade

    altura2 x*y

    media_idade #media

    x36 idade!

    Devemos lembrar que em C o identificador A no o mesmo que o identificador a, cada um um identificador nico.

    TIPOS DE DADOS

    Na linguagem C as informaes podem ser representadas por sete tipos bsicos: char, int, float, double, enum, void e pointer (PAPPAS; MURRAY, 1991).

    O tipo char composto por caracteres simples e strings (cadeia de caracters). O tipo int so dados numricos que no possuem componentes decimais ou fracionrios. O tipo float, valores em ponto flutuante, so nmeros que tm componente decimal ou fracionrio. O tipo double so valores em ponto flutuante de preciso dupla, que apresentam alcance mais extenso. O tipo enum, dados enumerados, possibilitam os tipos definidos pelo usurio. O tipo void significa valores que ocupam 0 bits e no possuem valor algum. O tipo pointer representa um tipo especial, que no contm informao, mas sim, uma localizao de memria que contm o dado verdadeiro.

    A partir dos tipos bsicos podem ser definidos outros tipos de dados utilizando modificadores. No Quadro 4 so apresentadas informaes relativas faixa de valores e o tamanho

  • 25ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    aproximado dos tipos de dados. Observe que foram aplicados os modificadores unsigned, short e long aos tipos bsicos.

    O modificador unsigned utilizado para declarar os tipos como sem sinal, duplicando assim a gama de valores que pode ser representado. O modificador short reduz a capacidade de armazenamento, enquanto o modificador long aumenta a capacidade.

    Quadro 4 - Tipos de dados e faixa de valores

    Fonte: Ascencio; Campos (2010)

    Ascencio e Campos (2010) apontam que a faixa de valores e o tamanho podem variar de acordo com o compilador. Os valores descritos acima esto em conformidade com o padro ANSI.

  • 26 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    PALAvRAS RESERvADAS

    As palavras reservadas, tambm conhecidas como palavras-chave, so identificadores que possuem uso especfico para a linguagem C, ou seja, tm significados especiais.

    No Quadro 5 so destacadas as palavras reservadas da linguagem C. Lembre-se: no podemos utilizar como identificador uma palavra reservada.

    Quadro 5 - Palavras reservadas da linguagem C

    Fonte: Pappas; Murray (1991)

  • 27ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    vARIvEIS

    Em nossos programas precisamos armazenar algumas informaes e para isto utilizamos as variveis. Uma varivel um espao na memria principal do computador que pode conter diferentes valores a cada instante de tempo (LOPES; GARCIA, 2002).

    Na linguagem C as variveis so declaradas aps a especificao de seus tipos. Sendo os tipos mais utilizados: int, float e char. Note que em C no existe o tipo de dados boolean, pois considera verdadeiro qualquer valor diferente de 0. Alm disso, no h um tipo especial para armazenar cadeia de caracteres (strings), sendo utilizado um vetor contendo vrios elementos do tipo char (ASCENCIO; CAMPOS, 2010).

    A sintaxe para declarao de variveis dada por:

    identificador;

    No Quadro 6 so apresentados exemplos de declarao de variveis. Atente para o fato de que a declarao de variveis seguida de ; . Observe, tambm, que podemos declarar em uma mesma linha diversas variveis do mesmo tipo.

    Quadro6-Exemplosdedeclaraodevariveis

  • 28 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    COnSTAnTES

    Uma constante armazena informaes que no variam com o tempo, ou seja, o seu contedo um valor fixo. Em C podemos definir constantes por meio da seguinte sintaxe:

    #define valor

    Observe que na definio de constantes no utilizamos o ; no final.

    EXPRESSES E OPERADORES

    As expresses esto diretamente relacionadas ao conceito de frmula matemtica, em que um conjunto de variveis e constantes relaciona-se por meio de operadores (LOPES; GARCIA, 2002).

    As expresses aritmticas so aquelas em que o resultado consiste em um valor numrico. Desta forma, apenas operadores aritmticos e variveis numricas (inteiro e real) podem ser utilizadas em expresso desse tipo.

    O Quadro 7 apresenta os operadores aritmticos da linguagem C, destacando suas representaes e forma de uso.

    Quadro 7 - Operadores aritmticos

  • 29ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Em C temos, tambm, os operadores aritmticos de atribuio (Quadro 8) que so utilizados para representar de maneira sinttica uma operao aritmtica, seguida de uma operao de atribuio (ASCENCIO; CAMPOS, 2010).

    Quadro8-Operadoresmatemticosdeatribuio

    Fonte: adaptado de (ASCENCIO; CAMPOS, 2010)

    As expresses relacionais referem-se comparao entre dois valores de um tipo bsico. Os operadores relacionais so destacados no Quadro 9, em que possvel visualizar o operador, smbolo associado e forma de uso.

  • 30 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Quadro 9 - Operadores relacionais

    Fonte: adaptado de (ASCENCIO; CAMPOS, 2010)

    As expresses lgicas so aquelas cujo resultado consiste em um valor lgico verdadeiro ou falso. Neste tipo de expresso podem ser usados os operadores relacionais, os operadores lgicos ou expresses matemticas.

    No Quadro 10 so descritos cada um dos operadores lgicos: conjuno, disjuno e negao.

  • 31ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Quadro 10 - Operadores lgicos

    Fonte: adaptado de (LOPES; GARCIA, 2002)

    Em uma expresso podemos ter mais de um operador. Em situaes que h um nico operador a avaliao da expresso realizada de forma direta. Quando h mais de um operador necessria a avaliao da expresso passo a passo, ou seja, um operador por vez. No Quadro 11 apresentado um resumo com os principais operadores da linguagem C, destacando desde a precedncia mais alta at a mais baixa, e descreve como cada operador est associado (esquerda para direita ou direita para esquerda). Cabe ressaltar, que os operadores entre linhas tm a mesma precedncia.

  • 32 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Quadro11-NveisdePrecednciadeOperador

    Operador Descrio Associa pela Precedncia

    ()

    ++ --

    !

    &

    *

    /

    %

    Incremento/decremento

    +

    -

    =

    ==

    !=

    &&

    Vrgula

    Atribuio

    ||

    ?:

    Expresso de funo

    Negao

    Endereo

    Multiplicao

    Diviso

    Resto

    Adio

    Subtrao

    Menor que

    Menor ou igual

    Maior que

    Maior ou igual

    Igual

    Diferente

    Conjuno (E lgico)

    Disjuno (Ou lgico)

    Condicional

    ,

    =, %=, +=, - =, *=, /=, >>=,

  • 33ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    FunES InTRnSECAS

    As funes intrnsecas so frmulas matemticas prontas que podemos utilizar em nossos programas. O Quadro 12 apresenta as principais funes da linguagem C, destacando o comando associado, um exemplo e o que ela faz.

    Quadro12-FunesintrnsecasdalinguagemC

    Funo Exemplo Objetivo

    ceil

    ceil(x)

    cos cos(x)

    exp exp(x)

    abs abs(x)

    floor floor(x)

    log log(x)

    log10 log10(x)

    modf z=modf(x,&y) pow pow(x,y)

    sin sin(x)

    sqrt sqrt(x)

    tan tan(x)

    M_PI M_PI

    Arredonda um nmero real para cima. Por exemplo, cel(2.3) 3.

    Calcula o cosseno de x. O valor de x deve estar em radianos.

    Obtm o logaritmo natural e elevado potncia x.

    Retorna o valor absoluto de x.

    Arredonda um nmero real para baixo. Por exemplo, floor(2.3) 2.

    Retorna o logaritmo natural de x.

    Retorna o logaritmo de base 10 de x.Decompe o nmero real armazenado em x em duas partes:y recebe a parte fracionria e z a parte inteira.

    Calcula a potncia de x elevado a y.

    Calcula o seno de x.

    Calcula a raiz quadrada de x.

    Calcula a tangente de x.

    Retorna o valor de

    Fonte: Ascencio; Campos (2010)

    Font

    e: S

    HuTT

    ERST

    OCK.

    COM

  • 34 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    ATRIBuIO

    O comando de atribuio usado para conceder valores ou operaes a variveis. O smbolo utilizado para a atribuio = (sinal de igualdade). A sintaxe para atribuio dada por:

    identificador = expresso

    O identificador representa a varivel a qual ser atribudo um valor e o termo expresso o que ser atribudo, podendo ser uma expresso aritmtica ou lgica. Alguns exemplos do uso do comando de atribuio podem ser visualizados no Quadro 13.

    Quadro 13 - Exemplos de atribuio

    Note que na linguagem C os caracteres so representados entre apstrofos () e as cadeias de caracteres entre aspas ().

  • 35ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    EnTRADA DE DADOS

    A entrada de dados permite receber os dados digitados pelo usurio. Os dados recebidos so armazenados em variveis. Na linguagem C existem diversas funes para entrada de dados, algumas delas so cin, gets e scanf (Quadro 14) (ASCENCIO; CAMPOS, 2010).

    Os comandos gets e scanf armazenam toda a cadeia de caracteres at que seja pressionada a tecla ENTER. J o comando cin armazena os caracteres at que seja encontrado um espao em branco.

    Quadro 14 - Exemplos de entrada de dados

    Fonte: adaptado de (ASCENCIO; CAMPOS, 2010)

    Font

    e: S

    HuTT

    ERST

    OCK.

    COM

  • 36 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    A funo scanf a mais utilizada, sendo sua sintaxe dada por:

    scanf (expresso de controle, lista de argumentos);

    O argumento expresso de controle deve ser escrito entre aspas e contm os especificadores de formato (Quadro 15) que indicam como os dados digitados devem ser armazenados. No argumento lista de variveis, as variveis devem ser separadas por vrgulas e cada uma delas deve ser precedida pelo operador de endereo (&). As usadas para receber valores por meio da funo scanf devero ser passadas pelos seus endereos. O operador de endereo indica o endereo da posio de memria para a varivel (ROCHA, 2006).

    Na leitura de cadeias de caracteres (strings) no se utiliza o operador de endereo (&), pois o identificar do vetor j o endereo do primeiro elemento do vetor.

    Quadro 15 - Especificadores de formato

    Cdigo Significado

    %c Leitura de um nico caractere

    %d Leitura de um nmero decimal inteiro.

    %i Leitura de um decimal inteiro.

    %u Leitura de um decimal sem sinal.

    %e Leitura de um nmero em ponto flutuante com sinal opcional.

    %f Leitura de um nmero em ponto flutuante com ponto opcional.

    %g Leitura de um nmero em ponto flutuante com expoente opcional.

    %o Leitura de um nmero em base octal.

    %s Leitura de uma string.

    %x Leitura de um nmero em base hexadecimal.

    %p Leitura de um ponteiro.

    Fonte: adaptado de (ROCHA, 2006)

  • 37ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Tomemos como exemplo, ler uma varivel que armazena a idade, o uso da funo scanf deve ser realizado do seguinte modo:

    scanf (%d, &idade);

    Para utilizar os comandos de entrada de dados necessrio incluir a biblioteca stdio.h, utilizando o comando #include ;

    SADA DE DADOS

    A sada de dados permite mostrar dados aos usurios. Na linguagem C utilizamos a funo printf para exibir resultados do processamento e mensagens. A sintaxe desta funo :

    printf (expresso de controle, lista de argumentos);

    O argumento expresso de controle pode conter mensagens que sero exibidas na tela e os especificadores de formato que indicam o formato que os argumentos devem ser impressos. A lista de argumentos pode conter identificadores de variveis, expresses aritmticas ou lgicas e valores constantes.

    Alm dos especificadores de formato podemos utilizar cdigos especiais na sada de dados. Esses cdigos so apresentados no Quadro 16.

  • 38 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Quadro 16 - Cdigos especiais

    Cdigo

    \n Nova linha

    \t Tab

    \b Retrocesso

    \ Aspas

    \\ Contrabarra

    \f Salta pgina de formulrio

    \0 Nulo

    Significado

    Fonte: adaptado de (PAPPAS; MURRAY, 1991)

    O programa (Figura 6) apresenta alguns exemplos de uso da funo printf. Para facilitar o entendimento verifique o que exibido em vdeo para cada uma das instrues.

    Figura 6 - Entendendo a funo printf Cdigo

  • 39ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    A sada obtida com a execuo do programa da Figura 6 apresentada na Figura 7. Como podemos observar as mensagens foram impressas em tela sem quebra de linha. Para imprimir cada mensagem em uma linha devemos utilizar o comando especial (\n). Este cdigo pode ser visualizado na Figura 8.

    Figura7-EntendendoafunoprintfSada

    Ao comparar os cdigos da Figura 6 e Figura 8 podemos observar que foi inserido o cdigo especial \n na funo printf. Esse cdigo responsvel por posicionar o cursor em uma nova linha. Com isto, temos que a sada a impresso de cada mensagem em uma linha, como pode ser visualizado na Figura 9.

  • 40 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Figura 8 - Entendendo a funo printf - Cdigo

    Figura9-Entendendoafunoprintf-Sada

  • 41ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Se voc ficou com dvidas quanto ao funcionamento do printf, fique tranquilo!!! Veremos mais casos de aplicao desta funo.

    COnSTRuInDO uM PROGRAMA

    Vamos elaborar um programa que leia nome, idade e altura de uma pessoa e exiba nome, idade, altura e ano de nascimento da pessoa. Para facilitar o entendimento sobre o problema vamos estrutur-lo em trs partes: Entrada Processamento e Sada.

    Na entrada de dados temos que obter os dados de nome, idade e altura. Cada um desses dados precisa ser armazenado em uma varivel e na leitura deles utilizaremos a funo scanf. Como processamento temos que calcular o ano em que a pessoa nasceu que ser dado pelo ano atual menos a idade da pessoa. E como sada devemos enviar para a tela o nome, idade, altura e ano de nascimento. Para mostrar essas informaes no vdeo utilizaremos a funo printf.

    Font

    e: S

    HuTT

    ERST

    OCK.

    COM

  • 42 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Agora que entendemos o problema podemos partir para a construo do programa. Voc se recorda da estrutura bsica de um programa em C? Nosso programa deve ter uma funo main e as instrues tm que estar ente os colchetes.

    Os valores obtidos na entrada de dados precisam ser armazenados em variveis. Qual o tipo de cada varivel? O nome uma cadeia de caracteres, deste modo precisamos de uma varivel do tipo char. A varivel altura do tipo float e idade do tipo int.

    O Quadro 17 apresenta o cdigo para o programa acima descrito.

  • 43ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Quadro 17 - Programa em C

    #include /* insere o conteudo do arquivo stdio.h */main(){ /* declaracao das variaveis */ int idade, ano; float altura; char nome[30]; /*entrada de dados */ printf (Digite o seu nome: ); /*mensagem ao usuario */ scanf (%s, nome); /* leitura do nome */ printf (Digite a idade:); /*mensagem ao usuario */ scanf (%d, &idade); /* leitura da idade */ printf (Digite a altura: );/*mensagem ao usuario */ scanf (%f, &altura); /* leitura da altura*/ /* processamento */ ano = 2012 - idade; /*calculo do ano de nascimento */ /*saida de dados */ printf ( \nO nome e : %s, nome); printf ( \nA altura e : %f, altura); printf ( \nA idade e : %d, idade); printf (\nO ano de nascimento e : %d , ano); return (0);}

  • 44 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Os resultados da execuo do programa podem ser visualizados na Figura 10. Observe que inicialmente os dados foram obtidos do usurio e, em seguida, apresentados. Na sada de dados as variveis do tipo float podem ser formatadas em relao ao nmero de casas decimais a ser apresentado. Ao imprimir uma varivel do tipo float utilizando a funo printf o padro completar o nmero com zeros direita, at que fique com seis casas decimais (Figura 8).

    Figura10-ProgramaemC-Sada

    No entanto, podemos formatar de um modo diferente usando junto com o especificador de formato o nmero de casas decimais que desejamos. O Quadro 18 apresenta o mesmo programa com formatao para a impresso da varivel altura com 2 casas decimais. Na funo printf ao utilizar o especificador de formato inserimos um ponto e o nmero de casas decimais desejado.

  • 45ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Quadro 18 - Programa em C

    #include /* insere o conteudo do arquivo stdio.h */main(){ /* declaracao das variaveis */ int idade, ano; float altura; char nome[30]; /*entrada de dados */ printf (Digite o seu nome: ); /*mensagem ao usuario */ scanf (%s, nome); /* leitura do nome */ printf (Digite a idade:); /*mensagem ao usuario */ scanf (%d, &idade); /* leitura da idade */ printf (Digite a altura: );/*mensagem ao usuario */ scanf (%f, &altura); /* leitura da altura*/ /* processamento */ ano = 2012 - idade; /*calculo do ano de nascimento */ /*saida de dados */ printf ( \nO nome e : %s, nome); printf ( \nA altura e : %.2f, altura);

    printf ( \nA idade e : %d, idade); printf (\nO ano de nascimento e : %d , ano); return (0);}

  • 46 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    A Figura 11 apresenta o resultado obtido com a formatao da sada para a varivel real altura.

    Figura11-ProgramaemC-SadaFormatada

    COnSIDERAES FInAIS

    Nesta unidade, voc deu os primeiros passos no aprendizado sobre a Linguagem de Programao C, conhecendo as caractersticas, pontos fortes e fracos, e como o cdigo que escrevemos se torna um programa executvel.

    Conhecemos a estrutura bsica de um programa em C, que possui uma funo main, que chamado quando o programa executado. Vimos que o contedo da funo delimitado por chaves e o contedo entre elas executado de modo sequencial. Alm disso, estudamos que ao final das instrues devemos inserir a funo return (0), que o programa terminou sem erros e que todos os comandos terminam com ponto e vrgula.

    Aprendemos como documentar nossos cdigos inserindo comentrios os quais so escritos entre /* */ e podem ter mais de uma linha. Entendemos as regra para a nomeao de identificadores.

    Estudamos os sete tipos bsicos de dados (char, int, float, double, enum, void e pointer), operadores e funes intrnsecas disponveis na linguagem C. Em relao aos tipos de dados vimos que eles podem gerar outros tipos a partir da aplicao dos modificadores unsigned, short e long.

  • 47ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Entendemos como realizar a atribuio, entrada de dados e sada de dados. O comando usado para atribuio representado por = . A entrada de dados realizada por meio da funo scanf. E, para mostrar dados ao usurio utilizamos a funo de sada printf. Nas funes de entrada e sada de dados estudamos como utilizar os especificadores de formato e cdigos especiais. Por fim, colocamos em prtica a construo de um programa utilizando os conceitos aprendidos no decorrer desta unidade.

    Para conhecer um pouco mais sobre o histrico da linguagem C, acesse o texto disponvel em: .Para entender como instalar o Turbo C no Windows Vista e Seven, acesse o vdeo disponvel em: .

    A linguagem C case sensitive.

    ATIvIDADE DE AuTOESTuDO

    1.MarquecomumXosidentificadoresincorretos.

    ( ) idade ( ) media idade ( ) 2nome( ) nome*r ( ) x2 ( ) 012( ) media_peso% ( ) endereco+cep ( ) /fone( ) aluno_nota ( ) A ( ) 1234P

    2. Escreva um programa que leia o nome de uma pessoa e escreva a seguinte mensagem Bem-vindo disciplina de Algoritmos e Lgica de Programao II, Fulano.

  • 48 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    3. Escreva um programa que l um nmero positivo inteiro e apresente o quadrado e a raiz quadrada deste nmero.

    4. Escreva um programa que recebe quatro nmeros inteiros, calcula e apresenta a mdia aritmtica entre eles. Observao: no esquea de formatar o valor da mdia no momento de apresent-lo, utilize duas casas decimais.

    5. Escreva um programa que dado o raio de um crculo calcule sua rea e o permetro. A rea a superfcie do objeto, dada por e o permetro a medida do contorno do objeto dado por P . Dica: utilize as funes intrnsecas vistas na unidade.

    6. Identifiqueoserrosnoprogramaabaixo.

    Quadro 19 - Programa em C

    #include /* insere o conteudo do arquivo stdio.h main(){ /* declaracao das variaveis */ int num1, num2, total /*entrada de dados */ printf (Digite o primeiro numero: ); /*mensagem ao usuario */ scanf (%d, num1); /* leitura do primeiro numero */ printf (Digite o segundo numero:); /*mensagem ao usuario */ scanf (%d, &num2); /* leitura do segundo numero*/ /* processamento */ total = num1 + num2 /*calculo do ano de nascimento */ /*saida de dados */ printf (\n A soma dos nmeros e : %d , soma); return (0);}

  • 49ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    EXERCCIOS DE FIXAO

    1. Escreva um programa que leia um nmero inteiro e apresente seu antecessor e seu suces-sor.

    Quadro 20 - Programa em C

    #include main (){ int num, ant, suc; printf( Digite o numero:); scanf (%d, &num); ant = num - 1; suc = num +1; printf(\n O antecessor e: %d, ant); printf(\n O sucessor e: %d, suc); return (0);}

    Quadro 21 - Programa em C

    #include main (){ int num; printf( Digite o numero:); scanf (%d, &num); printf(\n O antecessor e: %d, num -1); printf(\n O sucessor e: %d, num+1); return (0);}

  • 50 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    2. Elabore um programa que receba quatro notas e calcule a mdia aritmtica entre elas.

    Quadro 22 - Programa em C

    #include main (){ float n1, n2, n3, n4, media; printf( Digite a nota 1:); scanf (%f, &n1); printf( Digite a nota 2:); scanf (%f, &n2); printf( Digite a nota 3:); scanf (%f, &n3); printf( Digite a nota 4:); scanf (%f, &n4); media = (n1 + n2+ n3+ n4)/4; printf( A media e: %.2f, media); return (0);}

  • 51ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    3. Faa um programa que receba o valor de um depsito e o valor da taxa de juros, calcule e apresente o valor do rendimento e o valor total (valor do depsito + valor do rendimento).

    Quadro 23 - Programa em C

    #include main (){ float deposito, taxa, rendimento, total; printf( Informe o valor do deposito:); scanf (%f, &deposito); printf(\n Informe a taxa de juros:); scanf (%f, &taxa); rendimento = deposito * (taxa/100); total = deposito + rendimento; printf(\n O rendimento e: %.2f, rendimento); printf(\n O total e: %.2f, total); return (0);}

  • 52 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    4. Escreva um programa que receba dois nmeros, calcule e apresente um elevado ao outro.

    Quadro 24 - Programa em C

    #include #include main (){ float num1, num2, total; printf( Informe o primeiro numero:); scanf (%f, &num1); printf(\n Informe o segundo numero:); scanf (%f, &num2); total = pow(num1, num2); printf(\n %.2f elevado a %.2f e: %.2f, num1, num2, total); return (0);}

  • 53ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    5. Elabore um programa que calcule a rea de um trapzio.

    Quadro 25 - Programa em C

    #include main (){ float base1, base2, altura, area; printf( Informe o valor da base maior:); scanf (%f, &base1); printf(\n Informe o valor da base menor:); scanf (%f, &base2); printf(\n Informe o valor da altura:); scanf (%f, &altura); area = ((base1 + base2) * altura)/2; printf(\n A area do trapezio e: %.2f, area); return (0);}

  • 54 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    ALBANO, R. S. Programao em Linguagem C. Editora Cincia Moderna, 2010.

    Sinopse: a linguagem C utilizada na rea de programao. O livro Programao em linguagem C oferecemaisde200cdigos-fontes,distribudosentreexemploseexercciosdefixao.indicadopara alunos de cursos de graduao, tcnicos ou cursos livres. Alm disso, os autodidatas podero utilizar este livro, j que o mesmo abrange de forma sequencial a fase introdutria da linguagem de programao C at a sua fase intermediria. Esta obra contm vrios exerccios executados passo a passoquepermitemqueoleitorpossaacompanharodesenvolvimentodemaneiratileeficaz.Destaforma, o prprio leitor poder implementar cada exerccio medida que vai lendo o livro. O mesmo apresenta-seestruturadodeformaque,sempreaofinaldecadacaptulo,sejamapresentadosexerc-cios de reviso abrangendo cada contedo estudado, com o objetivo de avaliar e consolidar os conhe-cimentosadquiridos.Salientandoquetodososexercciospossuemresoluocontidanofinaldolivro.

  • unIDADE II

    ESTRuTuRA COnDICIOnALProfessora Me. Gislaine Camila Lapasini Leal

    Objetivos de Aprendizagem

    Conheceraestruturacondicionalsimples.

    Conheceraestruturacondicionalcomposta.

    Conheceraestruturacase.

    Elaboraralgoritmosutilizandoestruturacondicional.

    Plano de Estudo

    A seguir, apresentam-se os tpicos que voc estudar nesta unidade:

    Estruturacondicional

    Estruturacondicionalsimples

    Estruturacondicionalcomposta

    Estruturacase

  • 57ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    InTRODuO

    Nesta unidade, voc estudar a estrutura condicional conhecendo a estrutura condicional simples, composta e estrutura case. Com os conhecimentos adquiridos na unidade I conseguamos construir programas sequenciais, isto , que a partir da entrada, os dados eram processados e apresentvamos algumas informaes na sada.

    Na estrutura condicional podemos impor condies para a execuo de uma instruo ou conjunto de instrues, isto , podemos criar condies que permitem desviar o fluxo de execuo de um programa. Para construir essas condies utilizaremos os conceitos de variveis e expresses vistos na unidade I. Estudaremos a estrutura condicional simples que nos permite tomar uma deciso. A estrutura condicional composta que a partir de uma expresso, podemos seguir dois caminhos, um quando o resultado do teste verdadeiro e outro quando o resultado falso. E a estrutura case que uma generalizao da estrutura condicional composta em que pode haver uma ou mais condies a serem testadas e cada uma delas pode ter uma instruo diferente associada.

    Ao estudar cada estrutura condicional veremos um exemplo e construiremos algoritmos para visualizar a aplicao dos conceitos estudados.

    Ao final desta unidade estaremos aptos a construir programas com desvio de fluxo, aumentando assim, o leque de problemas que podemos solucionar.

  • 58 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    ESTRuTuRA COnDICIOnAL

    A estrutura condicional fundamental para qualquer linguagem de programao, uma vez que sem elas o fluxo seria seguido sequencialmente, sem nenhum desvio, ou seja, instruo a instruo. A estrutura condicional possibilita o desvio do fluxo do programa, sendo tambm denominada de estrutura de seleo ou estrutura de controle (MANZANO; OLIVEIRA, 1997; ASCENCIO; CAMPOS, 2010).

    A estrutura condicional consiste em uma estrutura de controle de fluxo que permite executar um ou mais comandos se a condio testada for verdadeira ou executar um ou mais comandos se for falsa (LOPES; GARCIA 2002).

    Nas sees seguintes estudaremos as estruturas condicionais da Linguagem C.

    ESTRuTuRA COnDICIOnAL SIMPLES

    Na estrutura condicional simples o comando s ser executado se a condio for verdadeira. Uma condio uma comparao que possui dois valores possveis: verdadeiro ou falso (ASCENCIO; CAMPOS, 2010).

    Font

    e: S

    HuTT

    ERST

    OCK.

    COM

  • 59ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    A sintaxe do comando :

    if (){;}

    A estrutura condicional simples tem por finalidade tomar uma deciso. De modo que se a condio que est sendo testada for verdadeira so executadas todas as instrues compreendidas entre { }. Ao trmino da execuo, o algoritmo segue o primeiro comando aps }. Se a condio que est sendo testada for falsa o algoritmo executa a primeira instruo aps o }, no executando as instrues compreendidas entre {}.

    Em C obrigatrio o uso de chaves quando existe mais de um comando a executar. No podemos esquecer de inserir o ; ao final de cada instruo.

    Agora que conhecemos a sintaxe da estrutura condicional simples vamos construir nosso primeiro programa em C com desvio de fluxo. O problema consiste em obter um nmero inteiro e se este for par imprimir sua raiz quadrada.

    O Quadro 26 apresenta o programa em C para o problema descrito acima. Lembre-se que os textos compreendidos entre /* */ correspondem a comentrios e no executados.

    Note que neste programa inserimos o contedo da biblioteca stdio.h e math.h. A biblioteca math.h prpria para clculos matemticos e inclui funes, tais como: potncia, raiz quadrada, funes trigonomtricas e outras.

    Em relao s variveis foram declaradas duas variveis num e raiz. O nmero inteiro obtido do usurio armazenado na varivel num e o resultado do clculo da raiz quadrada deste nmero armazenado na varivel raiz. O teste lgico realizado na estrutura condicional simples (if)

  • 60 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    consiste em verificar se o valor do resto da diviso do nmero lido por dois igual a zero. Se este valor for verdadeiro executado o conjunto de instrues delimitado por { }, isto , temos a execuo da instruo de atribuio do valor da raiz quadrada do nmero varivel raiz, seguido da impresso de uma mensagem ao usurio informando o resultado. Se o valor do teste lgico for falso executada a linha com o comando return (0).

    Quadro 26 - Programa em C

    /* Estrutura condicional simples em C */#include /* esta instrucao insere o conteudo do arquivo stdio.h */#include /*insere o conteudo do arquivo math, que tem a funcao sqrt, calcula a raiz quadrada */main () /* todo programa em C deve possuir essa linha */{ /* delimita o inicio das instrucoes */ int num; float raiz; printf( Digite um numero inteiro:); scanf (%d, &num); if (num % 2 == 0 ) { raiz = sqrt(num); printf (A raiz quadrada e: %.3f, raiz); } return (0); /* este retorno indica que nao houve erro */} /*delimite o fim do conjunto de instrucoes da funcao main */

    Vamos analisar o resultado da simulao do programa para os valores 18 (Figura 12) e 15 (Figura 13), respectivamente. Como 18 um nmero par o resultado do teste lgico

  • 61ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    verdadeiro, com isto temos a impresso do valor da raiz quadrada, no caso 4.243. Observe que o valor apresentado possui trs casas decimais devido formatao definida no comando printf (%.3f).

    Figura12-ProgramaemC-Sada

    No caso do valor 15, o resultado do teste lgico falso. Deste modo, as instrues compreendidas entre { } no so executadas, portanto temos a execuo do return (0).

    Figura13-ProgramaemC-Sada

  • 62 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    ESTRuTuRA COnDICIOnAL COMPOSTA

    Na estrutura condicional composta realizada a avaliao de uma nica expresso lgica. Se o resultado dessa avaliao for verdadeiro executado a instruo ou o conjunto de instrues compreendido entre o comando entre as chaves aps o if. Se o resultado da avaliao for falso executado a instruo ou o conjunto de instrues entre chaves aps o else.

    A sintaxe da estrutura condicional composta :

    if () {;}else{ ;}

    Para facilitar o entendimento quanto ao funcionamento da estrutura condicional composta vamos construir um programa para identificar se um nmero par ou mpar. Se o nmero for par devemos apresentar sua raiz quadrada e se for mpar devemos apresentar o nmero elevado ao quadrado.

    No Quadro 27 apresentado um programa em C que verifica se o nmero par ou mpar. Em relao s variveis foram declaradas trs variveis num, quadrado e raiz. O nmero inteiro obtido do usurio armazenado na varivel num.

    O teste lgico realizado na estrutura condicional verifica se o valor do resto da diviso do nmero lido por dois igual a zero. Se este valor for verdadeiro executado o conjunto de instrues aps o if delimitado por { }, isto , temos a execuo da instruo de atribuio do

  • 63ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    valor da raiz quadrada do nmero varivel raiz, seguido da impresso de uma mensagem ao usurio informando o resultado. Se o valor do teste lgico for falso executado o conjunto de instrues aps o else delimitado por { } em que calculado o valor de num ao quadrado.

    Quadro 27 - Programa em C

    /* Estrutura condicional composta em C */#include /* esta instrucao insere o conteudo do arquivo stdio.h */#include /*insere o conteudo do arquivo math, que tem a funcao sqrt que efetua o calculo da raiz quadrada */main () /* todo programa em C deve possuir essa linha */{ /* delimita o inicio das instrucoes */ int quadrado, num; float raiz; printf( Digite um numero inteiro:); scanf (%d, &num); if (num % 2 == 0 ) { raiz = sqrt(num); printf (O numero e par); printf (\nA raiz quadrada e: %.3f, raiz); } else { quadrado = num * num; printf (O numero e impar); printf (\nO numero ao quadrado e: %d, quadrado); } return (0); /* este retorno indica que nao houve erro */} /*delimite o fim do conjunto de instrucoes da funcao main */

  • 64 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Tomemos como exemplo os valores 15 (Figura 14) e 16 (Figura 15), respectivamente. Vamos analisar o resultado da execuo do programa para o valor 15. Na avaliao do teste lgico temos que o resto da diviso de 15 por 2 no igual a zero, isto , o resultado do teste lgico falso. Com isto, temos a execuo do conjunto de instrues aps o else. O resultado da execuo apresentado na Figura 14.

    Figura14-ProgramaemC-Sada

    Ao analisar o nmero 16 temos que o resultado do teste lgico verdadeiro. Deste modo, executado o conjunto de instrues aps o if, como pode ser visto na Figura 15.

  • 65ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Figura15-ProgramaemC-Sada

    ESTRuTuRA CASE

    A estrutura case consiste em uma generalizao do if, em que somente uma condio era avaliada e dois caminhos poderiam ser seguidos, um para o resultado da avaliao ser verdadeiro e outro para falso. Na estrutura case pode haver uma ou mais condies a serem avaliadas e um comando diferente associado a cada uma delas, isto , uma construo de

    Font

    e: S

    HuTT

    ERST

    OCK.

    COM

  • 66 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    mltiplas possibilidades de deciso que compara o resultado de uma expresso com uma srie de valores constantes (LOPES; GARCIA, 2002).

    A estrutura case utilizada quando temos situaes mutuamente exclusivas, ou seja, em que se uma instruo for executada as demais no sero. Para este tipo de situao recomenda-se o uso de um comando seletivo (ASCENCIO; MOURA, 2010).

    A sintaxe dessa estrutura :

    switch () { case : ; break; case : ; break; case : ; break; default: ; }

    Nesta estrutura, o comando switch avalia o valor da varivel para decidir qual case ser executado. Cada case representa um possvel valor da varivel, que obrigatoriamente deve ser do tipo char, unsigned char, int, unsigned int, long ou unsigned long. Para impedir a execuo das instrues definidas nos demais cases deve-se utilizar o comando break. Se o valor da varivel no coincidir com aqueles especificados nos cases so executadas as instrues do default (ASCENCIO; CAMPOS, 2010).

    Lopes e Garcia (2002) destacam que a estrutura case bastante utilizado na construo de menus, tornando-os mais claros.

  • 67ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Para ilustrar o funcionamento da estrutura case vamos construir um programa que permita ao usurio escolher que operao (1 soma, 2 subtrao, 3 multiplicao e 4 diviso) deseja realizar com dois nmeros. Precisamos de duas variveis para armazenar cada um dos nmeros, uma para armazenar a operao selecionada pelo usurio e outra para armazenar o resultado da operao. Deste modo, temos a declarao de trs variveis do tipo float (num1, num2 e resultado) e uma varivel do tipo int (op).

    A entrada de dados consiste na leitura dos dois nmeros e da operao desejada. Como processamento temos que identificar a operao selecionada, utilizando a estrutura case, e efetu-la. A sada de dados a impresso do resultado da operao. O programa em C apresentado no Quadro 28.

  • 68 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Quadro 28 - Programa em C

    /* Estrutura case em C */#include /* esta instrucao insere o conteudo do arquivo stdio.h */main () /* todo programa em C deve possuir essa linha */{ /* delimita o inicio das instrucoes */ float num1, num2, resultado; int op; printf( Digite o primeiro numero:); scanf (%f, &num1); printf(\n Digite o segundo numero:); scanf (%f, &num2); printf(\nEscolha a operacao: \n 1 - Soma \n 2 - Subtracao \n 3 - Multiplicacao \n 4 - Divisao \n ); scanf (%d, &op); switch (op) { case 1 : resultado = num1 + num2; printf ( A soma e : %.3f, resultado); break; case 2 : resultado = num1 - num2; printf ( A subtracao e : %.3f, resultado); break; case 3 : resultado = num1 * num2; printf ( A multiplicacao e : %.3f, resultado); break; case 4 : resultado = num1 / num2; printf ( A divisao e : %.3f, resultado); break; default : printf(\n Opcao invalida); } return (0); /* este retorno indica que nao houve erro */} /*delimite o fim do conjunto de instrucoes da funcao main */

  • 69ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    O resultado obtido na execuo do programa para cada uma das operaes ilustrado nas Figuras 16, 17, 18 e 19.

    Figura16-ProgramaemC-Sada

  • 70 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Figura 17 -ProgramaemC-Sada

    Figura18-ProgramaemC-Sada

  • 71ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Figura19-ProgramaemC-Sada

    Voc j se perguntou como ficaria um programa para o mesmo problema sem utilizar a estrutura case? Podemos resolver de outra forma? O problema pode ser resolvido utilizando a estrutura condicional composta, como pode ser visto no Quadro 29.

  • 72 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Quadro 29 - Programa em C

    #include /* esta instrucao insere o conteudo do arquivo stdio.h */main () /* todo programa em C deve possuir essa linha */{ /* delimita o inicio das instrucoes */ float num1, num2, resultado; int op; printf( Digite o primeiro numero:); scanf (%f, &num1); printf(\n Digite o segundo numero:); scanf (%f, &num2); printf(\nEscolha a operacao: \n 1 - Soma \n 2 - Subtracao \n 3 - Multiplicacao \n 4 - Divisao \n ); scanf (%d, &op); if (op == 1) { resultado = num1 + num2; printf ( A soma e : %.3f, resultado); } else { if (op == 2) { resultado = num1 - num2; printf ( A subtracao e : %.3f, resultado); } else { if (op == 3) { resultado = num1 * num2; printf ( A multiplicacao e : %.3f, resultado); } else { resultado = num1 / num2; printf ( A divisao e : %.3f, resultado); } } } return (0); /* este retorno indica que nao houve erro */} /*delimite o fim do conjunto de instrucoes da funcao main */

  • 73ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Neste ponto voc pode se questionar quando utilizar cada uma das estruturas. Para auxiliar a compreenso das estruturas condicionais so apresentadas algumas diretrizes no Quadro 30.

    Quadro 30 - Estruturas condicionais

    if Quando um bloco deve ser executado apenas se uma condio for verdadeira.

    if...elseQuando uma condio implica a execuo de um ou outro bloco.Em situaes que h duas condies mutuamente exclusivas.

    switch...casePara testar uma expresso que gere valores discretos.Quando o nmero de possibilidades de escolha for razoavelmente grandeefinito.

    O Quadro 31 apresenta o algoritmo para o problema de receber dois nmeros e escolher a operao aritmtica desejada utilizando a estrutura condicional simples. Note que no h uma regra que nos diga qual estrutura utilizar. Em muitos casos podemos utilizar qualquer uma das estruturas.

    Neste ponto voc deve estar se perguntando qual a diferena entre os programas apresentados no Quadro 28, Quadro 29 e Quadro 31. Os trs programas so solues para o problema descrito, o que os diferencia a eficincia. A eficincia pode ser analisada em funo do nmero de operaes, no caso comparaes que o programa deve realizar.

  • 74 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Quadro 31 - Programa em C

    #include /* esta instrucao insere o conteudo do arquivo stdio.h */main () /* todo programa em C deve possuir essa linha */{ /* delimita o inicio das instrucoes */ float num1, num2, resultado; int op; printf( Digite o primeiro numero:); scanf (%f, &num1); printf(\n Digite o segundo numero:); scanf (%f, &num2); printf(\nEscolha a operacao: \n 1 - Soma \n 2 - Subtracao \n 3 - Multiplicacao \n 4 - Divisao \n ); scanf (%d, &op); if (op == 1) { resultado = num1 + num2; printf ( A soma e : %.3f, resultado); } if (op == 2) { resultado = num1 - num2; printf ( A subtracao e : %.3f, resultado); } if (op == 3) { resultado = num1 * num2; printf ( A multiplicacao e : %.3f, resultado); } if (op ==4) { resultado = num1 / num2; printf ( A divisao e : %.3f, resultado); } return (0); /* este retorno indica que nao houve erro */} /*delimite o fim do conjunto de instrucoes da funcao main */

  • 75ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Observe que ao utilizar a estrutura condicional simples (Quadro 31) todos os testes lgicos sero realizados. Por exemplo, se a opo informada for a soma temos que o valor da varivel op 1. A primeira condio ser testada e o resultado ser verdadeiro e as linhas compreendidas entre { } sero executadas. A partir da os demais testes lgicos tambm sero avaliados e as instrues no sero executadas por que o resultado ser falso. Ao utilizar a estrutura condicional composta ou a estrutura case temos um menor nmero de testes lgicos para ser avaliado.

    Ao analisar o cdigo da estrutura condicional composta (Quadro 29) e estrutura case (Quadro 28) podemos notar que mais fcil compreender o funcionamento do programa utilizando a estrutura case, pois o cdigo mais claro. Fique tranquilo!! Com a realizao das atividades prticas voc conseguir definir com mais facilidade quando melhor utilizar cada uma das estruturas.

    COnSIDERAES FInAIS

    Nesta unidade, voc aprendeu a construir programas em C utilizando a estrutura condicional. Com essa estrutura possvel elaborar programas em que a execuo de uma instruo ou um conjunto de instrues est atrelado avaliao de um teste lgico.

    Estudamos a estrutura condicional simples, a estrutura condicional composta e a estrutura case. Vimos que o uso da estrutura condicional simples realizado em situaes em que um conjunto de instrues deve ser executado apenas se uma condio for verdadeira. A sintaxe dessa estrutura dada por:

    if () { ;}

    Aprendemos que na estrutura condicional composta realizada a avaliao de uma nica expresso lgica, no entanto temos dois caminhos para seguir. Se o resultado desta avaliao

  • 76 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    for verdadeiro executado a instruo ou o conjunto de instrues compreendido entre o comando entre as chaves aps o if. Se o resultado da avaliao for falso executado a instruo ou o conjunto de instrues entre chaves aps o else. A sintaxe desta estrutura :

    if () { ;}else{ ;}

    Conhecemos a estrutura case que compara o resultado de uma expresso com uma srie de valores constantes, em que pode haver uma ou mais condies a serem avaliadas e um comando diferente associado a cada uma delas. Vimos que esta estrutura deve ser utilizada em situaes mutuamente exclusivas e sua sintaxe :

    switch () { case : ; break; case : ; break; case : ; break; default: ; }

    Vimos que em alguns casos as estruturas condicionais so intercambiveis, isto , podemos resolver um mesmo problema utilizando a estrutura condicional simples, a estrutura condicional composta e a estrutura case. Entendemos que a diferena associada ao uso de cada uma delas

  • 77ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    est relacionada eficincia do programa, a qual pode ser avaliada em funo do nmero de operaes realizadas. Por fim, construmos um programa utilizando a estrutura condicional e trabalhamos a construo de expresses.

    Ao longo desta unidade construmos programas utilizando as funes de entrada e sada de dados vistas na unidade I e colocamos em prtica o uso das estruturas condicionais. Se voc ficou com alguma dvida, analise os exerccios de fixao. Mas lembre-se, para que voc fixe os conceitos importante que voc faa as atividades de autoestudo.

    Para saber um pouco mais sobre a estrutura condicional em C acesse: .

    A estrutura case s pode ser utilizada em situaes mutuamente exclusivas.

    ATIvIDADE DE AuTOESTuDO

    1. Escreva um programa que receba cinco nmeros inteiros e apresente o maior e o menor.

    2. Faa um programa que leia um nmero e informe se ele divisvel por 3 e por 7.

    3. Construa um programa que dado um nmero inteiro informe o ms correspondente.

  • 78 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    4. Elabore um programa que receba o salrio de um funcionrio e o cdigo do cargo e apre-sente o cargo, o valor do aumento e o novo salrio. A Tabela abaixo apresenta os cargos.

    Cdigo Cargo Percentual do aumento1 Servente 40%2 Pedreiro 35%3 Mestre de Obras 20%4 Tcnico de Segurana 10%

    5. Faa um programa que receba o cdigo do estado de origem da carga de um caminho, o peso da carga em toneladas e o cdigo da carga.

    Cdigo estado Percentual Imposto1 202 153 104 5

    Cdigo da carga Preo por quilo10 a 20 18021 a 30 12031 a 40 230

    Calcule e apresente: o peso da carga em quilos, o preo da carga, o valor do imposto e o valor total da carga (preo da carga mais imposto).

  • 79ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    EXERCCIOS DE FIXAO

    1. Faa um programa que leia um nmero e informe se ele divisvel por 5.

    Quadro 33 - Programa em C

    #include main (){ int num; printf( Informe o numero:); scanf (%d, &num); if (num % 5 == 0) printf(\n O numero %d e divisivel por 5, num); else printf(\n O numero %d nao e divisivel por 5, num); return (0);}

  • 80 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    2. Elabore um programa que receba o nome e a idade de uma pessoa e informe o nome, a idade e o valor da mensalidade do plano de sade. A Tabela abaixo apresenta os valores de mensalidade.

    At 18 anos R$ 50,00De 19 a 29 anos R$ 70,00De 30 a 45 anos R$ 90,00De 46 a 65 anos R$ 130,00Acima de 65 anos R$ 170,00

  • 81ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Quadro 34 - Programa em C

    #include main (){ char nome[30]; int idade; printf( Informe o nome:); scanf (%s, nome); printf(\n Informe a idade:); scanf (%d, &idade); if ( idade =19) && (idade =30) && (idade =46) && (idade

  • 82 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    3. Construaumprogramaquerecebaaidadedeumapessoaeidentifiquesuaclasseelei-toral: no eleitor (menor que 16 anos de idade), eleitor obrigatrio (entre 18 e 65 anos) e eleitor facultativo (entre 16 e 18 anos e maior que 65 anos).

    Quadro 35 - Programa em C

    #include main (){ int idade; printf(\n Informe a idade:); scanf (%d, &idade); if (idade < 16) { printf (Nao eleitor); } else { if ((idade < 18) || (idade > 65)) { printf (Eleitor facultativo); } else { printf ( Eleitor obrigatorio); } } return (0);}

  • 83ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    4. De acordo com uma tabela mdica, o peso ideal est relacionado com a altura e o sexo. Elabore um algoritmo que receba altura e sexo de uma pessoa e calcule e imprima o seu peso ideal, sabendo que:

    Para homens (72.7 x altura) -58Para mulheres (62.1 x altura) -44.7

    Quadro 36 - Programa em C

    #include main (){ float altura, peso; char sexo; printf(\n Informe o sexo (M/F):); scanf(%c, &sexo); printf(\n Informe a altura:); scanf (%f, &altura); if ((sexo== F) || (sexo==f)) { peso= (62.1 * altura) - 44.7; } else { peso =(72.7 *altura)-58; } printf (\n O sexo e: %c, sexo); printf (\n A altura e : %.2f, altura); printf (\n O peso ideal e : %.2f, peso); return (0);}

  • 84 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    5. Faa um programa que informe a quantidade total de calorias a partir da escolha do usurio que deve informar o prato tpico e a bebida. A Tabela de calorias encontra-se abaixo.

    Prato BebidaItaliano 750 cal Ch 30 calJapons 324 cal Suco de laranja 80 calSalvadorenho 545 cal Refrigerante 90 cal

  • 85ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Quadro 37 - Programa em C

    #include main (){ int op; float total; total = 0; printf (\n 1 - Italiano 2 - Japones 3 - Salvadorenho); printf(\n Informe o prato desejado:); scanf(%d, &op); switch (op) { case 1 : total = total + 750; break; case 2: total = total + 324; break; case 3: total = total + 545; break; } printf(\n 1 - Cha 2 - Suco de laranja 3 - Refrigerante:); printf(\n Informe a bebida desejada:); scanf(%d, &op); switch (op) { case 1 : total = total + 30; break; case 2: total = total + 80; break; case 3: total = total + 90; break; } printf (\n O total de calorias e : %.2f, total); return (0);}

  • 86 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    ALBANO, R. S. Programao em Linguagem C. Editora Cincia Moderna, 2010.

    Sinopse: a linguagem C utilizada na rea de programao. O livro Programao em linguagem C oferecemaisde200cdigos-fontes,distribudosentreexemploseexercciosdefixao.indicadopara alunos de cursos de graduao, tcnicos ou cursos livres. Alm disso, os autodidatas podero utilizar este livro, j que o mesmo abrange de forma sequencial a fase introdutria da linguagem de programao C at a sua fase intermediria. Esta obra contm vrios exerccios executados passo a passoquepermitemqueoleitorpossaacompanharodesenvolvimentodemaneiratileeficaz.Destaforma, o prprio leitor poder implementar cada exerccio medida que vai lendo o livro. O mesmo apresenta-seestruturadodeformaque,sempreaofinaldecadacaptulo,sejamapresentadosexerc-cios de reviso abrangendo cada contedo estudado, com o objetivo de avaliar e consolidar os conhe-cimentosadquiridos.Salientandoquetodososexercciospossuemresoluocontidanofinaldolivro.

  • unIDADE III

    ESTRuTuRAS DE REPETIOProfessora Me. Gislaine Camila Lapasini Leal

    Objetivos de Aprendizagem

    Estudarasestruturasderepetiocontroladasecondicionais.

    Construirprogramasutilizandoestruturasderepetio.

    Plano de Estudo

    A seguir, apresentam-se os tpicos que voc estudar nesta unidade:

    EstruturadeRepetio

    EstruturaFOR

    EstruturaWHILE

    EstruturaDOWHILE

    Problema1

    Problema2

  • 89ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    InTRODuO

    Nesta unidade voc estudar a construo de programas com a repetio de um trecho de cdigo. A repetio permite executar um conjunto de instrues quantas vezes forem necessrias sem ter que precisar reescrever trechos de cdigos idnticos.

    Aprenderemos como utilizar as estruturas de repetio com laos contados e laos condicionais. O uso de laos contados restrito a situaes em que sabemos previamente quantas vezes as instrues precisam ser executadas. Na linguagem C a estrutura de repetio com lao contado o for.

    Nos laos condicionais no sabemos previamente o nmero de execues e atrelamos a repetio a uma condio. Trataremos os casos com condio no incio e no final do lao, estudando as estruturas: while e do while.

    Para facilitar o aprendizado construiremos algoritmos utilizando cada uma dessas estruturas. Ao final desta unidade voc estar apto a construir programas com estruturas de repetio e poder responder s seguintes questes: como repetir um trecho de cdigo um nmero determinado de vezes? Como repetir um trecho de cdigo com base em uma condio? Que estrutura de repetio mais adequada para cada problema? Quando utilizar estruturas de repetio encadeadas?

  • 90 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    ESTRuTuRA DE REPETIO

    H situaes em nossos programas que precisamos repetir um determinado trecho de cdigo ou todo o cdigo um determinado nmero de vezes. Nestes casos, utilizaremos uma estrutura de repetio que nos permite criar um loop para efetuar o processamento de um trecho de cdigo quantas vezes for necessrio. Na literatura essas estruturas de repetio (loop) so, tambm, denominadas de laos de repetio e malhas de repetio (MANZANO; OLIVEIRA, 1997).

    A vantagem da estrutura de repetio que no precisamos reescrever trechos de cdigo idnticos, reduzindo assim o tamanho do algoritmo. Alm disso, podemos determinar repeties com nmero de vezes varivel (LOPES; GARCIA, 2002).

    Nas estruturas de repetio o nmero de repeties pode ser fixo ou estar relacionado a uma condio. Isto , os laos de repetio podem ser classificados em laos contados e laos condicionais. O lao contado utilizado quando conhecemos previamente o nmero de iteraes que precisa ser realizado. J em um lao condicional este nmero de iteraes

    Font

    e: S

    HuTT

    ERST

    OCK.

    COM

  • 91ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    desconhecido e para controlar o loop utilizamos a estrutura condicional (ASCENCIO; CAMPOS, 2010).

    Na linguagem C utilizamos o comando for para laos contados e os comandos while e do while para laos condicionais. Nas sees seguintes estudaremos cada uma destas estruturas de repetio da linguagem C, destacando sua sintaxe e aplicao.

    ESTRuTuRA FOR

    uma estrutura do tipo lao contado, isto , utilizada para um nmero definido de repeties. Devemos utilizar essa estrutura quando sabemos previamente o nmero de vezes que o trecho de cdigo precisa ser repetido. A sintaxe desta estrutura :

    for ( i= valor inicial; condio; incremento ou decremento de i){ ;}

    Na primeira parte temos a inicializao da varivel i, que tem como funo controlar o nmero de repeties do lao. Essa inicializao executada em primeiro lugar e uma nica vez. A segunda parte consiste em uma expresso relacional que, ao assumir valor falso, determinar o fim da repetio. A terceira parte responsvel por atualizar (incrementar ou decrementar) o valor da varivel utilizada para controlar a repetio. A atualizao executada ao fim de cada iterao (ASCENCIO; CAMPOS, 2010).

    Quando temos a execuo de apenas uma linha de comando podemos suprimir as chaves. Neste caso, o compilador entender que a estrutura de repetio finaliza quando for encontrado o primeiro ;.

  • 92 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Para facilitar o entendimento vamos construir um programa que efetua a leitura de um nome e o imprime dez vezes na tela. Como sabemos, o nmero de iteraes que deve ser realizado utilizamos a estrutura for, em que temos a inicializao da varivel i com valor 1, a expresso relacional que controla a execuo do lao i

  • 93ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Figura 20-ProgramaemC-Sada

    Como temos a execuo de uma nica instruo podemos suprimir as chaves, conforme programa apresentado no Quadro 39.

    Quadro 39 - Programa em C

    #include main (){ char nome[30]; int i ; printf(\n Informe o nome:); scanf(%s, nome); for (i=1; i

  • 94 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Lembre-se, s podemos suprimir as chaves nas situaes em que queremos executar apenas uma instruo.

    ESTRuTuRA WHILE

    A estrutura while uma estrutura do tipo lao condicional, isto , o loop baseia-se na anlise de uma condio. Essa estrutura utilizada quando temos um nmero indefinido de repeties e se caracteriza por realizar um teste condicional no incio. Como o teste condicional executado no incio, podem ocorrer casos em que as instrues da estrutura de repetio nunca sejam executadas. Isso acontece quando o teste condicional da estrutura resulta em falso logo na primeira comparao (ASCENCIO; CAMPOS, 2010).

    A sintaxe da estrutura while :

    while (condio){ ;}

    Os comandos delimitados pelas chaves so executados enquanto a condio for verdadeira. Vamos analisar o funcionamento desta estrutura utilizando o exemplo apresentado na seo anterior, receber um nome e imprimi-lo dez vezes.

    Na estrutura while temos que representar o critrio de parada (dez iteraes) utilizando uma condio. Para tanto, definimos uma varivel que ir controlar o nmero de repeties. Essa varivel precisa ser inicializada fora da estrutura de repetio e incrementada no interior do lao. No Quadro 40 apresentado o programa.

  • 95ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Quadro 40 - Programa em C

    #include main (){ char nome[30]; int i ; printf(\n Informe o nome:); scanf(%s, nome); i = 0; while (i != 10) { printf(\n %d - %s, i, nome); i++; } return (0);}

    A Figura 21 ilustra o resultado da execuo do programa, em que o lao repetido at que a expresso relacional (i != 10) se torne falsa.

  • 96 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Figura21-ProgramaemC-Sada

    Neste ponto voc pode estar se questionando por que a varivel i no foi inicializada com o valor um ao invs de zero. Voc j sabe o porqu? Quando o valor de i igual a 10 as instrues contidas no interior do lao no so executadas, pois a expresso relacional resulta em falso. Deste modo, teramos a impresso do nome apenas nove vezes. Se quisermos inicializar a varivel i em um temos que alterar a expresso relacional para i != 11.

    ESTRuTuRA DO WHILE

    A estrutura do while uma estrutura do tipo lao condicional, isto , o loop baseia-se na anlise de uma condio. Essa estrutura utilizada quando temos um nmero indefinido de repeties e precisamos que o teste condicional seja realizado aps a execuo do trecho de cdigo. Nesse tipo de estrutura, o trecho de cdigo executado pelo menos uma vez, pois o teste condicional realizado no fim (ASCENCIO; CAMPOS, 2010).

  • 97ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    A sintaxe dessa estrutura dada por:

    do{ ;}while (condio);

    A diferena entre a estrutura while e do while o momento em que o teste condicional analisado. No primeiro caso, temos a anlise da condio e a execuo do trecho de cdigo apenas se o resultado do teste for verdadeiro. No segundo caso temos a execuo do trecho e depois a anlise da condio, o que implica que o trecho de cdigo ser executado no mnimo uma vez.

    Para esclarecer o funcionamento da estrutura apresentado no Quadro 41 o programa para o problema descrito na seo anterior utilizando a estrutura do while.

  • 98 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Quadro 41 - Programa em C

    #include main (){ char nome[30]; int i ; printf(\n Informe o nome:); scanf(%s, nome); i = 0; do { printf(\n %d - %s, i, nome); i++; } while (i != 10); return (0);}

    Se voc ficou com dvidas quanto ao funcionamento desta estrutura, fique tranquilo!! Veremos mais aplicaes.

    PROBLEMA 1

    O problema consiste em ler um conjunto de nmeros inteiros e contar a quantidade de nmeros pares e mpares. A leitura dos nmeros deve ser realizada at que seja lido o valor zero.

    A entrada de dados consiste na leitura de nmeros inteiros repetidas vezes, at que o valor

  • 99ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    zero seja digitado. O processamento contar a quantidade de nmeros pares e mpares. E a sada informar quantos dos nmeros lidos na entrada so pares e quantos so mpares. No Quadro 42 apresentado um programa para este problema utilizando a estrutura while e no Quadro 43 utilizando a estrutura do while.

    Quadro 42 - Programa em C

    #include main (){ int par, impar, num; par = 0; impar = 0; printf (\n Informe o numero:); scanf (%d, &num); while (num !=0) { if (num % 2 == 0) par++; else impar++; printf (\n Informe o numero:); scanf (%d, &num); } printf (\n A quantidade de par e : %d, par); printf (\n A quantidade de impar e : %d, impar); return (0);}

  • 100 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Note que como a estrutura while realiza o teste no incio, temos que efetuar a leitura do nmero antes do lao de repetio e no interior do lao tambm. O que aconteceria se no tivssemos a leitura do nmero dentro do lao de repetio? Nesse caso teramos um lao infinito, pois a condio num != 0 sempre resultaria em verdadeiro.

    Na estrutura do while a leitura do nmero realizada apenas no interior da estrutura de repetio, pois o teste realizado ao final. Observe que se o primeiro nmero fornecido pelo usurio for igual a zero as instrues internas ao lao sero executadas, pois o teste realizado pelo menos uma vez. Deste modo, teremos como sada a quantidade um para o nmero de pares.

    Font

    e: S

    HuTT

    ERST

    OCK.

    COM

  • 101ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Quadro 43 - Programa em C

    #include main (){ int par, impar, num; par = 0; impar = 0; do { printf (\n Informe o numero:); scanf (%d, &num); if (num % 2 == 0) par++; else impar++; } while (num !=0); printf (\n A quantidade de par e : %d, par); printf (\n A quantidade de impar e : %d, impar); return (0);}

    Agora que voc j estudou como utilizar as estruturas de repetio baseadas em lao condicional, execute os dois programas e compare as sadas.

    Fique atento!! No interior da estrutura de repetio while e do while precisamos ter uma instruo que altere o valor da expresso relacional. Caso contrrio, o lao entrar em loop, sendo executado infinitamente.

  • 102 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    PROBLEMA 2

    O problema consiste em auxiliar um professor no fechamento das notas de uma turma. Para tanto, deve ser construdo um programa que leia o cdigo do aluno, o nmero de notas da disciplina e as notas. Calcule a mdia final de cada aluno e informe o nmero de alunos aprovados e reprovados. Para ser aprovado o aluno precisa obter mdia maior ou igual a 6. O programa encerrado quando informado o cdigo de aluno 0.

    A entrada de dados consiste em ler o nmero de notas, o cdigo do aluno e as notas. O processamento consiste em a partir do nmero de notas informado para a disciplina efetuar a repetio da leitura de notas, som-las e calcular a mdia aritmtica do aluno. Se a mdia for maior ou igual a seis devemos incrementar a varivel que controla o nmero de aprovados, seno temos que incrementar a varivel que controla o nmero de reprovados. Como sada temos o nmero de alunos aprovados e reprovados.

    No Quadro 44 temos a resoluo do problema utilizando a estrutura do while e no Quadro 45 com a estrutura while.

  • 103ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Quadro 44 - Programa em C

    #include main (){ float nota, soma, media; int cod, i, nnota, naprovado, nreprovado; naprovado = 0; nreprovado = 0; printf(\n Informe o numero de notas da disciplina:); scanf(%d, &nnota); do { printf (\n Informe o codigo do aluno:); scanf (%d, &cod); soma = 0; if (cod != 0) { for (i=1; i=6) naprovado ++; else nreprovado ++; } } while (cod !=0); printf (\n O numero de aprovados e : %d, naprovado); printf (\n O numero de reprovados e : %d, nreprovado); return (0);}

  • 104 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Observe que ao utilizar a estrutura do while precisamos inserir uma condio que verifique se o cdigo informado diferente de zero, pois como o teste condicional executado ao final teramos a execuo de todas as instrues de leitura de notas.

  • 105ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Quadro 45 - Programa em C

    #include main (){ float nota, soma, media; int cod, i, nnota, naprovado, nreprovado; naprovado = 0; nreprovado = 0; printf(\n Informe o numero de notas da disciplina:); scanf(%d, &nnota); printf (\n Informe o codigo do aluno:); scanf (%d, &cod); while (cod != 0) { soma = 0; for (i=1; i=6) naprovado ++; else nreprovado ++; printf (\n Informe o codigo do aluno:); scanf (%d, &cod); } printf (\n O numero de aprovados e : %d, naprovado); printf (\n O numero de reprovados e : %d, nreprovado); return (0);}

  • 106 ALGORITMOS E LGICA DE PROGRAMAO II | Educao a Distncia

    Na construo utilizando a estrutura while foi realizada a leitura do cdigo do aluno antes da estrutura de repetio, pois a condio testada no incio do lao. Alm disso, a leitura deve ser realizada no interior da estrutura para que o valor da expresso relacional possa ser alterado, seno teramos um lao infinito.

    Observe que utilizamos encadeamento de estrutura de repetio, isto , uma estrutura de repetio dentro da outra. No primeiro caso, o encadea