Você está na página 1de 81

Linguagem de Programao - C

Snia Virginia Alves Frana












2007

Linguagem de programao - C

ndice

Captulo 1- Introduo ao C................................................................................................................5
1.1 Linguagens de Programao................................................................................................................... 5
1.2 Linguagens de baixo e alto nvel ............................................................................................................. 5
1.3 Histrico do C......................................................................................................................................... 6
Captulo 2 - Tcnicas Bsica de Programao ...................................................................................7
2.1 Tipos de dados primitivos....................................................................................................................... 7
2.2 Identificadores ........................................................................................................................................ 7
2.3 Variveis e Constantes ............................................................................................................................ 8
2.3.1 Declarao de Variveis............................................................................................................................................................. 8
2.3.2 Declarao de Constantes......................................................................................................................................................... 8
2.4 Operaes Bsicas .................................................................................................................................. 9
2.4.1 Operador de Atribuio ............................................................................................................................................................. 9
2.4.2 Operadores Aritmticos............................................................................................................................................................. 9
2.4.3 Operaes Relacionais............................................................................................................................................................. 11
2.4.4 Operadores Lgicos.................................................................................................................................................................. 12
2.5 Atribuies reduzidas............................................................................................................................. 12
2.6 Operadores pr e ps-fixados ................................................................................................................ 12
2.7 Converso de tipo (Casting)................................................................................................................... 13
2.8 Comandos de Entrada e Sada de Dados............................................................................................... 13
2.8.1 Entrada de Dados...................................................................................................................................................................... 13
2.8.2 Sada de Dados........................................................................................................................................................................... 14
2.9 Palavras Reservadas do C....................................................................................................................... 15
2.10 Estrutura de um programa bsico em C .............................................................................................. 16
2.10.1 Comentrios .............................................................................................................................................................................. 16
2.11 Conhecendo o Dev-C++....................................................................................................................... 18
Exerccios Propostos I................................................................................................................................. 18
Captulo 3 - Comandos de Seleo....................................................................................................24
3.1 Introduo ..............................................................................................................................................24
2
Linguagem de programao - C
3.2 IFELSE (SESENO).....................................................................................................................24
3.3 SWITCH (Escolha)................................................................................................................................26
Exerccios Propostos II ...............................................................................................................................28
Captulo 4 - Comandos de Repetio................................................................................................ 31
4.1 Introduo .............................................................................................................................................. 31
4.2 FOR (PARA) .......................................................................................................................................... 31
4.3 WHILE (ENQUANTO teste no incio) .............................................................................................32
4.4 DO...WHILE (Faa...enquanto - teste no final) ...................................................................................33
4.5 Comandos Desestruturadores................................................................................................................35
Exerccios Propostos III..............................................................................................................................35
Captulo 5 Vetores e Registros .......................................................................................................40
5.1 Vetores - Tipos de Dados Estruturados ................................................................................................40
5.2 Registros.................................................................................................................................................42
5.3 Vetor de Registros..................................................................................................................................43
Exerccios Propostos IV..............................................................................................................................44
Captulo 6 Modularizao ..............................................................................................................48
6.1 Introduo ..............................................................................................................................................48
6.2 Declarando uma funo.........................................................................................................................48
6.3 Variveis Locais .....................................................................................................................................49
6.4 Chamando Funes ...............................................................................................................................49
6.5 Comando return .....................................................................................................................................49
6.6 Argumentos............................................................................................................................................50
Exerccios Propostos V................................................................................................................................ 51
Captulo 7 Manipulao de Caracteres ..........................................................................................52
7.1 Funes de manipulao de cadeia de caracteres: biblioteca string.h.................................................52
7.2 Funes de converso de caractere: biblioteca ctype.h........................................................................53
7.3 Funes de converso: biblioteca stdlib.h............................................................................................53
3
Linguagem de programao - C
7.4 Funes de teste para caracteres: Biblioteca ctype.h ............................................................................55
7.5 Validao de Campo ..............................................................................................................................56
Exerccios Propostos VI ..............................................................................................................................58
Captulo 8 Comandos de tela .........................................................................................................59
8.1 Comandos Bsicos de Tela ....................................................................................................................59
Captulo 9 Arquivo..........................................................................................................................64
9.1 Alocao Dinmica - Ponteiros..............................................................................................................64
9.2 Arquivos .................................................................................................................................................66
9.2.1 Declarao de um Arquivo...................................................................................................................................................... 66
9.2.2 Abrindo e Fechando um Arquivo.......................................................................................................................................... 66
9.2.3 Ler e Gravar Informao no Arquivo................................................................................................................................... 68
9.2.4 Acesso Randmico.................................................................................................................................................................... 68
Exerccios Propostos VII.............................................................................................................................73
Captulo 10 Extras...........................................................................................................................74
10.1 Tabela ASCII ........................................................................................................................................74
10.2 Acentos .................................................................................................................................................75
10.3 Molduras...............................................................................................................................................77
10.4 Bibliteca time.h.....................................................................................................................................79
Captulo 11 Boas Prticas de Programao....................................................................................80
11.1 Qualidades de um Programa ................................................................................................................80
11.2 Formas de Melhoria da Eficincia de um Programa............................................................................ 81
4


Captulo 1- Introduo ao C

1.1 Linguagens de Programao
Um programa de computador um conjunto instrues que representam um algoritmo para a resoluo
de algum problema. Estas instrues so escritas atravs de um conjunto de cdigos (smbolos e palavras).
Este conjunto de cdigos possui regras de estruturao lgica e sinttica prpria. Dizemos que este
conjunto de smbolos e regras formam uma linguagem de programao.

1.2 Linguagens de baixo e alto nvel
Podemos dividir, genericamente, as linguagens de programao em dois grandes grupos: as
linguagens de baixo nvel e as de alto nvel:
Linguagens de baixo nvel: So linguagens voltadas para a mquina, isto , so escritas
usando as instrues do microprocessador do computador. So genericamente chamadas de
linguagens Assembly. Vantagens: Programas so executados com maior velocidade de
processamento. Os programas ocupam menos espao na memria. Desvantagens: Em geral,
programas em Assembly tm pouca portabilidade, isto , um cdigo gerado para um tipo de
processador no serve para outro. Cdigos Assembly no so estruturados, tornando a
programao mais difcil.

Linguagens de alto nvel: So linguagens voltadas para o ser humano. Em geral utilizam
sintaxe estruturada tornando seu cdigo mais legvel. Necessitam de compiladores ou interpretadores
para gerar instrues do microprocessador. Interpretadores fazem a interpretao de cada
instruo do programa fonte executando-a dentro de um ambiente de programao, Basic e
AutoLISP, por exemplo. Compiladores fazem a traduo de todas as instrues do programa
fonte gerando um programa executvel. Estes programas executveis (*.exe) podem ser
executados fora dos ambientes de programao, C e Pascal por exemplo. As linguagens de alto
nvel podem se distinguir quanto a sua aplicao em genricas como C, Pascal e Basic ou
especficas como Fortran (clculo matemtico), GPSS (simulao), LISP (inteligncia artificial)
Linguagem de programao - C
ou CLIPPER (banco de dados). Vantagens: Por serem compiladas ou interpretadas, tem maior
portabilidade podendo ser executados em varias plataformas com pouqussimas modificaes.
Em geral, a programao torna-se mais fcil por causa do maior ou menor grau de estruturao
de suas linguagens. Desvantagens: Em geral, as rotinas geradas (em linguagem de maquina) so
mais genricas e portanto mais complexas e por isso so mais lentas e ocupam mais memria.

1.3 Histrico do C

Desenvolvida nos laboratrios Bell na dcada de 70, a partir da Linguagem B (criada no final dos
anos 60 por Ken Thompson), que foi reformulada por Brian Kernighan e Dennis M. Ritchie e
posteriormente renomeada para C.
Podendo ser considerada uma linguagem de mdio nvel, pois possui instrues que a tornam ora
uma linguagem de alto nvel e estruturada como o Pascal, se assim se fizer necessrio, ora uma linguagem
de baixo nvel pois possui instrues to prximas da mquina, que s o Assembler possui.
De fato com a linguagem C podemos construir programas organizados e concisos (como o Pascal),
ocupando pouco espao de memria com alta velocidade de execuo (como o Assembler). Infelizmente,
dada toda a flexibilidade da linguagem, tambm poderemos escrever programas desorganizados e difceis
de serem compreendidos (como usualmente so os programas em BASIC).
Devemos lembrar que a linguagem C foi desenvolvida a partir da necessidade de se escrever
programas que utilizassem recursos prprios da linguagem de mquina de uma forma mais simples e
portvel que o Assembler.
Existem inmeras razes para a escolha da linguagem C como a predileta para os desenvolvedores
profissionais. As caractersticas da Linguagem C serviro para mostrar o porqu de sua ampla utilizao.
Caractersticas da Linguagem C:
Portabilidade entre mquinas e sistemas operacionais.
Dados compostos em forma estruturada.
Programas estruturados.
Total interao com o sistema operacional.
Cdigo compacto e rpido, quando comparado ao cdigo de outras linguagens.

6



Captulo 2 - Tcnicas Bsica de Programao

2.1 Tipos de dados primitivos

Dados so representados pelas informaes a serem tratadas (processadas) por um computador.
Inteiro: toda e qualquer informao numrica que pertena ao conjunto dos nmeros inteiros
relativos (negativa, nula ou positiva).
Tipo Tamanho Valores
short 16 bits -32.768 a +32.767
int 32 bits -2.147.483.648 a + 2.147.483.647
long 64 bits -9.223.372.036.854.775.808 a
+9.223.372.036.854.775.807

Real: Toda e qualquer informao numrica que pertena ao conjunto de nmeros reais (negativa,
positiva ou nula).
Tipo Tamanho Valores
float 32 bits 3.4E-38 a 3.4E+38
double 64 bits 1.7E-308 a 1.7E+308

Caractere (char): Toda e qualquer informao composta por um caractere alfa numrico (a, b,
c,...z, A, B, C,...Z, 0...9) e /ou especiais (ex; #?@!<?). O caractere deve ser indicado entre apstrofo .

Lgico: O C no te o tipo lgico.

2.2 Identificadores
Representam os nomes escolhidos para rotular as variveis, constantes, procedimentos e funes.

Regras:
1. primeiro caractere deve ser uma letra;
2. Os nomes devem ser formados por caracteres pertencentes ao seguinte conjunto : {a,b,c,..z,
A,B,C,...Z, 0,1,2,...,9,_};
Linguagem de programao - C
3. No deve haver espao em branco;
4. No deve haver identificadores repetidos;
5. Existe distino de maisculas e minsculas;
6. Os nomes escolhidos devem ser claros a fim de explicitar seu contedo uso, mas
7. tambm no deve ser extenso para no dificultar a escrita.

2.3 Variveis e Constantes

Unidades bsicas de armazenamento das informaes em programao.
As constantes referem-se a valores fixo que no podem ser alterados pelo programa. O modo
como cada constante representada depende do seu tipo.
Uma varivel um espao de memria reservado para armazenar um certo tipo de dado e tendo
um nome para referenciar o seu contedo. Uma varivel pode conter, a cada instante, valores diferentes.

2.3.1 Declarao de Variveis
Precisamos declarar as variveis para informar quais objetos sero manipulados pelo programa. as
informaes variveis so guardadas em dispositivos eletrnicos chamados memria.

A declarao de variveis deve seguir a seguinte sintaxe:
tipo nome-da-varivel1;
tipo nome-da-varivel2, nome-da-varivel3;

Exemplo:
int idade,matricula;
real media, total;

2.3.2 Declarao de Constantes
Diferente das variveis, as constantes mantm seu valor ao longo do programa. Para indicar ao
compilador que se trata de uma constante, a diretiva #define utilizada.
Exemplo: #define <identificador> <valor>
No necessrio colocar o ponto e vrgula no final e tambm no precisa informar o tipo de dado
da constante. O valor de uma constante no pode ser modificado de maneira alguma.


8
Linguagem de programao - C
O modo como cada constante representada depende do seu tipo. Constantes caractere so
colocadas entre aspas simples, por exemplo, j. Constantes cadeia de caractere (ou string) so colocadas
entre aspas duplas, por exemplo, Venus e jota. Constantes inteiro so especificadas como nmeros
sem componente fracional, por exemplo, 10 e 67. Constantes ponto flutuante requerem o uso de ponto
decimal seguido pelo componente fracional do nmero, por exemplo, 10.78. Exemplos:

#def i ne pi 3. 1416
#def i ne di sci pl i na Mat emt i ca
#def i ne di as 7

2.4 Operaes Bsicas

Os operadores so o meio pelo qual incrementamos, decrementamos, comparamos e avaliamos,
dados no computador. Temos quatro tipos de operadores:
Operador de Atribuio
Operadores Aritmticos
Operadores Relacionais
Operadores Lgicos

2.4.1 Operador de Atribuio
Nome-da-Variavel = Valor, Varivel ou Expresso;

Esse operador armazena um valor, o contedo de uma varivel ou o resultado de uma expresso na
varivel. importante que o tipo do Valor, Varivel ou Expresso seja compatvel com o tipo da varivel.
Ex: MEDIA = 7;
MEDIA = X;
MEDIA = X + Y;

2.4.2 Operadores Aritmticos
Esses operadores sero utilizados em expresses para realizar operaes aritmticas com variveis.

Operador Descrio
+ Adio
- Subtrao
* Multiplicao
/ Diviso Inteira
% Retorna o resto da diviso inteira de a por b

9
Linguagem de programao - C
Exemplo: Suponha que A = 6, B = 1, C = 16 e D = 6.5, ento:
A = A + 1 => A = 7
B = B * C => B = 16
C = C - A => C = 9
A = C % A => A = 2 (resto da diviso)
A = C/A => A = 1 (parte inteira da diviso)
D = D/2 => A = 3.25 (diviso fracionria)

Prioridade de Operadores

1 Operaes embutidas em parnteses mais internos;
2 Resto
3 Multiplicao e/ou diviso;
4 Adio e/ou Subtrao;

Exemplos:
A = B + C * C => A = 1 + 16 * 16 => A = 1 + 256 => A = 257
A = (B + C) * C => A = (1 + 16) * 16 => A = 17 * 16 => A = 272

2.4.2.1 Biblioteca math.h

A biblioteca math.h possui funes teis para a resoluo de problemas que envolve questes
matemticas. A seguir sero apresentadas as principais funes desta biblioteca.

Funes trigonomtricas

double sin (double);
double cos (double);
double tan (double);

Exponenciais e logaritmos

double exp (double);
Exemplo: y = exp (x);
Retorna o nmero e elevado potncia x

double log (double);
Exemplo: y = log (x);
Retorna o logaritmo de x na base e. No use com x negativo.

double log10 (double);
Exemplo: y = log10 (x);
Retorna o logaritmo de x na base 10. No use com x negativo.


10
Linguagem de programao - C
Raiz e potncia

double sqrt (double);
Exemplo: y = sqrt (x);
Retorna a raiz quadrada de x. No use com x < 0.

double pow (double, double);
Exemplo: p = pow (x, y);
Retorna x elevado potncia y.
No use com x = 0 e y < 0. No use com x < 0 e y no-inteiro. Caso especial: pow (0, 0) =1.0.

Arredondamentos

double floor (double);
Exemplo: i = floor (x);
Retorna o maior inteiro que seja menor que ou igual a x, isto , o nico inteiro i que satisfaz
i <= x < i+1. Exemplo, se x = 1.09 ser retornado 1.

double ceil (double);
Exemplo: j = ceil (x);
Retorna o menor inteiro que seja maior que ou igual a x, isto , o nico inteiro j que satisfaz
j-1 < x <= j. Exemplo, se x = 1.09 ser retornado 2.

2.4.3 Operaes Relacionais
So utilizados para comparar variveis ou expresses, resultando num valor lgico (Verdadeiro ou
Falso).
Operador Descrio
== Igual
!=
Diferente ()
<
Menor
>
Maior
<=
Menor ou Igual ()
>=
Maior ou Igual ()

Alerta: O resultado de uma operao usando operadores relacionais s pode dar um dos valores:
VERDADE ou FALSO, jamais dar outro valor.

Exemplo: Suponha que A = 1 e B = 6
A > B => falso
A >= B => falso
A < B => verdade
A <= B => verdade
A == B => falso

11
Linguagem de programao - C
2.4.4 Operadores Lgicos
So utilizados para avaliar expresses lgicas.
Uma expresso lgica representa a unio de operaes relacionais permitindo que o resultado de
vrias expresses relacionais sejam transformado em um nico resultado lgico.
Operadores Lgicos Operador em C
E
OU
NO
&&
||
!

Esses operadores obedecem as seguintes tabelas:
CON1 CON2 OU CON1 CON2 E CON1 NO
V V V V V V V F
V F V V F F F V
F V V F V F
F F F F F F



Prioridade de Operadores

1 Operaes embutidas em parnteses mais internos;
2 %
3 Multiplicao e/ou diviso;
4 Adio e/ou Subtrao;
5 Operadores Relacionais;
6 Operadores Lgicos.

2.5 Atribuies reduzidas

C oferece muitos operadores de atribuio que so reduo de outros operadores. Eles tomam a
forma de op=, onde op pode ser +, -, *, /, %. A expresso f op= g anloga a f = f op g. Por exemplo:
Expresso igual a
a += 2 a = a + 2
s /= 7 + 2 s = s /(7 + 2)

2.6 Operadores pr e ps-fixados
Os operadores pr e ps-fixados incrementam (++) ou decrementam (--) uma varivel. Uma
operao prefixada realizada antes que o valor da varivel seja utilizado. Uma operao ps-fixada
efetuada aps a utilizao da varivel. Por exemplo, para uma varivel i inteira com valor 5:
12
Linguagem de programao - C
Expresso Valor de i utilizado na avaliao Valor da expresso Valor final de i
5 + (i++) 5 10 6
5 + (i--) 5 10 4
5 + (++i) 6 11 6
5 + (--i) 4 9 4

2.7 Converso de tipo (Casting)
Algumas vezes queremos, momentaneamente, modificar o tipo de dado representado por uma
varivel, isto , queremos que o dado seja apresentado em um tipo diferente do qual a varivel foi
inicialmente declarada. Por exemplo: declaramos uma varivel como int e queremos, momentaneamente,
que seu contedo seja apresentado como float. Este procedimento chamado de converso de tipo ou
casting (moldagem, em ingls).

Sintaxe: A sintaxe da instruo de converso de tipo : (tipo) varivel
onde tipo o nome do tipo ao qual queremos converter o dado armazenado em varivel.

Exemplo: observe a converso de tipo feita no exemplo abaixo:
int num;
float valor = 13.0;
num = (int)valor % 2;

No exemplo acima a varivel valor foi declarada inicialmente como sendo do tipo float recebendo
o valor inicial 13.0. Logo em seguida o contedo de valor convertido para o tipo int para realizar a
operao mdulo (%) com o inteiro 2. Aqui a converso necessria pois a operao mdulo somente
pode ser feita com inteiros. importante salientar que a converso de tipo feita com o dado armazenado
em uma varivel mas a varivel continua tendo o seu tipo original. No exemplo acima a varivel valor e os
dados nela armazenados continuam sendo do tipo float aps a converso.
2.8 Comandos de Entrada e Sada de Dados
O objetivo de escrevermos programas em ltima anlise, a obteno de resultados (Sadas) depois
da elaborao de clculos ou pesquisas (Processamento) atravs do fornecimento de um conjunto de dados
ou informaes conhecidas (Entradas).

2.8.1 Entrada de Dados
A execuo da instruo de leitura pressupe que os dados sero fornecidos do meio externo
(teclado), e sero armazenados na memria (variveis).
13
Linguagem de programao - C
O comando scanf servir para promover leitura de dados via teclado.
Forma Geral: scanf(string de controle, lista de argumentos);

string de controle:
%c - leitura de caractere
%d - leitura de nmeros inteiros
%f - leitura de nmeros reais
%s - leitura de caracteres

Lista de argumentos: variveis onde os valores digitados via teclado devero ser armazenados. A varivel
deve ser precedida do &.

Exemplo:
scanf("%d", &idade);
scanf("%f", &nota);

A lista de argumentos deve conter exatamente o mesmo nmero de argumentos quantos forem os
cdigos de formatao na <string de controle>. Se este no for o caso, diversos problemas podero
ocorrer - incluindo at mesmo a queda do sistema - quando estivermos utilizando programas compilados
escritos em C. Felizmente ao utilizarmos o Classic C, apenas uma mensagem de erro ser apresentada, para
que possamos corrigir o programa sem outros inconvenientes.

2.8.2 Sada de Dados
A execuo do comando de sada far com que informaes sejam mostradas na tela.

Forma Geral: printf("string de controle", lista de argumentos);


Cdigos especiais:
\n avano de linha
\t tabulao (tab)
\" aspas duplas
\\ barra
\a Alerta sonoro

Necessariamente voc precisar ter tantos argumentos quantos forem os comandos de formatao
na string de controle. Se isto no ocorrer, a tela exibir sujeira ou no exibir qualquer dado.

Cdigos de impresso formatada:
%c caractere
%d inteiro
%f real
%s string
%% o caractere '%'
14
Linguagem de programao - C

Exemplos:
printf("Uma linha");
printf("Uma linha\nDuas linhas");
printf("Os nmeros so: %d e %d\n",7,8);
printf("Caruaru est a %d Km de Recife",dist);
printf("%d%% de %d = %f\n", p, x, x*(p/100.0));
Formatao

O tamanho de campos de impresso indicado logo aps o '%' e antes do tipo do campo:

printf("A quantidade de alunos eh %4d!\n",44);
printf("A quantidade de alunos eh %-4d!\n",44);
printf("R$ %.2f!\n",1234.5632);
printf("R$ %10.2f!\n",1234.5632);
printf("R$ %-10.2f!\n",1234.5632);

2.9 Palavras Reservadas do C

A linguagem C, como todas as outras linguagens de programao, consiste de palavras reservadas e
regras de sintaxe que se aplicam a cada palavra reservada. Uma palavra reservada essencialmente um
comando e, na maioria das vezes, as palavras reservadas de uma linguagem definem o que pode ser feito e
como pode ser feito.
Na linguagem C so 32 palavras reservadas. Todas as palavras reservadas do C so minsculas.
Uma palavra reservada no pode ser usada para nenhum outro propsito em um programa. A tabela
abaixo mostra as palavras reservadas conforme definido pelo padro ANSI para a linguagem C.

auto
break
case
char
const
switch
volatile
continue
default
do
double
else
typedef
while
enum
extern
float
for
goto
union
if
int
long
register
unsigned
return
short
signed
sizeof
static
struct
void

15
Linguagem de programao - C

2.10 Estrutura de um programa bsico em C

Incluso de bibliotecas (se necessrio)
Incluso das constantes
Comentrios (se desejar)
Programa principal
o Declarao de variveis
o Seqncia de comandos


2.10.1 Comentrios
Os comentrios so utilizados para documentar um programa, bem como podem ser teis para
encontrar erros no cdigo.
Comentrios podem ser colocados em qualquer lugar de seu programa. Comentrios comeam
com barra-asterisco (/*) e terminam por asterisco-barra (*/). O compilador ir ignorar tudo o que
encontrar entre estes dois smbolos.
Inserir comentrios em seus programas fundamental para que se tenha uma boa documentao.
A documentao auxilia no entendimento do programa.
Asteriscos dentro de comentrios podem ser colocados livremente. A seguir o exemplo de um
cabealho que pode ser colocado para facilitar a documentao dos programas.
/ *****************************************************
* Pr ogr ama: cor r i da. c
* Pr ogr amador : J os Al ves
* Dat a: 12/ 01/ 2007
* Pr ogr ama par a i mpr i mi r o r esul t ado de uma cor r i da
******************************************************/

Importante: No so permitidos os smbolos /* ou */ no interior de um comentrio:

/ * Est ou escr evendo / * umcoment r i o i l egal */

A maioria dos compiladores C tambm aceita comentrios de apenas uma linha, ou seja, que
terminam no final da linha. Neste caso, o comentrio feito colocando-se // no incio do texto de
comentrio. Neste caso no tem um smbolo para fechar o comentrio.

#i ncl ude <st di o. h>
#i ncl ude <coni o. h>
/ / pr ogr ama par a cal cul ar a medi a
mai n( )
{ f l oat m; / / var i vel que ar mazena a medi a
16
Linguagem de programao - C
Exemplos:

#i ncl ude <st di o. h>
#i ncl ude <coni o. h>
/ * pr ogr ama par a escr ever f r ase na t el a */
mai n( )
{ pr i nt f ( " ALO RECI FE! " ) ;
get che( ) ;
}

#i ncl ude <st di o. h>
#i ncl ude <coni o. h>
/ / pr ogr ama par a cal cul ar o quadr ado de umnumer o qual quer
mai n( )
{ i nt n, q;
pr i nt f ( Quadr ado de umNumer o\ n) ;
pr i nt f ( Numer o: ) ;
scanf ( %d, &n) ;
q = n * n;
pr i nt f ( " \ n\ aO quadr ado de %d = %d" , n, q) ;
get che( ) ;
}

#i ncl ude <st di o. h>
#i ncl ude <coni o. h>
#i ncl ude <mat h. h>
/ / cal cul o da r ai z quadr ada de umnumer o i nt ei r o qual quer
mai n( )
{ i nt num;
f l oat r ;
pr i nt f ( " \ nRai z quadr ada de umnumer o\ n\ n" ) ;
pr i nt f ( " Di gi t e o numer o: " ) ;
scanf ( " %d" , &num) ;
r = sqr t ( num) ; / / cal cul o da r ai z quadr ada
pr i nt f ( " \ nRai z quadr ada de %d = %. 2f " , num, r ) ;
get che( ) ;
}


Alguns termos comuns

Tempo de compilao: eventos que ocorrem enquanto seu programa esta sendo compilado.
Tempo de execuo: eventos que ocorrem quando seu programa esta sendo executado.
Biblioteca: um arquivo contendo as funes padro que seu programa poder usar.
Cdigo fonte: o texto de um programa que o usurio pode ler,comumente chamado de programa.
17
Linguagem de programao - C
2.11 Conhecendo o Dev-C++



Exerccios Propostos I

1. Identifique os tipos abaixo:

1) 1000 2) 0 3) 1.56 4) VERDADE
5) 456 6) 34 7) C 8) 45.8976

2. Quais os nomes vlidos de identificadores?

1) ENDERECO 2) 21BRASIL 3) FONE$COM 4) NOME_USUARIO
5) USUARIO6 6) NOME*USUARIO 7) END*A-6 8) #MEDIA


18
Linguagem de programao - C
3. Com as declaraes abaixo:
int NUM, X, SOMA;
float MEDIA, K, L;
Assinalar os comandos de atribuio invlidos:
( ) SOMA = NUM + 2;
( ) MEDIA = SOMA
( ) X = X + 1;
( ) NUM = K + L
( ) L = SOMA % K;
( ) SOMA + 2 = NUM + 10;
( ) NUM = SOMA;
( ) X = SOMA/NUM;

4. Dados os valores inteiros abaixo:
MEDIA NOTA TOTAL Z K X I J A
0 2 10 0 7 4 80 -1 -4

Quais os valores resultantes depois da execuo dos passos a seguir:
01) X = TOTAL/NOTA;
02) X = X X + 1;
03) X = X+1;
04) X = X+8;
05) X = X-2;
06) X = X+1;
07) X = X+J;
08) NOTA = X;
09) TOTAL = NOTA + X + TOTAL;
10) MEDIA = J + K;
11) A = A + K + 4;
12) MEDIA = 3;
13) I = 8 / 3;
14) I = A % MEDIA;
15) Z = A / MEDIA;
16) K = 2 + X * X 2;
17) J = A 15;
18) TOTAL = MEDIA + A + NOTA;
19) A = MEDIA;
20) MEDIA = NOTA;
21) NOTA = A;
22) I = 20;
23) K = I % X;
24) Z = J / 5;
25) K = I % 5;
26) MEDIA = NOTA/ A;
27) TOTAL = I + A;
28) I = 0;
29) I = I+2*A;
30) I = I+X;
31) I = I*2;
32) J = 3 * 4 + 27/I;

5. Quais os valores resultantes de cada linha do quadro abaixo:
A B C D A+B*C>D (D+C)*(A+B) <=35
2 2 3 9
4 3 2 2
1 7 1 3
3 3 3 4
5 1 5 20
2 7 2 18
7 6 4 2

19
Linguagem de programao - C
6. De acordo com os valores das variveis abaixo, responda as expresses com VERDADE ou FALSO:
A B C D E
10 3 2 2 25

a) (A == D)
b) ((A>B) && (C==D))
c) ((E+2<B+C) && (A==10))
d) ((D*E>100) || (B<5))
e) ((A-9>0) || (D-C==0))
f) ((E==25) && (A >B+C+D) && (C<B))
g) ((B > C) || (A != 5) II (C<E+A))
h) ((E != 25) && (D==2) || (C>0))


7. Faa um programa que leia um nmero qualquer e imprima o seu cubo.
8. Faa um programa que leia um nmero qualquer e imprima a sua raiz quadrada.
9. Faa um programa que leia um valor em graus Fharenheit e imprima o seu equivalente em graus
Celcius.
C = (F 32)*5/9
10. Faa um programa para ler um valor em graus Celsius e imprime o valor correspondente em graus
Fahrenheit.
11. Faa um programa para calcular o volume de uma esfera de raio r, onde r o valor lido.
3
4
3
r
V

=

12. Faa um programa que leia a velocidade de um automvel em km/h e imprima em m/s. Nota: 1 m/s
equivale a 3,6 km/h.
13. Faa um programa para ler o raio de um crculo, calcular e escrever a sua rea.
14. Faa um programa que a partir de um valor fornecido em real informe ao usurio o valor equivalente
em dlar americano e em euro. A cotao do dlar e do euro deve ser fornecida pelo usurio.
15. Faa um programa para ler o salrio mensal e o percentual de reajuste. Calcular e escrever o valor do
novo salrio.
16. Faa um programa para ler o nmero de votos brancos, nulos e vlidos. Calcular e escrever o
percentual que cada um representa em relao ao total de eleitores.
17. Suponha que voc foi ao supermercado e comprou:
N latas de Nescau com custo unitrio Q
L litros de leite com custo unitrio P
B quilos de banana com custo unitrio T
20
Linguagem de programao - C
Faa um programa que imprima: total gasto com cada produto e o total gasto no mercado.
18. Uma sorveteria produz 3 tipos de picols. O preo de cada um deles : 0.5, 0.6 e 0.1, respectivamente.
Sendo informado ao programa a quantidade vendida do tipo 1, do tipo 2 e do tipo 3, gere o seguinte
relatrio:
a) o total arrecadado com os picols do tipo 1, 2, 3.
b) o total arrecadado pela sorveteria.
19. Faa um programa que leia o nmero total de prestaes de um consrcio, o total de prestaes pagas e
o valor atual da prestao. O programa deve calcular e apresentar o saldo devedor atual e a quantidade de
prestaes sem pagar.
20. Faa um programa que leia a matrcula do vendedor, seu salrio fixo, o valor total de vendas efetuada
por ele e o percentual que ganha sobre as vendas. Escreva o salrio total do vendedor.
21. Faa um programa que l a matricula de um funcionrio, nmero de horas trabalhadas, valor da hora
trabalhada, nmero de filhos com idade menor que 14 anos e calcule o salrio deste funcionrio. Para cada
filho menor, ele tem um acrscimo de R$30,00 no salrio.
22. O governo acaba de liberar R$10.000.000 para construo de casas populares. Cada casa custa o
equivalente a 150 salrios mnimos. Faca um programa que leia o valor do salrio mnimo e calcule a
quantidade de casas possveis de se construir.
23. Faa um programa que leia um valor em Real (R$) e calcule o menor nmero possvel de notas de
50,00, 10,00, 5,00 e 1,00 real em que o valor lido pode ser decomposto. Escrever o valor lido e a relao de
notas necessrias. Suponha que o sistema monetrio no utiliza centavos.
Exemplo: Valor: R$ 347,00
Notas de R$ 50,00: 6
Notas de R$ 10,00: 4
Notas de R$ 5,00: 1
Notas de R$ 1,00: 2
24. Dada as seguintes entradas: km inicial, km final, litros consumidos, preo do litro de combustvel. Faa
um programa que imprima o seguinte Relatrio: distancia percorrida, Valor total gasto e Km por litro.
25. A turma C composta de 60 alunos, e a turma D de 20 alunos. Faa um programa que leia o percentual
de alunos reprovados na turma C, o percentual de aprovados na turma D, calcule e imprima:
a) O nmero de alunos reprovados na turma C.
b) O nmero de alunos reprovados na turma D.
26. Um motorista de txi deseja calcular o rendimento de seu carro na praa. Sabendo-se que o preo do
combustvel de R$2.20, faa um programa para ler: a marcao do odmetro (Km) no incio do dia, a
marcao (Km) no final do dia, a quantidade de litros de combustvel gasto e o valor total (R$) recebido
dos passageiros. Calcular e escrever: a mdia do consumo em km/l e o lucro (lquido) do dia.
27. Uma loja vende bicicletas com um acrscimo de 50 % sobre o seu preo de custo. Ela paga a cada
vendedor 2 salrios mnimos mensais. Faa um programa que leia o valor do salrio mnimo, o preo de
custo de uma bicicleta, o nmero de bicicletas vendidas e a quantidade de funcionrios. Calcule e imprima
o lucro (lquido) da loja.
21
Linguagem de programao - C
28. A equipe Ferrari deseja calcular o nmero mnimo de litros que dever colocar no tanque de seu carro
para que ele possa percorrer um determinado nmero de voltas at o primeiro reabastecimento. Faa um
programa que leia o comprimento da pista (em km), a quantidade de voltas a serem percorridas no grande
prmio, o nmero de reabastecimentos desejados, e o consumo de combustvel do carro (em km/l).
Calcular e escrever o nmero mnimo de litros necessrios para percorrer at o primeiro reabastecimento.
29. Faa um programa que leia os preos de uma mercadoria em abril e maio. Tendo como base a variao
dos preos desta mercadoria, calcule a taxa de inflao.

30. Faa um programa que leia um valor inteiro positivo e menor que 1000, armazene numa varivel inteira
e imprima a soma dos dgitos que formam o valor.
Exemplo: 397 => soma=19

31. 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). Sabe-se que a percentagem do distribuidor de
28% e os impostos de 45%, faa um programa que leia o custo de fbrica de um carro e escreva o custo ao
consumidor.
32. Dados os comprimentos dos catetos de um tringulo retngulo nas variveis LADO1 e LADO2, faa
um programa que calcule o valor da HIPOTENUSA.
33. Faa um programa que leia o tempo de durao de um evento em uma fbrica expressa em segundos e
mostre-o expresso em horas, minutos e segundos.
34. Faa um programa que, tendo como dados de entrada dois pontos quaisquer no plano, P(x1,y1) e
P(x2,y2), escreva a distncia entre eles. A frmula que efetua tal clculo :


35. Faa um programa que leia dois valores, A e B, e os imprima ao contrario, isto , se em A for lido 7, e
em B 11, quando voc for escrever A, ser impresso 11 e quando escrever B ser impresso 7. Neste
algoritmo voc s pode usar as variveis A e B. Dica: operadores aritmticos resolvem este problema.

36. Uma empresa de ferragens produz 3 tipos de peas mecnicas: parafusos, porcas e arruelas. Sabe-se que
dado um desconto de: 10% por porca vendida, 20% por arruela vendida, 30% por parafuso vendido.

Dados de entrada: preo unitrio da porca, da arruela e do parafuso; quantidade de porcas, arruelas e
parafusos solicitados pelo cliente.

Dados de sada: total pago pelas porcas, arruelas e parafusos; total de desconto dado ao cliente; total a ser
pago pelo cliente.

37. Uma revendedora de carros usados paga a seus funcionrios vendedores, um salrio fixo por ms, mais
uma comisso tambm fixa para cada carro vendido e mais 5% do valor das vendas por ele efetuadas.
Escrever um programa que l o nmero do vendedor, o nmero de carros por ele vendidos, o valor de
cada carro, o salrio fixo e o valor que recebe por carro vendido e calcula o salrio a ser pago a este
vendedor, escrevendo o nmero do vendedor e seu salrio total.

38. Um hotel com 42 apartamentos resolveu fazer promoes para os fins de semana fora da alta
temporada, isto , nos meses de abril, maio, junho, agosto, setembro outubro e novembro. A taxa da
promoo de 22% da diria normal. A expectativa aumentar a taxa de ocupao de 40 para 70%.
22
Linguagem de programao - C
Supondo que as expectativas se confirmem, escrever um programa que l a diria normal e calcula e
escreve as seguintes informaes:
a) O valor da diria no perodo da promoo.
b) O valor mdio arrecadado sem a promoo, durante um ms.
c) O valor mdio arrecadado com a promoo, durante um ms.
d) O lucro ou prejuzo mensal com a promoo.

23



Captulo 3 - Comandos de Seleo

3.1 Introduo

Usado para tomar decises, ou seja desviar a execuo do programa de acordo com uma condio,
podendo ser simples ou composta.
O comando de seleo utilizado quando h a necessidade de avaliar certas possibilidades dos
valores de variveis e de acordo com o resultado dessa anlise executar um conjunto especfico de
comandos.
3.2 IFELSE (SESENO)

A estrutura if...else a mais simples estrutura de seleo do C. Esta estrutura permite executar um
entre vrios blocos de instrues. O controle de qual bloco ser executado ser dado por uma condio
(expresso lgica ou numrica). Esta estrutura pode se apresentar de modos ligeiramente diferentes. Nesta
seo vamos apresentar separadamente cada uma das possibilidades de sintaxe.

Se Simples

Primeiro Caso: if com um nico comando
if (Condio)
Comando;
if (x==1)
a = a + 3;

Segundo Caso: if com mais de um comando
if (Condio)
{ Comando;
...
Comando;
}
if (x==1)
{ a = a + 3;
z = z * 2;
h = 12/6;
}


Linguagem de programao - C
Se Composto

Primeiro Caso: if e else com um nico comando
if (Condio)
Comando;
else
Comando;
if (media>=7)
printf(\nAprovado);
else
printf(\nReprovado);

Segundo Caso: if com mais de um comando e else com um comando
if (Condio)
{ Comando;
...
Comando;
}
else
Comando;
if (sal<260)
{ bonus = sal * 0.1;
nsal = sal + bnus;
}
else
printf(\nsem bonus);

Terceiro Caso: if com um comando e else com mais de um comando
if (Condio)
Comando;
else
{ Comando;
...
Comando;
}
if (sal >= 260)
printf(\nsem bonus);
else
{ bonus = sal * 0.1;
nsal = sal + bnus;
}

Quarto Caso: if e else com mais de um comando
if (Condio)
{ Comando;
...
Comando;
}
else
{ Comando;
...
Comando;
}
if (sal >= 260)
{ bonus = sal * 0.2;
nsal = sal + bnus;
}
else
{ bonus = sal * 0.4;
sf = num_filho * 20;
nsal = sal + bonus + sf;
}


OBS: A condio sempre deve vir entre parenteses.

25
Linguagem de programao - C
Exemplo: Verifica se o aluno foi aprovado ou reprovado.
#i ncl ude <st di o. h>
#i ncl ude <coni o. h>
mai n( )
{ f l oat med;
pr i nt f ( " Cader net a de Not as\ n\ n" ) ;
pr i nt f ( " Medi a do Al uno: " ) ;
scanf ( " %f " , &med) ;
i f ( med>=7)
pr i nt f ( " \ n\ nAl uno apr ovado commedi a %. 1f \ n" , med) ;
el se
pr i nt f ( " \ n\ nAl uno r epr ovado commedi a %. 1f \ n" , med) ;
get che( ) ;
}

Se Aninhado( Se dentro de outro Se)
#i ncl ude <st di o. h>
#i ncl ude <coni o. h>
mai n( )
{ i nt a, b;
pr i nt f ( " Compar a Numer os\ n\ n" ) ;
pr i nt f ( " A: " ) ;
scanf ( " %d" , &a) ;
pr i nt f ( " B: " ) ;
scanf ( " %d" , &b) ;
i f ( a > b)
pr i nt f ( " \ n\ n%d eh mai or que %d\ n" , a, b) ;
el se
{ i f ( a < b)
pr i nt f ( " \ n\ n%d eh menor que %d\ n" , a, b) ;
el se
pr i nt f ( " \ n\ nA e B so i guai s: %d\ n" , a) ;
}
get che( ) ;
}


3.3 SWITCH (Escolha)

A estrutura switch...case uma estrutura de deciso que permite a execuo de um conjunto de
instrues a partir pontos diferentes conforme o resultado de uma expresso inteira de controle. O
resultado desta expresso comparado ao valor de cada um dos rtulos, e as instrues so executadas a
partir desde rtulo.
26
Linguagem de programao - C
Escolha simples

switch (variavel)
{ case valor : Comando; ...break;
...
case valor: Comandos; ... break;
}
switch (cargo)
{ case 1: sal = sal + 200; break;
case 2: sal = sal + 400; break;
case 3: sal = sal + 600; break;
}

Observe que break serve para terminar a seqncia de comandos em execuo, por serem opcionais, se
forem suprimidos permitem que o case a seguir seja executado, sem haver qualquer quebra na seqncia
do processamento.

Escolha Composto

switch (variavel)
{ case valor : Comando; ...break;
...
case valor: Comandos; ... break;
default: comandos; ... break;
}
switch (cargo)
{ case 1: sal = sal + 200; break;
case 2: sal = sal + 400; break;
case 3: sal = sal + 600; break;
default : sal = sal + 100; break;
}

Exemplo:
#i ncl ude <st di o. h>
#i ncl ude <coni o. h>
mai n( )
{ i nt cod, quant ;
pr i nt f ( " Super mer cado Boa Compr a\ n\ n" ) ;
pr i nt f ( " Codi go do Pr odut o: " ) ;
scanf ( " %d" , &cod) ;
pr i nt f ( " Quant i dade: " ) ;
scanf ( " %d" , &quant ) ;
swi t ch ( cod)
{ case 102: pr i nt f ( " \ n\ nTot al a pagar : R$%. 2f \ n" , quant *5. 3) ; br eak;
case 103: pr i nt f ( " \ n\ nTot al a pagar : R$%. 2f \ n" , quant *6. 0) ; br eak;
case 104: pr i nt f ( " \ n\ nTot al a pagar : R$%. 2f \ n" , quant *3. 2) ; br eak;
case 105: pr i nt f ( " \ n\ nTot al a pagar : R$%. 2f \ n" , quant *2. 5) ; br eak;
def aul t : pr i nt f ( " \ n\ nCodi go de pr odut o I nval i do! \ n" ) ; br eak;
}
get che( ) ;
}


27
Linguagem de programao - C
28

Exerccios Propostos II

1. Calcule a mdia aritmtica das 3 notas de um aluno e mostre, alm do valor da mdia, uma mensagem de
"Aprovado", caso a mdia seja igual ou superior a 7 ou a mensagem "Reprovado", caso a mdia seja menor
que 7.
2. Elaborar um programa que l 2 valores A e B (inteiros) e informa se A divisvel por B ou no.
3. Faa um programa que leia um nmero inteiro e mostre uma mensagem indicando se este nmero par
ou mpar, e se positivo ou negativo.
4. As mas custam R$ 0,30 cada uma. Se forem compradas menos do que uma dzia, e R$ 0,25 se forem
compradas pelo menos doze. Faa um programa que leia o nmero de mas compradas, calcule e escreva
o valor total da compra.
5. Faa um programa que verifique a validade de uma senha fornecida pelo usurio. A senha vlida o
numero 12345. Devem ser impressas as seguintes mensagens:
ACESSO PERMITIDO caso a senha seja vlida.
ACESSO NEGADO caso a senha seja invlida.
6. Tendo como dados de entrada a altura e o sexo(1-feminino/2-masculino) de uma pessoa, construa um
programa que calcula e escreve seu peso ideal, utilizando as seguintes frmulas:
para homens: (72.7*altura)-58
para mulheres: (62.1*altura)-44.7
7. Faa um programa que leia o nmero da conta bancria, o saldo, o tipo de operao (1-depsito/2-
retirada) e o valor da operao. O algoritmo deve calcular e mostrar o novo saldo. Mostrar uma mensagem
caso o saldo fique negativo.
8. Elabore um programa que dada a idade de um nadador classifica-o em uma das seguintes categorias:
infantil A = 5 - 7 anos
infantil B = 8-10 anos
juvenil A = 11-13 anos
juvenil B = 14-17 anos
adulto = maiores de 18 anos
9. Considere definidas as seguintes faixas sobre os nmeros inteiros:
Faixa1 - at 100
Faixa2 - de 101 at 200
Faixa3 - de 201 at 300
Faixa4 - de 301 at 400
Faixa5 - de 401 at 500
Faixa6 - acima de 500
Faa um programa que leia um inteiro N e imprima a faixa qual ele pertence.
10. Um hotel cobra R$ 50,00 reais a diria e mais uma taxa de servios. A taxa de servios de:
2,50 por dia, se nmero de dirias <15
2,00 por dia, se nmero de dirias =15
Linguagem de programao - C
1,50 por dia, se nmero de dirias >15
Faa um programa que ler a quantidade de dias que o hospede ficou no hotel e imprime a taxa e total a
pagar.
11. Elaborar um programa que ir ler trs nmeros inteiros diferentes e informa qual o maior valor.
12. Elaborar um programa que ir ler quatro inteiros diferentes e informa qual o menor valor.
13. Um banco conceder um crdito especial aos seus clientes, varivel com o saldo mdio no ltimo ano.
Faa um programa 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 nenhum crdito
De 201 a 400 20% do valor do saldo mdio
De 401 a 600 30% do valor do saldo mdio
Acima de 601 40% do valor do saldo mdio
14. Um vendedor precisa de um programa que calcule o preo total devido por um cliente. O algoritmo
deve ler o cdigo de um produto e a quantidade comprada. Calcular o preo total, usando a tabela abaixo.
Mostre uma mensagem no caso de cdigo invlido.
Cdigo Preo unitrio
102 R$ 5,30
103 R$ 6,00
104 R$ 3,20
105 R$ 2,50

15. Uma empresa conceder um aumento de salrio aos seus funcionrios, varivel de acordo com o cargo,
conforme a tabela abaixo. Faa um programa que leia o salrio e o cargo de um funcionrio(1-Gerente,2-
Engenheiro,3-Tcnico,4-Auxiliar) e calcule o novo salrio. Se o cargo do funcionrio for invlido dever
imprimir uma mensagem de erro. Como resultado mostre o salrio antigo, o novo salrio e a diferena.
Cargo Percentual
Gerente 10%
Engenheiro 20%
Tcnico 30%
Auxiliar 40%

16. Escrever um programa que l a matrcula do aluno e suas 3 notas. Calcular a mdia e verificar qual o
seu conceito, conforme a tabela:
Mdia Conceito
>= 9,0 A
>= 7,5 e < 9,0 B
>= 6,0 e < 7,5 C
>= 4,0 e < 6,0 D
< 4,0 E
O programa deve escrever a matrcula do aluno, suas notas, a mdia, o conceito correspondente e a
mensagem: APROVADO se o conceito for A,B ou C e REPROVADO se o conceito for D ou E.
17. So dados um nmero n e quatro outros a, b, c, d, correspondentes, respectivamente, s extremidades
dos intervalos [a,b] e [c,d], sendo a < b, c < d e a < c. Determinar se n pertence somente ao intervalo [a,b]
ou somente ao intervalo [c,d] ou, se n pertence a ambos ou se n no pertence a nenhum dos dois. Em cada
caso escrever uma mensagem conveniente.
29
Linguagem de programao - C
18. Escrever um programa que l um conjunto de 4 valores I, A, B, C, onde I um valor inteiro e positivo
e A, B, C, so quaisquer valores reais e os escreva. A seguir:
a) Se I = 1 escrever os trs valores A, B, C em ordem crescente.
b) Se I = 2 escrever os trs valores A, B, C em ordem decrescente.

19. Escrever um programa que l o nmero de um funcionrio, o nmero de horas trabalhadas, o valor que
recebe por hora, o nmero de filhos com idade inferior a 14 anos, o tempo de servio do funcionrio e o
valor do salrio famlia por filho. Calcular: salrio bruto, o desconto do INSS (8.5% do salrio bruto),
salrio famlia, IR, Adicional.
o IR (imposto de renda) calculado como segue:
Se salrio bruto > 1500 ento IR = 15% do salrio bruto
Se salrio bruto > 500 e salrio bruto <= 1500 ento IR = 8% do salrio bruto
Se salrio bruto <= 500 ento IR = 0
o adicional calculado conforme o especificado:
Se tempo de servio for at 5 anos o adicional igual a 2% do salrio bruto.
Se tempo de servio estiver entre 6 e 15 anos o adicional igual a 3.5% do salrio bruto.
Se tempo de servio for maior que 15 anos ento adicional igual a 5.5% do salrio bruto.
Calcular o salrio lquido do funcionrio. Mostrar o nmero do funcionrio, salrio bruto, total dos
descontos, adicional e salrio lquido.
20. Faa um programa para ler a base e a altura de um retngulo, a base e a altura de um tringulo e o raio
de uma circunferncia e mostrar qual a maior rea.

21. Escrever um programa que l a hora de incio e hora de trmino de um jogo, ambas subdivididas em
dois valores distintos : horas e minutos. Calcular e escrever a durao do jogo, tambm em horas e
minutos, considerando que o tempo mximo de durao de um jogo de 24 horas e que o jogo pode
iniciar em um dia e terminar no dia seguinte.

22. Faa um programa para ler o peso de uma encomenda, tipo de entrega(1-sedex, 2-sedex 10) e regio
onde ser entregue a encomenda(1- Norte, 2-Nordeste, 3-Centro-Oeste, 4-Sudeste, 5-Sul). Calcular o valor
de postagem baseado nas tabelas abaixo:

At 1 Kg R$ 5,00
De 1 Kg a 5 Kg R$ 10,00
Acima de 5 Kg R$ 15,00 + R$ 3,00 por Kg excedente

Para entrega por Sedex Adicionar R$ 9,00
Para entrega por Sedex 10 Adicionar R$ 11,00

Para entregar na regio Norte Adicionar R$ 3,00
Para entregar na regio Nordeste Adicionar R$ 2,00
Para entregar na regio Centro-Oeste Adicionar R$ 6,00
Para entregar na regio Sudeste Adicionar R$ 5,00
Para entregar na regio Sul Adicionar R$ 7,00

30



Captulo 4 - Comandos de Repetio

4.1 Introduo

A estrutura de repetio permite que um bloco de instrues seja executado repetidamente uma
quantidade controlada de vezes.
4.2 FOR (PARA)
A estrutura costuma ser utilizada quando se quer um nmero determinado de repeties. A
contagem dos ciclos feita por uma varivel chamada de contador. A estrutura for , as vezes, chamada de
estrutura de repetio com contador. Sua sintaxe a seguinte:

for (var-controle = valor-inicial; condio; incremento)
comando;
for (var-controle = valor-inicial; condio; incremento)
{ comando;

comando;
}
for (var-controle = valor-inicial; condio; decremento)
comando;


Exemplos:
#i ncl ude <coni o. h>
#i ncl ude <st di o. h>
mai n ( )
{ i nt i ;
f or ( i =1; i <=10; i ++)
pr i nt f ( \ n %d, i ) ;
get che( ) ;
}
#i ncl ude <coni o. h>
#i ncl ude <st di o. h>
mai n ( )
{ i nt i ;
f or ( i =10; i >=1; i - - )
pr i nt f ( \ n %d, i ) ;
get che( ) ;
}


Linguagem de programao - C
#i ncl ude <st di o. h>
#i ncl ude <coni o. h>
/ / Cal cul a Bnus do Cl i ent e
mai n( )
{
f l oat val or ;
i nt cod, i ;
pr i nt f ( " Loj a Compr e Tudo\ n\ n" ) ;
f or ( i =1; i <=5; i ++)
{ pr i nt f ( " Codi go do Cl i ent e %d: " , i ) ;
scanf ( " %d" , &cod) ;
pr i nt f ( " Val or das compr as: " ) ;
scanf ( " %f " , &val or ) ;
i f ( val or <5000)
pr i nt f ( " \ n\ nVal or do bonus R$ %. 2f \ n" , val or *0. 1) ;
el se
pr i nt f ( " \ n\ nVal or do bonus R$ %. 2f \ n" , val or *0. 15) ;
pr i nt f ( " t ecl e ent er par a cont i nuar . . . \ n\ n" ) ;
get che( ) ;
}
}



#i ncl ude <coni o. h>
#i ncl ude <st di o. h>
{est e pr ogr ama escr eve os quadr ados dos nmer os de 1 a 20 }
mai n ( )
{ i nt i ;
f or ( i =1; i <=20; i ++)
pr i nt f ( Quadr ado de %d = %d\ n, i , i *i ) ;
get che( ) ;
}

4.3 WHILE (ENQUANTO teste no incio)
Essa estrutura significa que enquanto a condio for verdadeira, o comando ser executado
repetidamente. Se a condio for falsa, ento a repetio ser interrompida. O while avalia a condio antes
da primeira interao, isto significa que, eventualmente, pode no ocorrer sequer a primeira interao.

A sintaxe do While :

while (condio)
comando;

while (condio)
{ comando;
....;
comando;
}


32
Linguagem de programao - C
Exemplo:

#i ncl ude <st di o. h>
#i ncl ude <coni o. h>
/ / Cal cul a Bnus do Cl i ent e
mai n( )
{
f l oat val or ;
i nt cod, cont ;
pr i nt f ( " Loj a Compr e Tudo\ n\ n" ) ;
cont = 1;
whi l e ( cont <=5)
{ pr i nt f ( " Codi go do Cl i ent e %d: " , cont ) ;
scanf ( " %d" , &cod) ;
pr i nt f ( " Val or das compr as: " ) ;
scanf ( " %f " , &val or ) ;
i f ( val or <5000)
pr i nt f ( " \ n\ nVal or do bonus R$ %. 2f \ n" , val or *0. 1) ;
el se
pr i nt f ( " \ n\ nVal or do bonus R$ %. 2f \ n" , val or *0. 15) ;
pr i nt f ( " t ecl e ent er par a cont i nuar . . . \ n\ n" ) ;
get che( ) ;
cont ++;
}
}


#i ncl ude <coni o. h>
#i ncl ude <st di o. h>
{est e pr ogr ama escr eve os quadr ados dos nmer os de 1 a 20 }
mai n ( )
{ i nt cont ;
cont = 1;
whi l e ( cont <=20)
{ pr i nt f ( Quadr ado de %d = %d\ n, cont , cont *cont ) ;
cont ++;
}
get che( ) ;
}

4.4 DO...WHILE (Faa...enquanto - teste no final)
Repete um bloco de instrues enquanto a condio verdadeira. A diferena que a condio s
testada no final. Sua sintaxe :

do
comando;
while (condio);

do
{ comando;
....;
comando;
} while (condio);
33
Linguagem de programao - C
Exemplo:
#i ncl ude <st di o. h>
#i ncl ude <coni o. h>
/ / Cal cul a Bnus do Cl i ent e
mai n( )
{
f l oat val or ;
i nt cod, cont ;
pr i nt f ( " Loj a Compr e Tudo\ n\ n" ) ;
cont = 1;
do
{ pr i nt f ( " Codi go do Cl i ent e %d: " , cont ) ;
scanf ( " %d" , &cod) ;
pr i nt f ( " Val or das compr as: " ) ;
scanf ( " %f " , &val or ) ;
i f ( val or <5000)
pr i nt f ( " \ n\ nVal or do bonus R$ %. 2f \ n" , val or *0. 1) ;
el se
pr i nt f ( " \ n\ nVal or do bonus R$ %. 2f \ n" , val or *0. 15) ;
pr i nt f ( " t ecl e ent er par a cont i nuar . . . \ n\ n" ) ;
get che( ) ;
cont ++;
} whi l e ( cont <=5) ;
}


#i ncl ude <st di o. h>
#i ncl ude <coni o. h>
/ / Cal cul a Bnus do Cl i ent e
mai n( )
{
f l oat val or ;
i nt cod, op;
pr i nt f ( " Loj a Compr e Tudo\ n\ n" ) ;
do
{ pr i nt f ( " Codi go do Cl i ent e: " ) ;
scanf ( " %d" , &cod) ;
pr i nt f ( " Val or das compr as: " ) ;
scanf ( " %f " , &val or ) ;
i f ( val or <5000)
pr i nt f ( " \ n\ nVal or do bonus R$ %. 2f \ n" , val or *0. 1) ;
el se
pr i nt f ( " \ n\ nVal or do bonus R$ %. 2f \ n" , val or *0. 15) ;
pr i nt f ( " \ n\ nDesej a cont i nuar ( 1- si m/ 2- no) ?: " ) ;
scanf ( " %d" , &op) ;
} whi l e ( op==1) ;
}

34
Linguagem de programao - C
4.5 Comandos Desestruturadores

Break

Vimos anteriormente o comando break finalizando opes do comando switch. Este
comando fora o encerramento de uma repetio. Sintaxe do break: break;

Continue

O comando continue funciona de maneira anloga ao break, contudo ao invs de forar o
encerramento da repetio, fora nova iterao saltando o cdigo entre seu uso e a marca de trmino da
repetio. Sintaxe do continue: continue;


Exerccios Propostos III

1. Uma empresa deseja aumentar seus preos em 20%. Faa um programa que leia o cdigo e o preo de
custo de cada produto e calcule o preo novo. Calcule tambm, a mdia dos preos com e sem aumento.
Mostre o cdigo e o preo novo de cada produto e, no final, as mdias. A quantidade de dados que sero
cadastrados desconhecida.

2. Uma loja tem 150 clientes cadastrados e deseja mandar uma correspondncia a cada um deles
anunciando um bnus especial. Escreva um programa que leia o cdigo do cliente e o valor das suas
compras no ano passado e calcule um bnus de 10% se o valor das compras for menor que R$ 5000 e de
15 %, caso contrrio.

3. Chico tem 1,50 metro e cresce 2 centmetros por ano, enquanto Z tem 1,10 metro e cresce 3
centmetros por ano. Construa um programa que calcule e imprima quantos anos sero necessrios para
que Z seja maior que Chico.

4. Escrever um programa que leia 5 pares de valores, o primeiro valor a matrcula do aluno, e o segundo a
sua altura em centmetros. Encontre o aluno mais alto e o mais baixo. Mostre a matrcula do aluno mais
alto e do mais baixo, junto com suas alturas.
5. Escrever um programa que leia um conjunto de 50 informaes contendo, cada uma delas, a altura e o
sexo(1- mas/2- fem), calcule e mostre o seguinte:
a) a maior e a menor altura da turma
b) a mdia da altura das mulheres
c) a mdia da altura da turma.

6. Foi feita uma pesquisa entre os habitantes de uma regio. Foram coletados os dados de idade, sexo (1-
mas/2-fem) e salrio. Faa um programa que informe:
a) a mdia de salrio do grupo;
b) maior e menor idade do grupo;
35
Linguagem de programao - C
c) quantidade de mulheres com salrio at R$ 200.

7. Faa um programa que mostre os conceitos finais dos alunos de uma classe de 25 alunos, considerando:

a) os dados de cada aluno (matrcula e media final) sero fornecidos pelo usurio.
b) a tabela de conceitos segue abaixo:

Nota Conceito
de 0,0 a 4,9 D
de 5,0 a 6,9 C
de 7,0 a 8,9 B
de 9,0 a 10,0 A

A quantidade de dados que sero cadastrados desconhecida.

8. O departamento de Turismo da Prefeitura de Aracaju tem anotado para suas 15 praias os seguintes
dados:
Cdigo da Praia
Distncia do centro em Km
Nmero de veranistas da ltima temporada
Cdigo do tipo de estrada de acesso:
0 - no asfaltada
1 - asfaltada

Faa um programa para descobrir:
O nmero de praias que distam mais de 15 km do Centro;
O nmero de veranistas que freqentam as praias cujo acesso no asfaltado;
O percentual de veranistas que freqentaram as praias que distam menos 15 Km do Centro;

9 A prefeitura de uma cidade fez uma pesquisa entre seus habitantes, coletando dados sobre o salrio e
nmero de filhos. A prefeitura deseja saber:
a) mdia do salrio da populao;
b) mdia do nmero de filhos;
c) maior e menor salrio;
d) percentual de pessoas com salrio at R$ 500.

A quantidade de dados que sero cadastrados desconhecida.

10. Elaborar um programa para efetuar um diagnstico. Considere que teremos 50 entradas de dados, onde
em cada entrada tem-se: Cdigo do paciente
Cdigo p/ Infeco dos pulmes: 0 Ausente/ 1 - Presente
Cdigo p/ Temperatura: 0 Normal/1 - Anormal
Cdigo p/ Corisa: 0 Ausente/ 1 - Presente
Cdigo p/ Espirro: 0 Ausente/ 1 - Presente

Diagnostico:
Se o paciente tiver infeco nos pulmes e temperatura anormal o diagnstico pneumonia.
Se o paciente tiver apenas um sintoma, qualquer deles, o diagnstico gripe.
Se o paciente tiver dois ou mais sintomas, que no sejam simultaneamente infeco nos pulmes e
temperatura anormal, o diagnstico resfriado.
36
Linguagem de programao - C

Para cada paciente ser impresso o cdigo com o respectivo diagnstico.

11. Com o lanamento dos minicomputadores Laptop no mercado nacional, um fabricante deseja obter
determinadas informaes dos seus possveis consumidores. Para cada empresa ou rgo pesquisado foi
digitado os seguintes dados:
Cdigo da empresa
Preferncia desejada (fabricante): 1. Toshiba/2. Compaq/3. IBM
Possuem computadores de grande porte: 1. Sim/2. No
Necessitam de minicomputadores: 1. Sim/2. No
Deseja fazer expanso: 1.Sim/2.No

Deseja-se saber:
A quantidade de empresas pesquisadas;
Quantas empresas possuem computadores de grande porte;
Percentual de empresa que desejam fazer expanso;
Percentual de empresas que tem preferncia pela Toshiba.

A quantidade de dados que sero cadastrados desconhecida.

12. Foi feita uma estatstica nas 50 principais cidades de quatro estados para coletar dados sobre acidentes
de trnsito. Foram obtidos os seguintes dados:
Cdigo da cidade
Estado (1-PE, 2-AL, 3-PB, 4-SE)
Nmero de veculos de passeio (em 2002)
Nmero de acidentes de trnsito com vtimas (em 2002)

Deseja-se saber:
a) qual o maior e o menor ndice de acidentes de trnsito e a que cidades pertencem;
b) qual a mdia de veculos nas cidades;
c) qual a mdia de acidentes com vtimas entre as cidades do Estado de Pernambuco.

13. Foi feita uma pesquisa entre os 1000 habitantes de uma regio para coletar os seguintes dados: sexo (1-
fem/ 2-mas), idade e altura. Faa um programa que leia as informaes coletadas e mostre as seguintes
informaes:
a) mdia da idade do grupo;
b) mdia da altura das mulheres;
c) mdia da idade dos homens;
d) percentual de pessoas com idade entre 18 e 35 anos (inclusive).

14. Foi realizada uma pesquisa de algumas caractersticas fsicas da populao de uma certa regio. Foram
entrevistadas 100 pessoas e coletados os seguintes dados:
Sexo: (1-mas/2-fem);
Cor dos olhos: (1-azuis/2-verdes/3-castanhos);
Cor dos cabelos: (1-louros/2-castanhos/3-pretos);
Idade

37
Linguagem de programao - C
Deseja-se saber:
a maior idade do grupo
a quantidade de indivduos do sexo feminino, cuja idade est entre 18 e 35 anos e que tenham
olhos verdes e cabelos louros.

15. A Empresa Legal decidiu fazer um levantamento dos candidatos que se inscreveram para
preenchimento de vaga no seu quadro de funcionrios, utilizando processamento eletrnico e voc foi
contratado, ento faa um programa que:

Leia um conjunto de informaes para cada candidato, contendo: nmero de inscrio do candidato, idade,
sexo, experincia anterior(1-sim/2-nao)

Calcule:
Quantidade de candidatos
Quantidade de candidatas
Mdia de idade dos homens com experincia
Percentagem dos homens com mais de 45 anos, entre os homens
Quantidade de mulheres com idade inferior a 35 anos e com experincia
Menor idade entre as mulheres que j tem experincia no servio

A quantidade de dados que sero cadastrados desconhecida.

16. Faa um programa para realizar a totalizao dos votos da eleio para a prefeitura concorrida entre 3
candidatos. Para cada seo so informados o nmero de votos do candidato A, o nmero de votos do
candidato B, o nmero de votos do candidato C, o nmero de votos brancos e o nmero de votos nulos.
A quantidade de dados que sero cadastrados desconhecida.
Determine e imprima:
a. O nmero de votantes;
b. O total de votos de cada candidato;
c. O total de votos brancos e total de votos nulos;
d. O total de votos vlidos;
e. O candidato com maior nmero de votos;
f. Se a eleio foi vlida e para isso o total de votos brancos mais votos nulos deve ser menor que o
total de votos vlidos;
g. Se haver segundo turno, para no haver segundo turno basta que o total de votos do candidato
vencedor seja maior que 50% dos votos vlidos
h. Percentual de votos nulos.

17. Foi feita uma pesquisa para determinar o ndice de mortalidade infantil em um certo perodo. Fazer um
programa que:
leia inicialmente a quantidade de crianas mortas;
Em seguida, para cada criana sero lidos os seguintes dados: o sexo(1-mas/2-fem) e quantos
meses a criana viveu.

Determine e imprima:
Percentual de crianas do sexo masculino mortas no perodo;
Percentual de crianas que viveram entre 10 e 15 meses;
Quantidade de crianas do sexo feminino mortas com menos de 3 meses de vida.
38
Linguagem de programao - C
18. Escrever um programa que l 5 valores e conta quantos destes so negativos, escrevendo esta
informao.
19. Construir um programa que calcule a mdia aritmtica de vrios valores inteiros positivos. A
quantidade de nmeros que sero cadastrados desconhecida.
20. Escreva um programa que calcule a mdia dos nmeros digitados pelo usurio, apenas se eles forem
pares. A quantidade de nmeros que sero cadastrados desconhecida.
21. Escrever um programa que leia um nmero n que indica quantos valores devem ser lidos a seguir. Para
cada nmero lido, mostre uma tabela contendo o valor lido e o fatorial deste valor.
22. Escrever um programa que leia um nmero no determinado de valores e calcule a mdia aritmtica
dos valores lidos, a quantidade de valores positivos, a quantidade de valores negativos e o percentual de
valores negativos e positivos. Mostre os resultados.
23. Escrever um programa que l um conjunto no determinado de valores, um de cada vez, e escreve o
valor lido, seu quadrado e seu cubo.
24. Faa um programa que leia uma quantidade no determinada de nmeros positivos. Calcule a
quantidade de nmeros pares e mpares, a mdia de valores pares e a mdia geral dos nmeros lidos.
25. Faa um programa que leia vrios nmeros inteiros e calcule o somatrio dos nmeros negativos.
26. Escrever um programa que gera e escreve os nmeros mpares entre 100 e 200.
27. Escreva um programa que leia 50 valores e encontre o maior e o menor deles. Mostre o resultado.

28. Escrever um programa que leia 5 valores para uma varivel N e, para cada um deles, calcule a tabuada
de 1 at n. Mostre a tabuada na forma:
1 x n = n
2 x n = 2n
3 x n = 3n
.......
n x n = n2

29. Escrever um programa que l um nmero no determinado de pares de valores M, N, todos inteiros e
positivos, um par de cada vez, e calcula e escreve a soma dos n inteiros consecutivos a partir de M
inclusive.

Ex: M = 5 e N= 3
Soma = 5 + 6 + 7

30. Ler 50 notas e imprimir as trs maiores.

39



Captulo 5 Vetores e Registros

5.1 Vetores - Tipos de Dados Estruturados

As variveis compostas homogneas, mais conhecidas como arrays, correspondem a conjuntos de
elementos de um mesmo tipo, representados por um nico nome.

Vetor
V = 4 7 2 5 3


Cada elemento do array pode ser referenciado atravs de ndices. Exemplos:
V[ 0] = 4
V[ 1] = 7
V[ 4] = 3

Declarao

Tipo-da-variavel Nome_Vetor[quantidade_elementos];

Ex: i nt v[ 30] ;
f l oat n[ 10] ;

Atribuio

v[ i ] = 10;
v[ 2] = 12 + x;
v[ i +2] = 14;

Leitura

f or ( i =0; i <30; i ++)
{ pr i nt f ( " \ n\ nEl ement o %d: " , i +1) ;
scanf ( %d, &v[ i ] ) ;
}

Linguagem de programao - C
Impresso

pr i nt f ( " \ n\ nVet or : " ) ;
f or ( i =0; i <30; i ++)
pr i nt f ( " %d " , v[ i ] ) ;

Exemplos:
#i ncl ude <st di o. h>
#i ncl ude <coni o. h>
mai n( )
{ i nt m[ 10] ;
f l oat n[ 10] ;
i nt qa, i ;
f l oat soma, med;
soma = 0;
pr i nt f ( " Facul dade Legal \ n\ n" ) ;
pr i nt f ( " Quant i dade de Al unos: " ) ;
scanf ( " %d" , &qa) ;
f or ( i =0; i <qa; i ++)
{ pr i nt f ( " \ n\ nDados do Al unos %d" , i +1) ;
pr i nt f ( " \ nMat r i cul a: " ) ;
scanf ( " %d" , &m[ i ] ) ;
pr i nt f ( " \ nNot a: " ) ;
scanf ( " %f " , &n[ i ] ) ;
soma += n[ i ] ;
}
med = soma/ qa;
pr i nt f ( " \ n\ nMedi a da t ur ma: %. 2f " , med) ;
pr i nt f ( " \ n\ nAl unos comnot a aci ma da medi a da t ur ma\ n" ) ;
f or ( i =0; i <qa; i ++)
i f ( n[ i ] >med)
pr i nt f ( " %d \ n" , m[ i ] ) ;
pr i nt f ( " \ n\ n\ t Di gi t e qual quer t ecl a par a sai r \ n\ n\ n " ) ;
get che( ) ;
}

41
Linguagem de programao - C

#i ncl ude <st di o. h>
#i ncl ude <coni o. h>
mai n( )
{ i nt v1[ 10] , v2[ 10] , vs[ 10] ;
i nt q1, q2, i ;
pr i nt f ( " Soma Vet or es\ n\ n" ) ;
pr i nt f ( " Quant i dade de El ement os do vet or 1: " ) ;
scanf ( " %d" , &q1) ;
pr i nt f ( " \ n\ nVet or 1 " ) ;
f or ( i =0; i <q1; i ++)
{ pr i nt f ( " \ nEl ement o %d: " , i +1) ;
scanf ( " %d" , &v1[ i ] ) ;
}
pr i nt f ( " \ n\ nQuant i dade de El ement os do vet or 2: " ) ;
scanf ( " %d" , &q2) ;
pr i nt f ( " \ n\ nVet or 2 " ) ;
f or ( i =0; i <q2; i ++)
{ pr i nt f ( " \ nEl ement o %d: " , i +1) ;
scanf ( " %d" , &v2[ i ] ) ;
}
i f ( q1 == q2)
{ pr i nt f ( " \ n\ nResul t ado\ n" ) ;
pr i nt f ( " \ nVet or 1: " ) ;
f or ( i =0; i <q1; i ++)
pr i nt f ( " %d " , v1[ i ] ) ;
pr i nt f ( " \ n\ n\ nVet or 2: " ) ;
f or ( i =0; i <q2; i ++)
pr i nt f ( " %d " , v2[ i ] ) ;
pr i nt f ( " \ n\ n\ nVet or Soma: " ) ;
f or ( i =0; i <q2; i ++)
{ vs[ i ] = v1[ i ] + v2[ i ] ;
pr i nt f ( " %d " , vs[ i ] ) ;
}
}
el se
pr i nt f ( " \ n\ nOs vet or es nao podemser somados" ) ;
pr i nt f ( " \ n\ n\ t Di gi t e qual quer t ecl a par a sai r \ n\ n\ n " ) ;
get che( ) ;
}

5.2 Registros

So conjuntos de dados logicamente relacionados, mas de tipos diferentes (inteiro, real, char, etc.).

Exemplo: Numa dada aplicao, podem-se ter os seguintes dados sobre os alunos de uma turma:




Matricula
Nota1
Nota2
Media
42
Linguagem de programao - C
Cada conjunto de informaes do aluno pode ser referenciado por um mesmo nome, por exemplo,
ALUNO. Tais estruturas so conhecidas como registros, e aos elementos do registro d-se o nome de
campos.
O conceito de registro visa facilitar o agrupamento de variveis que no so do mesmo tipo, mas
que guardam estreita relao lgica.

Declarao

typedef struct { variaveis
}nome_do_tipo;

Exemplo:

t ypedef st r uct { i nt mat ;
f l oat n1, n2, med;
}TAl unos;

TAlunos aluno;


Atribuio

Nome-do-registro.campo = valor;

al uno. n1 = 5. 0;
scanf ( " %d" , &al uno. mat ) ;

5.3 Vetor de Registros

Podem-se ter conjunto de registros referenciveis por um mesmo nome e individualizados por
ndices, atravs da utilizao de um vetor de registros.

Exemplo:

t ypedef st r uct { i nt mat ;
f l oat n1, n2, med;
}TAl unos;

TAl unos al uno[ 30] ;


43
Linguagem de programao - C
Atribuio

nome-do-vetor[indice].campo = valor;

al uno[ 3] . n1 = 5. 0;
scanf ( " %d" , &al uno[ i ] . mat ) ;

Exemplo:

f or ( i =0; i <qa; i ++)
{ pr i nt f ( " \ n\ nDados do Al uno %d\ n\ n" , i +1) ;
pr i nt f ( " \ n\ t Numer o de Mat r i cul a do Al uno: " ) ;
scanf ( " %d" , &escol a[ i ] . mat ) ;
pr i nt f ( " \ n\ t Ser i e ( 1- 4) : " ) ;
scanf ( " %d" , &escol a[ i ] . ser i e) ;
pr i nt f ( " \ n\ t Temi r mao na escol a ( 1- si m, 2- nao) ? " ) ;
scanf ( " %d" , &escol a[ i ] . i r mao) ;
swi t ch( escol a[ i ] . ser i e)
{ case 1: escol a[ i ] . mens = 110; br eak;
case 2: escol a[ i ] . mens = 130; br eak;
case 3: escol a[ i ] . mens = 160; br eak;
case 4: escol a[ i ] . mens = 170; br eak;
}
i f ( escol a[ i ] . i r mao == 1)
escol a[ i ] . mens = escol a[ i ] . mens*0. 8;
}



Exerccios Propostos IV

1. Ler um conjunto de nmeros e imprimi-los na ordem inversa da leitura. A quantidade de nmeros
tambm ser lida e ser no mximo 20.
2. Ler o tamanho e os elementos de dois vetores e em seguida, caso os vetores tenham o mesmo tamanho,
gere e imprima um vetor SOMA, onde seus elementos sero formados pela soma dos elementos de
mesmos ndices dos dois vetores lidos
3. Ler um vetor de nmeros e imprimir os nmeros das posies PARES e em seguida os nmeros das
posies MPARES.
4. Ler dois vetores e caso tenham tamanhos iguais armazene seus elementos alternadamente em um
terceiro vetor.
5. Ler um vetor de nmeros inteiros e imprimir as posies do maior e do menor elemento do vetor.
Assuma que no existem elementos repetidos no vetor.
6. Ler um conjunto de matrcula e notas dos alunos de uma turma e imprima a matricula dos alunos de
tiveram nota acima da mdia das notas da turma.
7. Ler um vetor de nmeros e inverter a ordem dos elementos desse vetor no prprio vetor.
44
Linguagem de programao - C
8. Ler um vetor de nmeros e em seguida ler um conjunto de nmeros(flag=0) e para cada numero lido
imprimir o nmero de ocorrncias deste no vetor.
9. Ler um vetor de nmeros e ler um conjunto de nmeros (flag = 0) e para cada nmero lido imprimir se
este existe ou no no vetor.
10. Ler dois vetores de nmeros e gerar um terceiro vetor formado pela INTERSECO dos dois vetores
lidos.
11. Ler dois vetores de nmeros e gerar um terceiro vetor formado pela DIFERENA dos dois vetores
lidos.
12. Ler dois vetores de nmeros e gerar um terceiro vetor formado pela UNIO dos dois vetores lidos.
13. Ler um vetor e gerar um segundo vetor com os elementos do vetor lido menos os elementos repetidos.
Ex : VetorLido = 5 1 2 7 5 3 7 5 9 3; VetorGerado = 5 1 2 7 3 9
14. Ler um vetor de nmeros e imprimir os nmeros que se repetem nesse vetor.
15. Ler um conjunto N de nmeros e imprimir cada elemento do conjunto e quantas vezes este se repete.
Nmeros Lidos 3 8 5 3 8 7 3 7 3 7

Resultado
3 - 4
8 - 2
5 - 1
7 - 3

16. Faa um programa para calcular o valor das mensalidades dos alunos. A escola possui 50 alunos e para
cada um deles sero informados os seguintes dados: matrcula, nome, srie(1-4), se tem irmo na escola (1-
sim, 2-no). O valor da mensalidade ser calculado pelo programa e depende da srie do aluno e se tem
irmo na escola. O aluno receber 20% de desconto na mensalidade se tiver irmo na escola.

Mensalidade: 1. Serie: R$110, 2. Serie: R$130, 3. Serie: R$160, 4. Serie: R$170.

Armazenar os dados em um vetor de registro e imprimir os dados de todos os alunos em forma de tabela.

17. Fazer um programa para cadastrar os produtos de uma farmcia usando vetor de registro. Cada
produto possui os seguintes dados: Cdigo, nome, Tipo (1-Genrico, 2- No Genrico), Laboratrio(1-
Bayer, 2- LAFAPE, 3-Pfizer), Preo de Custo, Preo de Venda. O preo de venda calculado pelo
programa e depende do tipo do produto e do laboratrio. O preo de venda ser o preo de custo
acrescido do percentual de lucro de acordo com a tabela abaixo:

Bayer LAFAPE Pfizer
Genrico 10% 15% 20%
No Genrico 20% 35% 45%

A quantidade de produtos desconhecida. Imprimir todos os dados dos produtos da farmcia em forma
de tabela.

18. A Secretaria de Educao quer um programa para fazer um relatrio sobre as escolas da cidade de
Recife. Para cada escola so informados os seguintes dados: cdigo da escola, nome, total de alunos
matriculados, total de professores, se possui laboratrio de informtica (1-sim ou 1-no), se possui
45
Linguagem de programao - C
laboratrio de cincias (1-sim ou 2-no). A secretaria quer saber quanto deve ser liberado de verba para
cada escola. O calculo ser feito da seguinte forma:
Para cada aluno da escola so liberados: R$ 50
Para cada professor so liberados: R$ 400
Se a Escola no tem laboratrio de Informtica so liberados: R$ 10.000
Se a Escola no tem laboratrio de Cincias so liberados: R$ 7.000

Ex: uma escola com 200 alunos, com 15 professores e tem laboratrio de informtica, mas no tem
laboratrio de cincias: Verba = 200 x 50 + 400 x 15 + 7000= 10000 + 6000 + 7000 = 23.000

Imprimir um relatrio contendo todos os dados das escolas e o valor que cada uma receber da secretria
de educao. Tambm deve ser impresso o seguinte relatrio:

Quantidade Total de Alunos nas Escolas
Quantidade de escolas sem laboratrios de Informtica
Quantidade de escolas com os dois laboratrios (informtica E de cincias)
Total de verba liberada pela secretaria

OBS: A quantidade de escola desconhecida.

19. Fazer um programa para a companhia de energia eltrica da cidade. Para cada consumidor so
fornecidos os seguintes dados: matrcula do consumidor, nome, tipo do consumidor (1-comercial, 2-
industrial, 3-residencial), quantidade de KWh consumidos no ms. O programa ir calcular o valor da
conta. O programa ir ler uma quantidade de consumidores e armazenar os dados dos consumidores em
um vetor de registro. Imprimir um relatrio contendo os dados do consumidor e o valor que o mesmo
deve pagar e no final, imprimir o relatrio estatstico:
Total a ser arrecadado pela empresa de energia
Media de consumo das industrias
Total de consumo das residncias
Quantidade de estabelecimentos comerciais
OBS: Valor de 1 KWh
Residncia: R$ 5,00
Comrcio: R$ 3,00
Indstria: R$ 2,00

20. Fazer um programa para um hotel que possui 20 quarto, 15 tipo Standard e 5 tipo Luxo. Para cada
hspede sero lidos os seguintes dados: Cdigo, Nome, Regio de Origem (1-Nordeste, 2-Sudeste, 3-Sul,
4-Outros), Motivo da Viagem (1-lazer, 2-trabalho, 3-outros), Sexo, Tipo de Quarto Desejado(1-Standard,
2-Luxo) e Quantidade de dias. O programa ir calcular o valor pago pelo hospede. No final deve ser
impresso o relatrio com os dados de todos os hspedes, alm do relatrio estatstico.

O clculo do valor a ser pago pelo hspede segue as regras abaixo:
Se o quarto for do tipo 1, a diria custa R$ 100,00.
Se o quarto for do tipo 2 a diria custa R$ 130,00.



46
Linguagem de programao - C
Relatrio Final:
o Quantidade de homens em quarto de luxo
o percentual de homens que viajam a trabalho
o quantidades de mulheres provenientes da regio Sudeste
o total arrecadado pelo hotel

A quantidade de hospede desconhecida.

OBS: Verificar se o tipo de quarto que o hspede deseja est disponvel.

21. Faa um programa para ler 10 nmeros inteiros, armazenando-os em um vetor. Imprimir os valores
digitados e os seguintes resultados:
o A soma dos elementos das posies pares
o O produto dos elementos das posies impares
o O quadrado do terceiro elemento
o A diferena do sexto elemento pelo primeiro elemento
o O maior valor do vetor
47



Captulo 6 Modularizao

6.1 Introduo

Funes servem para dividir um grande programa em diversas partes menores. Alm disso,
permitem que sejam utilizadas partes de programa desenvolvidas por outras pessoas, sem que se tenha
acesso ao cdigo-fonte. Como exemplo, em captulos anteriores foi utilizada a funo printf() sem que
fossem conhecidos detalhes de sua programao.
Programas em C geralmente utilizam diversas pequenas funes, ao invs de poucas e grandes
funes. Ao dividir um programa em funes, diversas vantagens so encontradas, como impedir que o
programador tenha que repetir o cdigo diversas vezes, facilitar o trabalho de encontrar erros no cdigo.
Cada funo C na verdade uma sub-rotina que contm um ou mais comandos em C e que
executa uma ou mais tarefas. Em um programa bem escrito, cada funo deve executar uma tarefa. Esta
funo dever possuir um nome e a lista de argumentos que receber. As funes em C so muito
semelhantes as usadas no Pascal, com a diferena que o prprio programa principal apenas uma funo
que se inicia com a palavra reservada main().

6.2 Declarando uma funo
tipo nome(lista de parametros)
{ declarao de variveis locais;
comando ou bloco de comandos;
}

tipo determina o tipo do valor de retorno (se omitido, assumido int);
nome representa o nome pelo qual a funo ser chamada ao longo do programa;
argumentos so informaes externas transmitidas para a funo (podem no existir).
Todo programa composto de funes, sendo iniciada a execuo pela funo de nome main().

Linguagem de programao - C
6.3 Variveis Locais
A declarao das variveis, em C, deve vir no incio da funo, antes de qualquer comando. Uma
varivel declarada dentro do corpo de uma funo local, ou seja, s existe dentro da funo. Ao ser
iniciada a funo, a varivel criada. Quando a funo termina, a varivel apagada, sendo liberado seu
espao ocupado na memria.

6.4 Chamando Funes
Para executar uma funo, ela deve ser chamada no corpo de uma outra funo ( exceo da
funo main(), que executada no incio do programa). Uma chamada de funo feita escrevendo-se o
nome da funo seguido dos argumentos fornecidos, entre parnteses. Se no houver argumentos, ainda
assim devem ser mantidos os parnteses, para que o compilador diferencie a chamada da funo de uma
varivel. O comando de chamada de uma funo deve ser seguido de ponto-e-vrgula.
As funes s podem ser chamadas depois de terem sido declaradas. Caso sejam chamadas sem
que tenham sido declaradas, um erro de compilao ocorre.
Exemplo:
voi d quadr ado( i nt p)
{ i nt k;
k = p*p;
pr i nt f ( " %i " , p) ;
}

voi d mai n( )
{ i nt k=25;
quadr ado( k) ;
get che( ) ;
}

6.5 Comando return
Serve para retornarmos um valor calculado dentro de uma funo quando chamada de alguma
parte do programa.
Exemplo :
f l oat cal c_si n( f l oat ar g)
{ f l oat val ;
val = si n( ar g) ;
r et ur n( val ) ;
}


49
Linguagem de programao - C
6.6 Argumentos
Argumentos so utilizados para transmitir informaes para a funo. J foram utilizados
anteriormente nas funes printf() e scanf().
Uma funo pode receber qualquer nmero de argumentos, sendo possvel escrever uma funo
que no receba nenhum argumento. No caso de uma funo sem argumentos pode-se escrev-la de duas
formas: deixando a lista de argumentos vazia (mantendo entretanto os parnteses) ou colocando o tipo void
entre parnteses.
O quinto tipo existente em C, void (vazio, em ingls), um tipo utilizado para representar o nada.
Nenhuma varivel pode ser declarada como sendo do tipo void. A funo main(), j utilizada em captulos
anteriores, um exemplo de funo sem argumentos.
Exemplo:
#i ncl ude <st di o. h>
#i ncl ude <coni o. h>
#i ncl ude <st dl i b. h>
t ypedef st r uct {char nome[ 20] ;
i nt mat ;
}al unos;
al unos t ur ma[ 30] ;
const i nt maxi mo= 30;
i nt qa, op;

voi d cabec( )
{ syst em( " cl s" ) ;
pr i nt f ( " Facul dade Legal " ) ;
}

voi d i nser i r ( )
{ i nt cont ;
do{ cabec( ) ;
pr i nt f ( " \ n\ nI nser i r Novo Al uno\ n\ n" ) ;
i f ( qa < maxi mo) / / ver i f i ca se o vet or pode r eceber novo al uno
{ pr i nt f ( " \ nNumer o de Mat r i cul a do Al uno: " ) ;
scanf ( " %d" , &t ur ma[ qa] . mat ) ;
pr i nt f ( " \ n\ t Nome: " ) ;
f f l ush( st di n) ;
get s( t ur ma[ qa] . nome) ;
f f l ush( st di n) ;
qa++;
pr i nt f ( " \ n\ n\ t Al uno I nser i do comSucesso! ! ! \ n\ n" ) ;
}
el se / / vet or chei o
{ pr i nt f ( " \ n\ n\ t Nao Pode I nser i r - Tur ma Chei a! ! ! \ n\ n" ) ;
get che( ) ;
br eak;
}
pr i nt f ( " \ n\ n\ t Cont i nuar i nser i ndo al uno ( 1- si m/ 2- nao) ? " ) ;
scanf ( " %d" , &cont ) ;
}whi l e ( cont == 1) ;
}
50
Linguagem de programao - C
voi d l i st agem( )
{ i nt i ;
cabec( ) ;
pr i nt f ( " \ n\ nRel at or i o Ger al \ n" ) ;
pr i nt f ( " \ n\ nMat Al uno" ) ;
pr i nt f ( " \ n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " ) ;
f or ( i = 0; i < qa; i ++)
pr i nt f ( " \ n%3d %- 20s " , t ur ma[ i ] . mat , t ur ma[ i ] . nome) ;
pr i nt f ( " \ n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ n\ n" ) ;
pr i nt f ( " \ n\ nDi gi t e qual quer t ecl a par a sai r \ n\ n\ n " ) ;
get che( ) ;
}

mai n( )
{ qa =0;
do / / t el a como menu do opcoes
{ cabec( ) ;
pr i nt f ( " \ n\ nOpcoes: \ n\ n" ) ;
pr i nt f ( " 1- I nser i r novo Al uno\ n\ n" ) ;
pr i nt f ( " 2- Li st agemde Al unos\ n\ n" ) ;
pr i nt f ( " 0- Sai r do Pr ogr ama\ n\ n" ) ;
pr i nt f ( " I nf or me a Opcao desej ada: " ) ;
scanf ( " %d" , &op) ;
swi t ch( op)
{ case 1: i nser i r ( ) ; br eak;
case 2: l i st agem( ) ; br eak;
case 0: br eak;
def aul t : pr i nt f ( " \ n\ n\ t Voce escol heu uma opcao que nao exi st e! ! ! ! \ n" ) ;
get che( ) ; br eak;
}
} whi l e ( op ! = 0) ;
}

Exerccios Propostos V

1. Faa um programa para uma escola usando mdulos e vetor de registro. O programa dever ter as
seguintes telas:

Tela Principal Tela de Cadastro Tela da Listagem
Faculdade Legal

Opes:
1-Inserir novo aluno
2-Listagem de aluno
3-Relatrio estatstico
0-Sair

Entre com a opo:
Faculdade Legal

Inserir Novo Aluno

Matricula:
Nota 1:
Nota 2:

Inserir outro(1-sim,2-no)?
Faculdade Legal

Listagem Geral

Mat Nota 1 Nota 2 Media
xxx xxxx xxxx xxx


tecle enter para voltar para o menu

Tela do Relatrio Estatstico
Faculdade Legal

Relatrio Estatstico

Total de Alunos:
Media da Turma:
Quantidade de Aprovados:
Quantidade de Reprovados:
tecle enter para voltar para o menu
51



Captulo 7 Manipulao de Caracteres

7.1 Funes de manipulao de cadeia de caracteres: biblioteca string.h

Comandos:

char *strcpy(char *destino, char *origem) : Copia o contedo de uma string para outra. Deve ser
empregado para atribuio de strings, no lugar do operador normal de atribuio (=).
Parmetros:
destino: String que ir receber o contedo.
origem: String cujo contedo ser copiado.
Valor de retorno: retorna o endereo do primeiro caractere da string destino.

char *strncpy(char *destino, char *origem, int n): Copia no mximo n caracteres de uma string
para a outra. No coloca o '\0' no final de destino, a no ser que tenha atingido o final da string
origem.
Parmetros:
destino: String que ir receber o contedo.
origem: String cujo contedo ser copiado.
n: Nmero mximo de caracteres a serem copiados.
Valor de retorno: A funo retorna o endereo do primeiro caractere da string destino.

char *strcat(char *destino, char *origem): Concatena strings, isto , copia o contedo da string
origem ao final da string destino. O contedo anterior de destino preservado.
Parmetros:
destino: String que ir receber, no seu final, o contedo. Ela deve ter tamanho suficiente para armazenar
o contedo atual mais o novo.
Linguagem de programao - C
origem: String cujo contedo ser acrescentado ao final da outra.
Valor de retorno: A funo retorna o endereo do primeiro caracter da string destino.

int strcmp(char *s1, char *s2): Compara o contedo de duas strings. Esta funo deve ser utilizada
em substituio aos operadores relacionais no caso de uso com strings.
Parmetros:
s1 e s2: As duas strings a serem comparadas.
Valor de retorno: A funo retorna 0 se o contedo das strings so iguais. Retorna algum valor maior que 0
se o contedo de s1 maior em ordem que s2 e um valor menor que 0 se o contedo de s1 menor em
ordem que s2.

int strncmp(char *s1, char *s2, int n): Compara apenas um trecho do incio de duas strings com
tamanho especificado.
Parmetros:
s1 e s2: As duas strings a serem comparadas.
n: Nmero de caracteres a serem comparados.
Valor de retorno: O mesmo da funo strcmp.

int strlen(char *str): Conta o nmero de caracteres armazenados em uma string, antes do '\0'.
Parmetros:
str: A string que ter seu tamanho calculado.
Valor de retorno: Retorna o nmero de caracteres da string.

7.2 Funes de converso de caractere: biblioteca ctype.h
Recebem um caractere por parmetro retornam este caractere convertido para outro formato (caixa).

int tolower(int c): Converte uma letra para o formato minsculo.
int toupper(int c): Converte uma letra para o formato maisculo.

7.3 Funes de converso: biblioteca stdlib.h
int atoi(char *str): Converte uma string para um valor numrico inteiro.
Parmetros:
str: String a ser convertida.
Valor de retorno: Retorna um nmero inteiro correspondente ao valor armazenado na string.
53
Linguagem de programao - C

double atof(char *str); Converte uma string para um valor numrico em ponto flutuante.

Parmetros:
str: String a ser convertida.
Valor de retorno: Retorna um valor double correspondente ao contedo armazenado na string.

Exemplo:
#i ncl ude <st di o. h>
#i ncl ude <coni o. h>
#i ncl ude <st r i ng. h>
#i ncl ude <st dl i b. h>
/ * Pr ogr ama par a t est ar as pr i nci pai s f uncoes de mani pul acao de st r i ng. */

mai n( )
{ char s1[ 20] , s2[ 20] , s3[ 20] , s4[ 20] , s6[ 40] , s7[ 40] , s8[ 10] ;
char s5[ 20] = " Fel i z\ 0" ;
i nt t , qc, vi ;
f l oat vr ;
pr i nt f ( " Pr ogr ama par a t est ar as f uncoes de mani pul acao de car act er es\ n\ n" ) ;
pr i nt f ( " St r i ng 1: " ) ;
f f l ush( st di n) ;
get s( s1) ;
/ / f uncao que ver i f i ca o t amanho da cadei a de car act er es
t = st r l en( s1) ;
pr i nt f ( " \ n\ nEst a st r i ng possui %d car act er es" , t ) ;
get che( ) ;
pr i nt f ( " \ n\ nSt r i ng 2: " ) ;
f f l ush( st di n) ;
get s( s2) ;
/ / f uncao que ver i f i ca se as st r i ngs sao i guai s por compl et o
pr i nt f ( " \ n\ nCompar a a st r i ng1 coma st r i ng2" ) ;
i f ( st r cmp( s1, s2) == 0)
pr i nt f ( " \ n\ n%s eh i gual a %s\ n\ n" , s1, s2) ;
el se
pr i nt f ( " \ n\ n%s nao eh i gual a %s\ n\ n" , s1, s2) ;
get che( ) ;
/ / f uncao que ver i f i ca se par t e das st r i ngs sao i guai s
pr i nt f ( " \ n\ nCompar a par t e da st r i ng1 coma st r i ng2\ n\ n" ) ;
pr i nt f ( " Quant os car act er es vc quer compar ar ? " ) ;
scanf ( " %d" , &qc) ;
i f ( st r ncmp( s1, s2, qc) == 0)
pr i nt f ( " \ n\ nOs pr i mei r os %d car act er es da st r i ng1 sao i guai s aos da
st r i ng2\ n\ n" , qc) ;
el se
pr i nt f ( " \ n\ nOs pr i mei r os %d car act er es da st r i ng1 nao sao i guai s aos da
st r i ng2\ n\ n" , qc) ;
get che( ) ;
/ / copi ar o cont eudo de uma st r i ng par a out r a.
pr i nt f ( " \ n\ nCopi a cont eudo da st r i ng2 na st r i ng3" ) ;
st r cpy( s3, s2) ;
pr i nt f ( " \ n\ nSt r i ng 3 = %s" , s3) ;
/ / at r i bui umcont eudo par a a st r i ng3
pr i nt f ( " \ n\ nAt r i bui umcont eudo par a a st r i ng3\ n" ) ;
st r cpy( s3, " apr ovado\ 0" ) ;
pr i nt f ( " \ n\ nSt r i ng 3 = %s" , s3) ;
get che( ) ;
/ / copi ar par t e do cont eudo de uma st r i ng par a out r a.
54
Linguagem de programao - C
pr i nt f ( " \ n\ nCopi a par t e cont eudo da st r i ng2 na st r i ng4\ n\ n" ) ;
pr i nt f ( " Quant os car act er es vc quer copi ar ? " ) ;
scanf ( " %d" , &qc) ;
st r ncpy( s4, s2, qc) ;
s4[ qc] =' \ 0' ;
pr i nt f ( " \ n\ nSt r i ng 4 = %s\ n\ n" , s4) ;
get che( ) ;
pr i nt f ( " \ n\ nSt r i ng 5 = %s\ n\ n" , s5) ;
get che( ) ;
/ / Concat enacao de st r i ngs.
pr i nt f ( " \ n\ nj unt a cont eudo da st r i ng 6 coma st r i ng 2\ n\ n" ) ;
pr i nt f ( " St r i ng 2: %s\ n\ n" , s2) ;
pr i nt f ( " \ n\ nSt r i ng 6: " ) ;
f f l ush( st di n) ;
get s( s6) ;
st r cat ( s6, s2) ;
pr i nt f ( " \ n\ nSt r i ng 6 = %s\ n\ n" , s6) ;
get che( ) ;
/ / Concat enacao de st r i ngs de par t e da st r i ng.
pr i nt f ( " \ n\ nj unt a cont eudo da st r i ng 7 compar t e do cont eudo st r i ng 2\ n\ n" ) ;
pr i nt f ( " St r i ng 2: %s\ n\ n" , s2) ;
pr i nt f ( " \ n\ nSt r i ng 7: " ) ;
f f l ush( st di n) ;
get s( s7) ;
st r ncat ( s7, s2, 3) ;
pr i nt f ( " \ n\ nSt r i ng 7 = %s\ n\ n" , s7) ;
get che( ) ;
/ / t r ansf or mar uma st r i ng par a i nt ei r o
pr i nt f ( " Conver t er st r i ng emnumer o i nt ei r o\ n\ n" ) ;
pr i nt f ( " St r i ng 8: " ) ;
f f l ush( st di n) ;
get s( s8) ;
vi = at oi ( s8) ;
pr i nt f ( " \ n\ val or emi nt ei r o = %d\ n\ n" , vi ) ;
get che( ) ;
/ / t r ansf or mar umst r i ng emr eal
pr i nt f ( " Conver t er st r i ng emnumer o r eal \ n\ n" ) ;
pr i nt f ( " St r i ng 8: " ) ;
f f l ush( st di n) ;
get s( s8) ;
vr = at of ( s8) ;
pr i nt f ( " \ n\ nval or emr eal = %. 2f \ n\ n" , vr ) ;
get che( ) ;
}

7.4 Funes de teste para caracteres: Biblioteca ctype.h
Todas estas funes recebem um nico caracter como parmetro e retorna verdadeiro (um valor diferente
de 0) se a condio foi satisfeita, ou falso (0) em outro caso.

int isalnum(int c): Testa se o caractere passado por parmetro uma letra ou dgito numrico.
int isalpha(int c): Testa se o caractere passado por parmetro uma letra.
int isdigit(int c): Testa se o caractere passado por parmetro um dgito numrico.
int islower(int c): Testa se o caractere passado por parmetro uma letra minscula.
55
Linguagem de programao - C
int isupper(int c): Testa se o caractere passado por parmetro uma letra maiscula.
int isspace(int c): Testa se o caractere passado por parmetro um espao em branco. O caractere
correspondente barra de espaos, quebra de linha e tabulaes so considerados brancos.
Exemplo:
#i ncl ude <st di o. h>
#i ncl ude <coni o. h>
#i ncl ude <ct ype. h>
/ * Pr ogr ama par a t est ar as pr i nci pai s f uncoes de mani pul acao de car act er es. */
mai n( )
{ char s1, s2, s3, s4, s6, s7, s8;
i nt t ecl a, aux;
f l oat aux2;
pr i nt f ( " Pr ogr ama par a t est ar as f uncoes de mani pul acao de car act er es\ n\ n" ) ;
pr i nt f ( " \ n\ nPr essi one qual quer t ecl a: " ) ;
t ecl a = get char ( ) ;
i f ( i sdi gi t ( t ecl a) ==0)
pr i nt f ( " \ n\ nvc nao di gi t ou umnumer o\ n\ n" ) ;
el se
pr i nt f ( " \ n\ nvc di gi t ou umnumer o\ n\ n" ) ;
i f ( i sal pha( t ecl a) ==0)
pr i nt f ( " \ n\ nvc nao di gi t ou uma l et r a\ n\ n" ) ;
el se
pr i nt f ( " \ n\ nvc di gi t ou uma l et r a\ n\ n" ) ;
i f ( i sl ower ( t ecl a) ==0)
pr i nt f ( " \ n\ nvc nao di gi t ou uma l et r a mi nuscul a\ n\ n" ) ;
el se
pr i nt f ( " \ n\ nvc di gi t ou uma l et r a mi nuscul a\ n\ n" ) ;
i f ( i supper ( t ecl a) ==0)
pr i nt f ( " \ n\ nvc nao di gi t ou uma l et r a mai uscul a\ n\ n" ) ;
el se
pr i nt f ( " \ n\ nvc di gi t ou uma l et r a mai uscul a\ n\ n" ) ;
get che( ) ;
}

7.5 Validao de Campo
Algumas funes apresentadas acima so utilizadas para a validao de campos, verificando se o
usurio esta digitando o valor com o tipo e intervalo esperado. No exemplo a seguir feito um teste com
um campo numrico e com um campo real.
#i ncl ude <coni o. h>
#i ncl ude <st di o. h>
#i ncl ude <st dl i b. h>
#i ncl ude <ct ype. h>
#i ncl ude <st r i ng. h>

i nt t est emat ( char mat l [ 10] )
{ i nt t , v, i ;
t = st r l en( mat l ) ;
v=0;
f or ( i =0; i <t ; i ++)
{ i f ( i sdi gi t ( mat l [ i ] ) ==0)
{ v=1;
56
Linguagem de programao - C
br eak;
}
}
r et ur n v;
}

i nt t est enot a( char not al [ 10] )
{ i nt t , v, i , cp;
t = st r l en( not al ) ;
v=cp=0;
f or ( i =0; i <t ; i ++)
{ i f ( ( i sdi gi t ( not al [ i ] ) ==0) && ( not al [ i ] ! = ' . ' ) )
{ v=1;
br eak;
}
i f ( not al [ i ] == ' . ' )
{ cp++;
i f ( cp>1)
{ v=1;
br eak;
}
}
}
r et ur n v;
}

mai n( )
{ i nt numer o, r esp;
f l oat n;
char mat [ 10] , not a[ 10] ;
do{ syst em( " cl s" ) ;
pr i nt f ( " Test ar se o usur i o est a di gi t ando umnumer o i nt ei r o\ n\ n" ) ;
pr i nt f ( " di gi t e a mat r i cul a: " ) ;
f f l ush( st di n) ;
get s( mat ) ;
r esp=t est emat ( mat ) ;
i f ( r esp==0)
{ numer o = at oi ( mat ) ;
pr i nt f ( " \ n\ n mat r i cul a = %d" , numer o) ;
}
el se
pr i nt f ( " \ n\ nA mat r i cul a eh umcampo numer i co" ) ;
get che( ) ;
}whi l e ( r esp==1) ;
do{ syst em( " cl s" ) ;
pr i nt f ( " Test ar se o usur i o est a di gi t ando umnumer o r eal \ n\ n" ) ;
pr i nt f ( " \ n\ ndi gi t e a not a: " ) ;
f f l ush( st di n) ;
get s( not a) ;
r esp=t est enot a( not a) ;
i f ( r esp==0)
{ n = at of ( not a) ;
pr i nt f ( " \ n\ n not a = %f " , n) ;
}
el se
pr i nt f ( " \ n\ nA not a eh umcampo numer i co" ) ;
get che( ) ;
}whi l e ( r esp==1) ;
}
57
Linguagem de programao - C

Exerccios Propostos VI


1. Faa um programa ler uma string S e imprime o nmero de brancos existentes na mesma.

2. Faa um programa que ler uma string S e um valor inteiro N e imprime os N primeiros caracteres da
string S.

3. Faa um programa que ler uma string S e um valor inteiro N e imprime os N ltimos caracteres da string
S.

4. Faa um programa que ler uma frase e determina a quantidade de cada vogal contida na mesma.

5. Faa um programa que ler uma string e a exiba invertida.
Exemplo: Entrada MARIA BONITA
Sada ATINOB AIRAM

6. Faa um programa que ler uma palavra e informa se a mesma palndrome. Palavras palindromes: Arara,
asa, osso.

7. Faa um programa que, a partir da digitao do infinitivo de um verbo regular, faa a conjugao do
mesmo no presente do indicativo para as pessoas do singular e plural .
Exemplo: Entrada CANTAR Sada Eu canto
Tu cantas
Ele canta
Ns cantamos
Vs cantais
Eles cantam

8. Faa um programa para ler uma frase e em seguida ler uma palavra. O programa ir verificar se a palavra
est na frase.
58



Captulo 8 Comandos de tela

8.1 Comandos Bsicos de Tela

Para que estes comandos funcionem no DEV-C++, devemos baixar a biblioteca conio2.

Como baixar a biblioteca conio 2

1) No DEV, entre na opo Ferramentas> Atualizaes ... vai abrir uma janela, onde tem select devpack.
Seleciona devpacks.org Community devpacks e clica em check for updates... agora s procurar por CONIO e
mandar atualizar, clicando em download selected depois de ter selecionado conio .

2) Se vc prestar ateno ele instala um conio 2.0 ... uma nova biblioteca conio2.h. se voc colocar
#include <conio2.h> e usar comandos dela vai dar problema... pra resolver simples... siga os prximos
passos.

3) clique no menu feramentas> opes do compilador

4) na caixa adicionar esses comandos linha de comando do linker: marque esse item e digite na caixa de
edio: -lconio.

5) clique OK e agora pode testar com o #include <conio2.h> alguns comandos tipo gotoxy(x,y)
Comandos Bsicos

Todos esses comandos esto localizados na biblioteca conio2.h

CLRSCR Procedimento que limpa a tela e automaticamente coloca o cursor no canto superior esquerdo
da mesma. Sua sintaxe :

clrscr();

GOTOXY Este procedimento posiciona o cursor em um ponto determinado da tela, referenciado pelos
eixos X e Y, ou seja, coluna e linha. Sua sintaxe :

gotoxy (x, y);

WHEREX Funo que retorna a coluna em que se encontra o cursor (em relao window atual). Sua
sintaxe :

X= wherex();
Linguagem de programao - C

WHEREY Funo que retorna a linha em que se encontra o cursor (em relao window atual). Sua
sintaxe :

Y = wherey();


CLREOL Procedimento que apaga todos os caracteres de uma linha do vdeo, que se encontram
direita do cursor. Sua sintaxe :

clreol();

TEXTCOLOR Procedimento que determina a cor do texto que aparecer no vdeo. Sua sintaxe :

textcolor (cor)

Alm destas 16 cores disponveis, podemos somar a qualquer uma delas 128 para que o texto fique
piscante.


TEXTBACKGROUND Procedimento que permite selecionar a cor de fundo da tela. Sua sintaxe :

textbackground (cor);

As cores so: BLACK, BLUE, GREEN, CYAN, RED, MAGENTA, BROWN, LIGHTGRAY,
DARKGRAY, LIGHTBLUE, LIGHTGREEN, LIGHTCYAN, LIGHTRED, LIGHTMAGENTA,
YELLOW, WHITE.


DELLINE Procedimento para deletar uma linha da tela. Remover a linha onde o cursor est
posicionado. Sua Sintaxe :

delline();

INSLINE Procedimento para inserir uma linha da tela. Insere a linha onde o cursor est posicionado.
Sua Sintaxe :

insline();

exemplo:
#i ncl ude <st di o. h>
#i ncl ude <coni o2. h>
#i ncl ude <st dl i b. h>
t ypedef st r uct {char nome[ 20] ;
i nt mat ;
f l oat m;
}al unos;
al unos t ur ma[ 30] ;
const i nt maxi mo= 30;
i nt i , l , qa, op;


60
Linguagem de programao - C

voi d cabec( )
{ cl r scr ( ) ;
pr i nt f ( " Facul dade Legal " ) ;
}

/ / I nser i r novo al uno
voi d i nser i r ( )
{ i nt cont ;
do{ cabec( ) ;
got oxy( 1, 4) ;
pr i nt f ( " I nser i r Novo Al uno" ) ;
got oxy( 1, 4) ;
f or ( i =1; i <=80; i ++)
pr i nt f ( " _" ) ;
got oxy( 5, 7) ;
pr i nt f ( " Mat r i cul a do Al uno: " ) ;
got oxy( 5, 9) ;
pr i nt f ( " Nome do Al uno. . . . . : " ) ;
got oxy( 5, 11) ;
pr i nt f ( " Medi a do Al uno. . . . : " ) ;
got oxy( 1, 14) ;
f or ( i =1; i <=80; i ++)
pr i nt f ( " _" ) ;
got oxy( 1, 17) ;
f or ( i =1; i <=80; i ++)
pr i nt f ( " _" ) ;
i f ( qa < maxi mo)
{ t ext col or ( YELLOW) ;
got oxy( 25, 7) ;
scanf ( " %d" , &t ur ma[ qa] . mat ) ;
got oxy( 25, 9) ;
f f l ush( st di n) ;
get s( t ur ma[ qa] . nome) ;
got oxy( 25, 11) ;
scanf ( " %f " , &t ur ma[ qa] . m) ;
qa++;
got oxy( 1, 16) ;
t ext col or ( RED) ;
pr i nt f ( " Mensagen: Al uno I nser i do comSucesso! ! " ) ;
t ext col or ( WHI TE) ;
}
el se
{ got oxy( 1, 16) ;
t ext col or ( RED) ;
pr i nt f ( " \ aMensagen: Nao Pode I nser i r - Tur ma Chei a! ! " ) ;
t ext col or ( WHI TE) ;
get che( ) ;
br eak;
}
get che( ) ;
got oxy( 1, 16) ;
cl r eol ( ) ;
pr i nt f ( " Cont i nuar i nser i ndo al uno ( 1- si m/ 2- nao) ? " ) ;
scanf ( " %d" , &cont ) ;
}whi l e ( cont == 1) ;
}


61
Linguagem de programao - C

/ / I mpr i mi r r el at or i o comas i nf or maoes de t odos al unos
voi d l i st agem( )
{ i nt i ;
cabec( ) ;
got oxy( 1, 4) ;
pr i nt f ( " Rel at or i o Ger al " ) ;
got oxy( 1, 6) ;
f or ( i =1; i <=80; i ++)
pr i nt f ( " _" ) ;
got oxy( 1, 7) ;
pr i nt f ( " Mat r i cul a" ) ;
got oxy( 11, 7) ;
pr i nt f ( " | " ) ;
got oxy( 13, 7) ;
pr i nt f ( " Nome " ) ;
got oxy( 36, 7) ;
pr i nt f ( " | " ) ;
got oxy( 38, 7) ;
pr i nt f ( " Medi a" ) ;
got oxy( 1, 8) ;
f or ( i =1; i <=80; i ++)
pr i nt f ( " _" ) ;
l = 9;
f or ( i = 0; i < qa; i ++)
{ got oxy( 1, l ) ;
pr i nt f ( " %9d" , t ur ma[ i ] . mat ) ;
got oxy( 11, l ) ;
pr i nt f ( " | " ) ;
got oxy( 13, l ) ;
pr i nt f ( " %- 20s" , t ur ma[ i ] . nome) ;
got oxy( 36, l ) ;
pr i nt f ( " | " ) ;
got oxy( 38, l ) ;
pr i nt f ( " %5. 1f " , t ur ma[ i ] . m) ;
l ++;
}
got oxy( 1, l ) ;
f or ( i =1; i <=80; i ++)
pr i nt f ( " _" ) ;
pr i nt f ( " \ n\ nDi gi t e qual quer t ecl a par a sai r " ) ;
get che( ) ;
}

/ / Pr ogr ama pr i nci pal
mai n( )
{ qa =0;
do / / t el a como menu do opcoes
{ t ext backgr ound( BLACK) ;
cabec( ) ;
pr i nt f ( " \ n\ n\ nOpcoes: \ n\ n" ) ;
pr i nt f ( " 1- I nser i r novo Al uno\ n\ n" ) ;
pr i nt f ( " 2- Li st agemde Al unos\ n\ n" ) ;
pr i nt f ( " 0- Sai r do Pr ogr ama\ n\ n" ) ;
f or ( i =1; i <=80; i ++)
pr i nt f ( " _" ) ;
pr i nt f ( " \ n" ) ;
t ext col or ( YELLOW) ;
pr i nt f ( " I nf or me a opcao desej ada: " ) ;
62
Linguagem de programao - C
l = wher ey( ) ;
t ext col or ( WHI TE) ;
pr i nt f ( " \ n" ) ;
f or ( i =1; i <=80; i ++)
pr i nt f ( " _" ) ;
got oxy( 27, l ) ;
scanf ( " %d" , &op) ;
swi t ch( op)
{ case 1: i nser i r ( ) ; br eak;
case 2: l i st agem( ) ; br eak;
case 0: br eak;
def aul t : got oxy( 27, l ) ;
t ext col or ( RED) ;
pr i nt f ( " \ aVoce escol heu uma opcao que nao exi st e! ! " ) ;
t ext col or ( WHI TE) ;
get che( ) ;
br eak;
}
} whi l e ( op ! = 0) ;
}
63



Captulo 9 Arquivo

9.1 Alocao Dinmica - Ponteiros

Ponteiros so variveis que armazenam um endereo de memria. Se uma varivel contm o
endereo de outra, ento a primeira (o ponteiro) aponta para a segunda.
int a,*x;
x = &a;

O *significa que esta sendo declarado o ponteiro x.
O ponteiro "x" aponta para o "inteiro" a, ou seja, ele armazena o endereo de memria da varivel a.

Operadores

&- (E comercial) fornece o endereo de determinada varivel. Atribui o endereo de uma varivel para um
ponteiro.
*- (Asterstico) que acessa o contedo de uma varivel, cujo endereo o valor do ponteiro. No confundir
com o operador aritmtico de multiplicao de mesmo smbolo. Devolve o valor endereado pelo
ponteiro.
mai n( )
{ i nt *pont , cont , val or ;
cont = 100;
pont = &cont ;
val or = *pont ;
pr i nt f ( " %d" , val or ) ; / * 100 */
}

mai n( )
{ i nt x, y, *px, *py;
x = 100;
px = &x; / / px t emo ender eco de x
py = px; / / py t emo ender eco de x
y = *py; / / y = 100, poi s r ecebe o val or de x at r avs de py
pr i nt f ( " %d %d" , x, y) ;
}

Simule a execuo dos programas abaixo:
#i ncl ude " st di o. h"
mai n( )
{ i nt i , k, *pi , *pk;
Linguagem de programao - C
i = 2; k = 0;
pk = &k;
pi = &i ;
*pk = i ; / / var i vel apont ada por pk r ecebe o val or de i
pr i nt f ( " par a *pk = i , t emos k= %d\ n" , k) ;
k = *pi ;
pr i nt f ( " par a k = *pi , t emos k= %d\ n" , k) ;
scanf ( " %c" , &a) ;
}

mai n( )
{ i nt x, y, *px, *py;
pr i nt f ( " Di gi t e umval or : " ) ;
scanf ( " %d" , &x) ;
px = &x;
y = *px;
pr i nt f ( " di gi t ou= %d e y= %d\ n" , x, y) ;
*px = 8;
pr i nt f ( " val or mudou par a %d\ n" , x) ;
}

Funes malloc e free

As funes malloc() e free() permitem que utilizemos a rea de memria livre para criar nossas
variveis. As variveis sero criadas em tempo de execuo.

A funo malloc() aloca memria e tem esse prottipo:
ponteiro = malloc(numero_de_bytes);

O numero_de_bytes a quantidade de memria que deseja alocar;
A funo malloc() retorna um ponteiro para a primeira rea livre;
A funo malloc faz parte a biblioteca stdlib.h

int *p;
p = malloc(10000);

A funcao free() desaloca memria e tem esse prottipo:

free(ponteiro);

Ponteiro para registros

typedef struct { int mat;
char nome[15];
} TAluno;


Declarao do ponteiro para registro

TAluno *pa1 = NULL, *pa2 = NULL;

65
Linguagem de programao - C
Alocao de memria para um registro

pa2 = (TAluno *)malloc(sizeof(TAluno));


Atribuio a um campo do registro

pa2->mat = 3;

for (i=0;i<=14;i++)
pa2->nome[i] =nomel[i];

Liberar memria de endereo pa2

free(pa2);
9.2 Arquivos
Quando desejamos armazenar os dados de forma definitiva, sem que os mesmo sejam perdidos no
final da execuo do programa, podemos armazen-los em arquivos.

9.2.1 Declarao de um Arquivo
O sistema de entrada e sada do C composto por uma srie de funes, cujos prottipos esto
reunidos em stdio.h. Todas estas funes trabalham com o conceito de "ponteiro de arquivo". Este no
um tipo propriamente dito, mas uma definio usando o comando typedef. Esta definio tambm est no
arquivo stdio.h. Podemos declarar um ponteiro de arquivo da seguinte maneira:

FI LE *p;

p ser ento um ponteiro para um arquivo.

9.2.2 Abrindo e Fechando um Arquivo
fopen

Esta a funo de abertura de arquivos. Seu prottipo :

FILE *fopen (char *nome_do_arquivo,char *modo);

O nome_do_arquivo determina qual arquivo dever ser aberto.
O modo de abertura diz que tipo de uso voc vai fazer do arquivo.

66
Linguagem de programao - C
A tabela abaixo mostra os valores de modo vlidos:

Modo Significado
"r" Abre um arquivo texto para leitura. O arquivo deve existir antes de ser aberto.
"w" Abrir um arquivo texto para escrita. Se o arquivo no existir, ele ser criado. Se j existir, o
contedo anterior ser destrudo.
"a" Abrir um arquivo texto para escrita. Os dados sero adicionados no fim do arquivo ("append"),
se ele j existir, ou um novo arquivo ser criado, no caso de arquivo no existente anteriormente.
"rb" Abre um arquivo binrio para leitura. Igual ao modo "r" .
"wb" Cria um arquivo binrio para escrita, como no modo "w".
"ab" Acrescenta dados binrios no fim do arquivo, como no modo "a".
"r+" Abre um arquivo texto para leitura e escrita. O arquivo deve existir e pode ser modificado.
"w+" Cria um arquivo texto para leitura e escrita. Se o arquivo existir, o contedo anterior ser
destrudo. Se no existir, ser criado.
"a+" Abre um arquivo texto para leitura e escrita. Os dados sero adicionados no fim do arquivo se ele
j existir, ou um novo arquivo ser criado, no caso de arquivo no existente anteriormente.
"r+b" Abre um arquivo binrio para leitura e escrita. O mesmo que "r+" acima, s que o arquivo
binrio.
"w+b" Cria um arquivo binrio para leitura e escrita. O mesmo que "w+" acima, s que o arquivo
binrio.
"a+b" Acrescenta dados ou cria um arquivo binrio para leitura e escrita. O mesmo que "a+" acima, s
que o arquivo binrio

Poderamos ento, para abrir um arquivo binrio para escrita, escrever:

FI LE *f p;
f p =f open( " exempl o. bi n" , " wb" ) ;
i f ( ! f p)
pr i nt f ( " Er r o na aber t ur a do ar qui vo. " ) ;

A condio !fp testa se o arquivo foi aberto com sucesso porque no caso de um erro a funo fopen()
retorna um ponteiro nulo (NULL).

Uma vez aberto um arquivo, vamos poder ler ou escrever nele utilizando as funes adequadas.

fclose

Quando acabamos de usar um arquivo que abrimos, devemos fech-lo. Para tanto usamos a funo
fclose():

int fclose (FILE *fp);

f cl ose( f p) ;


O ponteiro fp passado funo fclose() determina o arquivo a ser fechado. A funo retorna zero no caso
de sucesso.
67
Linguagem de programao - C


feof

EOF ("End of file") indica o fim de um arquivo. s vezes, necessrio verificar se um arquivo chegou ao
fim. Para isto podemos usar a funo feof(). Ela retorna no-zero se o arquivo chegou ao EOF, caso
contrrio retorna zero. Seu prottipo :

int feof (FILE *fp);

whi l e ( ! f eof ( pf ) )

9.2.3 Ler e Gravar Informao no Arquivo
Podemos escrever e ler blocos de dados. Para tanto, temos as funes fread() e fwrite().
fread
O prottipo de fread() :
fread (void *buffer, int numero_de_bytes, int count, FILE *fp);
O buffer a regio de memria na qual sero armazenados os dados lidos. O nmero de bytes o tamanho da
unidade a ser lida. count indica quantas unidades devem ser lidas. Isto significa que o nmero total de bytes
lidos : numero_de_bytes*count
f r ead( &t ur ma[ qa] , si zeof ( al unos) , 1, pf ) ;
fwrite
A funo fwrite() grava informao no arquivo. Seu prottipo :
fwrite(void *buffer,int numero_de_bytes,int count,FILE *fp);
f wr i t e( &t ur ma[ i ] , si zeof ( al unos) , 1, pf ) ;

9.2.4 Acesso Randmico
fseek
Para se fazer procuras e acessos randmicos em arquivos usa-se a funo fseek(). Esta move a posio
corrente de leitura ou escrita no arquivo de um valor especificado, a partir de um ponto especificado. Seu
prottipo :
int fseek (FILE *fp, long numbytes, int origem);

f seek( pf , ( mat r em- 1) *si zeof ( al unos) , SEEK_SET) ;
68
Linguagem de programao - C
O parmetro origem determina a partir de onde os numbytes de movimentao sero contados. Os valores
possveis:
Nome Valor Significado
SEEK_SET 0 Incio do arquivo
SEEK_CUR 1 Ponto corrente no arquivo
SEEK_END 2 Fim do arquivo
Tendo definido a partir de onde ir contar, numbytes determina quantos bytes de deslocamento sero
dados na posio atual.
rewind
Retorna a posio corrente do arquivo para o incio. A funo rewind() tem o prottipo:
void rewind (FILE *fp);

r ewi nd( f p) ;

remove
Apaga um arquivo especificado. Prottipo:
int remove (char *nome_do_arquivo);

r emove( " exempl o. bi n" ) ;

rename
Renomeia um arquivo especificado. Prottipo:
int rename (char *nome_do_arquivo, char *nome_do_arquivo_novo);

r ename( " exempl o. bi n" , " exempl onovo. bi n" ) ;


Programa utilizando arquivos

#i ncl ude <st di o. h>
#i ncl ude <coni o. h>
#i ncl ude <st dl i b. h>
/ * Pr ogr ama par a execut ar f uncoes di r et ament e do ar qui vo de acesso al eat or i o.
O pr ogr ama i r f azer o cont r ol e dos dados dos al unos de uma t ur ma.
*/
t ypedef st r uct al uno{ i nt mat ;
char nome[ 21] ;
}al unos;

al unos aa, an, aaux;
i nt op, qa, posi cao;
FI LE *pf ; / / pont ei r o par a ar qui vo



69
Linguagem de programao - C
/ / Abr e o ar qui vo. se o ar qui vo nao exi st i r , el e i ni ci al i za.
voi d abr e_ar qui vo( )
{ i nt i ;
i f ( ( pf = f open( " ar q" , " r +b" ) ) == NULL)
pf = f open( " ar q" , " w+b" ) ; / / ar qui vo nao exi st e, pr eci sa ser cr i ado
pr i nt f ( " \ n\ nAr qui vo pr ont o par a ser usado" ) ;
get che( ) ;
}

voi d cabec( )
{ syst em( " cl s" ) ;
pr i nt f ( " Facul dade Legal \ n\ n" ) ;
}

i nt pr ocur a( i nt mat p)
{ i nt p;
p= 0;
f seek( pf , 0, SEEK_SET) ;
f r ead( &aa, si zeof ( al unos) , 1, pf ) ;
whi l e ( ( ! f eof ( pf ) ) && ( aa. mat ! =mat p) )
{ f r ead( &aa, si zeof ( al unos) , 1, pf ) ;
p++;
}
i f ( aa. mat == mat p)
r et ur n p;
el se
r et ur n - 1;
}

/ / I nser i r umnovo al uno no ar qui vo
voi d i nser i r ( )
{ i nt cont i nuar ;
do{ cabec( ) ;
pr i nt f ( " \ nI nser i r Novo Al uno\ n\ n" ) ;
pr i nt f ( " \ n\ t Numer o de Mat r i cul a do Al uno: " ) ;
scanf ( " %d" , &aa. mat ) ;
f f l ush( st di n) ;
pr i nt f ( " \ n\ t Nome: " ) ;
get s( aa. nome) ;
f f l ush( st di n) ;
f seek( pf , 0, SEEK_END) ;
f wr i t e( &aa, si zeof ( al unos) , 1, pf ) ;
pr i nt f ( " \ n\ n\ t Al uno I nser i do comSucesso! ! ! \ n\ n" ) ;
pr i nt f ( " \ n\ n\ t Cont i nuar i nser i ndo al uno ( 1- si m/ 2- nao) ? " ) ;
scanf ( " %d" , &cont i nuar ) ;
}whi l e ( cont i nuar == 1) ;
}

/ / Remover umal uno do ar qui vo
voi d r emover ( )
{ i nt mat r em, cont i nuar , conr em;
do{ cabec( ) ;
pr i nt f ( " \ nRemover Al uno\ n\ n" ) ;
pr i nt f ( " \ n\ t Numer o de Mat r i cul a do Al uno: " ) ;
scanf ( " %d" , &mat r em) ;
posi cao = pr ocur a( mat r em) ;
i f ( posi cao == - 1)
pr i nt f ( " \ n\ n\ t Numer o de Mat r i cul a I ncor r et o! ! ! ! ! ! \ n\ n" ) ;
el se
70
Linguagem de programao - C
{ pr i nt f ( " \ n\ nMat Al uno" ) ;
pr i nt f ( " \ n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " ) ;
pr i nt f ( " \ n%3d %- 15s" , aa. mat , aa. nome) ;
pr i nt f ( " \ n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ n\ n" ) ;
pr i nt f ( " \ n\ t Desej a r emover o al uno ( 1- si m/ 2- nao) ? " ) ;
scanf ( " %d" , &conr em) ;
i f ( conr em== 1)
{ f seek( pf , posi cao*si zeof ( al unos) , SEEK_SET) ;
f wr i t e( &an, si zeof ( al unos) , 1, pf ) ;
pr i nt f ( " \ n\ n\ t Al uno r emovi do comSucesso! ! ! \ n\ n" ) ;
}
el se
pr i nt f ( " \ n\ n\ t O al uno nao f oi r emovi do! ! ! \ n\ n" ) ;
}
pr i nt f ( " \ n\ n\ t Cont i nuar r emovendo al uno ( 1- si m/ 2- nao) ? " ) ;
scanf ( " %d" , &cont i nuar ) ;
}whi l e ( cont i nuar == 1) ;
}

/ / Consul t ar umal uno do ar qui vo
voi d consul t ar ( )
{ i nt mat con, cont i nuar ;
do{ cabec( ) ;
pr i nt f ( " \ nConsul t ar Al uno\ n\ n" ) ;
pr i nt f ( " \ n\ t Numer o de Mat r i cul a do Al uno: " ) ;
scanf ( " %d" , &mat con) ;
posi cao = pr ocur a( mat con) ;
i f ( posi cao == - 1)
pr i nt f ( " \ n\ n\ t Numer o de Mat r i cul a I ncor r et o! ! ! ! ! ! \ n\ n" ) ;
el se
{ pr i nt f ( " \ n\ nMat Al uno" ) ;
pr i nt f ( " \ n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " ) ;
pr i nt f ( " \ n%3d %- 15s " , aa. mat , aa. nome) ;
pr i nt f ( " \ n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ n\ n" ) ;
}
pr i nt f ( " \ n\ n\ t Cont i nuar consul t ando al uno( 1- si m/ 2- nao) ? " ) ;
scanf ( " %d" , &cont i nuar ) ;
}whi l e ( cont i nuar == 1) ;
}

/ / Fazer al t er acao dos dados de umal uno
voi d al t er ar ( )
{ i nt mat al t , conal t , cont i nuar ;
do{ cabec( ) ;
pr i nt f ( " \ nAl t er ar Dados do Al uno\ n\ n" ) ;
pr i nt f ( " \ n\ t Numer o de Mat r i cul a do Al uno: " ) ;
scanf ( " %d" , &mat al t ) ;
posi cao = pr ocur a( mat al t ) ;
i f ( posi cao == - 1)
pr i nt f ( " \ n\ n\ t Numer o de Mat r i cul a I ncor r et o! ! ! ! ! ! \ n\ n" ) ;
el se
{ pr i nt f ( " \ n\ nMat Al uno" ) ;
pr i nt f ( " \ n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " ) ;
pr i nt f ( " \ n%3d %- 15s " , aa. mat , aa. nome) ;
pr i nt f ( " \ n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ n\ n" ) ;
pr i nt f ( " \ nDesej a Al t er ar o nome do al uno ( 1- si m/ 2- nao) ? " ) ;
scanf ( " %d" , &conal t ) ;
i f ( conal t == 1)
{ f f l ush( st di n) ;
71
Linguagem de programao - C
pr i nt f ( " \ nNome : " ) ;
get s( aa. nome) ;
}
f seek( pf , posi cao*si zeof ( al unos) , SEEK_SET) ;
f wr i t e( &aa, si zeof ( al unos) , 1, pf ) ;
pr i nt f ( " \ n\ nMat Al uno" ) ;
pr i nt f ( " \ n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " ) ;
pr i nt f ( " \ n%3d %- 15s " , aa. mat , aa. nome) ;
pr i nt f ( " \ n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ n\ n" ) ;
pr i nt f ( " \ n\ nAl uno Al t er ado comSucesso! ! ! \ n\ n" ) ;
}
pr i nt f ( " \ n\ n\ t Cont i nuar al t er ando al uno( 1- si m/ 2- nao) ? " ) ;
scanf ( " %d" , &cont i nuar ) ;
}whi l e ( cont i nuar == 1) ;
}

/ / I mpr i mi r o r el at or i o cont endo os dados de t odos os al unos
voi d l i st agem( )
{ qa=0;
cabec( ) ;
pr i nt f ( " \ nRel at or i o Ger al \ n" ) ;
pr i nt f ( " \ nMat Al uno" ) ;
pr i nt f ( " \ n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " ) ;
f seek( pf , 0, SEEK_SET) ;
f r ead( &aa, si zeof ( al unos) , 1, pf ) ;
whi l e( ! f eof ( pf ) )
{ i f ( aa. mat ! =0)
{ qa++;
pr i nt f ( " \ n%3d %- 15s" , aa. mat , aa. nome) ;
}
f r ead( &aa, si zeof ( al unos) , 1, pf ) ;
}
pr i nt f ( " \ n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " ) ;
pr i nt f ( " \ n\ nQuant i dade de al unos = %d" , qa) ;
pr i nt f ( " \ n\ nDi gi t e qual quer t ecl a par a sai r \ n\ n\ n " ) ;
get che( ) ;
}

/ / Pr ogr ama pr i nci pal
mai n( )
{ abr e_ar qui vo( ) ;
an. mat = 0;
do
{ cabec( ) ;
pr i nt f ( " \ n Opcoes: \ n\ n" ) ;
pr i nt f ( " \ t 1- I nser i r novo Al uno\ n\ n" ) ;
pr i nt f ( " \ t 2- Remover Al uno\ n\ n" ) ;
pr i nt f ( " \ t 3- Consul t ar Al uno\ n\ n" ) ;
pr i nt f ( " \ t 4- Al t er ar dados de Al uno\ n\ n" ) ;
pr i nt f ( " \ t 5- Li st agemde Al unos\ n\ n" ) ;
pr i nt f ( " \ t 0- Sai r do Pr ogr ama\ n\ n\ n" ) ;
pr i nt f ( " \ t I nf or me a Opcao desej ada: " ) ;
scanf ( " %d" , &op) ;
swi t ch( op)
{ case 1: i nser i r ( ) ; br eak;
case 2: r emover ( ) ; br eak;
case 3: consul t ar ( ) ; br eak;
case 4: al t er ar ( ) ; br eak;
case 5: l i st agem( ) ; br eak;
72
Linguagem de programao - C
case 0: f cl ose( pf ) ; br eak;
def aul t : pr i nt f ( " \ n\ n\ t Opcao I nval i da! ! ! ! \ n" ) ; get che( ) ; br eak;
}
}whi l e ( op ! = 0) ;
}


Exerccios Propostos VII


1. Faa um programa para um shopping contendo as seguintes telas:

Tela de menu Cadastro
Shopping Center

Opes:
1 .Cadastrar loja
2. Consultar loja
3. Listagem de todas as lojas
0. Sair

Entre com a opo:
Shopping Center

Cadastro de Loja

Cdigo:
Nome:
rea:
Tipo(1-Confeces, 2-Alimentao, 3-Livros, 4- Servios):

Cadastrar outra (Sim/No)?


Consulta Relatrio Geral
Shopping Center
Consultar Loja
Cdigo da loja que deseja consultar:

Cdigo Nome rea Tipo Condomnio
.... .... .... ... ...

Consultar outra (Sim/No)?


Shopping Center
Listagem Geral

Codigo Nome rea Tipo Condomnio
.... .... .... ... ...
.... .... .... ... ...
.... .... .... ... ...
.... .... .... ... ...

pagina x de x... tecle enter...


O programa ir armazenar os dados das lojas em um arquivo.
O programa ir calcular o valor do condomnio de cada loja. O valor do condomnio depende da rea e do tipo
da loja. Veja tabela abaixo:
Tipo da loja
Valor do m
2
1 R$ 50
2 R$ 65
3 R$ 80
4 R$ 95

Na listagem deve apresentar cinco lojas por tela.

73


Captulo 10 Extras
10.1 Tabela ASCII

O cdigo ASCII (American Standard Code for Information Interchange) representa uma maneira de
codificar caracteres na forma de valores inteiros. Neste cdigo, os caracteres so mapeados para valores
numricos representveis por sete dgitos binrios (bits).

Linguagem de programao - C

O programa abaixo, monta a tabela ascii na tela.

#i ncl ude<st di o. h>
#i ncl ude<coni o. h>
#i ncl ude<st dl i b. h>

mai n( )
{ i nt n, i ;
syst em( " cl s" ) ;
pr i nt f ( " Tabel a ASCI I \ n\ n" ) ;
f or ( i =1; i <=255; i ++)
{ pr i nt f ( " %6d = %2c" , i , i ) ;
/ / par a mudar de l i nha
i f ( i %4==0)
pr i nt f ( " \ n\ n" ) ;
/ / par a mudar de pagi na
i f ( i %40==0)
{ get che( ) ;
syst em( " cl s" ) ;
pr i nt f ( " Tabel a ASCI I \ n\ n" ) ;
}
}
get che( ) ;
}

10.2 Acentos

Voc j deve ter notado que quando se tem uma frase acentuada, caracteres estranhos so
impressos na tela. Para colocar acento no Dev-Cpp ser usada a funo CharToOem, esta funo faz com
que textos no console tenham acento de modo correto. Veja o uso no exemplo abaixo.
75
Linguagem de programao - C
#i ncl ude <wi ndows. h>/ / necessr i o par a a Char ToOem
#i ncl ude <st di o. h>
#i ncl ude <st r i ng. h>
#i ncl ude <coni o. h>

mai n ( )
{ char t ext o[ 80] ;
pr i nt f ( " Al ma caf no \ n\ n" ) ;
st r cpy( t ext o, " Al ma caf no \ 0" ) ;
Char ToOem( t ext o, t ext o) ;
pr i nt f ( " %s\ n" , t ext o) ;
get che( ) ;
}
Podemos criar uma funo que passar a ser utilizada toda vez que seja necessrio acentuar uma
frase.
#i ncl ude <st di o. h>
#i ncl ude <coni o2. h>
#i ncl ude <st dl i b. h>
#i ncl ude <wi ndows. h>

voi d l i nha( )
{ i nt j ;
f or ( j =1; j <=80; j ++)
pr i nt f ( " _" ) ;
}

voi d apr i nt f ( char t ext o[ 80] )
{ char t ext [ 80] ;
i nt t am;
st r cpy( t ext , t ext o) ;
Char ToOem( t ext , t ext ) ;
pr i nt f ( " %s" , t ext ) ;
}

voi d cabec( )
{ cl r scr ( ) ;
l i nha( ) ;
got oxy( 33, 2) ;
apr i nt f ( " Facul dade J os Gonal ves" ) ;
}

voi d t el amenu( )
{ t ext backgr ound( BLACK) ;
t ext col or ( LI GHTCYAN) ;
cabec( ) ;
apr i nt f ( " \ n\ n Opes: \ n\ n" ) ;
pr i nt f ( " 1- Cadast r ar Al uno\ n\ n" ) ;
pr i nt f ( " 2- Li st agemger al de al unos\ n\ n" ) ;
apr i nt f ( " 3- Hi st r i co escol ar \ n\ n" ) ;
apr i nt f ( " 4- Rel at r i o Est at st i co\ n\ n" ) ;
pr i nt f ( " 0- Sai r do Pr ogr ama\ n\ n" ) ;
l i nha( ) ;
apr i nt f ( " \ n I nf or me a opo desej ada: " ) ;
}

mai n( )
{ i nt op;
76
Linguagem de programao - C
do
{ t el amenu( ) ;
scanf ( " %d" , &op) ;
} whi l e ( op ! = 0) ;
}

10.3 Molduras

Podemos desenhar molduras na tela usando os smbolos especiais. Para isso, o cursor deve ser
posicionado no local onde o smbolo ir aparecer e em seguida, escreve o smbolo na tela, usando valor do
smbolo(ver tabela ascii) no printf. No exemplo abaixo montada uma moldura e a tela de menu de um
programa.
#i ncl ude<wi ndows. h>
#i ncl ude<st di o. h>
#i ncl ude<coni o2. h>
#i ncl ude<st dl i b. h>
#i ncl ude<ct ype. h>
#i ncl ude<st r i ng. h>

char t ext ot [ 80] ;

voi d r et angul ot r i pl o( i nt xi n, i nt yi n, i nt xf i m, i nt yf i m, i nt l i nhadi v1, i nt
l i nhadi v2)
{ i nt j , al ;
got oxy( xi n, yi n) ;
pr i nt f ( " %c" , 201) ;
f or ( j =xi n+1; j <xf i m; j ++)
pr i nt f ( " %c" , 205) ;
pr i nt f ( " %c" , 187) ;
al =yf i m- yi n;
f or ( j =1; j <=al ; j ++)
{ got oxy( xi n, yi n+j ) ;
pr i nt f ( " %c" , 186) ;
got oxy( xf i m, yi n+j ) ;
pr i nt f ( " %c" , 186) ;
}
got oxy( xi n, yf i m) ;
pr i nt f ( " %c" , 200) ;
f or ( j =xi n+1; j <xf i m; j ++)
pr i nt f ( " %c" , 205) ;
pr i nt f ( " %c" , 188) ;
got oxy( xi n, l i nhadi v1) ;
pr i nt f ( " %c" , 204) ;
f or ( j =xi n+1; j <xf i m; j ++)
pr i nt f ( " %c" , 205) ;
got oxy( xf i m, l i nhadi v1) ;
pr i nt f ( " %c" , 185) ;

got oxy( xi n, l i nhadi v2) ;
pr i nt f ( " %c" , 204) ;
f or ( j =xi n+1; j <xf i m; j ++)
pr i nt f ( " %c" , 205) ;
got oxy( xf i m, l i nhadi v2) ;
pr i nt f ( " %c" , 185) ;
77
Linguagem de programao - C
}

voi d cent r al i za( char t ext o[ 80] , i nt l i nha)
{ i nt t am, c;
t am=st r l en( t ext o) ;
c= ( 80- t am) / 2;
got oxy( c, l i nha) ;
pr i nt f ( " %s" , t ext o) ;
}

voi d apr i nt f ( char t ext o[ 80] )
{ char t ext [ 80] ;
i nt t am;
st r cpy( t ext , t ext o) ;
Char ToOem( t ext , t ext ) ;
pr i nt f ( " %s" , t ext ) ;
}

voi d acent o( char t ext o[ 80] )
{ st r cpy( t ext ot , t ext o) ;
Char ToOem( t ext ot , t ext ot ) ;
}

voi d escr eva( i nt x, i nt y, char t ext o[ 80] )
{ got oxy( x, y) ;
st r cpy( t ext ot , t ext o) ;
Char ToOem( t ext ot , t ext ot ) ;
pr i nt f ( " %s" , t ext ot ) ;
}

voi d t el amenu( )
{ t ext backgr ound( BLACK) ;
t ext col or ( WHI TE) ;
cl r scr ( ) ;
r et angul ot r i pl o( 1, 1, 80, 24, 4, 22) ;
cent r al i za( " FACULDADE LEGAL" , 2) ;
acent o( " Si st ema Acadmi co" ) ;
cent r al i za( t ext ot , 3) ;
escr eva( 5, 6, " Opes: " ) ;
escr eva( 10, 8, " 1- Cadast r ar Al uno" ) ;
escr eva( 10, 10, " 2- Li st agemGer al de Al unos" ) ;
escr eva( 10, 12, " 3- Hi st r i co Escol ar " ) ;
escr eva( 10, 14, " 4- Rel at r i o Est at st i co" ) ;
escr eva( 10, 16, " 0- Sai r do Pr ogr ama" ) ;
escr eva( 2, 23, " I nf or me a opo desej ada: " ) ;
t ext col or ( YELLOW) ;
}

voi d mensagem( i nt x, i nt y, i nt cor , char t ext o[ 80] )
{ got oxy( x, y) ;
t ext col or ( cor ) ;
st r cpy( t ext ot , t ext o) ;
Char ToOem( t ext ot , t ext ot ) ;
pr i nt f ( " %s" , t ext ot ) ;
t ext col or ( WHI TE) ;
}



78
Linguagem de programao - C
mai n( )
{ i nt op;
do
{ t el amenu( ) ;
scanf ( " %d" , &op) ;
swi t ch( op)
{ case 1: br eak;
case 2: br eak;
case 3: br eak;
case 4: br eak;
case 0: br eak;
def aul t : mensagem( 28, 23, RED, " \ aOpcao i nvl i da. . . Tecl e ENTER! ! " ) ;
get che( ) ; br eak;
}
} whi l e ( op ! = 0) ;
}


10.4 Bibliteca time.h

Essa biblioteca tem funes que auxiliam na obteno de data e hora do sistema. Abaixo a estrutura
usada pela biblioteca.

st r uct t m
{ i nt t m_sec; / * segundos: 0- 59 */
i nt t m_mi n; / * mi nut os: 0- 59 */
i nt t m_hour ; / * hor as: 0- 23 */
i nt t m_mday; / * di a do mes: 1- 31 */
i nt t m_mon; / * mes comeca por j anei r o: 0- 11 */
i nt t m_year ; / * ano comeca por 1900 */
i nt t m_wday; / * di a da semana comeca por domi ngo( 0- 6) */
i nt t m_yday; / * di a do ano - j an. 1: 0- 365 */
i nt t m_i sdst ; / * hor ar i o de ver ao */
};


O programa abaixo captura a data e hora do sistema e apresenta na tela.

#i ncl ude <st di o. h>
#i ncl ude <coni o. h>
#i ncl ude <t i me. h>

mai n( )
{ t i me_t l t i me = t i me( NULL) ;
st r uct t m*hoj e; / /
hoj e = l ocal t i me( &l t i me) ;
pr i nt f ( " Hor a e Dat a( bi bl i ot eca t i me) \ n\ n" ) ;
pr i nt f ( " %02d: %02d: %02d\ n" , hoj e- >t m_hour , hoj e- >t m_mi n, hoj e- >t m_sec) ;
pr i nt f ( " %02d/ %02d/ %04d\ n" , hoj e- >t m_mday, hoj e- >t m_mon+1, hoj e- >t m_year +1900) ;
get che( ) ;
}
79



Captulo 11 Boas Prticas de Programao

11.1 Qualidades de um Programa

A correo uma principal qualidade que deve ser considerada em um programa. Enquanto as
outras qualidades so relativas, isto , podem ser mais importantes em alguns programas e menos em
outros, a correo condio para que o programa tenha sentido de existncia.
As outras qualidades podem interessar em um grau maior em algum programa e em um grau
menor em outros, enquanto a correo uma qualidade absoluta. S interessa um programa 100% correto.
As fontes mais freqentes de erros em programas so as falhas humanas, que se manifestam no
somente na lgica incorreta ou na ausncia de elementos importantes, mas tambm na simples transcrio
errnea e em outros erros ou esquecimentos banais.
Na construo de um programa h, pois, uma hierarquia de consideraes a fazer:
correo: O programa deve resolver correta e completamente o problema do usurio. Fazer-se uma
verificao intuitiva da correo, isto , deve-se parar, analisar, verificar consistncia, completude e
adequao do que est sendo produzido. Se necessrio, obter a opinio e colaborao de terceiros.
Aplicar testes suficientes para garantir, pelo menos, que o programa produz os resultados
esperados.
efetividade ou eficcia: Diz respeito capacidade de o programa chegar a um resultado em um
tempo hbil.
eficincia e clareza: Deve faz-lo da forma mais econmica possvel tanto do ponto de vista da
mquina quanto do ponto de vista das pessoas que vo us-lo. O programa mais eficiente aquele
que obtm o resultado desejado com a melhor relao custo/benefcio. Clareza se refere
capacidade de o programa expressar as aes que devem ser realizadas sem que haja ambigidades.
generalidade e adaptabilidade: Servir como soluo para uma classe de problemas e no somente
Linguagem de programao - C
para um problema especfico. Prever, tanto quanto possvel a necessidade de futuras adaptaes
estando preparado para aceit-las sem grandes dificuldades.

11.2 Formas de Melhoria da Eficincia de um Programa

A primeira preocupao com a construo de qualquer programa constru-lo correto, pois, sem
esta qualidade as outras perdem a sua razo de ser. Depois de se ter um programa correto pode-se pensar
em melhorar-lhe a eficincia. Alguns cuidados na melhoria da eficincia de um programa so apresentados
a seguir:
Efetuar os clculos que no so afetados pela repetio, fora da repetio.
Evitar calcular a mesma expresso vrias vezes sem necessidade.
No esgotar um Loop quando no for necessrio.
No examinar condies desnecessrias.
Escolher mtodos mais eficientes quando existem vrias opes.

Obs.: Eficincia se refere tanto maior velocidade do processamento quanto ao menor uso de
espao de memria. Geralmente estas duas eficincias so conflitantes. Conseguimos maior velocidade de
processamento s custas de um uso de mais memria e quando tentamos economizar memria,
geralmente, aumentamos o tempo de processamento.
81

Você também pode gostar