Você está na página 1de 58

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

Algoritmos e Introduo Programao Linguagem C

Prof. Fbio Diniz Rossi

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

ndice

1. Algoritmos ...................................................................................................... 4 1.1. Introduo................................................................................................ 4 1.2. Representao de algoritmos .................................................................. 5 1.2.1. Pseudocdigo.................................................................................... 5 1.2.2. Diagrama de Fluxo de Dados............................................................ 6 1.2.3. Diagrama de Chapin ......................................................................... 7 1.3. Linguagens de Programao Interpretadas e Compiladas ...................... 7 2. Linguagem C .................................................................................................. 9 2.1. Histrico................................................................................................... 9 2.2. Bibliotecas e Cabealhos....................................................................... 10 2.3. Comentrios .......................................................................................... 10 2.4. Bloco de Instrues ............................................................................... 11 3. Manipulao de Dados................................................................................. 11 3.1. Constantes............................................................................................. 11 3.2. Variveis ................................................................................................ 12 3.3. Tipos de Dados...................................................................................... 12 4. Operadores .................................................................................................. 13 4.1. Operadores Aritmticos ......................................................................... 13 4.2. Operadores Aritmticos de Atribuio ................................................... 13 4.3. Operadores Relacionais ........................................................................ 13 4.4. Operadores Lgicos............................................................................... 14 4.5. Operadores de Incremento/Decremento................................................ 14 4.6. Precedncia de Operadores .................................................................. 14 4.7. Exerccios de Fixao............................................................................ 14 5. Entrada/Sada .............................................................................................. 15 5.1. Introduo.............................................................................................. 15 5.2. Expresses de Controle......................................................................... 15 5.3. Cdigos de Formatao......................................................................... 16 5.4. printf....................................................................................................... 16 5.4.1. Exerccios de Fixao ..................................................................... 18 5.5. scanf ...................................................................................................... 18 5.5.1. Exerccios de Fixao ..................................................................... 19 6. Algoritmo de Seleo ................................................................................... 21 6.1. Introduo.............................................................................................. 21 6.2. If Else.................................................................................................. 21 6.2.1. Exerccios de Fixao ..................................................................... 23 6.3. Switch Case........................................................................................ 24 6.3.1. Exerccios de Fixao ..................................................................... 25 7. Algoritmo de Repetio ................................................................................ 26 7.1. Introduo.............................................................................................. 26 7.2. While...................................................................................................... 26
Prof. Fbio Diniz Rossi
2

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

7.2.1. Exerccios de Fixao ..................................................................... 27 7.3. For ......................................................................................................... 28 7.3.1. Exerccios de Fixao ..................................................................... 29 8. Vetores ......................................................................................................... 30 8.1. Introduo.............................................................................................. 30 8.2. Exerccios de Fixao............................................................................ 31 9. Matrizes........................................................................................................ 32 9.1. Introduo.............................................................................................. 32 9.2. Exerccios de Fixao............................................................................ 33 10. Strings ........................................................................................................ 35 10.1. Introduo............................................................................................ 35 10.2. Exerccios de Fixao.......................................................................... 35 11. Registros ou Structs ................................................................................... 37 11.1. Introduo............................................................................................ 37 11.2. Exerccios de Fixao.......................................................................... 38 12. Ponteiros .................................................................................................... 40 12.1. Introduo............................................................................................ 40 12.2. Exerccios de Fixao.......................................................................... 41 13. Funes...................................................................................................... 42 13.1. Introduo............................................................................................ 42 13.2. Exerccios de Fixao.......................................................................... 43 14. Arquivos ..................................................................................................... 44 14.1. Introduo............................................................................................ 44 14.2. Exerccios de Fixao.......................................................................... 46 Bibliografia........................................................................................................ 48 Manual de utilizao do Dev-C++ .................................................................... 49 Bibliotecas e Funes mais utilizadas .............................................................. 52

Prof. Fbio Diniz Rossi

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

Algoritmos e Introduo Programao 1. Algoritmos Um algoritmo uma seqncia finita de instrues bem definidas e no ambguas, cada uma das quais pode ser executada mecanicamente em um perodo de tempo finito e com uma quantidade de esforo finita. 1.1. Introduo O conceito de algoritmo freqentemente ilustrado pelo exemplo de uma receita, embora muitos algoritmos sejam mais complexos. Eles podem repetir passos (fazer iteraes) ou necessitar de decises (tais como comparaes ou lgica) at que a tarefa seja completada. Um algoritmo corretamente executado no ir resolver um problema se estiver implementado incorretamente ou se no for apropriado ao problema. Um algoritmo no representa, necessariamente, um programa de computador, e sim os passos necessrios para realizar uma tarefa. Sua implementao pode ser feita por um computador, por outro tipo de autmato ou mesmo por um ser humano. Diferentes algoritmos podem realizar a mesma tarefa usando um conjunto diferenciado de instrues em mais ou menos tempo, espao ou esforo do que outros. Tal diferena pode ser reflexo da complexidade computacional aplicada, que depende de estruturas de dados adequadas ao algoritmo. Por exemplo, um algoritmo para se vestir pode especificar que voc vista primeiro as meias e os sapatos antes de vestir a cala enquanto outro algoritmo especifica que voc deve primeiro vestir a cala e depois as meias e os sapatos. Fica claro que o primeiro algoritmo mais difcil de executar que o segundo apesar de ambos levarem ao mesmo resultado. O conceito de um algoritmo foi formalizado em 1936 pela Mquina de Turing de Alan Turing e pelo clculo lambda de Alonzo Church, que formaram as primeiras fundaes da Cincia da computao. No se aprende algoritmos: Copiando algoritmos Estudando algoritmos S se aprende algoritmos: Construindo algoritmos Testando algoritmos Todo algoritmo deve ter as seguintes propriedades: Possui estado inicial Possui dados de entrada Possui uma seqncia lgica e finita de aes claras e precisas Produz dados de sada e estado final previsvel Deve ser eficaz
Prof. Fbio Diniz Rossi
4

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

1.2. Representao de algoritmos Existem diversas formas de representao de algoritmos, mas no h um consenso com relao melhor delas. O critrio usado para classificar hierarquicamente estas formas est diretamente ligado ao nvel de detalhe ou, inversamente, ao grau de abstrao oferecido. Algumas formas de representao de algoritmos tratam os problemas apenas em nvel lgico, abstraindo-se de detalhes de implementao muitas vezes relacionados com alguma linguagem de programao especfica. Por outro lado existem formas de representao de algoritmos que possuem uma maior riqueza de detalhes e muitas vezes acabam por obscurecer as idias principais do algoritmo, dificultando seu entendimento. Dentre as formas de representao de algoritmos mais conhecidas podemos citar: pseudocdigo, diagrama de fluxo de dados e diagrama de chapin. 1.2.1. Pseudocdigo Pseudocdigo (ou portugus estruturado ou portugol) uma forma genrica de escrever um algoritmo, utilizando uma linguagem simples (nativa a quem o escreve, de forma a ser entendida por qualquer pessoa) sem necessidade de conhecer a sintaxe de nenhuma linguagem de programao. , como o nome indica, um pseudocdigo e, portanto, no pode ser executado num sistema real (computador) de outra forma deixaria de ser pseudo. Os livros sobre a cincia de computao utilizam freqentemente o pseudocdigo para ilustrar os seus exemplos, de forma que todos os programadores possam entend-los (independentemente da linguagem que utilizem).
SNTESE Objetivo: analisar a idade de uma pessoa Entrada: uma idade Sada: situao da maturidade da pessoa DECLARAES inteiro IDADE; INCIO escreva (Informe sua idade: ); leia (IDADE); se (IDADE < 21) ento escreva (voc jovem); seno escreva (voc adulto); fim_se; FIM

Prof. Fbio Diniz Rossi

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

A linguagem de comunicao natural imprecisa e muitas vezes prolixa, dificultando a comunicao correta com o computador se usada de forma bem natural. Por isso necessria agregao de regras e normas que permitam a representao organizada e eficiente da soluo desejada, indicando sempre, com clareza e preciso, o que realmente o computador deve fazer. 1.2.2. Diagrama de Fluxo de Dados O DFD ou Diagrama de Fluxos de Dados (ou Fluxograma ou diagrama de blocos) uma ferramenta para a modelagem de sistemas. Ela fornece apenas uma viso do sistema, a viso estruturada das funes, ou seja, o fluxo dos dados. O DFD pode ter vrios nveis de detalhamento de acordo com a necessidade do sistema. As principais figuras usadas na elaborao de um fluxograma esto relacionadas a seguir, sendo importante esclarecer que so vrias as figuras geomtricas empregadas na construo dos mesmos, porm neste estudo se estar buscando a compreenso da lgica racional proposta por este tipo de representao. As figuras usadas so:

Imagine uma situao onde a idade de uma pessoa deva ser analisada para sua classificao em jovem ou adulto. O algoritmo a seguir apresentado graficamente por meio do fluxograma coerente com a soluo desejada.

Prof. Fbio Diniz Rossi

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

1.2.3. Diagrama de Chapin Elaborado por Nassi e Shneiderman e ampliada por Ned Chapin. Almejada a substituio da representao tradicional (diagrama de blocos) por uma diagramao com quadros que oferecessem a viso hierrquica e estruturada da lgica proposta para um programa. Entre os diversos mtodos existentes para este tipo de representao, o Diagrama de Chapin um dos menos utilizados atualmente, principalmente, porque exige bastante ateno do programador na representao do seu raciocnio, ao invs de se concentrar mais sobre o prprio problema a ser analisado e posteriormente solucionado.

1.3. Linguagens de Programao Interpretadas e Compiladas Uma linguagem de programao pode ser convertida, ou traduzida, em cdigo de mquina por compilao ou interpretao, que juntas podem ser chamadas de traduo. Se o mtodo utilizado traduz todo o texto do programa (tambm chamado de cdigo), para s depois executar (ou rodar, como se diz no jargo da computao) o programa, ento se diz que o programa foi compilado e que o mecanismo utilizado para a traduo um compilador (que por sua vez nada
Prof. Fbio Diniz Rossi
7

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

mais do que um programa). A verso compilada do programa tipicamente armazenada, de forma que o programa pode ser executado um nmero indefinido de vezes sem que seja necessria nova compilao, o que compensa o tempo gasto na compilao. Isso acontece com linguagens como Pascal e C (linguagem de programao). Se o texto do programa traduzido na medida em que vai sendo executado, como em Javascript, Python, Perl ou PHP, num processo de traduo de trechos seguidos de sua execuo imediata, ento diz-se que o programa foi interpretado e que o mecanismo utilizado para a traduo um interpretador. Programas interpretados so geralmente mais lentos do que os compilados, mas so tambm geralmente mais flexveis, j que podem interagir com o ambiente mais facilmente (freqentemente linguagens interpretadas so chamadas tambm de script). Embora haja essa distino entre linguagens interpretadas e compiladas, as coisas nem sempre so to simples. H linguagens compiladas para um cdigo de mquina de uma mquina virtual (sendo esta mquina virtual apenas mais um software, que emula a mquina virtual sendo executado em uma mquina real), como o Java e C#. E tambm h outras formas de interpretar em que os cdigos-fontes, ao invs de serem interpretados linha-a-linha, tm blocos compilados para a memria, de acordo com as necessidades, o que aumenta a performance dos programas quando os mesmos mdulos so chamados vrias vezes, tcnica esta conhecida como Just-in-Time.

Prof. Fbio Diniz Rossi

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

2. Linguagem C A linguagem C classificada de alto nvel pela prpria definio desse tipo de linguagem. A programao em linguagens de alto nvel tem como caracterstica no ser necessrio conhecer o processador, ao contrrio das linguagens de baixo nvel. 2.1. Histrico A primeira verso de C foi criada por Dennis Ritchie em 1972 nos laboratrios Bell para ser includo como um dos softwares a ser distribudos juntamente com o sistema operacional Unix do computador PDP-11, na equipe certificada por Ken Thompson. Ao ponto de vista tcnico, o surgimento do C iniciou com a linguagem ALGOL 60, definida em 1960. ALGOL era uma linguagem de alto nvel, que permitia ao programador trabalhar "longe da mquina", sem se preocupar com os aspectos de como cada comando ou dado era armazenado ou processado. Foi criado para substituir o FORTRAN. ALGOL no teve sucesso, talvez por tentar ser de muito alto nvel em uma poca em que a maioria dos sistemas operacionais exigiam do usurio um grande conhecimento de hardware. Em 1967 surgiu CPL (Combined Programming Language) nas universidades de Londres e Cambridge com o objetivo, segundo a equipe do projeto, de "trazer ALGOL terra", ou "manter contato com a realidade de um computador real". Da mesma forma de ALGOL, CPL no foi bem aceita, em especial pelos projetistas de sistemas operacionais que a consideravam difcil de implementar. Ainda em 1967, em Cambridge, Martin Richards criou o BCPL (Basic CPL), uma simplificao do CPL, tentando manter apenas as "boas coisas do CPL". Em 1970, Ken Thompson, chefe da equipe que projetou o UNIX para o PDP11 do Bell Labs, implementou um compilador para uma verso mais reduzida do CPL. Batizou a linguagem de B. Tanto BCPL quanto B mostravam-se muito limitadas, prestando-se apenas para certas classes de problemas. Isto se fez sentir especialmente na primeira verso do PDP11, lanado no mercado em 1971. Um dos fatores que levou isto foi a inteno do grupo responsvel pelo UNIX de reescrev-lo todo em uma linguagem de alto nvel, e para isto B era considerado lenta. Estes problemas levaram a que o projetista Dennis Ritchie, do Bell Labs, fosse encarregado de projetar uma nova linguagem, sucessora do B, que viria ento, a ser chamada de C. A linguagem C buscou manter o contato com o computador real e ainda sim dar ao programador novas condies para o desenvolvimento de programas em reas diversas, como comercial, cientfica e de engenharia. Por muitos anos (aproximadamente 10) a sintaxe (formato) tida como padro da linguagem C foi aquela fornecida com o UNIX verso 5.0 do Bell Labs. A principal documentao deste padro encontra-se na publicao The
Prof. Fbio Diniz Rossi

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

C Programming Language, de Brian Kernighan e Dennis Ritchie (K&R), a bblia da linguagem C. O mais interessante desta verso de C era que os programas-fonte criados para rodar em um tipo de computador podiam ser transportados e recompilados em outros sem grandes problemas. A esta caracterstica d-se o nome de portabilidade. Com ela, uma empresa que desenvolve um programa pode faz-lo rodar em diferentes computadores sem ter um elevado custo a cada vez que isto for feito. Em 1985, ANSI (American National Standards Institute) estabeleceu um padro oficial de C o chamado C ANSI. 2.2. Bibliotecas e Cabealhos Na linguagem C, arquivos de cabealho (header files) uma caracterstica de certas linguagens que permite aos programadores separar certos elementos de cdigos-fonte de programas em arquivos reusveis. As bibliotecas e cabealhos so includos no cdigo-fonte atravs de diretiva de pr-processamento #include. Abaixo, listamos os cabealhos mais utilizados na linguagem C: stdio.h conio.h string.h math.h stdlib.h 2.3. Comentrios Comentrio uma maneira simples e bastante til em programao que serve para explicar um trecho de cdigo-fonte para uma futura referncia ou mesmo para que outro membro da equipe de programao entenda o que foi desenvolvido. Na linguagem C, comentrios tm o seguinte formato:
/* explicao ... */

Manipulao de entrada/sada Manipulao de caracteres na tela Tratamento de cadeia de caracteres Funes matemticas comuns em computao Funes de alocao de memria, converses, etc

Tudo que se encontrar entre /* e */ no ser lido pelo compilador. Em C++, que uma linguagem posterior ao C que inclui orientao a objetos, comentrios tambm podem ser representados por // antes da explicao, como:
// explicao ...

Se estivermos utilizando para desenvolver em C um compilador de C++, ambos os tipos de comentrios iro funcionar.
Prof. Fbio Diniz Rossi
10

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

2.4. Bloco de Instrues Os programas em C sempre seguiro o modelo descrito abaixo, incluindo comentrios, bibliotecas, funo principal e a funo getch.
/* Programa 1 */ #include <stdio.h> #include <conio.h> main( ) { . . <corpo do programa> . . getch(); } comentrio biblioteca biblioteca funo principal inicio

funo que espera entrada por teclado fim

Usaremos o compilador Dev-C++, que compila tanto cdigos-fonte em C quanto em C++, portanto necessita das bibliotecas deste modelo para compilar. 3. Manipulao de Dados Qualquer programa tem que fazer alguma coisa (nem que seja enviar um sinal bip) seno no um programa, ou seja, ele tem que apresentar contedo. Assim, como apresenta contedo, vai alterar estados dentro do computador, sendo que, o estado de uma das peas que vai inevitavelmente se alterar a memria interna. inevitvel um programa utilizar a memria do computador, assim, o programa precisa de um espao fsico na memria e para isso ter que o requisitar. J realizamos abstraes desse tipo na matemtica, pois uma varivel uma expresso que varia e normalmente representado por uma incgnita X, e uma constante uma expresso que no se altera (o nmero de Avogrado, o Pi, o nmero de Neper) que pode ser representado por uma letra. Veremos a seguir, que constantes e variveis se comportam igualmente na computao. 3.1. Constantes So valores que no se alteram ao longo do programa. Uma constante pode aparecer sob forma de um valor explcito (constante literal) ou um nome simblico que representa um determinado valor ao longo do programa (constante simblica). Exemplo:
PI = 3.1416; Prof. Fbio Diniz Rossi
11

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

3.2. Variveis Uma varivel identifica um espao na memria do computador, reservado para armazenar valores de um determinado tipo. Este espao de memria guarda informaes que podem ser alteradas no curso da execuo do programa. Exemplo:
a = 3; a = a + 2;

3.3. Tipos de Dados Os tipos de dados mais usuais em C so: char: Caracter: O valor armazenado um caractere. Caracateres geralmente so armazenados em cdigos (usualmente o cdigo ASCII). int: Nmero inteiro o tipo padro e o tamanho do conjunto que pode ser representado normalmente depende da mquina em que o programa est rodando. float: Nmero em ponto flutuante de preciso simples. So conhecidos normalmente como nmeros reais. Porm, existem vrios tipos de dados suportados pelo padro ANSI C, que so:

Prof. Fbio Diniz Rossi

12

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

4. Operadores Operadores so smbolos matemticos e lgicos que servem para a realizao de operaes aritmticas, lgicas e relacionais. 4.1. Operadores Aritmticos Os operadores aritmticos so usados para calcular expresses matemticas. Os operadores aritmticos seguem abaixo: Significado Atribuio Soma Subtrao Multiplicao Diviso Resto Smbolo = + * / %

4.2. Operadores Aritmticos de Atribuio So combinaes de operadores que simplificam as instrues e que geralmente so usados por programadores experientes. Dessa forma uma instruo escrita da forma: Normal var = var + expr; var = var expr; var = var * expr; var = var / expr; 4.3. Operadores Relacionais Esses operadores so responsveis pelas comparaes de expresses nos programas. Os operadores relacionais seguem abaixo: Significado Maior Maior ou igual Menor Menor ou igual Igualdade Diferena Smbolo > >= < <= == != Reduzida var += expr; var -= expr; var *= expr; var /= expr;

Prof. Fbio Diniz Rossi

13

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

4.4. Operadores Lgicos Os operados lgicos servem para interligar mais de uma operao relacional. Os operadores lgicos seguem abaixo: Significado E OU No Smbolo && || !

4.5. Operadores de Incremento/Decremento O operador de incremento (++) soma 1 ao seu operando enquanto que o de decremento (--) subtrai um. Eles podem ser pr-fixados ou ps-fixados conforme mostra a tabela abaixo: Operador ++ -Instruo var = var + 1; var = var 1; Ps-fixado var = var++; ou var++; var = var--; ou var--; Pr-fixado var = ++var; ou ++var; var = --var; ou --var;

4.6. Precedncia de Operadores Para evitar ordem errada em um clculo, utilizamos a precedncia de operadores, com a seguinte ordem: 1 2 3 4 5 6 parnteses e funes potncia e resto multiplicao e diviso adio e subtrao operadores relacionais operadores lgicos

4.7. Exerccios de Fixao Diga o resultado das expresses abaixo: a) b) c) d) x x x x =5*4/6+7 =5*4%6+7 = ((4 / 2) + (3 * 5)) = (3 + 2 * (4 + (2+4))) % 2

Prof. Fbio Diniz Rossi

14

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

5. Entrada/Sada Entrada/sada (sigla I/O (em ingls)) um termo utilizado quase que exclusivamente no ramo da computao (ou informtica), indicando entrada (insero) de dados por meio de algum cdigo ou programa, para algum outro programa ou hardware, bem como a sua sada (obteno de dados) ou retorno de dados, como resultado de alguma operao de algum programa, consequentemente resultado de alguma entrada. So exemplos de unidades de entrada de um computador: disco rgido, microfone, teclado, mouse, tela sensvel ao toque, Scanner, Leitor de cdigo de barras, Celular, Pendrive, Mquina fotogrfica digital, Webcam, joystick e outros acessrios de jogos. So exemplos de unidades de sada de um computador: monitor, caixas de som, impressora, disco rgido. Algumas unidades so de entrada e sada de dados ou tambm chamados Dispositivos Hbridos: disco rgido, disco flexvel ou disquete, monitor sensvel a toques, joystick vibratrio. As interfaces de entrada e sada so responsveis pela conexo entre as vrias partes de um sistema computacional baseado na arquitetura de VonNeumann. Esta interface responsvel por conectar fisicamente o processador e a memria do sistema ao barramento, tornando-se o terceiro elemento do sistema computacional proposto. Ao contrrio do que se pode pensar a interface de entrada e sada no s o conector fsico e sim tambm o responsvel pela comunicao lgica entre o barramento e o dispositivo. Essa funo de conexo foi basicamente desenvolvida para que seja possvel a comunicao entre vrios dispositivos, fazendo com que a velocidade do barramento seja mais bem aproveitada e ainda tanto os perifricos quanto os elementos essenciais tenham programao/produo mais voltada ao seu desempenho, deixando a interconexo com as interfaces de entrada e sada. 5.1. Introduo Entrada/Sada na linguagem C realizada atravs de muitas funes da linguagem, porm as mais simples veremos agora, que so o printf e o scanf. 5.2. Expresses de Controle As expresses de controle contm tanto caracteres para serem impressos na tela como cdigos de formato que especificam como apresentar o restante dos argumentos. So utilizados para entrada de dados junto ao scanf e sada de dados junto ao printf. Cdigo %c
Prof. Fbio Diniz Rossi

Significado Exibe um caractere


15

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

%d %i %e %E %f %g %G %o %s %u %x %X %% %p

Exibe um inteiro em formato decimal Exibe um inteiro Exibe um nmero em notao cientfica (com e minsculo) Exibe um nmero em notao cientfica (com E maisculo) Exibe um ponto flutuante em formato decimal Usa %e ou %f, o que for menor O mesmo que %g, s que um E maisculo usado se o formato %e for escolhido Exibe um nmero em notao octal Exibe uma string Exibe um decimal sem sinal Exibe um nmero em hexadecimal com letras minsculas Exibe um nmero em hexadecimal com letras maisculas Exibe um sinal de % Exibe um ponteiro

5.3. Cdigos de Formatao Os cdigos de formatao servem para exibir formatos na exibio dos caracteres na tela. So eles: Cdigo \n \t \b \ \\ \f \0 5.4. printf A funo printf parte de um conjunto de funes pr-definidas armazenadas em uma biblioteca padro de rotinas da linguagem C stdio.h. Ela permite apresentar na tela os valores de qualquer tipo de dado. Para tanto, printf utiliza o mecanismo de formatao, que permite traduzir a representao interna de variveis para a representao ASCII que pode ser apresentada na tela. O primeiro argumento de printf um string de controle, uma seqncia de caracteres entre aspas. Esta string, que sempre deve estar presente, pode especificar atravs de caracteres especiais (as seqncias de converso) quantos outros argumentos estaro presentes nesta invocao da funo. Estes outros argumentos sero variveis cujos valores sero formatados e apresentados na tela. Por exemplo, se o valor de uma varivel inteira x 12, ento a execuo da funo:
printf("Valor de x = %d", x); Prof. Fbio Diniz Rossi
16

Significado Nova linha Tabulao Retrocesso Aspas Barra Salta formulrio Nulo

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

Imprime na tela a frase Valor de x = 12. Se y uma varivel do tipo carter com valor 'A', ento a execuo de:
printf("x = %d e y = %c\n", x, y);

Imprime na tela a frase x = 12 e y = A seguida pelo carter de nova linha (\n), ou seja, a prxima sada para a tela aconteceria na linha seguinte. Observe que a seqncia de converso pode ocorrer dentro de qualquer posio dentro da string de controle. A funo printf no tem um nmero fixo de argumentos. Em sua forma mais simples, pelo menos um argumento deve estar presente, a string de controle. Uma string de controle sem nenhuma seqncia de converso ser literalmente impressa na tela. Com variveis adicionais, a nica forma de saber qual o nmero de variveis que ser apresentado por inspeo da string de controle. Desta forma, cuidado deve ser tomado para que o nmero de variveis aps a string de controle esteja de acordo com o nmero de seqncias de converso presente na string de controle. Alm de ter o nmero correto de argumentos e seqncias de converso, o tipo de cada varivel deve estar de acordo com a seqncia de converso especificada na string de controle. A seqncia de converso pode ser reconhecida dentro da string de controle por iniciar sempre com o carter %. O primeiro programa que geralmente desenvolvido por alunos de programao o chamado Ol Mundo! ou Hello World!. Segue abaixo:
/* Programa Ola_Mundo */ #include <stdio.h> #include <conio.h> main( ) { printf(\n Ola Mundo!); getch(); }

Podemos ver nesse exemplo que, utilizamos apenas uma funo de escrita para exibir uma frase na tela. Outro exemplo mais completo que trata da soma entre duas constantes pode ser visto abaixo:
/* Programa Soma_A_B */ #include <stdio.h> #include <conio.h> main( ) { int a; int b; int c; a = 2; b = 3; c = a + b; printf(\n A soma e: %d, c); getch(); } Prof. Fbio Diniz Rossi
17

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

5.4.1. Exerccios de Fixao 1. Faa um algoritmo tendo 2 valores (a = 4, b = 2) e mostre as quatro operaes matemticas bsicas entre estes 2 nmeros. 2. Faa um algoritmo que calcule a rea de um tringulo, sabendo-se que base e altura so: b = 6, h = 3. (bxh)/2 3. Faa um algoritmo que atravs de quatro notas (n1 = 50, n2 = 70, n3 = 60, n4 = 80) calcule as mdias aritmtica, harmnica e geomtrica.
ma = n1 + n 2 + n3 + n 4 4

mg = 1 1 1 1 1 + + + n1 n 2 n3 n 4

n1x10 + n 2 x 20 + n3 X 30 + n4 X 40 100

mh =

5. Faa um algoritmo que imprima como resposta o sucessor e o antecessor do nmero 9, utilizando o nmero 9 em uma varivel. 6. Faa um algoritmo que imprima nome, endereo e telefone (Ana, Andradas, 99991111). 5.5. scanf Para ler um item deve-se passar uma string que representa o formato da entrada e os endereos das variveis de destino. Essa string do formato pode possuir caracteres normais que se espera na entrada e combinaes especiais usando o caractere % para representar os valores a serem lidos. Na sintaxe:
scanf(%d, &a);

Notamos que o valor a ser lido um valor inteiro devido ao %d dentro das aspas, e esse valor ser atribudo varivel a. O & (e comercial) indica que o valor digitado ser enviado para o endereo de memria da varivel a. Um exemplo completo da soma entre duas variveis lidas atravs do scanf pode ser visto abaixo:
/* Programa Ler_A_B_Somar */ #include <stdio.h> #include <conio.h> main( ) { int a; int b; int c; scanf(%d, &a); scanf(%d, &b); c = a + b; printf(\n A soma e: %d, c); Prof. Fbio Diniz Rossi
18

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas getch(); }

Em outro exemplo, scanf("%c%d", &l, &i) l um caractere (%c) seguido de um nmero (%d) e guarda nas variveis l e i, que devem ser dos tipos char e int, respectivamente. As expresses dos dados so sempre um % seguido de uma letra que indica o tipo a ser lido. Entre esses dois pode haver um nmero que indica o mximo de caracteres a serem usados para montar o valor a ser lido. Dessa forma scanf("%3s%4d", s, &i) l uma string (%s) de no mximo 3 caracteres e um nmero com no mximo 4 dgitos (incluindo o sinal) e guarda em s e i, respectivamente. 5.5.1. Exerccios de Fixao 1. Mostra na tela o produto entre 28 e 43. 2. Mostra a mdia aritmtica entre 3 nmeros passados pelo usurio. 3. L um nmero e mostra seu sucessor e seu antecessor na tela. 4. L dois nmeros e mostra a soma. Ante do resultado, dever aparecer a mensagem: SOMA. 5. L um nmero e mostra a tera parte deste nmero. 6. L dois nmeros e mostre os seguintes resultados: a. Dividendo: b. Divisor: c. Quociente: d. Resto: 7. Leia 4 nmeros e mostre a mdia ponderada, sabendo-se que os pesos so respectivamente: 1, 2, 3 e 4. 8. L o saldo de uma aplicao e imprime o novo saldo, considerado o reajuste de 7%. 9. Entre com a base e a altura de um retngulo e mostre os resultados: a. Permetro (Permetro igual soma dos 4 lados) b. rea (rea igual a lado vezes lado) 10. L o raio de um crculo e mostre como sada o permetro (2**Raio) e a rea (*Raio2). 11. Calcule e mostre a rea de um tringulo (rea igual a: (base x altura) dividido por 2) 12. Calcule o valor de uma prestao em atraso, utilizando a frmula: PRESTAO = VALOR + (VALOR * (TAXA/100) * TEMPO). 13. Leia o numerador e o denominador de uma frao e transforme-o em um nmero decimal. 14. L um valor de hora e informa quantos minutos se passaram desde o incio do dia. 15. Faa um programa que leia a idade de uma pessoa expressa em anos, meses e dias e mostre-a expressa apenas em dias. 16. Faa um programa que leia dois valores nas variveis A e B respectivamente, troque o valor contido na varivel A pelo valor em B, e o valor em B pelo valor em A, isto , imprimiremos A e B com os valores trocados.
Prof. Fbio Diniz Rossi
19

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

17. Faa um programa que leia A, B e C e calcule a seguinte frmula: (7*C+5*B) / (2*A*3), armazenando-a na varivel Result. 18. Faa um programa que leia a idade de uma pessoa expressa em dias e mostre-a expressa em anos, meses e dias. 19. Faa um programa que leia o nmero do funcionrio, o nmero de horas trabalhadas mensais, o valor que recebe por hora e o nmero de filhos com idade menor de 14 anos. Calcular e escrever o salrio deste funcionrio, sendo que cada filho menor de 14 anos acrescenta 10% do salrio. 20. O custo ao consumidor de um carro novo a soma do custo de fbrica com a percentagem do distribuidor e dos impostos (aplicados ao custo de fbrica). Supondo que a percentagem do distribuidor seja de 28% e os impostos de 45%, escreva um programa em C que leia o custo de fbrica de um carro e escreva o custo ao consumidor.

Prof. Fbio Diniz Rossi

20

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

6. Algoritmo de Seleo Um algoritmo no qual a execuo de determinados passos est subordinada veracidade de uma condio denominado de algoritmo de seleo. 6.1. Introduo Uma seleo permite a escolha de uma ou de um conjunto de instrues (bloco) a ser executado quando determinadas condies, representada por expresses lgicas ou relacionais, so ou no satisfeitas. Os algoritmos de seleo tambm so conhecidos como algoritmos condicionais, devido aos desvios condicionais em seu cdigo-fonte. Em algoritmos necessitamos de aes diferentes dependendo da avaliao de certas condies. O uso de condies ou comandos de deciso permite a alterao do fluxo de execuo das instrues de um algoritmo. Com isso, diferentes instrues sero executadas de acordo com a entrada fornecida ao algoritmo. Na linguagem C, os comandos de seleo mais utilizados so: if else (se ento) e o switch case (caso escolha). 6.2. If Else A estrutura If Else (Se Seno) permite vrios tipos de condio. Veremos cada uma delas. A primeira estrutura, consiste em apenas o comando If. Essa estrutura utilizada quando no precisamos escrever na tela uma resposta falsa. Podemos ver essa estrutura no exemplo abaixo:
/* Programa seleo_if */ #include <stdio.h> #include <conio.h> main( ) { int a; a = 10; if (a >= 10) { printf(\n Maior); } getch(); }

Neste programa, a seleo com o comando if verifica se a varivel a maior ou igual ao valor 10. Como o valor de a igual a 10, torna a resposta verdadeira, portanto o printf executado escrevendo na tela a palavra Maior. Quando existe apenas uma linha aps o if, no precisamos abrir e fechar o bloco condicional utilizando { e }, porm como usamos a funo getch() no final
Prof. Fbio Diniz Rossi

21

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

do programa, temos que abrir e fechar o bloco condicional pois poderia ser entendido como parte integrante da condio. Quando necessitamos exibir tanto uma resposta verdadeira quanto uma resposta falsa, usamos o exemplo abaixo utilizando if -else:
/* Programa if_else */ #include <stdio.h> #include <conio.h> main( ) { int a; a = 10; if(a > 10) { printf(Maior); } else { printf(Menor ou igual); } getch(); }

Neste caso, o programa escreve na tela o teste com a resposta falsa pois recai na parte da condio do seno (else). Lendo em portugus, a pergunta da condio seria: Se a maior que 10 ento escreva a palavra Maior, seno (se a no for maior que 10) escreva as palavras Menor ou igual. Em um terceiro caso, a estrutura if else possibilita condies aninhadas, que so condies dentro de condies. Podemos ver no exemplo abaixo:
/* Programa if_else_aninhado */ #include <stdio.h> #include <conio.h> main( ) { int a; a = 7; if(a <= 4) { printf(Reprovado); } else if((a > 4) && (a < 7)) { printf(Recuperao); } else { printf(Aprovado); } getch(); }

Como a varivel a contm o valor 7, o programa mostra escrito na tela Aprovado, pois a primeira condio para valores abaixo ou igual a 4, a segunda condio para valores maiores que 4 e ao mesmo tempo menores
Prof. Fbio Diniz Rossi
22

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

que 7, e a terceira condio (apenas o seno, pois no precisa ter uma condio a mais) para valores que no se encaixam nas condies anteriores, ou seja, igual ou maior que 7. 6.2.1. Exerccios de Fixao 1. Escrever um algoritmo para ler dois valores numricos e apresentar a diferena do maior pelo menor. 2. Faa um algoritmo que leia um nmero e mostre uma mensagem indicando se este nmero par ou mpar e se positivo ou negativo. 3. Escrever um algoritmo para ler dois nmeros. Se os nmeros forem iguais imprimir a mensagem: Nmeros iguais e encerrar a execuo; caso contrrio, imprimir o de maior valor, acompanhando pela mensagem maior nmero. 4. Escrever um algoritmo para ler e imprimir trs nmeros: - Se o primeiro for positivo, imprimir sua raiz quadrada, caso contrrio, imprimir o seu quadrado; - Se o segundo nmero for maior que 10 e menor que 100, imprimir a mensagem: Nmero est entre 10 e 100 intervalo permitido; - Se o terceiro nmero for menor que o segundo, calcular e imprimir a diferena entre eles, caso contrrio, imprimir o terceiro nmero adicionado de 1. 5. Tendo como dados de entrada a altura e o sexo de uma pessoa, construa um algoritmo para calcular seu peso ideal, utilizando as seguintes frmulas: - para homens: 72,7 * altura 58 - para mulheres: 62,1 * altura 44,7 6. Elabore um algoritmo que, dada a idade de um nadador, classifique-o em uma das seguintes categorias: - Infantil A: 5 a 7 anos; - Infantil B: 8 a 10 anos; - Juvenil A: 11 a 13 anos; - Juvenil B: 14 a 17 anos; - Snior: maiores de 18 anos. 7. Faa um algoritmo que leia duas notas obtidas por um aluno na disciplina de Clculo I, o nmero de aulas ministradas e o nmero de aulas assistidas por este aluno nesta disciplina. Calcule e mostre a mdia final deste aluno e diga se ele foi aprovado ou reprovado. Considere que para um aluno ser aprovado ele deve obter mdia final igual ou maior a 6.0 e ter no mnimo 75% de freqncia. 8. Leia 3 valores inteiros (X, Y, Z), determina e escreve o menor deles. 9. Desenvolva um algoritmo que efetue a leitura de trs valores para os lados de um tringulo, considerando lados como: A, B e C. O algoritmo dever verificar se os lados fornecidos formam realmente um tringulo (cada lado menor que a soma dos outros dois lados). Se for esta condio verdadeira, dever ser indicado qual tipo de tringulo foi formado: issceles (dois lados iguais e um diferente), escaleno (todos os lados diferentes) ou eqiltero (todos os lados so iguais).
Prof. Fbio Diniz Rossi

23

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

10. A Secretaria de Meio Ambiente, que controla o ndice de poluio, mantm 3 grupos de indstrias que so altamente poluentes do meio ambiente. O ndice de poluio aceitvel varia de 0,05 at 0,29. Se o ndice sobe para 0,3 as indstrias do 1 grupo so intimadas a suspenderem suas atividades, se o ndice crescer para 0,4 as indstrias do 1 e 2 grupo so intimadas a suspenderem suas atividades, se o ndice atingir 0,5 todos os grupos devem ser notificados a paralisarem suas atividades. Faa um programa que leia o ndice de poluio 11. Um Banco conceder um crdito especial aos seus clientes, varivel com o saldo mdio no ltimo ano. Faa um algoritmo que leia o saldo mdio de um cliente e calcule o valor do crdito de acordo com a tabela abaixo. Mostre uma mensagem informando o saldo mdio e o valor do crdito. Saldo mdio Percentual de 0 a 200,00 nenhum crdito (crdito = 0) de 201,00 a 400,00 20% do valor do saldo mdio de 401,00 a 600,00 30% do valor do saldo mdio acima de 600,00 40% do valor do saldo mdio 12. Um vendedor necessita de um programa que calcule o preo total devido por um cliente. O programa deve receber o cdigo de um produto e a quantidade comprada e calcular o preo total, usando a tabela abaixo. Mostrar uma mensagem no caso de cdigo invlido. Cdigo Produto Preo Unitrio 1001 R$ 5,32 1324 R$ 6,45 6548 R$ 2,37 987 R$ 5,32 7623 R$ 6,45 13. Ler um nmero inteiro, e verificar se o nmero corresponde a um ms vlido no calendrio e escrever o nome do ms, seno escrever uma mensagem Ms Invlido. 6.3. Switch Case O Switch Case (Escolha Caso) um comando de seleo que tem por finalidade tomar uma deciso baseando-se no contedo de uma varivel ou no resultado de uma expresso. Esse comando pode simplificar o uso do comando if. Ou seja, quase que um if com vrias possibilidades, mas com algumas diferenas importantes. 1 diferena: Os cases no aceitam operadores lgicos. Portanto, no possvel fazer uma comparao. Isso limita o case a apenas valores definidos. 2 diferena: O switch executa seu bloco em cascata. Ou seja, se a varivel indicar para o primeiro case e dentro do switch tiver 5 cases, o switch executar todos os outros 4 cases a no ser que utilizemos o comando para sair do switch. (Nos referimos ao BREAK). Agora, que conhecemos diferenas importantes, veremos como proceder com o switch - case. Podemos acompanhar o exemplo abaixo:
Prof. Fbio Diniz Rossi
24

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

/* Programa switch-case */ #include <stdio.h> #include <conio.h> main( ) { int num; printf("Digite numero (1 ou 2 apenas): "); scanf("%d", &num); switch(num) { case 1: printf("\nSolteiro"); break; case 2: printf("\nCasado"); break; default: printf("\nNumero invalido"); } getch(); }

Podemos ver algumas particularidades, como por exemplo, a opo default que chamada quando nenhuma escolha vlida dentro das opes. Outra novidade o break que faz o programa parar quando a condio satisfeita. Quando usamos o case com um tipo char, usamos a seguinte sintaxe:
case a: <operao>; break;

6.3.1. Exerccios de Fixao 1. Construa um algoritmo que l um nmero de 1 a 7 e informa o dia da semana correspondente, sendo domingo o dia de nmero 1. Se o dia no corresponder ao dia da semana, mostrada uma mensagem de erro. 2. Crie um algoritmo que leia uma letra e mostre uma mensagem: se vogal maiscula, vogal minscula ou consoante. Considere somente as letras do alfabeto.

Prof. Fbio Diniz Rossi

25

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

7. Algoritmo de Repetio So algoritmos com a caracterstica de realizar um conjunto de instrues, ou uma nica instruo, que ser executada repetidamente, de acordo com o resultado de um teste condicional que compem a instruo de repetio e permite o lao para nova execuo destas instrues que compem o bloco de repetio. 7.1. Introduo As estruturas de repetio ou iterao so de crucial importncia para a programao do algoritmo, e nos possibilitam executar o mesmo trecho de cdigo vrias vezes seguidas, enquanto um dado critrio no satisfeito. As estruturas de repetio ou iterao so, comumente, dadas pelos comandos while (enquanto) ou for (para). Qualquer estrutura, seja for ou while, funciona com 1 varivel que chamamos de sentinela (ou contador ou acumulador). Essa varivel ir ditar quando o programa dever sair da repetio e geralmente tem 3 caractersticas: 1 . Qual valor esta varivel ir iniciar; 2 . Como esta varivel ter seu valor modificado para que chegue ao valor final; 3 . Qual valor esta varivel deve atingir para que pare a repetio. No caso, a varivel de controle ou sentinela sempre dever ter essas caractersticas ou poder ocorrer um erro que chamamos de loop infinito. Isso ocorre por causa de erro de lgica, no qual a varivel sentinela nunca chega ao seu resultado final. 7.2. While O comando while um lao de repetio que bastante usado para fazer loop controlado com condies. bem simples e fcil de usar. O while executa uma comparao com a varivel. Se a comparao for verdadeira, ele executa o bloco de instrues ( { } ) ou apenas a prxima linha de cdigo logo abaixo. Podemos acompanhar sua sintaxe no exemplo abaixo:
/* Programa while */ #include <stdio.h> #include <conio.h> main( ) { int a; a = 1; while(a <= 100) { printf("\n %d", a); a++; Prof. Fbio Diniz Rossi
26

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas } getch(); }

Este programa inicializa a varivel a com o valor 1 e escreve seu valor na tela atravs do printf. Cada vez que o programa executa o lao while, escreve o valor de a e o incrementa em 1 (a++ igual a a = a + 1). Aps o incremento, o novo valor de a testado novamento pelo while, e enquanto no for satisfeita a condio, seguir executando. Portanto, esse programa escrever todos os nmeros de 1 at 100, e quando a atingir o valor de 100, o lao termina e o programa finaliza. 7.2.1. Exerccios de Fixao 1. Faa um programa que solicite ao usurio para digitar valores numricos inteiros positivos. Encerre a entrada de dados quando for digitado um nmero negativo ou zero. Calcule a mdia dos nmeros positivos digitados. 2. Faa um programa que solicite ao usurio 10 nmeros inteiros e, ao final, informe a quantidade de nmeros mpares e pares lidos. Calcule tambm a soma dos nmeros pares e a mdia dos nmeros mpares. 3. Uma determinada empresa armazena para cada funcionrio (10 no total) uma ficha contendo o cdigo, o nmero de horas trabalhadas e o seu nmero de dependentes. Considerando que: a. A empresa paga 12 reais por hora e 40 reais por dependente. b. Sobre o salrio so feitos descontos de 8,5% para o INSS e 5% para IR. Faa um programa para ler o cdigo, nmero de horas trabalhadas e nmero de dependentes de cada funcionrio. Aps a leitura, escreva qual o cdigo, os valores descontados para cada tipo de imposto e finalmente o salrio lquido de cada um dos funcionrios. 4. Em uma pesquisa de campo, uma editora solicitou os seguintes dados para os entrevistados: sexo, idade e quantidade de livros que leu no ano de 2008. Faa um programa que leia os dados digitados pelo usurio, sendo que devero ser solicitados dados at que a idade digitada seja um valor negativo. Depois, calcule e imprima: a) A quantidade total de livros lidos pelos entrevistados menores de 10 anos. b) A quantidade de mulheres que leram 5 livros ou mais. c) A mdia de idade dos homens que leram menos que 5 livros. d) O percentual de pessoas que no leram livros. 5. Foi realizada uma pesquisa com 200 pessoas que assistiram a uma pea de teatro, em relao a sua opinio sobre a mesma. Cada espectador respondeu a um questionrio que solicitava os seguintes dados: a) idade da pessoa; b) o identificador da pessoa; c) opinio em relao pea (de 0 a 10). Faa um programa que, a partir destes dados, calcule e imprima: a) A quantidade de respostas 10. b) A mdia de idade das pessoas que responderam o questionrio.
Prof. Fbio Diniz Rossi
27

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

c) A percentagem de pessoas que responderam 5 ou menos para a opinio da pea. d) O identificador da pessoa mais velha. * Considere que a maior idade no repetida. 6. Foi feita uma pesquisa para saber o perfil dos alunos que cursam o ginsio de uma determinada escola. Cada aluno fornecia a sua srie (primeira1, segunda-2, terceira-3 ou quarta-4), quantos livros liam por ms e se gostavam de fazer redao (Sim-1 ou No-0). Fazer um programa que leia os dados, calcule e imprima: a) A quantidade de alunos que est na terceira srie; b) A maior quantidade de livros lidos por um aluno que est na quarta srie; c) A porcentagem de alunos que no gostam de fazer redao e que esto na terceira srie. OBS: A condio de parada (flag) que seja digitado 0 (zero) para idade. 7. Uma empresa realizou uma pesquisa com os seus fornecedores, na qual foram coletados os seguintes dados referentes aos produtos fornecidos: ID, Valor e Percentual de aumento. Obs. Se o produto no tiver sofrido alterao de preo, o percentual de aumento ser igual a 0. Faa um programa que determine e escreva: a) O novo valor de cada um dos produtos. b) A quantidade de produtos mais caros que R$ 100,00 (aps aumento) e que tiveram aumento superior a 5%. c) A mdia de valor dos produtos que no sofreram aumento. d) O valor do produto mais caro (aps aumento). Obs.: o programa solicita dados at que o ID digitado seja zero. 7.3. For Este comando aparece em vrias linguagens de programao, mas na linguagem C ele apresenta uma grau maior de flexibilidade. A idia bsica do comando for a seguinte. Uma varivel de controle, geralmente um contador, recebe um valor inicial. O trecho de programa que pertence ao lao executado e ao final a varivel de controle incrementada ou decrementada e comparada com o valor final que ela deve alcanar. Caso a condio de trmino tenha sido atingida o lao interrompido. Podemos ver sua sintaxe no exemplo abaixo:
/* Programa for */ #include <stdio.h> #include <conio.h> main( ) { int a; for(a = 1; a <= 100; a++) { printf("\n %d", a); } getch(); Prof. Fbio Diniz Rossi
28

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas }

Vemos que sua utilizao na resoluo de problemas computacionais a mesma que o comando while, porm, o for inicializa o valor da varivel, coloca o limite dessa varivel e o contador em apenas 1 linha de cdigo. 7.3.1. Exerccios de Fixao 1. Escreva um programa que dados 15 nmeros, imprima seus quadrados, obs: voc no precisa necessariamente imprimir no final. 2. Escreva um programa que dado um nmero, ele diz se primo ou no. 3. Escreva um programa que dados dois nmeros, imprime o MMC. 4. Escreva um programa que dados dois nmeros, imprime o MDC 5. Escreva um programa que imprima os nmeros de 100 a 999 em forma de matriz quadrada. 6. Escreva um programa que imprima na tela os nmeros de 1 a 500 que so mltiplos de 5. 7. Escreva um programa que imprima na tela os nmeros de 1 a 500 que so mltiplos de 5 e de 3 (os dois ao mesmo tempo). 8. Escreva um programa que some os nmeros de 1 a 100. 9. Escreva um programa onde o usurio diz quantos nmeros quer digitar, em seguida solicite a ele que digite todos os nmeros e diga qual o maior nmero daqueles digitados. 10. Ler um determinado nmero e dizer quantos so pares e quantos so mpares. 11. Criar um programa que informa quantos nmeros entre 100 e 200 foram digitados. O programa pra quando o usurio digitar 0. 12. Dado um pas A, com 5.000.000 de habitantes e uma taxa de natalidade de 3% ao ano, e um pas B com 7.000.000 de habitantes e uma taxa de natalidade de 2% ao ano, calcular e imprimir o tempo necessrio para que a populao do pas A ultrapasse a populao do pas B. 13. Um marciano chegou a uma floresta e se escondeu atrs de uma das 100 rvores quando viu um caador. O caador s tinha cinco balas em sua espingarda. Cada vez que ele atirava, e no acertava, claro, o marciano dizia: estou mais direita ou mais esquerda. Se o caador no conseguir acertar o marciano, ele ser levado para marte. Implementar este jogo para dois jogadores, onde um escolhe a rvore em que o marciano ir se esconder, e o outro tenta acertar.

Prof. Fbio Diniz Rossi

29

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

8. Vetores Vetores so usados para tratamento de conjuntos de dados que possuem as mesmas caractersticas. Uma das vantagens de usar vetores que o conjunto recebe um nome comum e elementos deste conjunto so referenciados atravs de ndices. 8.1. Introduo A forma geral da declarao de um vetor :
tipo nome [tamanho];

Onde tipo um tipo qualquer dados, nome o nome pelo qual o vetor vai ser referenciado e tamanho o nmero de elementos que o vetor vai conter. Observar que, em C, o primeiro elemento tem ndice 0 e o ltimo tamanho - 1. Exemplos de declaraes de vetores so:
int numeros[1000]; float notas[65]; char nome[40]; /* conjunto de 1000 numeros inteiros */ /* conjunto de 65 numeros reais */ /* conjunto de 40 caracteres */

importante notar que em C no h verificao de limites em vetores. Isto significa que possvel ultrapassar o fim de um vetor e escrever em outras variveis, ou mesmo em trechos de cdigo. tarefa do programador fazer com que os ndices dos vetores estejam sempre dentro dos limites estabelecidos pela declarao do vetor. At ento, estvamos acostumados com uma varivel acumulando apenas 1 valor a cada momento. O vetor uma varivel que acumula vrios valores em apenas uma varivel. O vetor sempre inicia pelo ndice 0, portanto um vetor de 10 posies ter ndices entre 0 e 9. Podemos ver como a manipulao de um vetor de inteiros com o exemplo abaixo:

/* Programa vetor_int */ #include <stdio.h> #include <conio.h> main( ) { int dados[3]; dados[0] = 3; dados[1] = 9; dados[2] = 6; printf("%d", dados[1]); getch(); }

Prof. Fbio Diniz Rossi

30

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

Vemos nesse programa, os dados sendo carregados nos ndices e aps, uma escrita de apenas um dos ndices. 8.2. Exerccios de Fixao 1. Faa um programa para declarar um vetor M com 6 elementos do tipo inteiro. Inicializar M com valores de 1 at 6. 2. Escreva um algoritmo em linguagem C que leia 5 nmeros inteiros e armazene-os em um vetor. A seguir imprima o contedo desse vetor. 3. Escreva um algoritmo em linguagem C que leia um vetor de nmeros inteiros com o seu respectivo tamanho, calcule e mostre o nmero de elementos pares lidos. 4. Escreva um algoritmo em linguagem C que leia um vetor com 100 elementos inteiros e verifique o nmero de elementos mltiplos de 3. Devem ser impressas todas as posies destes elementos no vetor. 5. Escreva um algoritmo em linguagem C que leia um vetor com o seu respectivo tamanho, calcule e mostre o menor elemento e a sua respectiva posio. 6. Escreva um programa em linguagem C que leia um vetor com 10 nmeros inteiros, calcule e mostre os nmeros primos e suas respectivas posies. 7. Faa um algoritmo em linguagem C que leia 10 nmeros inteiros, calcule dois vetores resultantes: o 1 vetor resultante deve conter somente os nmeros positivos lidos; o 2 deve conter os nmeros negativos. 8. Escreva um algoritmo em linguagem de programao C que leia dois vetores, X e Y, cada um com 10 nmeros inteiros, calcule um terceiro vetor Z contendo a soma entre cada elemento de X e cada elemento de Y (Z[i]=X[i]+Y[i]).

Prof. Fbio Diniz Rossi

31

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

9. Matrizes Matriz o nome genrico para um arranjo de dimenses n > 2, ou seja, um vetor de 2 (vetor bidimensional) ou mais dimenses. 9.1. Introduo J vimos como declarar matrizes unidimensionais (vetores). Vamos tratar agora de matrizes bidimensionais. A forma geral da declarao de uma matriz bidimensional muito parecida com a declarao de um vetor:
tipo_da_varivel nome_da_varivel [linhas][colunas];

muito importante ressaltar que, nesta estrutura, o ndice da esquerda indexa as linhas e o da direita indexa as colunas. Quando vamos preencher ou ler uma matriz no C o ndice mais direita varia mais rapidamente que o ndice esquerda. Mais uma vez bom lembrar que, na linguagem C, os ndices variam de zero ao valor declarado, menos um; mas o C no vai verificar isto para o usurio. Manter os ndices na faixa permitida tarefa do programador. Vemos um exemplo de manipulao de matriz abaixo:
/* Programa matriz */ #include <stdio.h> #include <conio.h> main( ) { int x, y, cont, num[3][3]; cont = 1; x = 0; y = 0; while(x < 3) { while(y < 3) { num[x][y] = cont; cont++; y++; } y = 0; x++; } x = 0; y = 0; while(x < 3) { while(y < 3) { printf("%d", num[x][y]); y++; } printf("\n"); y = 0; Prof. Fbio Diniz Rossi
32

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas x++; } getch(); }

No primeiro while desse exemplo, carregamos valores na matriz, iniciando com o cont em 1, e incrementando de 1 a cada novo valor. No segundo while, escrevemos na tela a matriz usando um \n para quebrar a matriz de 3 em 3 valores. A resposta desse programa deve ser:
1 2 3 4 5 6 7 8 9

9.2. Exerccios de Fixao 1. Desenvolva um algoritmo que leia uma matriz 2 x 2, calcule e mostre o maior elemento com a respectiva posio. 2. Escreva um programa para converter todos os elementos de uma matriz 4 x 3 em um vetor. 3. Escreva um algoritmo que leia uma matriz 10 x 3 com as notas de 10 alunos em trs provas. Deve ser apresentado como resultado um relatrio contendo o nmero de alunos que obtiveram a maior nota na prova 1, o nmero de alunos que obtiveram a maior nota na prova 2 e o nmero de alunos que obtiveram a maior nota na prova 3. 4. Ler dois vetores A e B, cada um com 5 elementos. Construir uma matriz C de duas dimenses, onde a primeira coluna dever ser formada pelos elementos do vetor A e a segunda coluna dever ser formada pelos elementos do vetor B. 5. Desenvolva um algoritmo que leia uma matriz 4 x 5 e uma segunda matriz 5 x 2, calcule e mostre a matriz resultante do produto matricial das duas anteriores, armazenando o resultado em uma terceira matriz 4 x 2. 6. Um elemento Aij de uma matriz dito ponto de sela da matriz A se, e somente se, Aij for ao mesmo tempo o menor elemento da linha i e o maior elemento da coluna j. Escreva um algoritmo que leia uma matriz 4 x 5 e verifique se a matriz possui ponto de sela. Em caso afirmativo, deve ser impresso o valor e a respectiva posio. 7. Escreva um algoritmo que leia uma matriz 5 x 5 com nmeros inteiros, calcule e mostre quais os elementos da matriz que se repetem e quantas vezes cada um est repetido. 8. Escreva um algoritmo que leia uma matriz 3 x 3 e determine se ela simtrica. Uma matriz simtrica se ela apresenta Aij= Aji. 9. Desenvolva um algoritmo que leia uma matriz 4 x 4 de nmeros inteiros e crie dois vetores de 4 posies cada um. O primeiro vetor conter os maiores elementos de cada uma das linhas da matriz lida e o segundo vetor conter os menores elementos de cada uma das colunas. O algoritmo deve fornecer como sada a matriz lida e os dois vetores calculados. 10. Escreva um algoritmo que leia uma matriz J de ordem M x N, onde M e N tambm so valores de entrada, e obtenha a matriz transposta de J. A transposio de uma matriz a troca das linhas pelas colunas, ou seja, cada
Prof. Fbio Diniz Rossi
33

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

linha da matriz original se transforma em uma coluna da matriz transposta. Sabese que M no deve ser maior que 200 e N no deve ser maior que 100. 11. Escreva um algoritmo que leia uma matriz J de ordem N x N, onde N um valor de entrada, e um escalar k, calcule e escreva uma segunda matriz L tambm de ordem N x N em que cada elemento obtido pela seguinte equao: Lij= k . Jji. Sabe-se que N no deve ser maior que 1000. 12. Desenvolva um algoritmo que leia duas matrizes de ordem M x N e calcule uma terceira matriz de ordem M x N correspondente soma das duas primeiras. Sabe-se que M no deve ser maior que 500 e N no deve ser maior que 300. 13. Escreva um algoritmo que leia uma matriz M x N e outra matriz N x O, calcule e escreva uma terceira matriz de ordem M x O resultante da multiplicao da primeira pela segunda matriz. Sabe-se que M no deve ser maior que 600, que N no deve ser maior que 400 e O no deve ser maior que 200.

Prof. Fbio Diniz Rossi

34

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

10. Strings Na linguagem C, strings so manipuladas atravs de vetores. 10.1. Introduo Para manipulao de vetores de caracteres (cadeia de caracteres) devemos utilizar a biblioteca string.h. E a funo que l a string digitada no a funo scanf, que l apenas caractere a caractere, e sim a funo gets, que l um bloco de caracteres. Podemos ver essas diferenas no exemplo abaixo:
/* Programa vetor_string */ #include <string.h> #include <stdio.h> #include <conio.h> main( ) { char nome[5]; printf("Digite nome: "); gets(nome); printf("%c", nome[2]); getch(); }

Neste exemplo, declaramos um vetor de strings de 5 posies, que lido com gets, e aps escrevemos na tela apenas a letra da posio 2 do vetor. Podemos ver no exemplo abaixo uma outra maneira de declarar um vetor de strings, quando as strings so constantes:
#include <stdio.h> #include <conio.h> main() { char nome[] = {'f', 'a', 'b', 'i', 'o'}; printf("%c", nome[4]); getch(); }

10.2. Exerccios de Fixao 1. Faa um programa que leia uma string do teclado, com no mximo 20 caracteres, e retorne quantas vogais a string possui. 2. Escreva um programa que leia uma string do teclado e imprima a string invertida (de trs para frente). 3. Escreva um programa em C que receba uma linha de texto do teclado e imprima a linha com as palavras de trs para a frente. Use a funo gets para ler linhas de texto do teclado. O programa deve perguntar linhas de texto at receber uma linha onde a primeira palavra seja "fim", totalmente em minsculas.
Prof. Fbio Diniz Rossi
35

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

Exemplo de execuo do programa: entrada: Meu cachorro se chama Van Gogh sada: ueM orrohcac es amahc naV hgoG entrada: Otto ama Ana sada: ottO ama anA entrada: fim

Prof. Fbio Diniz Rossi

36

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

11. Registros ou Structs Um registro (= record) uma coleo de vrias variveis, possivelmente de tipos diferentes. Na linguagem C, registros so conhecidos como structs (abreviatura de structures). 11.1. Introduo Uma estrutura uma coleo de variveis ligadas atravs de ndices. O conceito de orientao a objeto - principalmente classes que sero tratadas mais a frente - tem uma base muito slida no conceito de estrutura de dados. As estruturas de dados consistem em criar apenas um dado que contm vrios membros, que nada mais so do que outras variveis. De uma forma mais simples, como se uma varivel tivesse outras variveis dentro dela. A vantagem em se usar estruturas de dados que podemos agrupar de forma organizada vrios tipos de dados diferentes, por exemplo, dentro de uma estrutura de dados podemos ter juntos tanto um tipo float, um inteiro, um char ou um double. As variveis que ficam dentro da estrutura de dados so chamadas de membros. Podemos ver um exemplo simples de utilizao de struct em C abaixo:
/* Programa struct */ #include <stdio.h> #include <conio.h> main() { struct { char Primeiro[15]; char Meio[15]; char Sobrenome[15]; } Nome; printf("Digite seu primeiro nome: "); scanf("%s", &Nome.Primeiro); printf("Digite seu nome do meio: "); scanf("%s", &Nome.Meio); printf("Digite seu sobrenome: "); scanf("%s", &Nome.Sobrenome); printf("\nNome completo: %s %s %s", Nome.Primeiro, Nome.Meio, Nome.Sobrenome); getch(); }

Vemos que a declarao da estrutura Nome segue o seguinte formato:


struct { char Primeiro[15]; char Meio[15]; char Sobrenome[15]; } Nome; Prof. Fbio Diniz Rossi

37

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

A grande utilidade do uso de estruturas est em utilizar as structs da seguinte forma:


struct { char Primeiro[15]; char Meio[15]; char Sobrenome[15]; } Nome[10];

Com Nome[10] podemos agora ler 10 nomes completos diferentes e armazen-los em memria para manipulao. Isso torna a sua utilizao bastante vlida quando temos que armazenar informaes de tipos de dados diferentes interligadas entre si, por exemplo nome (char), telefone (int) e altura (float).

11.2. Exerccios de Fixao 1. Uma biblioteca possui obras de cincias exatas, cincias humanas e cincias biomdicas, totalizando 1.500 volumes, 500 de cada rea. O proprietrio resolveu informatiz-la e, para tal, agrupou as informaes sobre cada livro do seguinte modo: Cdigo de catalogao: __________ Doado:______________ Nome da obra: _____________________________________ Nome do autor: ____________________________________ Editora: _______________Nro de pginas:_______________ a) Construa um algoritmo que declare tal estrutura e que rena todas as informaes de todas as obras em trs vetores distintos para cada rea. b) Elabore um trecho de algoritmo que, utilizando como premissa o que foi feito no item anterior, realize uma consulta informaes. O usurio fornecer o cdigo da obra e sua rea. Existindo tal livro, informa seus campos. Do contrrio, envia mensagem de aviso. c) A consulta repete-se at que o usurio introduza cdigo finalizador com o valor -1. Escreva um trecho de algoritmo que liste todas as obras de cada rea que representem livros doados. d) Idem ao item anterior, porm, obras cujos livros sejam comprados e cujo nmero de pginas se encontre entre 100 e 300. e) Construa um trecho de algoritmo que efetue a excluso de algum livro; o usurio fornecer o cdigo e a rea. Lembres-se de que somente pode ser excludo um livro existente. 2. Para o controle dos veculos que circulam em uma determinada cidade, a Secretaria dos Transportes criou o seguinte registro-padro: Proprietrio: __________ Combustvel:_________________ Modelo: ____________________ Cor: _________________ Nro chassi: ____________Ano:_______ Placa:___________ O combustvel pode ser lcool ou gasolina; a placa possui os trs primeiros valores alfabticos e os quatro restantes valores numricos. Sabendo que o nmero mximo de veculos da cidade de 5.000 unidades e que os valores no precisam ser lidos.
Prof. Fbio Diniz Rossi
38

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

a) Construa um algoritmo que liste todos os proprietrios cujos carros so do ano de 1980 ou posterior e que sejam movidos a diesel. b) Escreva um algoritmo que liste todas as placas que comecem com a letra A e terminem com 0, 2, 4 ou 7 e seus respectivos proprietrios. c) Elabore um algoritmo que liste o modelo e a cor dos veculos cujas placas possuem como segunda letra uma vogal. d) Construa um algoritmo que permita a troca de proprietrio com o fornecimento do nmero do chassi apenas para carros com placas que no possuam nenhum dgito igual a zero. 3. Supondo no ser necessrio suprir de informaes as estruturas de dados a seguir, elabore um algoritmo capaz de responder s questes: De: _____________________ Para:_____________________ Data: ___/___/___ Horrio: ___:___ Distncia: _______km Poltronas: 1 2 3 ... 4 4 Sendo que cada poltrona possui as seguintes informaes: Nmero da passagem: ______________ Nome:____________________________ Sexo:  M  F a) Qual o horrio de sada e a distncia percorrida por um nibus cuja a linha fornecida? b)Quais as linhas de nibus esto lotadas? c) Qual o horrio estimado de chegada e durao da viagem de um dado nibus em que o nmero da linha fornecido (use velocidade mdia de 60km/h). d) Qual a percentagem de ocupao e o nmero de poltronas livres para um dado nibus fornecido pelo usurio? e) Qual a percentagem de passageiros do sexo masculino e do sexo feminino de um determinado nibus cujo nmero da linha fornecido pelo usurio? f) Fornea um relatrio contendo a percentagem de ocupao de janelas e de corredores, alm do nmero de poltronas disponveis para todas as linhas de nibus.

Prof. Fbio Diniz Rossi

39

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

12. Ponteiros O ponteiro nada mais do que uma varivel que guarda o endereo de uma outra varivel. 12.1. Introduo A declarao de ponteiros feita da seguinte forma:
int *pa

A instruo acima indica que pa um ponteiro do tipo int. Agora veremos como atribuir valor ao ponteiro declarado. Para isto necessrio saber que existem dois operadores unitrios que so utilizados com os ponteiros. O primeiro o operador (*) atravs dele possvel retornar o valor da varivel que est localizada no ponteiro. E o segundo o operador (&) que retorna o endereo de memria que est localizado o valor da variavel contida no ponteiro. Portanto para atribuirmos um valor para o ponteiro necessrio referencia o valor da varivel que se encontra no ponteiro utilizando o operador (*), como ser demonstrado a seguir.
*pa = 20;

Desta forma estamos atribuindo o valor 24 para a varivel que est contida no ponteiro. Para entender melhor quando e como utilizar os operadores (*) e (&), veja o programa mostrado abaixo:
/* Programa ponteiro */ #include <stdio.h> #include <conio.h> main() { int a, b; int *pa, *pb; a = 20; b = 12; pa = &a; pb = &b; printf("\nEndereco do ponteiro pa: %u", pa); printf("\nEndereco da variavel contida no ponteiro pa: %u", &pa); printf("\nValor da variavel contida no ponteiro pa: %d", *pa); printf("\nEndereco do ponteiro pb: %u", pb); printf("\nEndereco da variavel contida no ponteiro pb: %u", &pb); printf("\nValor da variavel contida no ponteiro pb: %d", *pb); getch(); }

Quando os ponteiros so declarados, eles so inicializados com um endereo no vlido, portanto antes de us-los necessrio atribuir um
Prof. Fbio Diniz Rossi
40

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

endereo e isso feito atravs do operador (&) como demonstra a instruo pa=&a e pb=&b que atribui aos ponteiros pa e pb o endereo das varieis a e b. Outra novidade do programa anterior quando queremos imprimir o endereo do prprio ponteiro isto feito referenciando pa normalmente. Porm para imprimir o endereo contido no ponteiro usado &pa e por ltimo para imprimir o valor do endereo contido no ponteiro usamos *pa. 12.2. Exerccios de Fixao 1. Elabore um programa que declare um vetor com 7 elementos, preenchao com alguns valores e mostre na tela: Para cada elemento do vetor: seu valor e seu endereo de memria em decimal e hexa. 2. Modifique o programa acima para mostrar as informaes pedidas utilizando ponteiros. 3. Faa um programa que declare um vetor com 10 elementos e mostre os valores contidos nele utilizando ponteiro. 4. Modifique o exerccio acima para mostrar o vetor na ordem inversa, ou seja, do elemento 9 ao 0. 5. Crie um programa que declare um vetor com 5 elementos e pea para o usurio fornecer valores que sero armazenados no vetor. Utilize ponteiro para ler os elementos.

Prof. Fbio Diniz Rossi

41

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

13. Funes Funo consiste em um conjunto de comandos agrupados em um bloco que recebe um nome e atravs deste pode ser ativado. 13.1. Introduo As funes executam instrues que podem ser comuns a vrias partes do cdigo de um programa facilitando assim a sua implementao. A construo de uma funo feita da seguinte forma:
int soma(int num, int num2) { }

Declara-se o tipo de varivel do valor devolvido (resultado da funo) que no caso de no devolver nada ser void (vazio). A seguir o nome da funo e depois entre parnteses o tipo e nome das variveis de entrada. A funo deve estar delimitada por chaves que representam os limites da funo. Dentro da funo podemos colocar todas as instrues que a mesma dever efetuar. Neste caso iremos calcular a soma de dois nmeros inteiros:
int soma(int num, int num2) { int total = num + num2; return total; }

A instruo return indica a varivel cujo valor ser devolvido. Todas as variveis utilizadas dentro de uma funo apenas so conhecidas dentro da mesma, ou seja, uma vez declaradas dentro de uma funo no podem ser chamadas fora, pois o compilador no as ir reconhecer. Para utilizao de funes devemos seguir uma regra importante, tal como fazemos com as variveis: sempre que queremos utilizar uma funo devemos declar-la antes (devemos dar a conhec-la ao compilador). Para melhor mostrar a sintaxe da utilizao de funes no programa principal vejamos o exemplo seguinte:
/* Programa funcao */ #include <stdio.h> #include <conio.h> int total; int soma(int num1, int num2) { total = num1 + num2; return total; Prof. Fbio Diniz Rossi
42

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas } main() { int n, m; n = 3; m = 6; soma(n, m); printf("A soma e: %d", total); getch(); }

Podemos notar que a funo soma escrita antes da funo principal main, pois quando chamada na funo main o compilador j deve ter lido a funo. Notamos tambm que a varivel total a qual o valor ser retornado (return), est declarada fora da funo main e fora da funo soma. Isso se deve as variveis s poder ser lidas dentro de sua prpria funo. Declarando-a fora, ela se torna uma varivel externa e pode ser lida em qualquer parte do cdigo. Ainda, quando enviamos os valores a ser somados pela funo main, as variveis so n e m, porm quando so processadas pela funo soma, as variveis so num1 e num2, isso irrelevante pois os valores so passados de uma para outra. 13.2. Exerccios de Fixao 1. Faa uma funo que receba um nmero inteiro positivo N como parmetro e retorne a soma dos N nmeros inteiros existentes entre 1 e esse nmero. 2. Faa uma funo que receba um valor inteiro positivo como parmetro e retorne o fatorial do nmero. 3. A prefeitura de uma cidade fez uma pesquisa entre os seus habitantes, coletando dados sobre o salrio e nmero de filhos. Faa uma funo que leia esses dados para um nmero no determinado de pessoas e mostre a mdia de salrio da populao, a mdia do nmero de filhos, o maior salrio e o percentual de pessoas com salrio at R$ 470,00. 4. Faa um programa que controle o estoque de uma empresa. Para isso utilize uma matriz, onde cada coluna representa o cdigo do produto e cada linha a quantidade em estoque deste produto. Faa trs funes para controle de estoque: a primeira ser responsvel pela insero de produtos no estoque, a segunda pela remoo e a terceira para listar todo o estoque. 5. Faa uma funo que dado um nmero inteiro retorne uma string com cada dgito deste nmero por extenso, da forma: 64852 <= nmero passado como parmetro seis quatro oito cinco dois <= string a ser retornada

Prof. Fbio Diniz Rossi

43

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

14. Arquivos Em C, um arquivo pode ser qualquer coisa, desde um arquivo em disco at um terminal ou uma impressora. Voc associa um stream com um arquivo especfico realizando uma operao de abertura. Uma vez o arquivo aberto, informaes podem ser trocadas entre ele e o seu programa. 14.1. Introduo No necessrio conhecer o formato interno dessa estrutura para manipular arquivos. O programador C, para acessar arquivos, define variveis ponteiros para este tipo, FILE *, que so manipuladas diretamente pelas funes da biblioteca padro de entrada e sada. Tais variveis so usualmente chamadas de manipuladores de arquivo. Assim, a funo que vai manipular o arquivo deve incluir a declarao de uma varivel desse tipo, como em:
FILE *arqFonte;

O objetivo de manipular um arquivo realizar operaes de leitura e escrita sobre seu contedo. Para que essas operaes de transferncia de dados tenham sucesso, preciso que haja a permisso adequada para a operao. Por exemplo, um teclado seria um dispositivo que no aceita sada de dados (escrita), mas apenas entrada (leitura). Para abrir um arquivo em C, a rotina fopen invocada recebendo dois parmetros. O primeiro uma string com o nome do arquivo que ser aberto. O segundo parmetro outra string que especifica o modo de acesso, que pode conter os caracteres r (leitura), w (escrita), a (escrita ao final - append), e b (acesso em modo binrio). O valor de retorno o manipulador alocado para o arquivo aberto. Por exemplo, para realizar a leitura do contedo de um arquivo chamado teste.txt, a seguinte expresso poderia ser usada no programa:
arqFonte = fopen("teste.txt", "r");

Caso o arquivo no possa ser aberto, a funo fopen retorna o ponteiro nulo. Assim, para verificar de o arquivo foi aberto sem problemas, necessrio testar o valor de retorno:
if (arqFonte != 0) { /* tudo bem */ } else { /* erro */ }

Prof. Fbio Diniz Rossi

44

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

Encerradas as operaes sobre um arquivo, ele deve ser fechado. Isso permite que o sistema operacional libere o espao ocupado pelas informaes sobre o arquivo para que esse mesmo espao possa ser reocupado para a manipulao de outros arquivos. Esta liberao importante, uma vez que sistemas operacionais tipicamente limitam a quantidade de arquivos que podem ser abertos simultaneamente devido a restries de espao alocado para essas estruturas auxiliares. Para fechar um arquivo previamente aberto, a rotina fclose pode ser usada. Ela recebe como argumento o manipulador do arquivo e no retorna nenhum valor. Assim, aps encerrada a operao com o arquivo a expresso fclose(arqFonte); fecha-o. Este pequeno exemplo abaixo mostra como criar um arquivo texto:
/* Programa cria_arq */ #include <stdio.h> #include <conio.h> main() { FILE *fp; fp = fopen ("teste.txt", "w"); if (fp == NULL) { printf ("Houve um erro ao abrir o arquivo.\n"); } printf ("Arquivo teste.txt criado com sucesso.\n"); fclose (fp); getch(); }

Podemos ver que foi criado um ponteiro do tipo FILE para fp. fp recebe a abertura do arquivo chamado teste.txt em modo de escrita (w). realizado um teste para confirmar se o arquivo foi criado. Por ltimo, o arquivo fechado com fclose se criado com sucesso. Vimos como criar um arquivo texto, agora veremos como escrever uma string nesse arquivo. O exemplo abaixo faz isso:
/* Programa arq_escrever */ #include <stdio.h> #include <conio.h> #include <string.h> #include <stdlib.h> main() { FILE *pf; char palavra[30]; if((pf = fopen("arquivo.txt","w")) == NULL) { printf("\nNao consigo abrir o arquivo ! "); exit(1); } while (strlen(palavra) > 1) { printf("\nDigite uma nova palavra: "); gets(palavra); fputs(palavra, pf); Prof. Fbio Diniz Rossi
45

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas putc('\n', pf); if(ferror(pf)) { perror("Erro na gravacao"); fclose(pf); exit(1); } } fclose(pf); }

No exemplo acima, temos um ponteiro FILE para a associao do arquivo pf e uma varivel que armazenar uma palavra de tamanho 30. realizado um teste de tentativa de abertura ou criao de um novo arquivo chamado arquivo.txt. Se for possvel a sua abertura, o lao while ficar em loop enquanto o tamanho da palavra for maior que 1, ou seja, enquanto o usurio digitar algo, sando com um <enter>. Com a palavra digitada, lida com gets e enviado para o arquivo texto pela funo fputs. A funo putc envia um sinal de nova linha para que a prxima palavra seja escrita. Existe um novo teste para verificar se a gravao obteve sucesso, atravs da funo ferror, e se houver erro, a funo perror (print error) escreve na tela e fecha o arquivo. Agora, veremos um exemplo de como ler o contedo de um arquivo texto:
/* Programa arq_ler */ #include <stdio.h> #include <conio.h> main() { FILE *pf; char palavra[30]; pf = fopen("arquivo.txt", "r"); while(fgets(palavra, 30, pf) != NULL) { printf("%s", palavra); } fclose(pf); getch(); }

A novidade nesse cdigo a funo fgets que contm 3 argumentos. O primeiro diz respeito varivel que armazena a palavra do arquivo, o segundo argumento o tamanho e o terceiro argumento o ponteiro ao arquivo. O while se encarrega do lao para fazer o arquivo ser lido at o fim, ou seja, enquanto no for NULL.

14.2. Exerccios de Fixao 1. Faa um programa que crie uma agenda telefnica utilizando arquivos com as seguintes opes: a) Cadastrar nome, endereo e telefone
Prof. Fbio Diniz Rossi
46

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

b) Pesquisar por nome ou telefone c) Excluir registro completo

Prof. Fbio Diniz Rossi

47

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

Bibliografia SCHILDT, H.. C Completo e Total. 3a ed., Makron Books, 1997. CELES, W.; CERQUEIRA, R.; RANGEL, J. L.. Introduo a Estruturas de Dados: com tcnicas de programao em C. Campus, 2004. MOKARZEL, Fabio Carneiro; SOMA, Nei Yoshihiro. Introduo Cincia da Computao. Campus, 2008. FARRER, H.; BECKER, C.. Algoritmos Estruturados. Rio de Janeiro, LTC, 1999. KERNIGHAN, B.; RITCHIE, D.. C: a linguagem de programao. Porto Alegre, Campus, 1986. DE SOUZA, M. A. F.; GOMES, M. M.; SOARES, M. V.; CONCILIO, R.. Algoritmos e Lgica de Programao. Thomson, 2004. LOPES, A.; GARCIA, G.. Introduo Programao: 500 algoritmos resolvidos. Campus, 2002. FEOFILOFF, P.. Algoritmos em Linguagem C. Campus, 2008.

Prof. Fbio Diniz Rossi

48

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

Manual de utilizao do Dev-C++ Dev-C++ um Ambiente de Desenvolvimento Integrado (IDE - Integrated Development Environment) para programao na linguagem C/C++. Ele usa o Mingw do GCC (GNU Compiler Collection) como seu compilador e cria executveis nativos no Win32, console ou GUI. Dev-C++ tambm pode ser usado juntamente com o Cygwin. Lista de Recursos: Suporte a compiladores baseados em GCC. Depurao integrada (usando GDB). Navegador de classes. Recurso de completar cdigos. Navegador de depurao de variveis. Gerenciador de Projetos. Editor com destaque de sintaxe personalizvel. Suporte a modelos para criao dos seus prprios projetos. Edio e compilao de arquivos de recursos. Gerenciador de Ferramentas. Suporte a impresso. Facilidades de encontrar e substituir. Gerenciador de pacotes para facilitar a instalao e adio de bibliotecas. Suporte CVS. Lista de coisas a fazer. Janela de CPU. Quando abrimos o Dev-C++, vemos a tela inicial abaixo:

Prof. Fbio Diniz Rossi

49

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

Nesta tela devemos clicar em no menu File -> New -> Source File para podermos escrever um novo cdigo-fonte. Tambm podemos usar o mnemnico Ctrl + N ou clicar no 3 boto da barra Main. Quando fizermos essa operao, abrir no compilador uma rea onde poderemos escrever nossos programas como na tela abaixo:

Nessa rea de edio direita onde escrevemos nossos programas. Aps o trmino do desenvolvimento, devemos compilar nosso cdigo-fonte, gerando assim o arquivo executvel. Portanto, devemos ir ao menu Execute -> Compile ou o mnemnico Ctrl + F9, salvar o arquivo que por enquanto chamado de Untitled1.c para um nome a fim de podermos saber o que faz o nosso cdigofonte.

Prof. Fbio Diniz Rossi

50

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

O arquivo ser compilado e um arquivo executvel ser gerado. A tela da compilao pode ser vista abaixo:

Aps a compilao realizada com sucesso, temos a apresentao do programa em uma tela de console, como vemos abaixo:

Para executarmos o programa novamente, utilizamos o menu Execute -> Run ou o mnemnico Ctrl + F10.

Prof. Fbio Diniz Rossi

51

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

Bibliotecas e Funes mais utilizadas stdio.h C library to perform Input/Output operations. Input and Output operations can also be performed in C++ using the C Standard Input and Output Library (cstdio, known as stdio.h in the C language). This library uses what are called streams to operate with physical devices such as keyboards, printers, terminals or with any other type of files supported by the system. Streams are an abstraction to interact with these in an uniform way; All streams have similar properties independently of the individual characteristics of the physical media they are associated with. Streams are handled in the cstdio library as pointers to FILE objects. A pointer to a FILE object uniquely identifies a stream, and is used as a parameter in the operations involving that stream. There also exist three standard streams: stdin, stdout and stderr, which are automatically created and opened for all programs using the library. Stream properties Streams have some properties that define which functions can be used on them and how these will treat the data input or output through them. Most of these properties are defined at the moment the stream is associated with a file (opened) using the fopen function: Read/Write Access Specifies whether the stream has read or write access (or both) to the physical media they are associated with. Text / Binary Text streams are thought to represent a set of text lines, each one ending with a new-line character. Depending on the environment where the application is run some character translation may occur with text streams to adapt some special characters to the text file specifications of the environment. A binary stream, on the other hand, is a sequence of characters written or read from the physical media with no translation, having a one-to-one correspondence with the characters read or written to the stream. Buffer A buffer is a block of memory where data is accumulated before being physically read or written to the associated file or device. Streams can be either fully buffered, line buffered or unbuffered. On fully buffered streams, data is read/written when the buffer is filled, on line buffered streams this happens when a new-line character is encountered, and on unbuffered streams characters are intended to be read/written as soon as possible. Indicators Streams have certain internal indicators that specify their current state and which affect the behavior of some input and output operations performed on them:
Prof. Fbio Diniz Rossi
52

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

Error indicator This indicator is set when an error has occurred in an operation related to the stream. This indicator can be checked with the ferror function, and can be reset by calling either to clearerr or to any repositioning function (rewind, fseek and fsetpos). End-Of-File indicator When set, indicates that the last reading or writing operation performed with the stream reached the End of File. It can be checked with the feof function, and can be reset by calling either to clearerr or to any repositioning function (rewind, fseek and fsetpos). Position indicator It is an internal pointer of each stream which points to the next character to be read or written in the next I/O operation. Its value can be obtained by the ftell and fgetpos functions, and can be changed using the repositioning functions rewind, fseek and fsetpos. Functions Operations on files: remove Remove file (function) rename Rename file (function) tmpfile Open a temporary file (function) tmpnam Generate temporary filename (function) File access: fclose Close file (function) fflush Flush stream (function) fopen Open file (function) freopen Reopen stream with different file or mode (function) setbuf Set stream buffer (function) setvbuf Change stream buffering (function) Formatted input/output: fprintf Write formatted output to stream (function) fscanf Read formatted data from stream (function) printf Print formatted data to stdout (function) scanf Read formatted data from stdin (function) sprintf Write formatted data to string (function) sscanf Read formatted data from string (function) vfprintf Write formatted variable argument list to stream (function) vprintf Print formatted variable argument list to stdout (function) vsprintf Print formatted variable argument list to string (function) Character input/output: fgetc Get character from stream (function) fgets Get string from stream (function)
Prof. Fbio Diniz Rossi
53

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

fputc fputs getc getchar gets putc putchar puts ungetc

Write character to stream (function) Write string to stream (function) Get character from stream (function) Get character from stdin (function) Get string from stdin (function) Write character to stream (function) Write character to stdout (function) Write string to stdout (function) Unget character from stream (function)

Direct input/output: fread Read block of data from stream (function) fwrite Write block of data to stream (function) File positioning: fgetpos Get current position in stream (function) fseek Reposition stream position indicator (function) fsetpos Set position indicator of stream (function) ftell Get current position in stream (function) rewind Set position indicator to the beginning (function) Error-handling: clearerr Clear error indicators (function) feof Check End-of-File indicator (function) ferror Check error indicator (function) perror Print error message (function) Macros EOF End-of-File (constant) FILENAME_MAX Maximum length of file names (constant) NULL Null pointer (constant) TMP_MAX Number of temporary files (constant) And also _IOFBF, _IOLBF, _IONBF, BUFSIZ, FOPEN_MAX, L_tmpnam, SEEK_CUR, SEEK_END and SEEK_SET, each described with its corresponding function. Types FILE fpos_t (type) size_t string.h C Strings. This header file defines several functions to manipulate C strings and arrays. Functions
Prof. Fbio Diniz Rossi
54

Object containing information to control a stream (type) Object containing information to specify a position within a file Unsigned integral type (type)

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

Copying: memcpy Copy block of memory (function) memmove Move block of memory (function) strcpy Copy string (function) strncpy Copy characters from string (function) Concatenation: strcat Concatenate strings (function) strncat Append characters from string (function) Comparison: memcmp Compare two blocks of memory (function) strcmp Compare two strings (function) strcoll Compare two strings using locale (function) strncmp Compare characters of two strings (function) strxfrm Transform string using locale (function) Searching: memchr Locate character in block of memory (function) strchr Locate first occurrence of character in string (function) strcspn Get span until character in string (function) strpbrk Locate character in string (function) strrchr Locate last occurrence of character in string (function) strspn Get span of character set in string (function) strstr Locate substring (function) strtok Split string into tokens (function) Other: memset Fill block of memory (function) strerror Get pointer to error message string (function) strlen Get string length (function) Macros NULL Types size_t stdlib.h C Standard General Utilities Library. This header defines several general purpose functions, including dynamic memory management, random number generation, communication with the environment, integer arthmetics, searching, sorting and converting. Functions Null pointer (macro) Unsigned integral type (type)

Prof. Fbio Diniz Rossi

55

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

String conversion: atof Convert string to double (function) atoi Convert string to integer (function) atol Convert string to long integer (function) strtod Convert string to double (function) strtol Convert string to long integer (function) strtoul Convert string to unsigned long integer (function) Pseudo-random sequence generation: rand Generate random number (function) srand Initialize random number generator (functions) Dynamic calloc free malloc realloc memory management: Allocate space for array in memory (function) Deallocate space in memory (function) Allocate memory block (function) Reallocate memory block (function)

Environment: abort Abort current process (function) atexit Set function to be executed on exit (function) exit Terminate calling process (function) getenv Get environment string (function) system Execute system command (function) Searching and sorting: bsearch Binary search in array (function) qsort Sort elements of array (function) Integer arithmethics: abs Absolute value (function) div Integral division (function) labs Absolute value (function) ldiv Integral division (function) Multibyte characters: mblen Get length of multibyte character (function) mbtowc Convert multibyte character to wide character (function) wctomb Convert wide character to multibyte character (function) Multibyte strings: mbstowcs Convert multibyte string to wide-character string (function) wcstombs Convert wide-character string to multibyte string (function) Macros EXIT_FAILURE Failure termination code (macro) EXIT_SUCCESS Success termination code (macro) MB_CUR_MAX Maximum size of multibyte characters (macro) NULL Null pointer (macro)
Prof. Fbio Diniz Rossi
56

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

RAND_MAX Types div_t ldiv_t size_t math.h

Maximum value returned by rand (macro)

Structure returned by div (type) Structure returned by div and ldiv (type) Unsigned integral type (type)

C numerics library. Cmath declares a set of functions to compute common mathematical operations and transformations: Trigonometric functions: cos Compute cosine (function) sin Compute sine (function) tan Compute tangent (function) acos Compute arc cosine (function) asin Compute arc sine (function) atan Compute arc tangent (function) atan2 Compute arc tangent with two parameters (function) Hyperbolic functions: cosh Compute hyperbolic cosine (function) sinh Compute hyperbolic sine (function) tanh Compute hyperbolic tangent (function) Exponential and logarithmic functions: exp Compute exponential function (function) frexp Get significand and exponent (function) ldexp Generate number from significand and exponent (function) log Compute natural logarithm (function) log10 Compute common logarithm (function) modf Break into fractional and integral parts (function) Power functions pow Raise to power (function) sqrt Compute square root (function) Rounding, absolute value and remainder functions: ceil Round up value (function) fabs Compute absolute value (function) floor Round down value (function) fmod Compute remainder of division (function) time.h C Time Library. This header file contains definitions of functions to get and manipulate date and time information.

Prof. Fbio Diniz Rossi

57

Instituto Federal Farroupilha Campus Alegrete Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas

Functions Time manipulation clock Clock program (function) difftime Return difference between two times (function) mktime Convert tm structure to time_t (function) time Get current time (function) Conversion: asctime Convert tm structure to string (function) ctime Convert time_t value to string (function) gmtime Convert time_t to tm as UTC time (function) localtime Convert time_t to tm as local time (function) strftime Format time to string (function) Macros CLOCKS_PER_SEC Clock ticks per second (macro) NULL Null pointer (macro) Types clock_t size_t time_t struct tm Clock type (type) Unsigned integral type (type) Time type (type) Time structure (type)

Prof. Fbio Diniz Rossi

58

Você também pode gostar