DE DADOS
MINISTÉRIO DA EDUCAÇÃO
PRÓ-REITORIA DE ENSINO
DEPARTAMENTO DE EDUCAÇAO À DISTÂNCIA
ESCOLA TÉCNICA ABERTA DO PIAUÍ - ETAPI
CAMPUS TERESINA CENTRAL
ESTRUTURA
ESTRUTURA
DE
DE DADOS
DADOS
DISCIPLINA:
DISCIPLINA:ESTRUTURA
ESTRUTURADE
DEDADOS
DADOS- -90h
90h
PRESIDENTE DA REPÚBLICA
Luiz Inácio Lula da Silva
MINISTRO DA EDUCAÇÃO
Fernando Haddad
GOVERNADOR DO ESTADO
Wellington Dias
APRESENTAÇÃO...................................................................7
Índice Geral.............................................................................9
Índice de Figuras.....................................................................12
AULA 1 INTRODUÇÃO A LING. DE PROGRAMAÇÃO C .... 14
1.1. Apresentação................................................................ 15
1.2. Introdução..................................................................... 15
1.2.1. Características da Linguagem C............................ 16
1.3. A Estrutura Básica de um Programa em C................... 17
1.4. Instruções de Programa................................................ 17
1.4.1. Comentários........................................................... 17
1.5. Uma Visão Geral – Instruções de Entrada e Saída....... 18
1.6. Fundamentos de C....................................................... 18
5.6.1. Diretiva #include.................................................... 19
1.7. Comandos Básicos........................................................ 20
1.7.1. Instruções de Entrada e Saída............................... 20
1.7.2. A Função printf().................................................... 20
1.7.3. A Função scanf().................................................... 21
1.8. Tipos de Dados............................................................. 23
1.9. Variáveis....................................................................... 24
1.9.1. Variáveis................................................................. 24
1.9.2. Inicializando Variáveis............................................ 25
1.9.3. Nomes de Variáveis................................................ 25
1.10. Operadores................................................................. 26
1.10.1. Operadores Aritméticos........................................ 26
1.10.2. Operadores Relacionais e Lógicos...................... 27
1.10.3. Incremento e Decremento.................................... 28
1.11. Tomada de Decisão.................................................... 29
1.11.1. Comando if-else……………………………………. 29
1.11.2. Comando switch……………………………………. 31
1.12. Laço............................................................................ 33
1.12.1. Comando for........................................................ 33
1.12.2. Comando while.................................................... 35
1.12.3. Comando do-while............................................... 35
Exercício.............................................................................. 37
AULA 2 FUNÇÕES, MATRIZES, PONTEIROS e ARQUIVOS....... 39
2.1. Funções........................................................................ 40
2.1.1. Protótipo de uma Função....................................... 42
2.1.2. Função Recursiva.................................................. 43
2.2. Matrizes........................................................................ 44
2.2.1. Referenciação e Atribuição.................................... 45
2.2.2. Inicialização de Matrizes........................................ 45
2.3. Ponteiros....................................................................... 46
2.3.1. Declaração de Ponteiros........................................ 46
2.3.2. Inicialização de Ponteiros...................................... 47
2.4. Arquivos........................................................................ 50
2.4.1. Funções para Manipulação de Arquivos................ 50
2.4.2. Arquivos em Modo Texto........................................ 52
2.4.3. Funções para Ler Dados........................................ 52
2.4.4. Funções para escrever dados................................ 54
2.4.5. Estruturaçã de Dados em Arquivos Texto.............. 55
2.4.6. Acesso Carctere a Caractere.................................. 55
2.4.7. Acesso Linha a Linha............................................. 56
2.4.8. Acesso via Palavras Chaves.................................. 59
2.4.9. Arquivos em Modo Binário..................................... 60
2.4.10. Função para Salvar e Recuperar......................... 60
Exercício.............................................................................. 62
AULA 3- Visão Geral de Estrutura e Lista Lineares................ 66
3.1. Introdução.................................................................... 67
3.2. Conceitos Básicos......................................................... 67
3.3. Tipos de Dados............................................................. 68
3.4. Tipos Abstratos de Dados............................................. 69
3.5. Estruturas de Dados...................................................... 70
3.6. Listas Lineares.............................................................. 71
3.7. Tipos De Listas Lineares ............................................. 72
3.7.1. Lista Estática Desordenada.................................. 73
3.7.2. Lista Estática Ordenada........................................ 83
3.7.3. Lista Dinâmica Desordenada................................ 96
3.7.4. Lista Dinâmica Ordenada..................................... 110
Exercícios....................................................................... 125
AULA 4 - Pilhas...................................................................... 127
4.1. Introdução..................................................................... 128
4.2. Pilha Estática................................................................. 128
4.2.1. Operações Básicas............................................... 128
4.3. Pilha Dinâmica............................................................... 137
4.3.1. Operações Básicas.............................................. 137
Exercícios........................................................................... 148
AULA 5 – Filas e Arvores........................................................ 150
5.1. Introdução à Fila........................................................... 151
5.1.1. Aplicações de Fila no âmbito computacional.......... 152
5.1.2. Formas de Representações das Filas.................... 153
5.2. Fila Estática................................................................... 154
5.2.1. Implementação de Fila Estática na Linguagem C.. 159
5.3. Fila Dinâmica................................................................ 164
5.3.1. Implementação de Fila Dinâmica na Linguagem C 170
5.4. Introdução à Árvore....................................................... 176
5.5. Árvore Binária................................................................ 179
5.5.1. Caminhamento (Percurso) em Árvore Binária........ 183
Exercícios........................................................................... 186
AULA 6 - ORDENAÇÃO e PESQUISA.................................... 189
6.1. Introdução à Ordenação............................................... 190
6.2. Método da Bolha ou BubbleSort.................................... 192
6.2.1. Ordenação de Vetores com Qualquer Informação. 196
6.3. Introdução à Pesquisa.................................................. 201
6.4. Pesquisa Seqüencial.................................................... 202
6.5. Pesquisa Binária........................................................... 204
6.6. Pesquisa em Vetor com Qualquer Informação.............. 207
Exercícios........................................................................... 214
Gabarito dos exercicios da Aulas............................................ 216
Referências Biliográficas........................................................ 242
Índice de Figuras
Meta da Aula
Apresentar a linguagem de
programação C e as suas
principais funcionalidades.
1.1. APRESENTAÇÃO
1.2. INTRODUÇÃO
• Programas Estruturados.
Main( ) {
}
main( ){
1.4.1. COMENTÁRIOS
1.6. FUNDAMENTOS DE C
/* Exemplo Idade */
main() {
int idade;
19
idade = 40;
Sintaxe:
ou
Arquivo Descrição
#include<stdio.h>
#include<conio.h>
main() {
int numero;
numero=10;
printf(“O %d elevado ao quadrado resulta em %d. \n”,
numero,numero*numero);
getch();
}
Código Significado
\b Retrocesso (BackSpace)
\f Salto de Página (Form Feed)
\n Linha Nova (Line Feed)
\t Tabulação Horizontal (TAB)
\x Representação de byte na base hexadecimal
%c - leitura de caracter
%d - leitura de números inteiros
%f - leitura de números reais
%s - leitura de caracteres
Cada variável a ser lida, deverá ser precedida pelo caracter &, por
razões que no momento não convém explicarmos, mas que serão
esclarecidas no decorrer do curso. Para seqüência de caracteres
(%s), o caracter & não deverá ser usado.
main() {
float a;
printf(“Digite um numero: “);
scanf(“%f”,&a);
printf(“%f %e”,a,a);
}
Simulando obtemos:
Digite um numero: 65
65.000000 6.500000E+01
1.9. VARIÁVEIS
1.9.1. VARIÁVEIS
Exemplos:
int i,j,l;
short int si;
double balanco, consolidacao;
char nome[30];
int i=0;
double x=10.5;
Main ( ) {
int evento = 5;
char corrida = ‘c’;
float tempo = 27.25;
printf (“ o melhor tempo da eliminatória % c”, corrida);
printf (“ \ n do evento %d foi % f”, evento, tempo);
}
Simulando obtemos:
o melhor tempo da eliminatória c
do evento 5 foi 27.25
int valor;
double Valor;
1.10. OPERADORES
OPERADORES ARITMÉTICOS
Operador Ação
+ Adição
* Multiplicação
/ Divisão
% Resto de Divisão Inteira
- Subtração o menos unário
-- Decremento
++ Incremento
27
Operador Ação
> Maior que
>= Maior ou igual que
< Menor que
<= Menor ou igual que
== Igual a
!= Diferente de
&& Condição “E”
|| Condição “OU”
! Não
#include<stdio.h>
#include<conio.h>
void main()
clrscr();
float nota1;
float nota2;
float nota3;
28
float media;
scanf("%f",¬a1);
scanf("%f",¬a2);
scanf("%f",¬a3);
media=(nota1+nota2+nota3)/3;
getch();
n = n + 1; /* adiciona 1 a n */
++n; /* adiciona 1 a n */
29
ou
n++; /* adiciona 1 a n */
n = 10;
m = ++n
x = a++
Simulando obtemos:
N=10 M=11
A=10 X=10
I.if
II.if-else
III.switch
30
if <condição>
<comando>;
else
<comando>;
scanf(“%d”,&c);
if (a > b)
if (a > c)
printf(“\nO Maior é %d”,a);
else
printf(“\nO Maior é %d”,c);
else
if (b > c)
printf(“\nO Maior é %d”,b);
else
printf(“\nO Maior é %d”,c);
}
main() {
int a,b,c,d;
clrscr();
printf(“Digite o 1º Número: “);
scanf(“%d”,&a);
printf(“\nDigite o 2º Número: “);
scanf(“%d”,&b);
printf(“\nDigite o 3º Número: “);
scanf(“%d”,&c);
if (a > b)
d = a;
else
d = b;
if (c > d)
printf(“\nO Maior é %d”,c);
else
printf(“\nO Maior é %d”,d);
}
int main()
{
int i;
char sn;
printf("Voce tem mais de 70 anos ? (S/N) ");
scanf("%c",&sn);
switch (sn) {
case 's' :
printf("Voce Esta Velho! \n");
break;
case 'S' :
printf("Voce Esta Velho! \n");
break;
case 'n' :
printf("Voce Esta Adulto! \n");
break;
case 'N' :
33
1.12. LAÇOS
main() {
int cont;
for (cont = 1; cont <= 100; cont++)
printf(“%d”,cont);
34
main() {
int cont,num;
printf(“Digite um Numero: “); scanf(“%d”,&num);
for (cont = 0; cont <= 10; cont++)
printf(“%2d * %2d = %2d \n”,num,cont,num * cont);
}
#include <stdio.h>
#include <stdlib.h>
main() {
int fahr;
float celsius;
for (fahr = 0; fahr <= 300; fahr = fahr + 20) {
printf(“%4d”, fahr);
celsius = (5.0/9.0)*(fahr-32);
printf(“\t%6.1f\n”,celsius);
}
}
while (<condição>) {
<instrução>;
}
Exemplo 1: Contagem de 1 a 100 ficaria
main() {
int cont=0;
while (cont = 100)
cont++;
printf(“%d”,cont);
}
do {
<instrução>;
36
} while (<condição>);
#include <stdio.h>
#include <stdlib.h>
int main() {
int cont=0;
do {
cont++;
printf("%d ",cont);
} while (cont < 100);
system("pause");
}
37
EXERCÍCIO
Resumo da Aula 1
FUNÇÕES, MATRIZES,
PONTEIROS E ARQUIVOS
Aula 2
Meta da Aula
Apresentar a utilização de
funções, Matrizes, ponteiros e
arquivos através da linguagem de
programação C.
capaz de:
1. implementar funções na linguagem C;
2. manipular e implementar matrizes;
3. conceituar e implementar ponteiros;
4. classificar os métodos de manipulação
de ponteiros;
5. conceituar e manipular arquivos;
40
2.1. FUNÇÕES
alo() {
printf(“Alô!\n\n”);
}
41
main() {
int num;
printf(“Digite um numero: “);
scanf(“%d”,&num);
sqr(num); /* sqr recebe “num” do programa principal */
}
sqr() {
int x; /* x é um “parâmetro” recebido do programa principal
no caso x “vale” o conteúdo de num */
printf(“%d ao quadrado e’ %d “,x,x*x);
}
x = 2 * a + 3;
printf(“%d e %d”,x,soma(a));
}
soma(z) {
int z;
x = 2 * x + z;
return(x);
}
#include <stdio.h>
#include <stdlib.h>
int main() {
int num;
printf("Digite um numero: ");
scanf("%d",&num);
sqr(num); /* sqr recebe "num" do programa principal */
system("pause");
}
#include <stdio.h>
#include <stdlib.h>
long fatorial (int);
int main() {
int n;
do {
printf("Digite um nuero ou negativo p/ sair \n");
scanf("%d",&n);
if (n < 0) {
break;
}
printf("O Fatorial de %d eh %d \n",n,fatorial(n));
} while (1);
system("pause");
return 0;
}
2.2. MATRIZES
int mat[5];
45
#include <stdio.h>
#include <stdlib.h>
int main() {
int i;
float nota[3], m=0;
for (i=0;i<3;i++) {
printf("\n Digite a nota %d ", i+1 );
scanf("%f",¬a[i]);
m = m + nota[i];
}
m /= 3;
printf("\n A media e' %.2f \n", m );
system("pause");
return 0;
}
2.3. PONTEIROS
int *ptr
int *ptr;
47
int var;
int *ptr;
var = 10;
ptr = &var;
Acrescentando a linha
E a linha
*ptr = 20;
#include <stdio.h>
#include <stdlib.h>
int main() {
int a;
int b;
int c;
int *ptr; /* declara um ponteiro para um inteiro */
50
2.4. ARQUIVOS
FILE* fp;
fp = fopen("entrada.txt","rt");
if (fp == NULL) {
printf("Erro na abertura do arquivo!\n");
exit(1);
}
na escrita.
}
/* lê caractere a caractere */
while ((c = fgetc(fp)) != EOF) {
if (c == '\n')
nlinhas++;
}
/* fecha arquivo */
fclose(fp);
/* exibe resultado na tela */
printf("Numero de linhas = %d\n", nlinhas);
return 0;
}
else
printf("Nao achou.");
return 0;
}
...
FILE* fp;
char palavra[121];
...
while (fscanf(fp,"%120s",palavra) == 1) {
if (strcmp(palavra,"RETANGULO")==0) {
/* interpreta retângulo */
}
else
if (strcmp(palavra,"TRIANGULO")==0) {
/* interpreta triângulo */
}
else
if (strcmp(palavra,"CIRCULO")==0) {
/* interpreta círculo */
60
}
else
if (strcmp(palavra,"POLIGONO")==0) {
/* interpreta polígono */
}
else {
/* trata erro de formato */
}
}
struct ponto {
float x, y, z;
};
typedef struct ponto Ponto;
A rigor, os tipos int são substituídos pelo tipo size_t, definido pela
biblioteca padrão, sendo, em geral, sinônimo para um inteiro sem
sinal (unsigned int).
62
EXERCICIO
Resumo da Aula 2
VISÃO GERAL DE
ESTRUTURA DE DADOS
E LISTA LINARES
Aula 3
Meta da Aula
capaz de:
1. conceituar Estrutura de Dados;
2. descrever os tipos de Estrutura de
Dados;
3. Implementar as operações básicas da
Estrutura de Dados do tipo Lista estática
e dinâmica de ordenação e
desordenação.
67
3.1. INTRODUÇÃO
I. Inserir Elemento
qa++;
printf("\n\nAluno Inserido com Sucesso!!!\n\n");
}
else { // vetor cheio
printf("\n\n\aNao Pode Inserir - Turma Cheia!!!\n\n");
getche();
break;
}
printf("\n\nInserir outro(1-sim/2-nao)? ");
scanf("%d",&cont);
}while (cont == 1);
}
ele não está no vetor, uma mensagem de erro deve ser dada ao
usuário.
}
else
printf("\n\n\aO aluno nao foi removido!!!\n");
break;
}
else // aluno nao foi encontrado
printf("\n\naNumero de Matricula Incorreto!!!!!!\n");
printf("\n\nRemover outro(1-sim/2-nao)? ");
scanf("%d",&cont);
}while (cont == 1);
}
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
// Programa para executar funcoes de uma lista estatica desordenada
typedef struct {
int mat;
char polo[20];
char nome[31];
}TAlunos;
TAlunos turma[30];
const int maximo= 30;
int qa, op;
//***********************************************************************
void linha() {
int i;
for (i=1;i<=80;i++)
printf("_");
printf("\n");
}
void cabec() {
system("cls");
printf("INSTITUTO FEDERAL DE EDUCACAO, CIENCIA E TECNOLOGIA DO PIAUI\n");
printf("ESCOLA TECNICA DO BRASIL\n");
printf("ESCOLA TECNICA ABERTA DO PIAUI - Lista Estatica Desordenada\n");
80
linha();
}
printf("\nPolo: ");
scanf("%s",&turma[qa].polo);
qa++;
printf("\n\nAluno Inserido com Sucesso!!!\n\n");
}
else { // vetor cheio
printf("\n\n\aNao Pode Inserir - Turma Cheia!!!\n\n");
getche();
break;
}
printf("\n\nInserir outro(1-sim/2-nao)? ");
scanf("%d",&cont);
}while (cont == 1);
}
getche();
}
//Programa principal
main() {
qa =0;
do { // tela com o menu do opcoes
cabec();
printf("Opcoes:\n\n");
printf(" 1- Inserir novo Aluno\n\n");
printf(" 2- Remover Aluno\n\n");
printf(" 3- Consultar Aluno por Matricula\n\n");
printf(" 4- Listagem de Alunos\n\n");
printf(" 0- Sair do Programa\n");
linha();
printf("\n Informe a Opcao desejada: ");
scanf("%d",&op);
switch(op) {
case 1: inserir(); break;
case 2: remover(); break;
case 3: consultarmat(); break;
case 4: listagem(); break;
case 0: break;
default : printf("\n\a Opcao Invalida! Tecle enter...");
getche(); break;
}
} while (op != 0);
}
I. Inserir Elemento
colocarordem();
qa++;
printf("\n\nAluno Inserido com Sucesso!!!\n");
}
else { // vetor cheio
printf("\n\n\aNao Pode Inserir - Turma Cheia!!!\n");
getche();
break;
}
printf("\n\nContinuar inserindo aluno (1-sim/2-nao)? ");
scanf("%d",&cont);
}while (cont == 1);
}
printf("\nConsultar Aluno\n\n");
printf("\nMatricula do Aluno: ");
scanf("%d",&matcon);
achou = procura(matcon);
if (achou!=-1)
mostre(achou);
else
printf("\n\n\aNumero de Matricula Incorreto!!!!!!\n");
printf("\n\nContinuar consultando aluno(1-sim/2-nao)? ");
scanf("%d",&continuar);
}while (continuar == 1);
}
void remover() {
int matrem, i, achou, continuar, conrem;
do{
cabec();
printf("\nRemover Aluno\n\n");
printf("\nMatricula do Aluno: ");
scanf("%d",&matrem);
achou = procura(matrem);
if (achou!=-1) {
mostre(achou);
printf("\nDeseja remover o aluno (1-sim/2-nao)? ");
scanf("%d",&conrem);
if (conrem == 1) {
for (i=achou;i<qa;i++)
turma[i]=turma[i+1];
qa--;
printf("\n\nAluno removido com Sucesso!!!\n");
}
else
printf("\n\n\aO aluno nao foi removido!!!\n");
}
90
else
printf("\n\n\aNumero de Matricula Incorreto!!!!!!\n");
printf("\n\nContinuar removendo aluno (1-sim/2-nao)? ");
scanf("%d",&continuar);
}while (continuar == 1);
}
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void linha() {
int i;
for (i=1;i<=80;i++)
printf("_");
printf("\n");
}
void cabec() {
system("cls");
printf("INSTITUTO FEDERAL DE EDUCACAO, CIENCIA E TECNOLOGIA DO PIAUI\n");
printf("ESCOLA TECNICA DO BRASIL\n");
printf("ESCOLA TECNICA ABERTA DO PIAUI - Lista Estatica Ordenada\n");
linha();
}
int i, local;
local = -1;
if (qa==0)
turma[0] = al;
else {
for (i=0;i<qa;i++) {
if (al.mat<turma[i].mat) {
local = i;
break;
}
}
if (local==-1)
turma[qa] = al;
else {
for (i=qa;i>local;i--)
turma[i]=turma[i-1];
turma[local]=al;
}
}
}
void remover() {
int matrem, i, achou, continuar, conrem;
do{
cabec();
printf("\nRemover Aluno\n\n");
printf("\nMatricula do Aluno: ");
scanf("%d",&matrem);
achou = procura(matrem);
if (achou!=-1) {
mostre(achou);
printf("\nDeseja remover o aluno (1-sim/2-nao)? ");
scanf("%d",&conrem);
if (conrem == 1) {
for (i=achou;i<qa;i++)
turma[i]=turma[i+1];
qa--;
printf("\n\nAluno removido com Sucesso!!!\n");
}
else
printf("\n\n\aO aluno nao foi removido!!!\n");
}
else
printf("\n\n\aNumero de Matricula Incorreto!!!!!!\n");
printf("\n\nContinuar removendo aluno (1-sim/2-nao)? ");
scanf("%d",&continuar);
}while (continuar == 1);
}
printf("\nConsultar Aluno\n\n");
printf("\nMatricula do Aluno: ");
scanf("%d",&matcon);
achou = procura(matcon);
if (achou!=-1)
mostre(achou);
else
printf("\n\n\aNumero de Matricula Incorreto!!!!!!\n");
printf("\n\nContinuar consultando aluno(1-sim/2-nao)? ");
scanf("%d",&continuar);
}while (continuar == 1);
}
//Programa principal
main() {
qa=0;
do {
cabec();
printf("\n Opcoes: \n\n");
printf("\t1- Inserir novo Aluno\n\n");
printf("\t2- Remover Aluno\n\n");
96
I. Inserir Elemento
fim = novono;
}
printf("\n\nInserido com Sucesso!!!!\n");
printf("\nContinuar inserindo (1-sim/2-nao)? ");
scanf("%d",&continuar);
}while (continuar == 1);
}
scanf("%d",&matc);
noatual = inicio;
while(noatual != NULL) {
if (noatual->mat == matc) {
achou = 1;
printf("\n\nMatricula Nome\n");
printf("---------------------------------------\n");
printf("%9d %-20s\n",noatual->mat, noatual->nome);
printf("---------------------------------------\n");
break;
}
else
noatual = noatual->prox;
}
if (achou == 0)
printf("\n\nAluno nao encontrado!!\n");
printf("\nContinuar consultando (1-sim/2-nao)? ");
scanf("%d",&continuar);
}while (continuar == 1);
}
inicio = inicio->prox;
else {
noantrem->prox=noatual->prox;
if (noatual == fim)
fim=noantrem;
}
qa--;
free(noatual);
printf("\n\nRemovido com sucesso!!!!\n");
}
else
printf("\n\nRemocao cancelada\n");
break;
}
else {
noantrem = noatual;
noatual = noatual->prox;
}
}
if (achou == 0)
printf("\n\nAluno nao encontrado!!\n");
printf("\n\nDeseja remover outro (1-sim, 2-nao)? ");
scanf("%d",&continuar);
}while (continuar ==1);
}
noatual = inicio;
cabec();
printf("\nListagem de Alunos\n\n");
if (qa != 0) {
printf("\n\nMatricula Nome\n");
printf("---------------------------------------\n");
while( noatual != NULL) {
printf("%9d %-20s\n",noatual->mat, noatual->nome);
noatual = noatual->prox;
}
printf("---------------------------------------\n");
printf("\n\nQuantidade de Alunos = %d\n",qa);
}
else
printf("\n\n Nao tem nenhum aluno cadastrado");
printf("\n\n\nTecle enter para voltar para o menu\n");
getche();
}
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int mat;
char nome[20];
struct tipo_aluno *prox;
} TAluno;
TAluno *inicio = NULL;
TAluno *fim = NULL;
TAluno *noatual;
int op, qa;
/*****************************************************************/
void linha() {
int i;
for (i=1;i<=80;i++)
printf("_");
printf("\n");
}
void cabec() {
system("cls");
printf("INSTITUTO FEDERAL DE EDUCACAO, CIENCIA E TECNOLOGIA DO PIAUI\n");
printf("ESCOLA TECNICA DO BRASIL\n");
printf("ESCOLA TECNICA ABERTA DO PIAUI - Lista Dinamica Desordenada\n");
linha();
}
gets(nomel);
fflush(stdin);
qa++;
//Aloca memoria para o novo aluno e coloca os dados
novono = (TAluno *)malloc(sizeof(TAluno));
novono->mat = matl;
for (i=0;i<=19;i++)
novono->nome[i] =nomel[i];
novono->prox = NULL;
// Inserir novono na lista de alunos
if (inicio == NULL) {
inicio = novono;
fim = novono;
}
else {
fim->prox = novono;
fim = novono;
}
printf("\n\nInserido com Sucesso!!!!\n");
printf("\nContinuar inserindo (1-sim/2-nao)? ");
scanf("%d",&continuar);
}while (continuar == 1);
}
printf("---------------------------------------\n");
printf("%9d %-20s\n",noatual->mat, noatual->nome);
printf("---------------------------------------\n");
break;
}
else
noatual = noatual->prox;
}
if (achou == 0)
printf("\n\nAluno nao encontrado!!\n");
printf("\nContinuar consultando (1-sim/2-nao)? ");
scanf("%d",&continuar);
}while (continuar == 1);
}
inicio = inicio->prox;
else {
noantrem->prox=noatual->prox;
if (noatual == fim)
fim=noantrem;
}
qa--;
free(noatual);
printf("\n\nRemovido com sucesso!!!!\n");
}
else
printf("\n\nRemocao cancelada\n");
break;
}
else {
noantrem = noatual;
noatual = noatual->prox;
}
}
if (achou == 0)
printf("\n\nAluno nao encontrado!!\n");
printf("\n\nDeseja remover outro (1-sim, 2-nao)? ");
scanf("%d",&continuar);
}while (continuar ==1);
}
}
printf("---------------------------------------\n");
printf("\n\nQuantidade de Alunos = %d\n",qa);
}
else
printf("\n\n Nao tem nenhum aluno cadastrado");
printf("\n\n\nTecle enter para voltar para o menu\n");
getche();
}
//Programa Principal
main() {
qa = 0;
do {
cabec();
printf("\n Opcoes: \n\n");
printf("\t1- Inserir novo Aluno\n\n");
printf("\t2- Remover Aluno\n\n");
printf("\t3- Consultar Aluno\n\n");
printf("\t4- Listagem de Alunos\n\n");
printf("\t0- Sair do Programa\n\n\n");
linha();
printf("Informe a Opcao desejada: ");
scanf("%d",&op);
switch(op) {
case 1: inserir(); break;
case 2: remover(); break;
case 3: consultar(); break;
case 4: listar(); break;
case 0: break;
default : printf("\nOpcao Invalida! Tecle enter...");
getche();
break;
}
}while(op!=0);
noatual = inicio;
while (noatual != NULL) {
110
inicio = noatual->prox;
free(noatual);
noatual = inicio;
}
}
I. Inserir Elemento
printf("\nNome: ");
gets(nomel);
qa++;
//Aloca memoria para o novo aluno e coloca os dados
novono = (TAluno *) malloc(sizeof(TAluno));
novono->mat = matl;
for (i=0;i<=14;i++)
novono->nome[i] =nomel[i];
antinserido = NULL;
// Inserir novono na lista de alunos
if (inicio == NULL) {/* Ainda nao existe nenhum aluno na lista */
inicio = novono;
novono->prox = NULL;
}
else {
noatual = inicio;
if (noatual->mat > matl) {// aluno inserido no inicio da lista
novono->prox = inicio;
inicio = novono;
}
else { // aluno sera inserido no meio ou final da lista
while(noatual != NULL) {
if (noatual->mat < matl) {// procura o local da insercao
antinserido = noatual;
noatual = noatual->prox;
}
else // encontrou o local onde sera inserido
noatual = NULL;
}
novono->prox = antinserido->prox;
antinserido->prox = novono;
}
}
printf("\n\nInserido com Sucesso!!!!\n");
printf("\nContinuar inserindo (1-sim/2-nao)? ");
scanf("%d",&continuar);
}while (continuar == 1); // verifica se quer continuar removendo
}
113
achou = 1;
printf("\n\nMat Nome \n");
printf("----------------------------\n");
printf("%2d %-15s\n", noatual->mat, noatual->nome);
printf("----------------------------\n");
break;
}
else {// procura no proximo aluno
noatual = noatual->prox;
if (noatual != NULL) {
if (noatual->mat > matc)
break;
}
}
}
if (achou == 0) // aluno nao esta na lista
printf("\n\nAluno nao encontrado!!\n\n");
printf("\nContinuar consultando (1-sim/2-nao)? ");
scanf("%d",&continuar);
}while (continuar == 1);
}
printf("\n\nMatricula Nome\n");
printf("----------------------------------------\n");
printf("%9d %-15s\n", noatual->mat, noatual->nome);
printf("----------------------------------------\n");
printf("\n\nDeseja remover o aluno (1-sim, 2-nao)? ");
scanf("%d",&confrem);
if (confrem ==1) {// confirma que quer remover
if (noatual == inicio) // verifica se é o primeiro da lista
inicio = inicio->prox;
else // removido esta no meio ou final da lista
noantrem->prox=noatual->prox;
qa--;
free(noatual); // libera memoria do no removido
printf("\n\n Removido com sucesso!!!!\n");
}
else // cancelou a remocao
printf("\n\n Remocao cancelada\n");
break;
}
else {// passa para o proximo no para continuar a busca
noantrem = noatual;
noatual = noatual->prox;
if (noatual !=NULL) {
if (noatual->mat > matr)
break;
}
}
}
if (achou == 0) // o elemento nao foi encontrado na lista
printf("\n\nAluno nao encontrado!!\n\n");
printf("\n\nDeseja remover outro (1-sim, 2-nao)? ");
scanf("%d",&continuar);
}while (continuar ==1); // continuar removendo aluno
}
117
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void linha() {
int i;
for (i=1;i<=80;i++)
printf("_");
printf("\n");
}
void cabec() {
system("cls");
printf("INSTITUTO FEDERAL DE EDUCACAO, CIENCIA E TECNOLOGIA DO PIAUI\n");
printf("ESCOLA TECNICA DO BRASIL\n");
printf("ESCOLA TECNICA ABERTA DO PIAUI - Lista Dinamica Ordenada\n");
linha();
}
119
}
}
if (achou == 0) // aluno nao esta na lista
printf("\n\nAluno nao encontrado!!\n\n");
printf("\nContinuar consultando (1-sim/2-nao)? ");
scanf("%d",&continuar);
}while (continuar == 1);
}
qa--;
free(noatual); // libera memoria do no removido
printf("\n\n Removido com sucesso!!!!\n");
}
else // cancelou a remocao
printf("\n\n Remocao cancelada\n");
break;
}
else {// passa para o proximo no para continuar a busca
noantrem = noatual;
noatual = noatual->prox;
if (noatual !=NULL) {
if (noatual->mat > matr)
break;
}
}
}
if (achou == 0) // o elemento nao foi encontrado na lista
printf("\n\nAluno nao encontrado!!\n\n");
printf("\n\nDeseja remover outro (1-sim, 2-nao)? ");
scanf("%d",&continuar);
}while (continuar ==1); // continuar removendo aluno
}
printf("----------------------------------------\n");
printf("\n\nQuantidade de Alunos: %d\n",qa);
}
else
printf("\n\nNao tem nenhum aluno cadastrado");
printf("\n\nTecle enter para voltar para o menu...");
getche();
}
// Programa principal
main() {
qa = 0;
do {
cabec();
printf("\nOpcoes: \n\n");
printf(" 1 - Inserir novo aluno\n");
printf(" 2 - Consultar aluno\n");
printf(" 3 - Remover aluno\n");
printf(" 4 - Listar todos os alunos\n");
printf(" 0 - para sair \n\n");
printf("Entre com a sua opcao: ");
scanf("%d", &op); /* Le a opcao do usuario */
switch(op) {
case 1: inserir(); break;
case 2: consultar();break;
case 3: remover(); break;
case 4: listar(); break;
case 0: break;
default: printf("\n\n Opcao invalida"); getche(); break;
}
fflush(stdin); /* Limpa o buffer de entrada */
} while (op != 0);
/* Desaloca a memoria alocada para os elementos da lista */
noatual = inicio;
while (noatual != NULL) {
inicio = noatual->prox;
free(noatual);
124
noatual = inicio;
}
}
125
EXERCÍCIO
Resumo da Aula 3
Aula 4 127
Meta da Aula
Apresentar a Estrutura de Dados do
tipo Pilha da forma estatica e
dinâmica e descrever e implementar
suas operações básicas.
4.1. INTRODUÇÃO
4.2.1.OPERAÇÕES BÁSICAS
I. Inserir Elemento
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
/***********************************************************************/
void linha() {
int i;
for (i=1;i<=80;i++)
printf("_");
printf("\n");
}
void cabec() {
system("cls");
134
PIAUI\n");
if (tampilha != 0) {
printf("\n\nCod Titulo \n");
printf("----------------------------------------------------\n");
printf("%2d %-20s \n", livro[tampilha-1].codigo, livro[tampilha-
1].titulo);
printf("-----------------------------------------------------\n");
}
else
printf("\n\nA pilha esta vazia!!\n\n");
printf("\n\nTecle enter para voltar para o menu\n");
getche();
}
scanf("%d",&continuar);
}while (continuar ==1); // continuar retirando livro da pilha
}
4.3.1.OPERAÇÕES BÁSICAS
I. Inserir Elemento
printf("-----------------------------------------------------\n");
printf("%6d %-20s \n", inicio->codigo, inicio->titulo);
printf("-----------------------------------------------------\n");
}
else
printf("\nA pilha está vazia!!\n\n");
printf("\n\nTecle enter para voltar para o menu\n");
getche();
}
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
} TLivro;
TLivro *inicio = NULL; /* Ponteiro para o inicio da pilha */
TLivro *noatual; /* Ponteiro a ser usado para percorrer a pilha*/
int op, tampilha;
/*************************************************************************/
void linha() {
int i;
for (i=1;i<=80;i++)
printf("_");
printf("\n");
}
void cabec() {
system("cls");
printf("INSTITUTO FEDERAL DE EDUCACAO, CIENCIA E TECNOLOGIA DO
PIAUI\n");
tampilha++;
//Aloca memoria para o novo livro
novono = (TLivro *) malloc(sizeof(TLivro));
novono->codigo = codl;
for (i=0;i<=29;i++)
novono->titulo[i] =titl[i];
novono->prox = inicio;
inicio = novono;
printf("\n\nInserido com Sucesso!!!!\n\n");
printf("\nContinuar inserindo (1-sim/2-nao)? ");
scanf("%d",&continuar);
}while (continuar == 1); // verifica se quer continuar inserindo
livros
}
//Programa principal
main() {
tampilha= 0;
do {
cabec();
printf("\nOpcoes: \n");
printf("\n 1 - Inserir livro na pilha");
printf("\n 2 - Consultar topo da pilha");
printf("\n 3 - Retirar livro do topo");
printf("\n 4 - Listar todos os livros da pilha");
printf("\n 0 - Sair \n");
linha();
printf("\nEntre com a sua opcao: ");
scanf("%d", &op); /* Le a opcao do usuario */
switch(op) {
case 1: inserir(); break;
case 2: consultatopo();break;
case 3: retirapilha(); break;
case 4: listar(); break;
case 0: break;
default: printf("\n\n Opcao invalida");
getche();
break;
}
} while (op != 0);
147
noatual = inicio;
while (noatual != NULL) {
inicio = noatual->prox;
free(noatual);
noatual = inicio;
}
}
148
EXERCÍCIO
• Remoção;
• Remoção;
• Remoção;
• Inserção do elemento A;
• Inserção do elemento B;
• Remoção;
• Inserção do elemento WW;
FILA E ÁRVORE
Aula 5
Meta da Aula
capaz de:
1. conceituar Fila;
2. conhecer e identificar uma Fila
Estática;
3. conhecer e identificar uma Fila
Dinâmica;
4. implementar Fila Estática e Dinâmica
na linguagem C;
5. conceituar Árvore e Árvore Binária;
6. reconhecer os percursos em árvores
binárias.
151
I. Fila Vazia :
No início o vetor está vazio, ou seja, fila vazia;
void inserir () {
int continuar;
do {
printf("\n Chegada de novo aluno na fila \n");
printf("\n Numero da Matricula: ");
scanf("%d",&Al.Matricula);
156
void consultarprimeiro() {
cabec();
printf("\nConsulta primeiro aluno da fila\n");
if (tamfila != 0) {
157
void retirafila() {
int i, confrem, continuar;
do{
printf("\nRetira primeiro aluno da fila \n");
if (tamfila != 0) {
printf("\n\nMatricula Nome Polo\n");
printf("-----------------------------------------\n");
printf("%4d %-15s %2d\n", Aluno[0].Matricula,
Aluno[0].Nome, Aluno[0].Polo);
printf("---------------------------------------------------\n");
printf("\n\n Confirma retirada do aluno (1-sim, 2-nao)? ");
scanf("%d",&confrem);
if (confrem ==1) {
for (i=0; i<tamfila; i++)
Aluno[i] = Aluno[i+1];
tamfila--;
printf("\n\n Aluno retirado da fila com
sucesso!!!!\n\n");
}
else
printf("\n\n Retirada cancelada\n\n");
}
else
printf("\n\nFila vazia!!\n\n");
printf("\n\nDeseja retirar outro aluno(1-sim, 2-nao)? ");
scanf("%d",&continuar);
}while (continuar ==1);
}
159
void listar () {
int i;
cabec();
printf("\nListagem de alunos da fila\n");
if (tamfila != 0) {
printf("\nMatricula Nome Polo\n");
printf("--------------------------------------------\n");
for (i=0;i<tamfila;i++)
printf("%4d %-15s %2d\n",
Aluno[i].Matricula, Aluno[i].Nome, Aluno[i].Polo);
printf("--------------------------------------------------\n");
printf("\n\nQuantidade de alunos na fila = %d\n",tamfila);
}
else
printf("\n\n Nao tem nenhum aluno na fila");
printf("\n\n\nTecle enter para voltar para o menu\n");
getche();
}
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void linha() {
int i;
for (i=1;i<=80;i++)
printf("_");
printf("\n");
}
void cabec() {
system("cls");
printf("INSTITUTO FEDERAL DE EDUCACAO, CIENCIA E TECNOLOGIA DO PIAUI\n");
printf("ESCOLA TECNICA DO BRASIL\n");
printf("ESCOLA TECNICA ABERTA DO PIAUI\n");
printf(" SISTEMA DE MATRICULA - Fila Estatica *\n");
linha();
161
printf("-----------------------------------------------\n");
}
else
printf("\n\nA fila está vazia!!\n\n");
printf("\n\nTecle enter para voltar para o menu\n");
getche();
}
// Programa principal
main() {
tamfila= 0;
do {
cabec();
printf("\nOpcoes: ");
printf("\n\n 1 - Inserir Aluno na fila");
printf("\n\n 2 - Consultar primeiro Aluno da fila");
printf("\n\n 3 - Retirar Aluno da fila");
printf("\n\n 4 - Listar todos os Alunos da fila");
printf("\n\n 0 - para sair \n");
linha();
printf("\nEntre com a sua opcao: ");
scanf("%d", &op); /* Le a opcao do usuario */
switch(op) {
164
I. Inserir Elemento
void inserir () {
TAluno *novono;
int i, Matriculal, Polol, continuar;
char Nomel[15];
do{
printf("\n Chegada de novo aluno na fila \n");
printf("\n Numero da Matricula: ");
scanf("%d",&Matriculal);
printf("\n Nome: ");
fflush(stdin);
gets(Nomel);
printf("\n Polo do Aluno(1- Batalha, 2- Valenca): ");
scanf("%d",&Polol);
tamfila++;
novono = (TAluno *) malloc(sizeof(TAluno));
novono->Matricula = Matriculal;
for (i=0;i<=14;i++)
novono->Nome[i] =Nomel[i];
novono->Polo = Polol;
novono->prox = NULL;
void consultarprimeiro() {
printf("\nConsulta primeiro aluno da fila\n\n");
noatual = inicio; // coloca ponteiro no inicio da lista
if (noatual != NULL) {
printf("\n\n Matricula Nome Polo\n");
printf("------------------------------------------------\n");
printf("%4d %-15s %2d\n", noatual->Matricula,
noatual->Nome, noatual->Polo);
printf("--------------------------------------------------\n");
}
else
printf("\nA fila está vazia!!\n\n");
printf("\n\nTecle enter para voltar para o menu\n");
getche();
}
void retirafila() {
int confrem, continuar;
do{
printf("\nRetira primeiro Aluno da fila \n\n");
noatual = inicio;
if (noatual != NULL) {
printf("\n\nMatricula Nome Polo\n");
printf("-------------------------------------------\n");
printf("%4d %-15s %2d\n", noatual->Matricula,
noatual->Nome, noatual->Polo);
printf("----------------------------------------------\n");
printf("\n\nconfirma retirada do aluno (1-sim, 2-nao)? ");
scanf("%d",&confrem);
if (confrem ==1) {
inicio = inicio->prox;
free(noatual);
tamfila--;
printf("\n\n Retirado da fila com sucesso!!!!\n\n");
169
}
else
printf("\n\n Retirada cancelada\n\n");
}
else // fila vazia
printf("\n\nFila vazia!!\n\n");
printf("\n\nDeseja retirar outro Aluno(1-sim, 2-nao)? ");
scanf("%d",&continuar);
}while (continuar ==1); // continuar retirando cliente da fila
}
void listar () {
noatual = inicio;
cabec();
printf("\nListagem de Aluno da fila\n\n");
if (tamfila != 0) {
printf("\nMatricula Nome Polo\n");
printf("------------------------------------------\n");
while( noatual != NULL) {
printf("%4d %-15s %2d\n", noatual->Matricula,
noatual->Nome, noatual->Polo);
noatual = noatual->prox;
}
printf("---------------------------------------------------\n");
printf("\n\nQuantidade de Aluno na fila = %d\n",tamfila);
170
}
else
printf("\n\n Nao tem nenhum aluno na fila");
printf("\n\n\nTecle enter para voltar para o menu\n");
getche();
}
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
/*************************************************************************/
void linha() {
int i;
for (i=1;i<=80;i++)
printf("_");
printf("\n");
}
void cabec() {
system("cls");
printf("INSTITUTO FEDERAL DE EDUCACAO, CIENCIA E TECNOLOGIA DO PIAUI\n");
printf("ESCOLA TECNICA DO BRASIL\n");
printf("ESCOLA TECNICA ABERTA DO PIAUI\n");
printf(" SISTEMA DE MATRICULA - Fila Estatica \n");
linha();
}
tamfila++;
printf("--------------------------------------------------\n");
}
else
printf("\nA fila está vazia!!\n\n");
printf("\n\nTecle enter para voltar para o menu\n");
getche();
}
// Programa principal
main() {
tamfila= 0;
do {
cabec();
printf("\nOpcoes: ");
printf("\n\n 1 - Inserir Aluno na fila");
printf("\n\n 2 - Consultar primeiro Aluno da fila");
printf("\n\n 3 - Retirar Aluno da fila");
printf("\n\n 4 - Listar todos os Alunos da fila");
175
2) Diagrama de inclusão
178
3) Representação hierárquica
Se, por exemplo, n1 for a raiz de uma árvore binária e n2 for a raiz
da sua sub-árvore direita ou esquerda, então diz-se que n1 é o pai
de n2, e que n2 é o filho direito ou esquerdo de n1. O nó n2 é um
descendente de n1 e n1 é o seu ascendente. Um nó que não
tenha filhos é uma folha. Dois nós são irmãos se são os filhos
direito e esquerdo do mesmo pai. Nível de um nó numa árvore
binária: a raiz da árvore tem nível 1. O nível de outro nó qualquer
é uma unidade mais que o nível do pai. Uma árvore binária
completa de nível n é uma árvore em que cada nó de nível “n” é
181
uma folha e em que todos os nós de nível menor que “n” têm
sub-árvores direita e esquerda não vazias.
EXERCÍCIO
• Remoção;
• Inserção do elemento XX;
• Inserção do elemento ZZ;
• Remoção;
• Inserção do elemento WW;
• Remoção;
Resumo da Aula 5
Aula 6 191
Meta da Aula
Apresentar o método de
ordenação: Bolha ou BubbleSort.
E estratégias de pesquisa:
Seqüencial e Binária.
/* Função Principal */
/* Testa Algoritmo de Ordenação Bolha */
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
// estatica
typedef struct {
int mat;
char nome[31], sit;
float nota1, nota2, media;
}alunos;
alunos turma[30];
float soma;
int qa, ap,rp,op;
void linha() {
int i;
for (i=1;i<=80;i++)
printf("_");
printf("\n");
}
void cabec() {
system("cls");
printf("INSTITUTO FEDERAL DE EDUCACAO, CIENCIA E TECNOLOGIA DO PIAUI\n");
printf("ESCOLA TECNICA DO BRASIL\n");
printf("ESCOLA TECNICA ABERTA DO PIAUI\n");
printf("Ordenacao pelo Método da Bolha\n");
linha();
200
void bolha() {
201
getche();
}
//Programa principal
main() {
op = 1;
soma = 0;
ap = rp = qa =0;
while (op != 0) {
cabec();
printf("Opcoes: \n\n");
printf(" 1- Inserir Aluno\n\n");
printf(" 2- Ordenacao Bolha\n\n");
printf(" 3- Listagem\n\n");
printf(" 0- Sair do Programa\n");
linha();
printf(" Informe a Opcao desejada: ");
scanf("%d",&op);
switch(op) {
case 1: inserir(); break;
case 2: bolha(); break;
case 3: listagem(); break;
case 0: break;
default: printf("\nOpcao Invalida!!!!"); getche();break;
}
}
}
203
#include <stdio.h>
#include <conio.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
typedef struct {
int mat;
char nome[31], sit;
float nota1, nota2, media;
}alunos;
alunos turma[30];
float soma;
int qa, ap,rp,op;
void linha() {
int i;
for (i=1;i<=80;i++)
printf("_");
printf("\n");
}
void cabec() {
system("cls");
printf("INSTITUTO FEDERAL DE EDUCACAO, CIENCIA E TECNOLOGIA DO
PIAUI\n");
linha();
}
printf("\n--------------------------------------------------");
printf("\n%2d %-20s %5.2f %5.2f %5.2f %c",
turma[meio].mat, turma[meio].nome,
turma[meio].nota1, turma[meio].nota2,
turma[meio].media, turma[meio].sit);
printf("\n--------------------------------------------------");
achou = 1;
break;
}
if (matcon >turma[meio].mat)
inicio = meio +1;
else
fim = meio -1;
}
if (achou == 0)
printf("\n\n\tNumero de Matricula Incorreto!!!!!!\n\n");
printf("\n\n\tContinuar consultando aluno(1-sim/2-nao)? ");
scanf("%d",&continuar);
}while (continuar == 1);
}
break;
}
}
if (achou!=-1) {
printf("\nMat Aluno Nota1 Nota2 Media Sit");
printf("\n--------------------------------------------------");
printf("\n%2d %-20s %5.2f %5.2f %5.2f %c",
turma[achou].mat,turma[achou].nome,
turma[achou].nota1, turma[achou].nota2,
turma[achou].media,turma[achou].sit);
printf("\n--------------------------------------------------");
}
else
printf("\n\n\tNumero de Matricula Incorreto!!!!!!\n\n");
printf("\n\n\tContinuar consultando aluno(1-sim/2-nao)? ");
scanf("%d",&continuar);
}while (continuar == 1);
}
//Programa principal
main() {
op = 1;
soma = 0;
ap = rp = qa =0;
while (op != 0) {
cabec();
printf("Opcoes: \n\n");
printf(" 1- Inserir Aluno\n\n");
printf(" 2- Ordenacao Bolha\n\n");
printf(" 3- Busca Sequencial\n\n");
printf(" 4- Busca Binaria\n\n");
printf(" 5- Listagem\n\n");
printf(" 0- Sair do Programa\n");
linha();
printf(" Informe a Opcao desejada: ");
scanf("%d",&op);
switch(op) {
case 1: inserir(); break;
case 2: bolha(); break;
case 3: sequencial(); break;
case 4: binaria(); break;
case 5: listagem(); break;
case 0: break;
default: printf("\nOpcao Invalida!!!!"); getche();break;
}
}
}
216
EXERCÍCIO
Resumo da Aula 6
#include <stdio.h>
#include <stdlib.h>
int main() {
printf("Otilio Paulo \n");
system("pause");
return 0;
}
2. Some 10 com 15 e imprima na tela a seguinte frase: “O
resultado da soma é: “ mostrando o resultado.
#include <stdio.h>
#include <stdlib.h>
int main() {
int x = 10;
int y = 15;
printf("O resultado da soma e': %d \n", x+y);
system("pause");
return 0;
}
3. Faça a multiplicação entre 10 e 15 e mostre na tela o
resultado.
#include <stdio.h>
#include <stdlib.h>
int main() {
int x = 10;
int y = 15;
printf("O resultado da multiplicacao e': %d \n", x*y);
system("pause");
return 0;
}
4. Elabore programa que pergunte o seu nome e imprima na
tela.
#include <stdio.h>
#include <stdlib.h>
int main() {
char nome[20];
printf("Digite seu nome: " );
scanf("%s", nome);
printf("\n Seu nome e': %s \n", nome );
219
system("pause");
return 0;
}
5. Perguntar o nome da pessoa e o sobrenome e imprimir na
tela o nome sobrenome
#include <stdio.h>
#include <stdlib.h>
int main() {
char nome[20];
char sobrenome[20];
printf("Digite seu nome: " );
scanf("%s", nome);
printf("Digite seu sobrenomenome: " );
scanf("%s", sobrenome);
printf("\n Seu nome e': %s %s \n", nome, sobrenome);
system("pause");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main() {
float x;
float y;
printf("Digite um numero : ");
scanf("%f", &x);
printf("Digite outro numero: ");
scanf("%f", &y);
printf("\n O Produto e': %.2f \n", x*y);
system("pause");
return 0;
}
7. Leia dois números e apresenta a sua subtração.
#include <stdio.h>
#include <stdlib.h>
int main() {
float x;
float y;
printf("Digite um numero : ");
scanf("%f", &x);
printf("Digite outro numero: ");
scanf("%f", &y);
printf("\n O Subtracao e': %.2f \n", x-y);
system("pause");
return 0;
}
8. Leia o nome e as duas notas de um aluno. Apresente seu
nome e sua média.
#include <stdio.h>
#include <stdlib.h>
int main() {
char nome[20];
float n1=0;
float n2=0;
220
float n3=0;
float media=0;
printf("Digite seu nome: " );
scanf("%s", nome);
printf("Digite a Nota 1: ");
scanf("%f", &n1);
printf("Digite a Nota 2: ");
scanf("%f", &n2);
printf("Digite a Nota 3: ");
scanf("%f", &n3);
media = (n1+n2+n3)/3;
printf("\n O seu nome e' : %s \n", nome);
printf("E a sua media e': %.2f \n", media);
system("pause");
return 0;
}
9. Dados 3 números, imprima o maior deles e o menor deles.
#include <stdio.h>
#include <stdlib.h>
int main() {
float n1=0;
float n2=0;
float n3=0;
printf("Digite o nuemro 1: ");
scanf("%f", &n1);
printf("Digite o nuemro 2: ");
scanf("%f", &n2);
printf("Digite o nuemro 3: ");
scanf("%f", &n3);
if ((n1>n2) && (n1>n3)) {
printf("O nuemro maior e': %.2f \n", n1);
}
if ((n2>n1) && (n2>n3)) {
printf("O nuemro maior e': %.2f \n", n2);
}
if ((n3>n1) && (n3>n2)) {
printf("O nuemro maior e': %.2f \n", n3);
}
system("pause");
return 0;
}
10. Elabore programa que leia “n” números digitados e
apresente sua média.
#include <stdio.h>
#include <stdlib.h>
int main() {
int n=0, i=0;
float media=0, soma=0;
printf("Digite a quantidade de nuemro para a media: ");
scanf("%d", &n);
float n1[n];
for (i=0;i<n;i++) {
printf("Digite o nuemro %d: ",i+1);
scanf("%f", &n1[i]);
soma += n1[i];
}
media = soma/n;
printf("A media e: %.2f : ",media);
system("pause");
221
return 0;
}
222
float esfera(float);
int main() {
float volume,raio;
printf("Didite o Raio da Esfera: ",raio);
scanf("%f",&raio);
volume=esfera(raio);
printf("O volume e': %.2f \n",volume);
system("pause");
return 0;
float esfera(float a) {
float raioTotal;
raioTotal = a*a*a;
return raioTotal;
}
float inverte(float);
int main() {
int zend;
int *ptr;
printf("Didite um valor para zend: ");
scanf("%d",&zend);
ptr = &zend;
printf("\n O Endereco da variavel zende e': %p \n",ptr);
system("pause");
return 0;
void cabec() {
system("cls");
printf("Lista Dinamica Desordenada\n");
}
void consultar() {
int codc, continuar, achou=0;
do{
cabec();
printf("\nConsulta cliente pelo numero de codigo\n\n");
printf("\nCodigo: ");
scanf("%d",&codc);
noatual = inicio;
while(noatual != NULL) {
if (noatual->codigo == codc) {
achou = 1;
printf("\n\nCodigo Cliente\n");
printf("--------------------------\n");
printf("%9d %-20s\n",noatual->codigo, noatual-
>nome);
printf("---------------------------------------\n");
break;
}
else
noatual = noatual->prox;
}
if (achou == 0)
printf("\n\nCliente nao encontrado!!\n");
printf("\nContinuar consultando (1-sim/2-nao)? ");
scanf("%d",&continuar);
}while (continuar == 1);
}
if (noatual == inicio)
inicio = inicio->prox;
else {
noantrem->prox=noatual->prox;
if (noatual == fim)
fim=noantrem;
}
qa--;
free(noatual);
printf("\n\nRemovido com sucesso!!!!\n");
}
else
printf("\n\nRemocao cancelada\n");
break;
}
else {
noantrem = noatual;
noatual = noatual->prox;
}
}
if (achou == 0)
printf("\n\nCliente nao encontrado!!\n");
printf("\n\nDeseja remover outro Cliente(1-sim, 2-nao)?
");
scanf("%d",&continuar);
}while (continuar ==1);
}
//Programa Principal
228
main() {
qa = 0;
do {
cabec();
printf("\t\n Opcoes: \n\n");
printf("\t1- Inserir novo Cl,iente\n\n");
printf("\t2- Remover Cliente\n\n");
printf("\t3- Consultar Cliente\n\n");
printf("\t4- Listagem de Clientes\n\n");
printf("\t0- Sair do Programa\n\n\n");
printf("Informe a Opcao desejada: ");
scanf("%d",&op);
switch(op) {
case 1: inserir(); break;
case 2: remover(); break;
case 3: consultar(); break;
case 4: listar(); break;
case 0: break;
default : printf("\nOpcao Invalida! Tecle enter...");
getche();
break;
}
}while(op!=0);
noatual = inicio;
while (noatual != NULL) {
inicio = noatual->prox;
free(noatual);
noatual = inicio;
}
}
8. Construa um programa na Linguagem C que represente uma
Lista Dinâmica Desordenada, que possua como campos:
código, nome do cliente. Neste programa será necessário
criar um menu que tenha INSERIR, REMOVER, LISTAR,
CONSULTA. OBSERVAÇÃO: Implemente um contador de
registros inseridos e que o mesmo deverá ser decrementado
quando a informação foi excluída.
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
// Programa para executar funcoes de uma lista estatica
desordenada
typedef struct {
int codigo;
char nome[30];
229
}TClientes;
TClientes cad_cliente[30];
const int maximo= 30;
int qa, op;
void cabec() {
system("cls");
printf("Lista Estatica Desordenada\n");
}
qa++;
printf("\n\nCliente Inserido com Sucesso!!!\n\n");
}
else { // vetor cheio
printf("\n\n\aNao Pode Inserir - Memória Cheia!!!\n\n");
230
getche();
break;
}
printf("\n\nInserir outro cliente(1-sim/2-nao)? ");
scanf("%d",&cont);
}while (cont == 1);
}
scanf("%d",&cont);
} while (cont == 1);
}
//Programa principal
main() {
qa =0;
do { // tela com o menu do opcoes
cabec();
printf("\n\tOpcoes:\n\n");
printf(" 1- Inserir novo Cliente\n\n");
printf(" 2- Remover Cliente\n\n");
printf(" 3- Consultar Cliente por código\n\n");
printf(" 4- Listagem de Clientes\n\n");
printf(" 0- Sair do Programa\n");
printf("\n Informe a Opcao desejada: ");
scanf("%d",&op);
switch(op) {
case 1: inserir(); break;
case 2: remover(); break;
case 3: consultarmat(); break;
case 4: listagem(); break;
case 0: break;
default : printf("\n\a Opcao Invalida! Tecle enter...");
getche(); break;
}
} while (op != 0);
}
232
1. Questão : LIFO
2. Questão
a. 3 elementos
b. Continua com 10 posições
c.
3. Questão
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
TPessoa nome[10];
TPessoa nl;
int op, tampilha;
void cabec() {
system("cls");
printf("Pilha de Pessoas - Estatica\n");
}
233
}
else // cancelou a remocao
printf("\n\n Retirada cancelada\n\n");
}
else // pilha vazia
printf("\n\nPilha vazia!!\n\n");
printf("\n\nDeseja retirar outra Pessoa(1-sim, 2-nao)? ");
scanf("%d",&continuar);
}while (continuar ==1); // continuar retirando Pessoas da pilha
}
/* Lista todas Pessoas da pilha */
void listar () {
int i;
cabec();
printf("\nListagem das pessoas da pilha\n");
if (tampilha != 0) {
printf("\n\nPessoas \n");
printf("----------------------------------\n");
for (i=tampilha-1;i>=0;i--)
printf("%6s \n", nome[i].nomes);
printf("------------------------------------\n");
printf("\n\nQuantidade de Pessoas na pilha =
%d\n",tampilha);
}
else
printf("\n\n Nao tem nenhuma Pessoa na pilha");
printf("\n\n\nTecle enter para voltar para o menu\n");
getche();
}
// Programa principal
main() {
tampilha= 0;
do {
cabec();
printf("\nOpcoes: \n");
printf("\n 1 - Inserir Pessoa na pilha");
printf("\n 2 - Consultar topo da pilha");
printf("\n 3 - Retirar Pessoa do topo");
printf("\n 4 - Listar todas Pessoas da pilha");
printf("\n 0 - Sair \n");
printf("\nEntre com a sua opcao: ");
scanf("%d", &op); /* Le a opcao do usuario */
switch(op) {
case 1: inserir(); break;
case 2: consultatopo();break;
case 3: retirapilha(); break;
case 4: listar(); break;
case 0: break;
default: printf("\n\n Opcao invalida");
getche();
break;
}
} while (op != 0);
}
235
4. Questão
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void cabec() {
system("cls");
printf("Pilha de Pessoas - Dinamica\n");
}
do{
cabec();
printf("\nColocar Nome da Pessoa no topo da pilha \n");
printf("\nNome do Pessoa: ");
fflush(stdin);
gets(nome);
tampilha++;
//Aloca memoria para a nova pessoa
novono = (TPessoa *) malloc(sizeof(TPessoa));
for (i=0;i<=29;i++)
novono->nomes[i] =nome[i];
novono->prox = inicio;
inicio = novono;
printf("\n\nInserido com Sucesso!!!!\n\n");
printf("\nContinuar inserindo (1-sim/2-nao)? ");
scanf("%d",&continuar);
}while (continuar == 1); // verifica se quer continuar inserindo
Pessoas
}
//Programa principal
main() {
tampilha= 0;
do {
cabec();
printf("\nOpcoes: \n");
printf("\n 1 - Inserir uma Pessoa na pilha");
printf("\n 2 - Consultar topo da pilha");
printf("\n 3 - Retirar Nome da Pessoa do topo");
printf("\n 4 - Listar todas as Pessoas da pilha");
printf("\n 0 - Sair \n");
printf("\nEntre com a sua opcao: ");
scanf("%d", &op); /* Le a opcao do usuario */
switch(op) {
case 1: inserir(); break;
case 2: consultatopo();break;
case 3: retirapilha(); break;
case 4: listar(); break;
case 0: break;
default: printf("\n\n Opcao invalida");
getche();
break;
}
} while (op != 0);
noatual = inicio;
while (noatual != NULL) {
inicio = noatual->prox;
free(noatual);
noatual = inicio;
}
}
40
1. FIFO
2.
a. 4 elementos
b. Continua com 10 posições
c.
3.
A implementação estática de filas é vantajosa quando há
previsão do tamanho máximo da fila. Porém, se a
quantidade máxima de elementos de uma fila não for
conhecida a priori, a implementação estática torna-se
desvantajosa, podendo resultar numa alocação de memória
grande demais ou insuficiente para uma determinada aplicação.
Já as filas dinâmicas são bastante vantajosas quando não se
conhece o tamanho máximo da fila. Dessa forma, à medida
que desejamos inserir novos elementos na fila, basta alocar um
41
5.
a) A
b) Y, 8, 9, G, R, W, 3, I, &, M, 5, #, 7
c) 4
d) 6
e) I, K-T-4-&, M
g) NÃO
h) 5
i) 4
25 48 37 12 57 86 33 92
25 48 37 12 57 86 33 92 25x48
25 48 37 12 57 86 33 92 48x37 troca
25 37 48 12 57 86 33 92 48x12 troca
25 37 12 48 57 86 33 92 48x57
25 37 12 48 57 86 33 92 57x86
25 37 12 48 57 86 33 92 86x33 troca
25 37 12 48 57 33 86 92 86x92
25 37 12 48 57 33 86 92 final da primeira passada
25 37 12 48 57 33 86 92 25x37
25 37 12 48 57 33 86 92 37x12 troca
25 12 37 48 57 33 86 92 37x48
25 12 37 48 57 33 86 92 48x57
25 12 37 48 57 33 86 92 57x33 troca
25 12 37 48 33 57 86 92 57x86
25 12 37 48 33 57 86 92 final da segunda passada
25 12 37 48 33 57 86 92 25x12 troca
12 25 37 48 33 57 86 92 25x37
43
12 25 37 48 33 57 86 92 37x48
12 25 37 48 33 57 86 92 48x33 troca
12 25 37 33 48 57 86 92 48x57
12 25 37 33 48 57 86 92 final da terceira passada
2. Resposta
Referências Bibliográficas