Buscar

Livro Laboratório de Lógica de Programação II

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 164 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 164 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 164 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Laboratório de Lógica de
Programação II
04_LabLogProgIIBook.qxp 6/5/2008 20:53 Page 1
04_LabLogProgIIBook.qxp 6/5/2008 20:53 Page 2
Universidade do Estado do Amazonas
Tecnologia em Análise e Desenvolvimento de Sistemas
(Sistema Presencial Mediado)
Ângela Timótia Pereira Lima
Andreza Bastos Mourão
Ivana do Nascimento Bernardo
Laboratório de Lógica de
Programação II
04_LabLogProgIIBook.qxp 6/5/2008 20:53 Page 3
Governo do Estado do Amazonas
Carlos Eduardo de Souza Braga
Governador do Estado
Omar José Abdel Aziz
Vice-Governador do Estado
Universidade do Estado do Amazonas
Marilene Corrêa da Silva Freitas
Reitora
Carlos Eduardo de Souza Gonçalves
Vice-Reitor
Fares Franc Abinader Rodrigues
Pró-Reitor de Administração
Osail Medeiros de Souza
Pró-Reitor de Planejamento
Edinea Mascarenhas Dias
Pró-Reitora de Ensino de Graduação
José Luiz de Souza Pio
Pró-Reitor de Pós-Graduação e Pesquisa
Rogelio Casado Marinho Filho
Pró-Reitor de Extensão e Assuntos Comunitários
Escola Superior de Tecnologia
Vicente de Paulo Queiroz Nogueira
Diretor
Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas
(Sistema Presencial Mediado por Tecnologia)
Ednaldo Coelho Pereira
Coordenador Geral
Ângela Timótia Pereira Lima
Coordenadora Pedagógica
Nilo Barreto Falcão Neto
Coordenador Técnico Administrativo
Érica Lima
Projeto gráfico
Diana Maria da Câmara Gorayeb
Revisão
Lima, Ângela Timótia Pereira.
L732lab Laboratório de programação II / Ângela Timótia Pereira Lima, Andreza Bastos
Mourão, Ivana do Nascimento Bernardo – Manaus/AM: UEA Edições, 2008. –
(Tecnologia em Análise e Desenvolvimento de Sistemas. 3. Período)
162 p.: il. ; 23 cm.
Inclui bibliografia e anexo.
ISBN 978-85-89453-82-0
1. 1. Programação - Informática. I. Mourão, Andreza Bastos. II. Bernardo, Ivana do
Nascimento. III. Série. IV. Título.
CDU (1997): 004.42/.43
Ficha Técnica
04_LabLogProgIIBook.qxp 6/5/2008 20:53 Page 4
Andreza Bastos Mourão
Professora da Escola Superior de Tecnologia (EST/UEA)
Especialista em Sistemas de Informação e Aplicações Web
(CESF/FUCAPI)
Mestranda em Educação pela Universidade de Alcalá de Henares -
Espanha (UAH)
Ângela Timótia Pereira Lima
Professora da Escola Superior de Tecnologia (EST/UEA)
Mestre em Engenharia Elétrica pela Universidade Federal de Campina
Grande (UFCG)
Ivana do Nascimento Bernardo
Professora da Escola Superior de Tecnologia (EST/UEA)
Especialista em Desenvolvimento de Sistema Baseado em Software
Livre (UFAM)
Perfil dos Autores
04_LabLogProgIIBook.qxp 6/5/2008 20:53 Page 5
04_LabLogProgIIBook.qxp 6/5/2008 20:53 Page 6
Palavra da Reitora
Nós últimos anos, o avanço da tecnologia da informática mudou os conceitos de
ensino e de trabalho. A preocupação com o que se denominou de "inclusão digital"
passou a ser um problema urgente a ser enfrentado pelos dirigentes do País, já que
todos os processos de novas tecnologias deságuam no conhecimento de informática.
No Amazonas, a dificuldade de locomoção na região, por falta de rodovias, por sua
grande extensão territorial, pela baixa densidade demográfica e pelo subdesenvolvi-
mento secular imposto à população ribeirinha, torna-se árduo o esforço do Governo
para tornar realidade à inclusão digital.
A UEA, que já nasceu moderna, incorporando tecnologias educacionais de
ponta, utilizando-se particularmente da informática pela massificação do uso de
microcomputadores combinados com uma rede complexa de acesso à Internet, não
poderia ficar alheia a essa necessidade premente. Por isso, propôs e realizou o
primeiro vestibular para levar a 12 municípios um curso que formasse a mão-de-obra
inicial que tornasse a inclusão digital uma realidade em nosso Estado.
A proposta do curso de Tecnologia em Análise e Desenvolvimento de Sistemas
oferecido pela UEA vislumbra criar mão-de-obra qualificada em um número significa-
tivo de localidades do Estado, cabendo às pessoas beneficiadas com essa iniciativa
a tarefa de irradiar o uso de tecnologias de informática, abrindo caminhos novos e
suscitando novos empregos para a população local, consolidando, assim, o exercício
da cidadania.
Prof.a Dr.a Marilene Corrêa da Silva Freitas
Reitora da Universidade do Estado do Amazonas
04_LabLogProgIIBook.qxp 6/5/2008 20:53 Page 7
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
8
04_LabLogProgIIBook.qxp 6/5/2008 20:53 Page 8
Sumário
SINOPSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11
CAPÍTULO 1 - FUNÇÃO E PROCEDIMENTO . . . . . . . . . . . . . . . . . . . . . . . . .13
1.1 FUNÇÕES E PROCEDIMENTOS EM C . . . . . . . . . . . . . . . . . . . . . . . . . . .13
1.2 ESTRUTURA DAS FUNÇÕES EM C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13
1.2.1 DECLARANDO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14
1.3 FUNÇÃO SEM PASSAGEM DE PARÂMETRO . . . . . . . . . . . . . . . . . . . . . . . .15
1.3.1 SEM RETORNO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15
1.3.2 COM RETORNO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .21
1.4 FUNÇÃO COM PASSAGEM DE PARÂMETRO . . . . . . . . . . . . . . . . . . . . . . . .22
1.5 FUNÇÃO RECURSIVA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .29
CAPÍTULO 2 - VETORES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .37
2.1 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .37
2.2 VETORES EM C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .37
2.2.1 DECLARANDO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .37
2.2.2 ATRIBUINDO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39
2.2.3 CARREGANDO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .41
2.2.4 LENDO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .43
2.2.5 MOSTRANDO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .43
2.3 APLICAÇÕES COM STRINGS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48
2.4 APLICANDO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .55
CAPÍTULO 3 - MATRIZES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77
3.1 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77
3.2 MATRIZES EM C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77
3.2.1 DECLARANDO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77
3.2.2 ATRIBUINDO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80
3.2.3 CARREGANDO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .81
3.2.4 LENDO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82
3.2.5 MOSTRANDO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .83
3.3 APLICANDO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .84
CAPÍTULO 4 - REGISTROS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .113
4.1 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .113
4.2 REGISTROS EM C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114
4.2.1 DECLARANDO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114
4.2.2 ATRIBUINDO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .115
4.2.3 CARREGANDOE LENDO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .116
4.2.4 MOSTRANDO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .117
4.3 APLICANDO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .118
04_LabLogProgIIBook.qxp 6/5/2008 20:53 Page 9
CAPÍTULO 5 - ARQUIVO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .131
5.1 INTRODUÇÃO À PONTEIROS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .131
5.1.1 EXEMPLOS DE PONTEIRO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .132
5.1.2 ARITMÉTICA DE PONTEIROS . . . . . . . . . . . . . . . . . . . . . . . . . . . . .133
5.2 INTRODUÇÃO À ARQUIVOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .136
5.3 ARQUIVO SEQÜENCIAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .136
5.3.1 MANIPULANDO ARQUIVO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .136
5.4 APLICANDO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .141
5.5 ARQUIVO DE ACESSO ALEATÓRIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . .144
5.5.1 CRIANDO UM ARQUIVO DE ACESSO ALEATÓRIO . . . . . . . . . . . . . . . . .144
BIBLIOGRAFIA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151
ANEXO – EXERCÍCIOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .153
04_LabLogProgIIBook.qxp 6/5/2008 20:53 Page 10
Sinopse
CAPÍTULO 1
Neste capítulo será abordado o conceito de FUNÇÃO, sintaxe,
importância e aplicação na modularização de programas.
As aplicações mostradas nos exemplos trabalham funções sem e com
passagem de parâmetros por valor e por referência.
CAPÍTULO 2
Neste capítulo será abordada a estrutura de dados homogênea
VETOR, conceitos, sintaxe e manipulações com a estrutura.
As aplicações mostradas nos exemplos trabalham com funções vistas
no capitulo anterior. 
CAPÍTULO 3
Neste capítulo será abordada a estrutura de dados homogênea
MATRIZ, conceitos, sintaxe e aplicações. Os exemplos abordados
trabalham com funções vistas no Capítulo1. 
CAPÍTULO 4
Neste capítulo será abordada a estrutura de dados heterogênea
REGISTRO, conceitos, sintaxe e aplicações. Os exemplos abordados
trabalham com a definição de novos tipos de variáveis a partir da
declaração de registros.
Será visto também a declaração da estrutura registro formada por
variáveis do tipo VETOR, assim como campos formados por variáveis
de tipos criados pelo próprio programador.
CAPÍTULO 5
Neste capítulo será abordada a estrutura de dados heterogênea
ARQUIVO, conceitos, sintaxe e aplicações. Os exemplos abordados
trabalham com a utilização de registros para a sua manipulação.
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
11
04_LabLogProgIIBook.qxp 6/5/2008 20:53 Page 11
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
12
04_LabLogProgIIBook.qxp 6/5/2008 20:53 Page 12
CAPÍTULO 1
Função e Procedimento
1.1 FUNÇÕES E PROCEDIMENTOS EM C
As funções são utilizadas para transformar problemas complexos
em problemas mais simples através da subdivisão do problema. 
Funções apropriadas podem freqüentemente esconder
detalhes de operação de partes de programa que não necessitam
conhecê-las, esclarecendo o todo, e facilitando mudanças.
Diversas funções são fornecidas com os compiladores, e estão pre-
sentes na norma ANSI, como funções matemáticas (seno, cosseno,
potência, etc.), funções de entrada e saída (scanf( ), printf( ), etc.)
entre outras.
Um programa em C deve possuir sempre a função main( ) no seu
código independentemente, do número e da variedade de funções que
o programa contenha.
Uma boa parte dos compiladores C permite declarar a função
main( ) sem o uso do tipo void, porém há outros compiladores que
exigem esta característica.
A função main() usada com o void é para dizer que ela não retor-
na nenhum tipo de valor. A última linha do programa, return(0); indi-
ca o número inteiro que está sendo retornado pela função, no caso o
número 0. 
1.2 ESTRUTURA DAS FUNÇÕES EM C
A estrutura de uma função em C é bastante semelhante à da
função main( ). A única diferença é que main() possui um nome espe-
cial.Todas as funções em C começam com um nome seguido de parên-
teses (que pode envolver ou não uma lista de argumentos).
Uma lista de argumentos são valores que podem ser passados para
a função. As funções podem ser definidas antes ou depois do
programa principal.
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
13
04_LabLogProgIIBook.qxp 6/5/2008 20:53 Page 13
1.2.1 DECLARAÇÃO
A lista_de_parâmetros, também é chamada de lista_de_argu-
mentos, é opcional.
Onde:
Tabela 1.1 – Definição de termos da sintaxe de uma função em C.
tipo_da_função <nome da função (lista_de_parâmetros)>
{
declaração de variáveis;
comandos;
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
14
04_LabLogProgIIBook.qxp 6/5/2008 20:53 Page 14
1.3 FUNÇÃO SEM PASSAGEM DE PARÂMETRO 
1.3.1- SEM RETORNO
Quando uma função não retorna um valor para a função que a
chamou ela é declarada como void.
Exemplo 1.1 - Função sem retorno.
Programa 1.1
Problema:
Faça um programa que leia dois valores e faça uma função para
calcular a soma desses valores.
Resolução (Programa 1.1): 
Passo1– Criar a função calculasoma que fará a soma de dois
valores;
Passo2– Bloco principal: pedir dois valores e fazer a chamada da
função para realizar a soma desses valores.
#include <stdio.h>
void mensagem () // Função simples: só imprime Olá! 
{
printf (“Olá! “);
}
void main (void)
{
mensagem(); // Chamada a função
printf (“Alunos do Curso TADS!\n”);
printf (“\n\n”);
return(0);
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
15
04_LabLogProgIIBook.qxp 6/5/2008 20:53 Page 15
Programa 1.1 - Função que soma dois números definindo a função no início.
// Utilizando a definição da função no início do programa
#include <stdio.h>
float num1, num2;
// Exemplo de função sem retorno
void calculasoma ( ) 
{ 
float soma=0.0;
soma=num1+num2;
printf(“O valor da soma dos dois números
é:%3.2f”,soma);
}
void main(void)
{
printf(“Digite um primeiro valor:\n”);
scanf(“%f”,&num1);
printf(“Digite um segundo valor:\n”);
scanf(“%f”,&num2);
calculasoma( );
return(0);
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
16
04_LabLogProgIIBook.qxp 6/5/2008 20:53 Page 16
Programa 1.2
Problema:
Faça um programa que leia dois valores e faça uma função para
calcular a soma desses valores fazendo a definição após o programa
principal.
Resolução (Programa 1.2): 
Passo1– Criar a função calculasoma que fará a soma de dois
valores.
Passo2– Bloco principal: pedir dois valores e fazer a chamada da
função para realizar a soma desses valores;
Programa 1.2 - Função que soma dois números definindo a função no final.
//Utilizando a definição da função no final do programa
#include <stdio.h>
float num1, num2;
void calculasoma( ); // protótipo da função
void main(void)
{
printf(“Digite um primeiro valor:\n”);
scanf(“%f”,&num1);
printf(“Digite um segundo valor:\n”);
scanf(“%f”,&num2);
calculasoma();
return(0);
}
void calculasoma( )
{ 
float soma=0.0;
soma=num1+num2;
printf(“O valor da soma dos dois números 
é:%3.2f”,soma);
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
17
04_LabLogProgIIBook.qxp 6/5/2008 20:53 Page 17Programa 1.3
Problema:
Faça um programa para calcular as quatro operações aritméticas
a partir de um menu onde o usuário digita dois valores e escolhe a
operação.
Resolução (Programa 1.3): 
Passo1– Criar a função pega_valor que pegará 2 números;
Passo2– Criar a função exibe_resultado que exibirá o resultado do
cálculo pedido pelo usuário;
Passo3– Criar a função soma que realizará a soma dos 2 valores;
Passo4- Criar a função subtracao que realizará a subtração dos 2
valores;
Passo5- Criar a função multiplicacao que realizará a multipli-
cação dos 2 valores;
Passo6- Criar a função divisao que realizará a divisão dos 2
valores;
Passo7- Bloco principal: o menu que escolherá uma das 4
operações matemáticas.
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
18
04_LabLogProgIIBook.qxp 6/5/2008 20:53 Page 18
#include<stdio.h>
float valor1,valor2,result;
void pega_valor()
{
printf(“Entre com o 1 valor: “);
scanf(“%f”,&valor1);
printf(“Entre com o 2 valor: “);
scanf(“%f”,&valor2);
return(0);
}
void exibe_resultado()
{
printf(“\nO resultado eh: %2.2f”,result);
return(0);
}
void soma( )
{
printf(“Rotina de Soma\n\n”);
pega_valor();
result = valor1 + valor2;
exibe_resultado();
return (0);
}
void subtracao()
{
printf(“Rotina de Subtracao\n\n”);
pega_valor();
result = valor1 - valor2;
exibe_resultado();
return (0);
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
19
04_LabLogProgIIBook.qxp 6/5/2008 20:53 Page 19
void multiplicacao()
{
printf(“Rotina de Multiplicacao\n\n”);
pega_valor();
result = valor1 * valor2;
exibe_resultado();
return (0);
}
void divisao()
{
printf(“Rotina de Divisao\n\n”);
pega_valor();
if(valor2!=0)
{
result = valor1 / valor2;
exibe_resultado();
}
return (0);
}
void main(void)
{
int opcao = 0;
while (opcao != 5)
{
printf(“\nMenu Principal\n\n\n”);
printf(“1 - Soma\n”);
printf(“2 - Subracao\n”);
printf(“3 - Multiplicacao\n”);
printf(“4 - Divisao\n”);
printf(“5 - Fim\n\n\n”);
printf(“Escolha sua opcao: “);
scanf(“%d”,&opcao);
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
20
04_LabLogProgIIBook.qxp 6/5/2008 20:53 Page 20
Programa 1.3 - Calculadora com as 4 operações básicas.
1.3.2 - COM RETORNO
Programa 1.4
Problema:
Faça um programa para calcular a diferença entre dois horários,
onde serão fornecidos somente as horas e minutos.
Resolução (Programa 1.4): 
Passo1– Criar a função minutos que calcula a diferença das horas
em minutos;
Passo2– Bloco principal: entrada das horas e chamada da função
minutos.
if (opcao != 5)
{
switch(opcao)
{
case 1: soma(); break;
case 2: subtracao(); break;
case 3: multiplicacao(); break;
case 4: divisao(); break;
default: printf(“Opcção Inválida - Tente 
Novamente!”);
}
}
}
return (0);
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
21
04_LabLogProgIIBook.qxp 6/5/2008 20:53 Page 21
Programa 1.4 - Calcular a diferença entre as horas e retorna em minutos.
1.4. FUNÇÃO COM PASSAGEM DE PARÂMETRO
A passagem de parâmetros para uma função deve ser realizada
colocando-os dentro de parênteses, separados por vírgulas, imediata-
mente após o nome da função. Quando se faz a chamada de uma
função, o número e o tipo dos parâmetros enviados devem ser coinci-
dentes com os parâmetros presentes no cabeçalho da função.
Formas existentes de passar parâmetros em uma função:
Passagem por valor: quando a função é chamada, o parâmetro
passado por valor é copiado, ou seja, o valor da variável utilizada
como parâmetro não é alterado.
Passagem por referência: quando a função é chamada, o
endereço do parâmetro passado por referência é atribuído à um
ponteiro, ou seja, qualquer alteração no conteúdo apontado será
refletida no conteúdo da variável utilizada como parâmetro.
#include <stdio.h>
int minutos() //Retorna hora em minutos
{ 
int hora,min;
scanf(“%d %d”,&hora,&min);
return(hora*60+min); /*Transforma horas em minutos 
e soma os minutos informados*/
}
void main(void)
{
int mins1,mins2;
printf(“Digite a primeira hora(hora:min):”);
mins1=minutos(); //Faz a chamada a função e retorna um valor
printf(“Digite a segunda hora(hora:min):”);
mins2=minutos(); |//Faz a chamada a função e retorna um valor
printf(“A diferença eh %d minutos.”,mins2-mins1); 
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
22
04_LabLogProgIIBook.qxp 6/5/2008 20:53 Page 22
O exemplo 1.2, chama a função somanum (int n) passando como
parâmetro o valor num e retornando o valor da soma dos valores do
intervalo.
Exemplo 1.2 - Função com passagem de valor e com retorno.
// Função com passagem de um parâmetro e retorno de valor
#include<stdio.h>
int somanum(int n)//Função que recebe um parâmetro 
{ 
int soma=0,i;
for(i=1;i<=n;i++)
soma=soma+i;
return(soma);
}
void main(void)
{ int num;
printf(“Digite um valor: “);
scanf(“%d”,&num);
if (num >0)
printf(“O valor da soma dos números de 1 ate n = 
%d\n\n”, somanum(num));
else
printf(“Digite um valor positivo\n”);
}
Em C só existe passagem de parâmetros por valor. Nunca é pos-
sível alterar os argumentos enviados para a função, pois sempre
que uma função é invocada é criado um ambiente próprio para
a sua execução, ao qual são passadas apenas cópias das var-
iáveis, e na seqüência é destruído logo que a execução da
função termine.
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
23
04_LabLogProgIIBook.qxp 6/5/2008 20:53 Page 23
O exemplo 1.3 chama a função fatorial (int n) passando como
parâmetro o valor limite e chamando a função que calcula e mostra o
resultado do fatorial.
Exemplo 1.3 - Função com passagem de um parâmetro e com retorno.
// Função com passagem de um parâmetro sem retorno de valor
#include <stdio.h>
int fatorial (int n)
{
int i, fat;
fat=1;
for (i=1;i<=n;i++)
fat*=i; //fat*i;
printf(“\n Fatorial de %d = %d\n”,n,fat);
return(0);
}
void main (void)
{
int limite;
printf(“\n\nCálculo de fatorial\n”);
printf(“\nQual fatorial: “);
scanf(“%d”,&limite);
fatorial(limite);
return(0);
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
24
04_LabLogProgIIBook.qxp 6/5/2008 20:53 Page 24
O exemplo 1.4, chama a função soma_dobro (int a, int b)
passando como parâmetro os valores x e y e chamando a função que
calcula o dobro e retorna o valor da soma.
Exemplo 1.4 - Função com passagem de dois parâmetros e com retorno.
Programa 1.5
Problema: 
Faça um programa que leia o total de dias e crie uma função para
retornar o valor total de anos.
Resolução (Programa 1.5): 
Passo1– Criar a função Dano para receber o total de dias e
retornar o total em anos;
Passo2– Bloco principal: solicita o número de dias e chama a
função Dano que calcula o total em anos, passando o número de
dias e os dias do ano (valor constante) por parâmetro;
// Função com passagem de dois parâmetros com retorno de valor
#include <stdio.h>
int soma_dobro(int a,int b)
{ int soma;
a=2*a;
b=2*b;
soma=a+b;
return(soma);
}
void main(void)
{ 
int x,y,res;
printf(“Digite o primeiro número:”);
scanf(“%d”,&x);
printf(“Digite o segundo número:”);
scanf(“%d”,&y);
res=soma_dobro(x,y);
printf(“\n A soma do dobro dos números eh:%d”,res);
return(0);
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
25
04_LabLogProgIIBook.qxp 6/5/2008 20:53 Page 25
Programa 1.5 – Calcula o total de anos de acordo com a quantidade de dias.
// Funçãocom passagem de dois parâmetros com retorno de valor
#include <stdio.h>
#define DIASANO 365.25
int Dano(float d, float a)
{
return(d/a);
}
int main (void)
{
// Declaração de Variáveis 
float Dias,Anos;
// Entrada de Dados 
printf (“Entre com o número de dias: “); 
scanf (“%f”,&Dias);
// Conversão Dias->Anos 
Anos = Dano(Dias,DIASANO); 
printf (“\n\n A Quantidade de Anos eh.%.2f\n”, Anos);
printf (“\n\n”);
return (0);
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
26
04_LabLogProgIIBook.qxp 6/5/2008 20:53 Page 26
Programa 1.6
Problema:
Criar uma função para receber três valores reais passados por
parâmetro, multiplicar e mostrar o resultado.
Resolução (Programa 1.6): 
Passo1– Criar a função mult que calcula e mostra o produto de
três valores;
Passo2– Bloco principal: Atribuir valores às três variáveis e chamar
a função mult, enviando os valores por parâmetro.
Programa 1.6 – Função para multiplicação de três valores.
Na Linguagem C, para trabalharmos com passagem de parâmetros
por referência, fazemos o uso do tipo de variável (ponteiros) que terá
uma abordagem introdutória no capítulo 5.
O exemplo 1.5 chama a função troca (int *a, int *b) passando
como parâmetro dois valores inteiros n e k e chamando a função que
troca os valores enviados por parâmetro.
// Função com passagem de três parâmetros sem retorno de valor
#include <stdio.h>
mult(float a,float b,float c)
{
printf(“%2.2f”,a*b*c);
}
void main(void)
{ 
float x,y;
x = 23.5;
y = 12.9;
mult(x,y,3.5);
return(0);
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
27
04_LabLogProgIIBook.qxp 6/5/2008 20:53 Page 27
Exemplo 1.5- Função com passagem de dois parâmetros por referência.
// Função com passagem de dois parâmetros por referência
#include <stdio.h>
// Passagem de parâmetro por referência
int troca (int *a, int *b)
// Definição de ponteiros que receberão os valores
{
int x; // Variável auxiliar
x = *a;
*a=*b;
*b=x;
return (0);
}
// Programa principal
void main(void)
{
int n,k;
// Entrada de dados
printf(“\n\nDigite dois valores inteiros\n”);
scanf(“%d %d”,&n,&k);
printf(“Antes da troca n=%d e k=%d\n”,n,k);
troca(&n,&k);
printf(“Depois da troca n=%d e k=%d \n”,n,k);
return(0);
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
28
04_LabLogProgIIBook.qxp 6/5/2008 20:53 Page 28
1.5 FUNÇÃO RECURSIVA
Geralmente, os programas que analisamos são estruturados como
funções chamadas entre si de uma maneira disciplinada e hierárquica.
Para alguns tipos de problemas, é útil ter funções que chamem a
si mesmas. 
Uma função recursiva é uma função que chama a si mesma, dire-
tamente ou indiretamente, o exemplo 1.6 demonstra o cálculo de um
fatorial, usando recursividade.
Exemplo 1.6 - Função recursiva.
#include <stdio.h>
long fatorial (long numero)
{
if (numero <=1)
return (1);
else
return (numero * fatorial (numero -1));
}
void main (void)
{
int i;
for (i = 1; i <= 10; i++)
printf (“%2d! = %1d\n”, i, fatorial(i));
return (0);
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
29
04_LabLogProgIIBook.qxp 6/5/2008 20:53 Page 29
Programa 1.8
Problema:
Escrever um programa que leia as medidas dos três lados a,b, e c
de um paralelepípedo, calcule e escreva o valor de sua diagonal.
Resolução (Programa 1.8): 
Passo1– Criar a função hipotenusa que calcula a distância;
Passo2– Bloco principal: atribui valores às três variáveis e chama
a função hipotenusa recursivamente, enviando os valores por
parâmetro.
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
30
04_LabLogProgIIBook.qxp 6/5/2008 20:53 Page 30
Programa 1.8 – Função para o cálculo do paralelepípedo.
// Função com passagem de dois parâmetros com retorno de valor
#include <stdio.h>
#include <math.h>
float a,b,c,D;
float hipotenusa (float a,float b)
{
return(sqrt(a*a + b*b);
}
void main (void)
{
printf(“Entre com A: “);
scanf(“%f”,&a);
printf(“Entre com B: “);
scanf(“%f”,&b);
printf(“Entre com C: “);
scanf(“%f”,&c);
D = hipotenusa(hipotenusa(a,b),c);
printf(“Diagonal %f”,D);
return (0);
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
31
04_LabLogProgIIBook.qxp 6/5/2008 20:53 Page 31
Programa 1.9
Problema: 
Dado o número de discos n e o nome das torres de origem, desti-
no e auxiliar, resolver o problema das Torres de Hanói para n discos. 
Resolução (problema 1.9)
Mover n discos de ORIGEM para DESTINO, é o mesmo que:
Passo1- mover n-1 discos de ORIGEM para AUXILIAR, usando DES-
TINO como auxiliar;
Passo2- mover disco n de ORIGEM para DESTINO;
Passo3- mover n-1 discos de AUXILIAR para DESTINO, usando
origem como auxiliar;
Em nenhum dos passos acima, as regras do jogo foram quebradas.
Falta a regra de parada que ocorre quando n é 1. Neste caso, basta
mover o disco 1 de ORIGEM para DESTINO.
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
32
04_LabLogProgIIBook.qxp 6/5/2008 20:53 Page 32
Programa 1.9 – Função para uso da Torre de Hanói .
#include <stdio.h>
void writemove(int k, char origem[], char destino[])
{
printf(“\n move disco %3d da torre %10s para 
a torre %10s”, k, origem, destino);
}
void hanoi(int n, char a[], char b[], char c[])
{
if (n == 1)
writemove(1, a, b);
else
{
hanoi(n - 1, a, c, b);
writemove(n, a, b);
hanoi(n - 1, c, b, a);
}
}
int main()
{
int n;
char origem[10], destino[10], auxiliar[10];
printf(“Entre com o numero de discos:”);
scanf(“%d”, &n);
printf(“Entre com os nomes dos discos (origem 
destino auxiliar):”);
scanf(“%s%s%s”, origem, destino, auxiliar);
// Chama a função para movimentar os discos
hanoi(n, origem, destino, auxiliar);
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
33
04_LabLogProgIIBook.qxp 6/5/2008 20:53 Page 33
Atividades
1.1- Escrever uma função para fazer um algoritmo que transforme
segundos em horas, minutos e segundos.
Ex.: 11030 = 3h 3min 50seg
1.2- Escrever uma função que recebe dois números inteiros, positivo,
e determine o produto dos mesmos, utilizando o seguinte méto-
do de multiplicação.
! Dividir, sucessivamente, o primeiro número por 2, até que se
obtenha 1 como quociente;
! Paralelamente, dobrar, sucessivamente, o segundo número;
! Somar os números da segunda coluna que tenham um número
ímpar na primeira coluna. O total obtido é o produto procurado.
Ex.:
1.3- Construir uma função que retorne o resto de uma divisão entre
dois números inteiros.
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
34
04_LabLogProgIIBook.qxp 6/5/2008 20:53 Page 34
1.4- Fazer um programa em “C” que solicita o total gasto pelo cliente
de uma loja, imprime as opções de pagamento, solicita a opção
desejada e imprime o valor total das prestações (se houverem).
1) Opção: a vista com 10% de desconto;
2) Opção: em duas vezes (preço da etiqueta);
3) Opção: de 3 até 10 vezes com 3% de juros ao mês (somente para
compras acima de R$ 100,00).
OBS: Fazer uma função que imprime as opções solicita a opção
desejada e retorna a opção escolhida. No bloco principal, testar
a opção escolhida e ativar a função correspondente (uma função
para cada opção).
1.5- Fazer um programa, para cada um dos itens abaixo, para criar a
função main( ) que teste cada uma das funções: 
a) Fazer uma função para mostrar na tela a seguinte saída:
***************************
* FELIZ ANIVERSÁRIO*
***************************
b) Criar uma função para converter a temperatura de Fahrenheit
para Celsius. A temperatura em °F é fornecida como entrada e
passada como parâmetro para a função que retorna a temperatu-
ra em °C, que deve ser mostrada no programa principal.
C= ( F- 32)*5/9
c) Elaborar uma função para ler a base e a altura de um retângu-
lo, calcular e retornar a sua área. Na função principal é apresen-
tado o valor da área.
Area=base*altura
1.6- Escrever uma função que recebe o valor de três parâmetros do
tipo char (fornecidos como entrada) e mostre estes valores em
ordem crescente. Por exemplo, se ch1, ch2 e ch3 são variáveis do
tipo char com valores ‘B’, ‘A’,’C’, respectivamente, serão apre-
sentados os valores : ‘A’, ‘B’ , ‘C’.
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
35
04_LabLogProgIIBook.qxp 6/5/2008 20:53 Page 35
1.7- Fazer um função que receba como parâmetro o preço atual de
uma mercadoria e o reajuste a ser aplicado e retorne o novo
preço da mercadoria com reajuste. Escreva a função main( ) para
solicitar os parâmetros e testar a função criada, mostrando o
preço da mercadoria depois do aumento, bem como o percentu-
al aplicado.
1.8 – Criar um programa para ler dois números e chamar uma função
que mostrar três mensagens: se os valores recebidos são iguais ou
diferentes; e se o 1.º valor é par ou ímpar; assim como o 2.°.
O programa será finalizado quando for digitado um valor negati-
vo para o primeiro número.
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
36
04_LabLogProgIIBook.qxp 6/5/2008 20:53 Page 36
CAPÍTULO 2
Vetores
2.1 INTRODUÇÃO
Vetores são variáveis capazes de armazenar vários elementos,
onde cada elemento tem a sua identificação caracterizada pelo
mesmo nome. Este nome atribuído ao vetor é diferenciado por um
índice.
Um vetor é também conhecido como array, e podem armazenar
uma quantidade de elementos de um mesmo tipo de dados.
Em uma mesma estrutura de dados de um determinado programa
pode-se ter vários vetores declarados, cada um armazenando valores
de tipos distintos e possuindo uma quantidade diferente de elementos
a serem armazenados. 
As variáveis índices a serem criadas em C, utilizadas para identi-
ficar a posição que será armazenado o elemento a ser inserido no
vetor tem início sempre com o valor zero (0) e finaliza até o tamanho
do vetor subtraído de uma (1) unidade.
2.2 VETORES EM C
2.2.1 DECLARANDO
As variáveis do tipo vetor são identificadas pela existência de
colchetes [], após o nome da variável no momento da declaração,
onde dentro do colchete encontra-se a quantidade de posições
necessárias para o armazenamento de elementos.
Dica: Para cada vetor criado especifica-se quantidade e tipo
de dado que será armazenado e onde seus valores estarão
consecutivamente inseridos.
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
37
04_LabLogProgIIBook.qxp 6/5/2008 20:53 Page 37
Sintaxe:
Tipo de dado <nome do vetor [índice]>;
Onde:
Tabela 2.1 – Definição de termos da sintaxe vetor em C.
Exemplos:
int vet1 [20],i;
ou
char vet2[30];
int i;
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
38
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 38
2.2.2 ATRIBUINDO 
Atribuição de um valor a um elemento, em uma determinada
posição do vetor: 
Sintaxe:
nome_do_vetor [índice] = valor ;
Exemplo:
1. vet1 [i] = 10;
Atribuição do elemento 10 na primeira posição do vetor.
Índice igual a 0 (zero).
2. vet1 [2] = 10;
Atribuição do elemento 10 na terceira posição do vetor.
Índice igual a 2 (dois).
3. char vet2 [ ] = “Maues”;
Atribuição da string ‘Maues’ no vetor recebendo cada caracter em
uma posição. 
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
39
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 39
O exemplo 2.1 mostra um vetor de tamanho 5 onde os valores são
atribuídos a cada uma das posições do vetor.
Exemplo 2.1 – Atribuição de elementos no vetor com número.
O exemplo 2.2 mostra um vetor de caracter onde os valores são
atribuídos na declaração. 
Exemplo 2.2 – Atribuição de elementos no vetor com caracter.
#include <stdio.h> 
// Programa atribuir elemento
void main (void)
{
char vet1[ ]= “Coari”;
return (0)
}
#include <stdio.h> 
// Programa atribuir elementos ao vetor 
void main (void)
{
int vet[5];
vet[0]=10;
vet[1]=20;
vet[2]=30;
vet[3]=40;
vet[4]=50;
return (0)
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
40
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 40
2.2.3 CARREGANDO 
Para carregar valores no vetor o usuário deverá informar o ele-
mento a ser inserido. O mesmo será lido e armazenado, seqüencial-
mente, no vetor especificado. 
Na linguagem C é importante ressaltar que o armazenamento de
uma cadeia de caracteres, como por exemplo: o nome de uma pessoa
é declarado como char (tipo caracter). E cada elemento do nome, ou
seja, cada letra é armazenado em uma posição do vetor. Lembrando
que é necessário definir uma posição a mais para armazenar a marca
de finalização de cadeia (\0).
O exemplo 2.3, mostra o vetor a ser carregado que chama-se
vetor1 e possui 10 posições. A variável i é a variável índice que con-
trola a posição exata que o elemento será armazenado.
Exemplo 2.3 – Carregando elementos no vetor.
#include <stdio.h> 
//Programa carregar vetor 
void main (void)
{
int vetor1[10];
int i;
for (i=0;i<10;i++)
{
printf(“\n VETOR 1 - POSIÇÃO[%d]:”, i); 
scanf(“%d”,&vetor1[i]);
}
return (0)
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
41
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 41
O vetor a ser carregado poderá armazenar até no máximo cinco
elementos (capacidade máxima), porém armazenará apenas as infor-
mações de dois usuários, como delimitado no laço de repetição.
A variável inteira cont é do tipo índice pois é responsável pelo
controle do armazenamento dos elementos em suas respectivas
posições.
Exemplo 2.4 – Atribuição de elementos no vetor com caracter.
#include <stdio.h>
void main(void)
{
int cont, id[5];
float alt[5];
char nome[30][5];
char sex[1][5];
// Carregando as informações no vetor 
for (cont=0;cont<2;cont++)
{
printf(“\n Informe o seu nome: \n”); 
scanf(“%s”,nome[cont]);
printf(“\n Informe a sua idade: \n”); 
scanf(“%d”,&id[cont]);
printf(“\n Informe a sua altura: \n”); 
scanf(“%f”,&alt[cont]);
printf(“\n Informe o seu sexo:[F/M] \n”); 
scanf(“%s”,sex[cont]);
} 
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
42
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 42
2.2.4 LENDO
Sintaxe:
scanf (“%tipo”,&vetor[índice]);
Exemplo:
scanf (“%d”,&vet[i]); 
ou
scanf(“%c”,&vet[i]);
2.2.5 MOSTRANDO
Ao carregar ou atribuir valores ao vetor, pode-se realizar a sua
impressão, ou seja, mostrar na tela os valores armazenados no vetor.
E suas respectivas posições se necessário.
Para mostrar os elementos inseridos em um vetor, precisa-se uti-
lizar uma estrutura de repetição para que seja lido cada um dos ele-
mentos, sequencialmente e exibidos na tela.
Sintaxe:
printf (“mensagem e código de formatação”, nome da 
variável[índice]);
ou
printf (“código de formatação”, nome da 
variável[índice]);
Exemplo:
printf (“O valor armazenado na variável é 
%tipo”,vetor[i] );
ou
printf (“%tipo”,vetor[i] );
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
43
04_LabLogProgIIBook.qxp 6/5/200820:54 Page 43
Veja a tabela de formatação de tipo.
Tabela 2.2 - Código de formatação
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
44
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 44
O exemplo 2.5 mostra os valores inteiros atribuídos, inicialmente,
no vetor em suas respectivas posições.
Exemplo 2.5 – Valores atribuídos diretamente no vetor.
#include <stdio.h> 
// Atribuir elementos ao vetor 
int main ()
{ 
int vet[5];
int i;
vet[0]=10;
vet[1]=20;
vet[2]=30;
vet[3]=40;
vet[4]=50;
// Mostrar os elementos atribuídos ao vetor 
for (i=0;i<5;i++)
printf (“\n Os valores armazenados no VETOR 1 - POSIÇÃO[%d]
eh: [%d] \n”, i, vet[i]);
return (0);
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
45
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 45
O exemplo 2.6 carrega em um vetor valores solicitados do usuário
e imprime os resultados na tela. Logo, os valores contidos no vetor são
exibidos, bem como a respectiva posição que se encontram.
Exemplo 2.6 – Atribuição de elementos no vetor com caracter.
// Programa carregar e mostrar valores do vetor 
#include <stdio.h> 
void main (void)
{
int vet[5];
int i;
for (i=0;i<5;i++)
{
printf(“\n Informe o valor a ser armazenado no VETOR: “);
scanf(“%d”,&vet[i]);
}
for (i=0;i<5;i++)
printf(“\n Os valores armazenados no VETOR 1 - POSIÇÃO[%d]
eh: [%d] \n”, i, vet[i]); 
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
46
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 46
O exemplo 2.7 solicita dados do usuário, armazena em um vetor
de 5 posições e mostra os dados armazenados no vetor na tela. 
Exemplo 2.7 – Mostrando dados de um vetor.
#include <stdio.h>
void main(void)
{
int cont, id[5];
float alt[5];
char nome[5][30];
char sex[5][2];
// Carregando as informaçõeS no vetor
for (cont=0;cont<5;cont++)
{
printf(“\n Informe o seu nome: \n”); 
scanf(“%s”,nome[cont]);
printf(“\n Informe a sua idade: \n”); 
scanf(“%d”,&id[cont]);
printf(“\n Informe a sua altura: \n”); 
scanf(“%f”,&alt[cont]);
printf(“\n Informe o seu sexo:[F/M] \n”); 
scanf(“%s”,sex[cont]);
}
//Mostrar os valores inseridos no vetor 
for (cont=0;cont<5;cont++)
{ 
printf(“\n \n Seu nome eh:%s\n”,nome[cont]);
printf(“\n Sua idade eh:%d \n”,id[cont]); 
printf(“\n Sua altura eh:%2.2f\n”, alt[cont]);
printf(“\n Seu sexo eh:%s \n”,sex[cont]); 
}
return(0)
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
47
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 47
2.3 APLICAÇÕES COM STRINGS
De acordo com os conceitos vistos anteriormente, será mostrado
como resolver alguns problemas utilizando estruturas de dados com-
postas homogêneas do tipo vetor em linguagem de programação C,
utilizando o ambiente do Eclipse.
A prática, ou seja, a construção de programas que visam solu-
cionar problemas nos quais as estruturas homogêneas tornam-se
necessárias tende a contribuir para a melhor assimilação do conteúdo.
Para trabalhar com strings em Linguagem C não possuímos o tipo
string e sim, o tipo char, que quando não utilizado com um tamanho
específico, possibilita a leitura de apenas um caractere no teclado.
Sintaxe:
char <nome_da_string [tamanho]>; 
Pode-se citar alguns tipos de strings em linguagem C: gets, strcpy,
strcat, strlen e strcmp.
A biblioteca padrão em C possui diversas funções que manipulam
strings. Tais funções são úteis, pois não se pode, por exemplo, copiar
o conteúdo de uma variável do tipo string para outra variável do
mesmo tipo, sem utilizar umas das funções correspondentes, uma vez
que não é possível fazer atribuição diretamente.
nome1= nome2; //Não é aceito, desta forma.
STRINGS em linguagem C são vetores de char (caracteres). Sendo
que o tamanho da string deve incluir no final ‘\0’.
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
48
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 48
O exemplo 2.8, mostra o uso da função strcpy que possibilita
copiar os caracteres de uma string para outra variável do tipo string.
Exemplo 2.8 – Copiando uma string para uma variável do tipo string.
As funções apresentadas nestas seções estão no arquivo
cabeçalho <string.h>.
#include <stdio.h>
#include <string.h>
void main (void)
{
char nome1[20],nome2[20];
//Leitura nome1 que será copiada para nome2 
printf (“Digite um nome: “);
gets (nome1);
strcpy (nome2,nome1); //Copia nome1 em nome2
//Continuação do programa
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
49
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 49
A tabela 2.3, mostra algumas funções básicas para manipulação de
strings, seus conceitos e sintaxe na linguagem C:
Tabela 2.3 – Funções de strings.
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
50
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 50
A seguir Programas utilizando as funções da Tabela 2.3.
O exemplo 2.9 mostra como a função gets() trabalha.
Exemplo 2.9 – Função gets().
O exemplo 2.10, mostra como a função strcpy() trabalha.
Exemplo 2.10 – Função strcpy().
#include <stdio.h>
#include <string.h>
void main (void)
{
char nome1[30],nome2[30],nome3[30];
printf (“Entre com uma string: “);
gets (nome1);
//Copia nome1 em nome2
strcpy (nome2,nome1);
// Copia “Você digitou o nome: “ em nome3 
strcpy (nome3,”Você digitou o nome: “);
printf (“\n\n%s%s”,nome3,nome2);
return(0);
}
#include <stdio.h>
void main (void)
{
char nome[30];
printf (“Digite o seu nome: “);
gets (nome);
printf (“\n\n Bom dia %s”, nome);
return(0);
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
51
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 51
O exemplo 2.11, mostra coma a função strcat() trabalha.
Exemplo 2.11 – Função strcat().
#include <stdio.h>
#include <string.h>
void main (void)
{
char nome1[30],nome2[30];
printf (“Entre com uma string: “);
gets (nome1);
strcpy (nome2,”Você digitou o nome:”);
strcat (nome2,nome1);
// Nome2 armazenará “Você digitou o nome: + o conteúdo de nome1” 
printf (“\n\n%s”,nome2);
return(0);
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
52
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 52
O exemplo 2.12, mostra como a função strlen() trabalha.
Exemplo 2.12 – Função strlen().
#include <stdio.h>
#include <string.h>
void main (void)
{
int tam;
char nome[30];
printf (“Entre com um nome: “);
gets (nome);
tam = strlen (nome);
printf (“\n\n O nome que você digitou tem tamanho 
%d”,tam);
return(0);
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
53
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 53
O Exemplo 2.13, mostra como a função strcmp() trabalha:
Exemplo 2.13 - função strcmp()
Obs: Se as duas forem idênticas a função retorna zero, se elas
forem diferentes a função retorna diferente de zero.
#include <stdio.h>
#include <string.h>
void main (void)
{
char nome1[30],nome2[30];
printf (“Entre com um nome: “);
gets (nome1); // ou fgets(nome1,30,stdin)
printf (“\n\n Entre com outro nome: “);
gets (nome2); // ou fgets(nome2,30,stdin)
if (strcmp(nome1,nome2)== 0)
printf (“\n\n As duas strings são iguais.”);
else 
printf (“\n\n As duas strings são diferentes.”);
return(0);
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
54
04_LabLogProgIIBook.qxp6/5/2008 20:54 Page 54
2.4 APLICANDO
Programa 2.1
Problema:
Dado um vetor com 4 posições, construa um programa que atribua
à posição 2 do vetor o valor 10 e preencha as outras posições com
valores fornecidos pelo usuário.
Resolução (Programa 2.1): 
Passo1– Atribuir o valor 10 à segunda posição do vetor;
Passo2– Ler três números inteiros;
Passo3– Armazenar no vetor;
Passo4– Mostrar: posição e valor armazenado.
Programa 2.1 - Atribuir, armazenar e mostrar valores.
#include <stdio.h>
int main(void)
{
int vet[4],i=0; 
while(i<4)
{ 
if (i==1)
vet[1]=10;
else 
{
printf(“\n Informe um valor inteiro: \n “);
scanf(“%d”,&vet[i]);
}
i=i+1;
}
for(i=0;i<4;i++)
{
printf(“\n O valor armazenado é: %d posição: %d do 
vetor\n”,vet[i],i);
} 
return(0); 
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
55
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 55
Programa 2.2
Problema: 
Construa um programa que receba 4 números e mostre a seguinte
saída:
Informe o 1 número
3
Informe o 2 número
4
Informe o 3 número
5
Informe o 4 número
2
Os números digitados foram: 
3 + 4 + 5 + 2 = 14 
Resolução (Programa 2.2): 
Passo1– Criar um vetor de tamanho 4;
Passo2– Atribuir ou ler os valores acima e armazenar seqüencial-
mente no vetor;
Passo3– Somar os valores armazenados no vetor;
Passo4– Mostrar: valores armazenados e o total da soma destes.
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
56
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 56
Programa 2.2. Atribuir, somar e mostrar valores.
Programa 2.3
Problema: 
Construa um programa que carregue um vetor de tamanho 5 com
números reais e crie uma função que retorne esses números ordena-
dos de forma crescente.
Resolução (Programa 2.3): 
Passo1– Criar a função crescente por parâmetro, onde será pas-
sado neste parâmetro o vetor, que irá ordenar crescentemente os
valores reias e exibir a ordenação.
Passo2– Bloco principal: carregar o vetor de tamanho 5 e chamar
a função crescente.
#include<stdio.h>
int main(void)
{
int vet[4],i,soma=0; 
for(i=0;i<4;i++)
{ 
printf(“\n Informe o %d nùmero: \n”,i+1);
scanf(“%d”,&vet[i]);
}
for(i=0;i<4;i++)
soma = soma + vet[i]; 
printf(“\n \n Os números digitados foram: \n”);
printf(“\n %d + %d + %d + %d = %d \n 
\n”,vet[0],vet[1],vet[2],vet[3],soma);
return(0);
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
57
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 57
Programa 2.3 – Mostrar os elementos do vetor ordenados.
#include <stdio.h>
int i;
float vet[4];
crescente (float vet1[4])
{ 
int i,j;
float aux;
for (i=0;i<4;i++)
for (j=0;j<3;j++)
if (vet1[j] > vet1[j+1])
{ aux=vet1[j];
vet1[j]=vet1[j+1];
vet1[j+1]=aux;
}
printf(“\n Vetor ordenado de forma Crescente \n”);
for (i=0;i<4;i++)
printf(“\n %2.2f”,vet1[i]);
}
main(void)
{
for(i=0;i<4;i++)
{ 
printf(“\n Informe o %d número: \n”,i+1);
scanf(“%f”,&vet[i]);
}
crescente(vet);
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
58
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 58
Programa 2.4
Problema: 
Construa um programa que carregue um vetor de caracteres que
receba as siglas dos 12 municípios onde ocorrem as aulas de Tecnologia
em Análise e Desenvolvimento de Sistemas- TADS, ordenando o vetor
de forma crescente.
Entre com os dados conforme a tabela a seguir:
Resolução (Programa 2.4): 
Passo1– Carregar um vetor de tamanho 12 de caracter;
Passo2– Ordenar o vetor de forma crescente;
Passo3– Mostrar os municípios em ordem crescente e suas respec-
tivas posições.
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
59
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 59
Programa 2.4 – Mostrar o nome dos municípios em ordem crescente.
#include <stdio.h>
#include <string.h>
main(void)
{ 
char aux[30], vet[30][12];
int i,j;
for (i=0;i<12;i++)
{ printf(“\n Digite o %d Município:”, i+1);
gets(vet[i]); 
}
for (i=0;i<12;i++)
{ for (j=0;j<11;j++)
{ if (strcmp(vet[j],vet[j+1]) > 0)
{ 
strcpy(aux,vet[j]);
strcpy(vet[j],vet[j+1]);
strcpy(vet[j+1],aux);
}
}
}
printf(“\n Vetor ordenado de forma Crescente \n”);
for (i=0;i<12;i++)
{
printf(“\n %s”,vet[i]);
}
return(0);
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
60
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 60
Programa 2.5
Problema: 
Construa um programa que carregue dois vetores com 4
elementos inteiros e positivos e crie uma função que calcule e mostre
o vetor união dos dois primeiros.
Resolução (Programa 2.5): 
Passo1– Carregar dois vetores de tamanho 4 com números inteiros
e positivos;
Passo2– Criar a função uniao para unificar os dois vetores passa-
dos por parâmetro;
Passo3– Bloco principal: carrega os dois vetores de quatro
posições (vet1 e vet2) em seguida, chama a função uniao e mostra
os elementos dos vetores unificados em um terceiro vetor (vet3)
de 8 posições. 
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
61
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 61
#include <stdio.h>
//Função União - Elementos dos Vetores
void uniao(int a[], int b[], int u[])
{ 
int i;
for (i=0;i<8;i++)
u[i] = -1;
for (i=0;i<4;i++)
{ 
u[i] = a[i];
u[i+4] = b[i];
}
}
//Bloco Principal
int main(void)
{ 
int x, vet1[4], vet2[4], vet3[8];
//Carregando o Vetor 1
for (x=0;x<4;x++)
{
do
{ printf(“\n Digite o %d elemento de A \n”, x+1);
scanf(“%d”,&vet1[x]);
} while (vet1[x]<0);
}
printf(“\n\n”);
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
62
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 62
Programa 2.5 – Mostrar os elementos do vetor união.
//Carregando o Vetor 2
for (x=0;x<4;x++)
{ 
do
{ printf(“\n Digite o %d elemento de B \n”, x+1);
scanf(“%d”,&vet2[x]);
} while (vet2[x]<0);
}
//Chamando a função e passando o vetor por parâmetros 
uniao(vet1,vet2,vet3);
// Mostrando o Vetor União
x=0;
while (x<8)
{ printf(“\n”);
printf(“Vetor União => %d”,vet3[x]);
x++;
}
return(0);
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
63
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 63
Programa 2.6
Problema: 
Construa um programa que carregue um vetor de tamanho 5 com
números inteiros e passe os valores por parâmetro para que a função
retorne e mostre qual é o maior e o menor elemento deles. 
Resolução (Programa 2.6): 
Passo1– Carregar dois vetores de tamanho 5 com números
inteiros;
Passo2– Criar a função maior_menor para verificar qual é o maior
e o menor número armazenado no vetor;
Passo3– Bloco principal: carrega o vetor com 5 elementos inteiros
e chama a função maior_menor que armazenará o maior e o
menor elemento inteiro e exibirá para o usuário.
#include <stdio.h>
void maior_menor(int vet[5])
{ 
int i, maior=0, menor=0;
for(i=0;i<5;i++)
if (i==0)
{ 
maior = vet[i];
menor = vet[i];
}
else
{ if (vet[i] > maior)
maior = vet[i];
if (vet[i] < menor)
menor = vet[i];
}
printf(“ \n O maior número digitado foi: %d”, maior);
printf(“ \n O menor número digitado foi: %d”, menor);
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
64
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 64
Programa 2.6 – Maior e menor valor
void main(void)
{ 
int i,vet[5];for(i=0;i<5;i++)
{
printf(“Carregando o elemento Vetor[%d]: “,i+1);
scanf(“%d”,&vet[i]);
}
maior_menor(vet);
return(0);
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
65
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 65
Programa 2.7
Problema: 
Construa um programa que preencha um vetor com 10 números
inteiros, verifique e mostre os números superiores a cinqüenta e suas
respectivas posições. O programa deverá mostrar mensagem se não
existir nenhum número nessa condição.
Resolução (Programa 2.7): 
Passo1– Carregar um vetor com dez números inteiros;
Passo2– Verifique se existem números superiores a 50;
Passo3– Caso não existam mostre uma mensagem;
Passo4– Mostrar o valor e a sua respectiva posição.
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
66
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 66
Programa 2.7 – Mostrar números superiores a 50.
#include <stdio.h>
main(void)
{ 
int vet[10], i, achou;
for (i=0; i<10;i++)
{ printf(“Digite o %d número: “,i+1);
scanf(“%d”,&vet[i]);
}
achou = 0;
for (i=0; i<10;i++)
{
if (vet[i] > 50)
{ 
printf(“\n Número maior que 50 ==> %d encon-
trado na posição:[%d]”, vet[i],i);
achou = 1;
}
}
if (achou == 0)
printf(“\n Não existem números superiores a 50 no 
vetor”);
return(0);
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
67
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 67
Programa 2.8
Problema: 
Construa um programa que receba 7 números inteiros e mostre:
a) Os números pares digitados;
b) A soma dos números pares digitados;
c) Os números ímpares digitados;
d) A quantidade de números ímpares digitados.
Resolução (Programa 2.8): 
Passo1– Carregar um vetor com sete números inteiros;
Passo2– Verifique os números pares digitados;
Passo3– Somar os números pares;
Passo4– Verifique os números ímpares digitados;
Passo5– Verifique a quantidade de números ímpares;
Passo6– Mostre os valores.
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
68
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 68
#include <stdio.h>
int main(void)
{ 
int num[7], i, soma, qtde, achou;
for (i=0;i<7;i++)
{ printf(“\n Digite o %d elemento \n”, i+1);
scanf(“%d”,&num[i]);
}
soma = 0;
achou = 0;
printf(“\n Os números pares são: \n”);
for (i=0;i<7;i++)
{ if (num[i]%2 == 0)
{ achou = 1;
printf(“\n %d na posição ==> %d \n”,num[i],i);
soma = soma + num[i];
}
}
if (achou == 0)
{ 
printf(“\n Nenhum número par foi digitado \n”);
}
else
{ 
printf(“\n A Soma dos pares = %d \n”,soma);
}
qtde = 0;
achou = 0;
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
69
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 69
Programa 2.8 – Mostrar soma e números pares, quantidade e números ímpares.
Programa 2.9
Problema: 
Construa um programa que ao carregar um vetor com 10 números
inteiros já os armazene de forma decrescente.
Resolução (Programa 2.9): 
Passo1– Carregar um vetor com dez números inteiros;
Passo2– Ordenar o vetor de forma decrescente;
Passo3– Mostrar o vetor ordenado de forma decrescente.
printf(“\n\n Os números ímpares são: \n”);
for (i=0;i<7;i++)
{ if (num[i]%2 != 0)
{achou = 1;
printf(“\n %d na posição %d \n”, num[i], i);
qtde = qtde + 1;
} 
}
if (achou == 0)
printf(“\n Nenhum número ímpar foi digitado \n”);
else
printf(“\n Quantidade dos ímpares = %d \n” , qtde);
return(0);
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
70
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 70
Programa 2.9 – Ordenação de um vetor de forma decrescente
#include <stdio.h>
int main(void)
{ 
int vet[10], i, j, aux;
for (i=0;i<10;i++)
{ printf(“\nDigite o %d elemento do vetor:”, i+1);
scanf(“%d”,&vet[i]);
}
for (i=0;i<10;i++)
{ for (j=0;j<9;j++)
{ if (vet[j] < vet[j+1])
{ 
aux = vet[j];
vet[j] = vet[j+1];
vet[j+1] = aux;
}
}
}
printf(“\n Vetor ordenado de forma Decrescente \n”);
for (i=0;i<10;i++)
{ 
printf(“\n %d”,vet[i]);
}
return(0);
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
71
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 71
Programa 2.10
Problema: 
Construa um programa que preencha um primeiro vetor com dez
números inteiros e um segundo vetor com cinco números inteiros. O
programa deverá mostrar uma lista dos números do primeiro vetor
com seus respectivos divisores armazenados no segundo vetor, bem
como as suas respectivas posições.
Exemplo de Saída do Programa:
Exemplo: resto(5/5) = 0
Resolução (Programa 2.10): 
Passo1– Carregar um vetor com dez números inteiros;
Passo2– Carregar um vetor com cinco números inteiros;
Passo3– Verificar por quais números os elementos do vetor1 são
divisíveis com os elementos do vetor 2;
Passo4– Mostrar uma lista com os números do vetor1 e seus
respectivos divisores do vetor2 e suas respectivas posições.
Obs: Para saber se um número é divisível por outro deve-se
testar o resto.
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
72
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 72
Programa 2.10 – Listar valores divisores.
#include <stdio.h>
int main(void)
{ 
int vet1[10], vet2[5], i, j, achou;
// Carregando Vetores 
for (i=0;i<10;i++)
{
printf(“\n Digite o %d número do vetor 1: \n”, i+1);
scanf(“%d”,&vet1[i]);
}
for (i=0;i<5;i++)
{ printf(“\n Digite o %d número do vetor 2: \n”, i+1);
scanf(“%d”,&vet2[i]);
}
//Verificar se um número é divisível por outro, testar o resto.
for (i=0;i<10;i++)
{ 
achou = 0;
printf(“\n Número: %d \n”, vet1[i]);
for (j=0;j<5;j++)
{
if (vet1[i] % vet2[j] == 0)
{ 
printf(“\n Divisível por %d na posição %d 
\n”,vet2[j],j);
achou = 1;
}
}
if (achou == 0)
printf(“\n Não possui divisores no 2 vetor \n”);
}
return(0);
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
73
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 73
Atividades
2.1- Construa um programa que carregue dois vetores de 4 elementos
cada. Mostre o vetor resultante da intercalação desses dois
vetores.
2.2- Construa um programa que permita criar um vetor de 40 posições
para cada uma das variáveis definidas abaixo:
a) Aluno, Nota1,Nota2, Nota3, Nota4.
Para cada entrada então, calcular a média aritmética de cada
aluno, armazenando-a no vetor média. No final do processamen-
to, imprima todos os nomes de alunos e suas respectivas médias
para todos os alunos que estiverem na situação de APROVADOS,
de acordo com o seguinte critério:
2.3- Construa um programa que armazene 5 nomes próprios. Mostre os
nomes em ordem alfabética.
2.4- Construa um programa que carregue um vetor com seis elemen-
tos inteiros. Calcule e mostre:
a) Todos os números pares;
b) A quantidade de números pares;
c) Todos os números ímpares;
d) A quantidade de números ímpares.
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
74
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 74
2.5– Construa um programa que preencha um vetor com 7 números
inteiros. Calcule e mostre:
a) Os números múltiplos de 2;
b) Os números múltiplos de 3;
c) Os números múltiplos de 2 e 3. 
2.6- Construa um programa que receba o nome de 8 produtos e seus
respectivos preços. Calcule e mostre:
a) A quantidade de produtos com preço inferior a R$ 30,00;
b) O nome dos produtos com preço entre R$ 30,00 e R$80,00;
c) A média dos preços dos produtos com preço superior a R$100,00.
2.7- Construa um programa que leia dois vetores de tamanho 8 e faça
a multiplicação dos elementos de mesmo índice, colocando o
resultado em um terceiro vetor. Mostre o vetor resultante.
2.8- Construa um programa que leia um vetor de tamanho 12 de
números inteiros. Crie um vetor resultante composto pelos
números primos do vetor carregado. Mostre o vetor resultante.
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
75
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 75
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
76
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 76
CAPÍTULO 3
Matrizes
3.1 INTRODUÇÃO
Matriz são variáveis capazes de armazenar vários elementos onde
cada elemento tem a sua identificação caracterizada pelo nome,
sendo as variáveis índices, as que definem sua localização dentro da
estrutura. A variável do tipo matriz é formada por linhas e colunas.
A linguagem C permite a criação e declaração de matrizes unidi-
mensionais (vetores), bidimensionais e multidimensionais.
O padrão ANSI prevê até 12 dimensões. Entretanto, o limite de
dimensões fica por conta da quantidade de recurso disponível ao com-
pilador. Apesar disso, as matrizes mais utilizadas possuem duas dimen-
sões. Para cada dimensão deve ser utilizado um índice. [ASCENCIO 07].
Em uma mesma estrutura de dados de um determinado programa,
podemos ter vetores e matrizes declarados, e cada um armazenando
valores e quantidades distintas, de acordo com a problemática descri-
ta.
3.2 MATRIZ EM C
3.2.1 DECLARANDO
A matriz em C deve ser declarada para que o compilador conheça
a sua dimensão e reserve espaço de memória suficiente para
armazená-la.
Dica:
Para cada matriz criada, especifica-se quantidade e tipo de dado
que será armazenado e onde seus valores estarão consecutiva-
mente, inseridos.
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
77
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 77
As variáveis do tipo matriz são identificadas pela existência de
um, dois, três ou mais colchetes [], dependendo da dimensão da
matriz.
Sintaxe:
Tipo_de_dado Nome_variável [dimensao1] [dimensao2] [...] [dimensaoN];
Onde:
Tabela 3.1 – Definição de termos da sintaxe matriz em C.
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
78
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 78
Exemplos:
float mat[4][6];
Variável Índice:
Em C as variáveis índices começam sempre em 0 (zero). No exem-
plo acima de declaração de matriz, temos uma matriz “mat” bidimen-
sional, contendo 4 linhas (0 a 3) e 6 colunas(0 a 5) cada, capazes de
armazenar números reais. O modelo a seguir demonstra a declaração
descrita do exemplo acima.
mat
//variáveis índices
i, j : inteiro; 
char mat1[4][3];
No exemplo acima de declaração de matriz temos uma matriz
“mat1” bidimensional, contendo 4 linhas (0 a 3) e 3 colunas (0 a 2)
cada, capazes de armazenar caracteres. O modelo a seguir demonstra
a declaração descrita no exemplo2 acima.
//variáveis índices
x, y : inteiro; 
Matriz bidimensional: duas variáveis índices, cada uma respon-
sável por controlar uma dimensão.
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
79
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 79
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
80
mat
No exemplo abaixo, na declaração de matriz, temos uma matriz
“mat2” tridimensional, contendo 2 linhas (0 a 1), 4 colunas(0 a 3) e
profundidade 3 (0 a 2), capazes de armazenar números inteiros.
int mat2[2][4][3];
//Variáveis índices (3 – uma para cada dimensão)
x, y, z : inteiro; 
mat2
3.2.2 ATRIBUINDO
A atribuição de valores em uma matriz requer a identificação
única da dimensão onde os elementos serão inseridos, isso ocorre
através da manipulação de seus índices. Os exemplos a seguir expres-
sam o conceito de atribuição.
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 80
Exemplos:
mat[2][4]=6
Atribui o valor 6 à posição identificada pelos índices 2 (3ª linha) e
4 (5ª coluna).
mat1[3][2]=7
Atribui o valor 7 à posição identificada pelos índices 3 (4ª linha) e
2 (3ª coluna).
mat2 [0][3][1] = 12
Atribui o valor 12 à posição identificada pelos índices 0 (1ª linha),
3 (4ª coluna) e 1 (2ª profundidade).
No exemplo 3.1, mostra a definição de uma matriz 2x2 e atribui
valores a cada uma das posições da matriz.
Exemplo 3.1 – Atribuindo valores diretamente na matriz.
3.2.3 CARREGANDO
Para carregar valores em uma matriz o usuário deverá informar o
elemento a ser inserido; o mesmo será lido e armazenado, sequencial-
mente, na matriz percorrendo linha a linha e coluna a coluna.
#include <stdio.h> 
#include <stdlib.h> 
// Programa atribuir elementos a matriz 
main ()
{
int mat[2][2];
mat[0][0]= 10;
mat[0][1]= 20;
mat[1][0]= 30;
mat[1][1]= 40;
return (0);
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
81
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 81
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
82
Preencher ou carregar uma matriz com elementos significa per-
correr todos os seus índices, atribuindo-lhes um valor, que pode ser
fornecido pelo usuário via teclado atribuído ou gerado pelo programa.
No exemplo 3.2, a matriz bidimensional 3x3 que se chama “mat1”
deverá ser preenchida ou carregada. As variáveis i e j controlam a
posição exata que o elemento será armazenado.
Exemplo 3.2 – Carregando valores em uma matriz.
3.2.4 LENDO
Sintaxe:
scanf (“%tipo”, &nome_matriz[dimensao1] [dimensao2] [dimensaoN]);
Exemplos:
scanf (“%d”,&mat[i] [j]);
ou
scanf (“%d”,&mat[x] [y] [z]);
#include <stdio.h> 
#include <stdlib.h> 
// Programa atribuir elementos a matriz
main (void)
{
int mat[3][3],i,j;
for (i=0;i<3;i++)
for (j=0;j<3;j++) 
{
printf(“\n CARREGANDO A MATRIZ 3X3 -
LINHA[%d]COLUNA[%d]:”,i,j);
scanf(“%d”,&mat[i][j]);
} 
return (0);
}
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 82
3.2.5 MOSTRANDO
Depois de carregar ou atribuir valores em uma matriz então,
pode-se realizar a sua impressão, ou seja, mostrar na tela os valores
armazenados na matriz e suas respectivas posições, se necessário.
Para mostrar os elementos inseridos em uma matriz é preciso uti-
lizar uma estrutura de repetição para ler cada um dos elementos,
sequencialmente, e exibidos na tela.
Sintaxe:
printf (“mensagem e código de formatação”, [dimensao1] 
[dimensao2] [...][dimensaoN]);
ou
printf (“mensagem e código de formatação”, [dimensao1] 
[dimensao2] [...][dimensaoN]);
Exemplos:
printf (“%d”,mat[i] [j] );
ou
printf (“%f”,mat[x] [y] [z] );
O exemplo 3.3, mostra os valores inteiros atribuídos, inicial-
mente, na matriz em suas respectivas posições.
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
83
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 83
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
84
Exemplo 3.3 – Atribuição diretamente na matriz e exibição do mesmo.
3.3 APLICANDO
De acordo com os conceitos vistos anteriormente, vamos resolver
alguns problemas utilizando estruturas de dados compostas
homogêneas do tipo matriz, em linguagem de programação C e uti-
lizando o Eclipse.
A prática é uma das técnicas essenciais para a assimilação da
lógica, os exemplos a seguir visam enriquecer o embasamento
teórico.
Programa 3.1
Problema: 
Construa um programa que carregue uma matriz 2x2 (mat), cal-
cule e mostre a matrizresultante do produto dos elementos de mat
pelo seu maior elemento.
Resolução (Programa 3.1): 
#include <stdio.h> 
#include <stdlib.h> 
//Programa atribuir elementos a matriz 
main (void)
{
int mat[2][2] ,i ,j;
mat[0][0]= 10;
mat[0][1]= 20;
mat[1][0]= 30;
mat[1][1]= 40;
for (i=0;i<2;i++)
{
for (j=0;j<2;j++) 
printf(“ \t [%d] \t “,mat[i][j]);
}
return (0);
} 
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 84
Passo1– Carregar uma matriz mat 2x2;
Passo2– Verificar o maior elemento armazenado na matriz;
Passo3– Fazer o produto do maior elemento com os elementos da
matriz mat;
Passo4– Mostrar a matriz resultante.
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
85
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 85
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
86
Programa 3.1. Mostrar a matriz resultante.
#include <stdio.h>
void main(void)
{ 
int mat[2][2], mat_res[2][2], i, j, maior;
for (i=0;i<2;i++)
for (j=0;j<2;j++)
{
printf(“\n Digite o elemento da linha [%d] 
e coluna [%d]: \n”,i+1,j+1);
scanf(“%d”,&mat[i][j]);
}
maior = mat[0][0];
for (i=0;i<2;i++)
for (j=0;j<2;j++)
{
if (mat[i][j] > maior)
maior = mat[i][j];
}
for (i=0;i<2;i++)
for (j=0;j<2;j++)
mat_res[i][j] = maior * mat[i][j];
printf(“\n Imprimindo a matriz resultante \n”);
for (i=0;i<2;i++)
for (j=0;j<2;j++)
{
printf(“ \t [%d] \t”,mat_res[i][j]);
}
return (0);
}
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 86
Programa 3.2
Problema: 
Construa um programa que carregue uma matriz 4x3 (mat) com as
notas de quatro alunos em três avaliações. O programa deverá mostrar
um relatório com o número de alunos (número da linha) e a avaliação
em que cada aluno obteve menor nota. Ao final do relatório deverá
mostrar quantos alunos tiveram menor nota em cada uma das
avaliações: AV1, AV2 e AV3.
Resolução (Programa 3.2): 
Passo1– Carregar uma matriz 4x3 (mat), com as notas de 4 alunos
em três avaliações;
Passo2– Verificar a quantidade de alunos e a avaliação em que o
mesmo obteve a menor nota;
Passo3– Mostrar quantidade de alunos que obtiveram menor nota
e em que avaliações.
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
87
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 87
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
88
#include <stdio.h>
void main(void)
{
float notas[4][3], menor=0;
int q1, q2, q3, prova_menor, i, j;
for (i=0;i<4;i++)
{
for (j=0;j<3;j++)
{
printf(“\n Digite a %d nota do aluno [%d] \n”, j+1, i+1);
scanf(“%d”,&notas[i][j]);
}
}
q1 = 0;
q2 = 0;
q3 = 0;
for (i=0;i<4;i++)
{
printf(“\n Aluno numero [%d]: \n “,i+1);
menor = notas[i][0];
prova_menor = 0;
for (j=0;j<3;j++)
{
if (notas[i][j] < menor)
{
menor = notas[i][j];
prova_menor = j;
}
}
printf(“\n A menor nota do aluno %d foi na prova : %d \n”, 
i+1 ,prova_menor+1);
if (prova_menor == 0)
q1 = q1 + 1;
if (prova_menor == 1)
q2 = q2 + 1;
if (prova_menor == 2)
q3 = q3 + 1;
}
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 88
Programa 3.2. Mostrar a menor nota tirada nas avaliações.
Programa 3.3
Problema: 
Fazer um programa que preencha um vetor de 12 posições com
números inteiros, em seguida, insira esses valores em uma matriz 3x4
e exiba a matriz preenchida.
Resolução (Programa 3.3): 
Passo1– Preencher o vetor com 12 números inteiros;
Passo2– Preencher a matriz 3x4 com os valores do vetor;
Passo3– Exibir a matriz 3x4.
printf(“\n Quantidade de alunos com menor nota na 
prova 1 = %d \n”,q1);
printf(“\n Quantidade de alunos com menor nota na 
prova 2 = %d \n”,q2);
printf(“\n Quantidade de alunos com menor nota na 
prova 3 = %d \n”,q3);
return (0);
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
89
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 89
Programa 3.3. Preencher uma matriz a partir de um vetor.
#include <stdio.h>
void main(void)
{ 
int vet[12], mat[3][4], i, j, lin, col;
for (i=0;i<12;i++)
{
printf(“\n Digite [%d]-elemento: “,i+1);
scanf(“%d”,&vet[i]);
}
lin = 0;
col = 0;
for (i=0;i<12;i++)
{
mat[lin][col] = vet[i];
col++;
if (col > 3)
{
col = 0;
lin++;
}
}
printf(“\n Matriz 3x4 Preenchida \n”);
for (i=0;i<3;i++)
{
for (j=0;j<4;j++)
{
printf(“\n Linha[%d]- Coluna[%d] => %d \n”,i, j, 
mat[i][j]);
}
}
return (0);
}
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
90
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 90
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
91
Programa 3.4
Problema: 
Construa um programa que carregue uma matriz bidimensional
2x3. Calcule:
a) A soma os elementos de cada linha da matriz;
b) O produto da soma por cada elemento da matriz e mostre o
resultante.
Utilize funções para organizar o código.
Resolução (Programa 3.4): 
Passo1– Criar a função carregar que irá carregar os elementos na
matriz;
Passo2– Criar a função soma_ele que somará os elementos de
cada linha;
Passo3– Criar a função prod que calculará o produto da soma de
cada elemento da matriz;
Passo4– Criar a função mostrar que mostrará a matriz resultante;
Passo5- Bloco principal: chamada das funções.
#include <stdio.h>
// Variáveis globais
float mat[2][3], soma[2];
int i, j;
int carregar()
{
printf(“\n Digite o elemento:”);
for (i=0;i<2;i++)
{
for (j=0;j<3;j++)
{
printf(“\n linha %d com a coluna %d => “,i,j);
scanf(“%f”,&mat[i][j]);
}
}
}
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 91
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
92
Programa 3.4. Soma e produto de elementos.
int soma_ele()
{
// Soma dos Elementos da Matriz
for (i=0;i<2;i++)
{
soma[i] = 0;
for (j=0;j<3;j++)
soma[i] = soma[i] + mat[i][j];
} 
}
float prod()
{
// Produto da Matriz com a soma dos elementos-linhas
for (i=0;i<2;i++)
{
for (j=0;j<3;j++)
mat[i][j] = mat[i][j] * soma[i];
}
}
int mostrar()
{
printf(“\n Imprimindo a matriz resultante”);
for (i=0;i<2;i++)
{
printf( “\n Linha [%d] => \n”, i);
for (j=0;j<3;j++)
printf(“\n %2.0f \n”,mat[i][j]);
}
}
void main(void)
{ 
// Chamando as funções 
carregar();
soma_ele();
prod();
mostrar();
return(0);
}
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 92
Tecologia em Ánalise e
Desenvolvimento de Sistemas
Laboratório de
Lógica de Programação II
93
Programa 3.5
Problema: 
Construa um programa que carregue uma matriz A de ordem 4x5
e uma matriz B de ordem 5x2. O programa deverá também calcular e
mostrar a matriz resultante do produto matricial das duas matrizes
anteriores, armazenado-o em uma terceira matriz C de ordem 4x2.
Resolução (Programa 3.5): 
Passo1– Criar a função carregar_matrizes, para carregar a matriz
A(4x5) e matriz B(5x2);
Passo2– Criar a função mat_res, para calcular o produto das duas
matrizes e armazenar em uma terceira matriz;
Passo3– Criar a função exibir, para mostrar a matriz resultante;
Passo4– Bloco principal: chamada de funções.
04_LabLogProgIIBook.qxp 6/5/2008 20:54 Page 93
#include <stdio.h>
#include <stdlib.h>
#define min1 4
#define min2 5
#define min3 2
int a[min1][min2], b[min2][min3], c[min1][min3], i, j, k,
soma, mult;
int carregar_matrizes(void) 
{
printf( “\n Digitando os elementos da matriz A \n”);
for (i=0;i<min1;i++)
{ for (j=0;j<min2;j++)
{ printf(“\n Digite o elemento [%d]-[%d]=> “, i, j);
scanf(“%d”,&a[i][j]);
}
} 
printf(“\n Digitando os elementos da matriz B \n”);
for (i=0;i<min2;i++)

Outros materiais