Buscar

Vetores em C

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 9 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 9 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 9 páginas

Prévia do material em texto

1 
LINGUAGEM E TÉCNICA DE PROGRAMAÇÃO I 
 
Profa. Gisele Busichia Baioco 
gisele@ft.unicamp.br 
 
 
Algoritmos Estruturados e 
Linguagem de Programação Estruturada 
 
Vetores em C 
1 Variáveis Compostas Homogêneas Unidimensionais – Vetores em C 
As Variáveis Compostas Homogêneas Unidimensionais ou Vetores correspondem 
a posições de memória (variáveis) identificadas por um mesmo nome, onde uma posição 
individual é acessada por um índice e cujo conteúdo é do mesmo tipo de dado. Em outras 
palavras, um vetor pode ser definido como um conjunto finito e ordenado de elementos 
homogêneos. Por finito entende-se que existe um número específico de elementos no vetor; 
por ordenado entende-se que os elementos do vetor são organizados de tal forma que exista 
um elemento 0, um elemento 1, elemento 2, um elemento 3 e assim por diante, onde 0, 1, 2, 
3,... são os índices; por homogêneo entende-se que todos os elementos do vetor precisam ser 
do mesmo tipo de dados. 
Sintaxe de declaração em C: 
 
tipo-de-dado nome[tamanho]; 
 
onde: 
nome: é o nome do vetor; 
tamanho: é a quantidade máxima de elementos (posições) do vetor; 
tipo-de-dado: é um tipo de dado válido em C. 
 
 A referência ao conteúdo do n-ésimo elemento de um vetor tem a sintaxe: 
 
nome[n] 
 
onde: 
nome: é o nome do vetor; 
n é o índice que corresponde a um número inteiro ou uma variável do tipo inteiro. 
 
Em C, considera-se que o primeiro elemento tem o índice 0. 
 
 Exemplo de vetor: 
 
/* Declaração de um vetor de nome nota que pode conter até 10 
 elementos */ 
float nota[10]; 
 
 2 
Esquematicamente tem-se: 
 
nota 5.5 6.0 9.0 2.5 4.5 9.5 7.0 8.5 7.5 3.0 
 0 1 2 3 4 5 6 7 8 9 
 
 
 
 
Para atribuir um valor a n-ésima posição de um vetor, usa-se a seguinte sintaxe: 
 
 nome[n] = valor; 
 
onde: 
nome: é o nome do vetor; 
n é o índice que corresponde a um número inteiro ou uma variável do tipo inteiro; 
valor é uma variável ou um valor do mesmo tipo de dado do vetor. 
 
 Considerando o vetor do exemplo anterior, para atribuir o valor 9.5 para a posição 5, 
faz-se: 
 nota[5] = 9.5; 
2 Usando Vetores 
Um vetor é usado para manter uma grande quantidade de elementos de dados na 
memória e para referenciar todos os elementos de maneira uniforme. 
Supor a necessidade de ler 100 notas, calcular sua média aritmética e determinar o 
quanto cada nota se desvia dessa média. Nesse caso é necessário que as 100 notas lidas sejam 
armazenadas em variáveis para que o desvio seja calculado após o cálculo da média 
aritmética. Utilizar 100 variáveis para armazenar as 100 notas seria uma solução, mas o 
código do programa ficaria um tanto extenso, pois além de declarar 100 variáveis, seria 
necessário escrever código para 100 leituras de variáveis e 100 cálculos de desvios. Então, a 
solução é agrupar as 100 notas em uma única variável composta homogênea, ou seja, em um 
vetor. 
Algoritmo 
 início 
 declare soma, media, desvio, 
 nota[100] /* vetor de notas */: numérico real; 
 i /* conterá os índices do vetor */: numérico inteiro; 
 soma ← 0; /* valor inicial para a sumarização das notas */ 
 para i ← 0 até 99 passo 1 faça 
 início 
 escreva(“Digite uma nota”); 
 leia(nota[i]); 
 soma ← soma + nota[i]; 
 fim 
 media ← soma/100; 
 escreva(“Media = ”, media); 
 /* Cálculo dos devios */ 
 para i ← 0 até 99 passo 1 faça 
 início 
desvio ← nota[i] – media; 
escreva(“Desvio da nota ”, nota[i], desvio); 
 fim 
fim 
nota[5] 
 3 
Em C fica: 
 
#include <stdio.h> 
main() 
 { 
 float soma, media, desvio, nota[100] /* vetor de notas */; 
 int i /* conterá os índices do vetor */; 
 soma = 0; /* valor inicial para a sumarização das notas */ 
 for (i = 0; i < 100; i++) 
 { 
 printf(“Digite uma nota: ”); 
 scanf(“%f”, &nota[i]); 
 soma = soma + nota[i]; 
 } 
 media = soma/100; 
 printf(“Media = %f”, media); 
 /* Cálculo dos devios */ 
 for (i = 0; i < 100; i++) 
 { 
 desvio = nota[i] – media; 
 printf(“Desvio da nota %f = %f”, nota[i], desvio); 
 } 
} 
 
É possível escrever o algoritmo anterior, solicitando do usuário a quantidade de notas 
ao invés de fixar em 100. O problema é que um vetor tem que ter um tamanho máximo e, 
nesse caso, é necessário garantir que o usuário entre com a quantidade de notas menor ou 
igual ao tamanho máximo. Ou seja, não há necessidade de utilizar todas as posições de um 
vetor, mas nunca se deve utilizar posições além de seu tamanho máximo. O tamanho mínimo 
também deve ser garantido – maior que 0. 
Algoritmo 
 início 
 declare soma, media, desvio, 
 nota[100] /* vetor de notas */: numérico real; 
 tam, i /* índices do vetor */: numérico inteiro; 
 /* Entrada da quantidade de notas e verificação dos limites 
 do vetor */ 
repita 
 escreva(“Digite a quantidade de notas – mínimo 1 e máximo 
100: ”); 
 leia(tam); 
 se (tam > 100 ou tam ≤ 0) 
 então escreva(“Quantidade de notas inválida”); 
 até (tam > 0 e tam ≤ 100); 
 soma ← 0; /* valor inicial para a sumarização das notas */ 
 para i ← 0 até tam-1 passo 1 faça 
 início 
 escreva(“Digite uma nota”); 
 leia(nota[i]); 
 soma ← soma + nota[i]; 
 fim 
 media ← soma/tam; 
 escreva(“Media = ”, media); 
 /* Cálculo dos devios */ 
 para i ← 0 até tam-1 passo 1 faça 
 início 
desvio ← nota[i] – media; 
 4 
escreva(“Desvio da nota ”, nota[i], desvio); 
 fim 
fim 
 
Em C ainda é possível dar um nome ao tamanho máximo do vetor por meio de 
#define, sendo que se for necessário modificar o tamanho máximo do vetor, basta alterar o 
valor que estiver definido no #define. 
 
#include <stdio.h> 
 
#define MAXVET 100 /* define o tamanho máximo do vetor como MAXVET */ 
main() 
 { 
 float soma, media, desvio, nota[MAXVET] /* vetor de notas */; 
 int tam, i /* conterá os índices do vetor */; 
 /* Entrada da quantidade de notas e verificação dos limites 
 do vetor */ 
 do { 
printf(“Digite a quantidade de notas – mínimo 1 e máximo %d: ”, 
MAXVET); 
 scanf(“%d”, &tam); 
 if (tam > MAXVET || tam <= 0) 
 printf(“Quantidade de notas inválida”); 
 } while (tam > MAXVET ||tam <= 0); 
 soma = 0; /* valor inicial para a sumarização das notas */ 
 for (i = 0; i < tam; i++) 
 { 
 printf(“Digite uma nota: ”); 
 scanf(“%f”, &nota[i]); 
 soma = soma + nota[i]; 
 } 
 media = soma/tam; 
 printf(“Media = %f”, media); 
 /* Cálculo dos devios */ 
 for (i = 0; i < tam; i++) 
 { 
 desvio = nota[i] – media; 
 printf(“Desvio da nota %f = %f”, nota[i], desvio); 
 } 
} 
3 Exemplos de Programas 
1) Faça um algoritmo que: 
• leia dois vetores, contendo 5 números inteiros cada um; 
• intercale os elementos dos dois vetores, formando um novo vetor de 10 elementos; 
• escreva o vetor resultante da intercalação. 
Solução: 
Entrada: dois vetores de 5 números inteiros; 
Processo: intercalação dos dois vetores gerando um vetor de 10 elementos; 
Saída: vetor de 10 elementos resultante. 
Algoritmo 
início 
 /* Declaração de variáveis */ 
 declare v1[5], v2[5], vr[10], i: numérico inteiro; 
 /* Entrada de dados */ 
 escreva(“Carregando o primeiro vetor:”); 
 5 
 para i ← 0 até 4 passo 1 faça 
 início 
 escreva(“Digite um número inteiro: ”); 
 leia(v1[i]); 
 fim 
 escreva(“Carregando o segundo vetor:”); 
 para i ← 0 até 4 passo 1 faça 
 início 
 escreva(“Digite um número inteiro: ”); 
 leia(v2[i]); 
 fim 
 /* Processo – Intercalação dos vetores */ 
para i ← 0 até 4 passo 1 faça 
 início 
 vr[2*i] = v1[i]; 
 vr[2*i+1] = v2[i]; 
 fim 
/* Saída de dados */ 
escreva(“Vetor resultante:”); 
para i ← 0 até 9 passo 1 faça 
 escreva(vr[i]); 
fim 
 
#include <stdio.h> 
 
#define MAXVET 5 
#define MAXVETRES MAXVET*2 
main() 
{ 
 /* Declaração de variáveis */ 
 int v1[MAXVET], v2[MAXVET], vr[MAXVETRES], i;/* Entrada de dados */ 
 printf(“Carregando o primeiro vetor:\n”); 
 for(i = 0; i < MAXVET; i++) 
 { 
 printf(“Digite um número inteiro: ”); 
 scanf(“%d”, &v1[i]); 
 } 
 printf(“Carregando o segundo vetor:\n”); 
 for(i = 0; i < MAXVET; i++) 
 { 
 printf(“Digite um número inteiro: ”); 
 scanf(“%d”, &v2[i]); 
 } 
 /* Processo – Intercalação dos vetores */ 
 for(i = 0; i < MAXVET; i++) 
 { 
 vr[2*i] = v1[i]; 
 vr[2*i+1] = v2[i]; 
 } 
 /* Saída de dados */ 
 printf(“Vetor resultante:\n”); 
 for(i = 0; i < MAXVETRES; i++) 
printf(“%d “, vr[i]); 
} 
 6 
2) Um vetor X de 150 posições contém o número de matrícula de N alunos (N ≤ 150) de 
uma Universidade. Um outro vetor Y de 150 posições contém as notas dos N alunos 
(N ≤ 150), sendo que as posições de ambos os vetores se relacionam, por exemplo, a 
nota do aluno de matrícula X[i] é dada por Y[i]. Faça um algoritmo que: 
• leia a quantidade N de alunos; 
• leia as informações dos N alunos carregando os vetores X e Y; 
• leia um determinado número de matrícula e determine a nota do aluno correspondente, 
repetindo o processo até que o usuário deseje parar. 
Solução: 
Entrada: número N de alunos e informações sobre os alunos a serem carregadas nos 
vetores X e Y; 
Processo e Saída: consulta a notas de alunos a partir do número da matrícula. 
Algoritmo 
início 
 /* Declaração de variáveis */ 
 declare N, X[150], i, mat, achou: numérico inteiro; 
 Y[150]: numérico real; 
 resp: caractere; 
 /* Entrada de dados */ 
repita 
escreva(“Digite a quantidade de alunos (entre 1 e 150): ”); 
 leia(N); 
 se (N > 150 ou N ≤ 0) 
 então escreva(“Quantidade de alunos inválida”); 
 até (N > 0 e N ≤ 150); 
para i ← 0 até N-1 passo 1 faça 
 início 
 escreva(“Digite o número da matrícula do aluno: ”); 
 leia(X[i]); 
 escreva(“Digite a nota do aluno: ”); 
 leia(Y[i]); 
 fim 
 /* Processo e Saída */ 
 repita 
 /* Lê a matrícula do aluno para consulta */ 
 escreva(“Entre com a matrícula do aluno para consulta: ”); 
 leia(mat); 
 /* Percorre o vetor X, procurando pela matricula */ 
 achou ← 0; /* não achou */ 
 i ← 0; 
 enquanto (i < N e achou = 0) faça 
 início 
 se (X[i] = mat) 
 então início 
 achou ← 1; /* achou */ 
 escreva(“Nota = ”, Y[i]); 
fim 
 i ← i + 1; 
 fim 
 /* Verifica se a matrícula não foi encontrada */ 
 se (achou = 0) /* não achou */ 
 então escreva(“Matricula não encontrada”); 
 /* Permite que o usuário faça mais uma consulta se desejar */ 
 escreva(“Deseja consultar mais um aluno? (S/N)”); 
 leia(resp); 
 até (resp = ‘N’); 
fim 
 7 
#include <stdio.h> 
#include <conio.h> 
#include <ctype.h> 
 
#define MAXVET 150 
 
main() 
{ 
 /* Declaração de variáveis */ 
 int N, X[MAXVET], i, mat, achou; 
 float Y[MAXVET]; 
 char resp; 
 /* Entrada de dados */ 
 do { 
 printf(“Digite a quantidade de alunos (entre 1 e %d): ”, MAXVET); 
 scanf(“%d”, &N); 
 if (N > MAXVET || N <= 0) 
 printf(“Quantidade de alunos inválida...\n”); 
 } while(N > MAXVET || N <= 0); 
 for(i = 0; i < N; i++) 
 { 
 printf(“Digite o número da matrícula do aluno: ”); 
 scanf(“%d”, &X[i]); 
 printf(“Digite a nota do aluno: ”); 
scanf(“%f”, &Y[i]); 
 } 
 /* Processo e Saída */ 
 do { 
 /* Lê a matrícula do aluno para consulta */ 
 printf(“\nEntre com a matrícula do aluno para consulta: ”); 
 scanf(“%d”, &mat); 
 /* Percorre o vetor X, procurando pela matricula */ 
 achou = 0; /* não achou */ 
 i = 0; 
 while (i < N && achou == 0) 
 { 
 if (X[i] == mat) 
 { 
 achou = 1; /* achou */ 
printf(“Nota = %f”, Y[i]); 
 } 
 i = i + 1; 
 } 
 /* Verifica se a matrícula não foi encontrada */ 
 if (achou == 0) /* não achou */ 
 printf(“Matricula não encontrada”); 
 /* Permite que o usuário faça mais uma consulta se desejar */ 
 printf(“\nDeseja consultar mais um aluno? (S/N)”); 
 resp = getche(); 
 } while (toupper(resp) == ‘S’); 
} 
 8 
3) Faça um algoritmo que carregue um vetor com 10 números inteiros, ordene o vetor em 
ordem crescente e mostre o vetor ordenado. 
Solução: 
Entrada: vetor de 10 número inteiros; 
Processo: ordenação do vetor em ordem crescente; 
Saída: vetor ordenado. 
Algoritmo 
início 
/* Declaração de variáveis */ 
declare v[10], i, j, aux: numérico inteiro; 
/* Entrada de Dados */ 
para i ← 0 até 9 passo 1 faça 
início 
 escreva(“Digite um número inteiro: ”); 
 leia(v[i]); 
fim 
/* Processo – Ordenação do vetor pelo método Bubble Sort */ 
para i ← 0 até 9 passo 1 faça 
 para j ← 0 até 8-i passo 1 faça 
 se (v[j] > v[j+1]) 
 então início 
 aux ← v[j]; 
 v[j] ← v[j+1]; 
 v[j+1] ← aux; 
 fim 
/* Saída */ 
para i ← 0 até 9 passo 1 faça 
 escreva(v[i]); 
fim 
 
#include <stdio.h> 
 
#define MAXVET 10 
 
main() 
{ 
 /* Declaração de variáveis */ 
 int v[MAXVET], i, j, aux; 
 /* Entrada de Dados */ 
 for(i = 0; i < MAXVET; i++) 
 { 
printf(“Digite um número inteiro: ”); 
scanf(“%d”, &v[i]); 
 } 
 /* Processo – Ordenação do vetor pelo método Bubble Sort */ 
 for(i = 0; i < MAXVET; i++) 
for(j = 0; j < MAXVET-1-i; j++) 
 if (v[j] > v[j+1]) 
 { 
 aux = v[j]; 
 v[j] = v[j+1]; 
 v[j+1] = aux; 
 } 
 /* Saída */ 
 for(i = 0; i < MAXVET; i++) 
 printf(“%d ”, v[i]); 
} 
 9 
4 Exercícios de Fixação 
1) Um número é primo se for divisível apenas por si próprio e por 1. Faça um algoritmo e 
programa C que carregue um vetor de 10 números inteiros, mostre apenas os números 
primos e suas respectivas posições. 
2) Faça um algoritmo e programa C que leia um vetor de N números inteiros (N ≤ 50), 
determine e escreva quantos desses números são pares e quantos são ímpares. 
3) Faça um algoritmo e programa C que leia um vetor de N números inteiros (N ≤ 50), 
calcule e mostre a soma dos números que estiverem nas posições pares do vetor. 
4) Faça um algoritmo e programa C para corrigir provas de múltipla escolha. Cada prova 
tem 10 questões e cada questão vale 1 ponto. O primeiro conjunto de dados a ser lido é 
o gabarito da prova. Os outros dados serão os números dos alunos e suas respectivas 
respostas. Existem 15 alunos matriculados. Calcule e mostre: 
• para cada aluno, sua nota; 
• a percentagem de aprovação, sabendo-se que a nota mínima é 6.0. 
5) Está disponível para entrada de dados o estoque de mercadorias de uma loja. São 
dados os códigos das mercadorias e as respectivas quantidades existentes. A seguir, 
estão disponíveis os pedidos dos clientes. Fazer um algoritmo e programa C para 
atualização do estoque, tal que: 
• seja lido o estoque inicial: considerar um vetor contendo os códigos das 
mercadorias e outro contendo a quantidade em estoque, sendo que as posições de 
ambos os vetores se relacionam, por exemplo, a quantidade em estoque da 
mercadoria[i] é dada por estoque[i] (máximo de 100 mercadorias); 
• sejam lidos os pedidos dos clientes, constituídos, cada um, do número do cliente, 
código da mercadoria e quantidade desejada; 
• seja verificado, para cada pedido, se ele pode ser integralmente atendido. Em caso 
negativo, sejam impressos o número do cliente e a mensagem “NÃO TEMOS A 
MERCADORIA EM ESTOQUE SUFICIENTE”; 
• seja atualizado o estoque após cada operação; 
• seja listado o estoque final.

Outros materiais