📘 APOSTILA DE C# – ARRAYS
1. Conceito de Arrays
Um array é uma estrutura de dados que armazena vários elementos do mesmo tipo em
posições consecutivas de memória. Cada elemento tem um índice que começa em 0.
Exemplo:
int[] numeros = {10, 20, 30};
[Link](numeros[0]); // 10
[Link](numeros[1]); // 20
[Link](numeros[2]); // 30
Truque mental: imagina o array como uma gaveta com divisórias numeradas, onde cada
divisória guarda um valor.
2. Declaração de Arrays
2.1 Vetores (uma dimensão)
int[] idade = new int[2];
string[] nomes = new string[2];
2.2 Matrizes (várias dimensões)
int[,] matriz2D = new int[2,3]; // 2 linhas, 3 colunas
int[,,] matriz3D = new int[2,3,2]; // 3 dimensões
2.3 Arrays Irregulares (Jagged)
int[][] jagged = new int[2][];
jagged[0] = new int[4] {1,2,3,4};
jagged[1] = new int[2] {2,4};
Truque:
Vetor → linha
Matriz → tabela
Jagged → caixa de arrays diferentes
3. Inicialização
int[] vetor = {3, 5, 7};
string[,] matriz = { {"C#", "Java"}, {"Framework", "[Link]"} };
4. Acesso por índice
int[] numeros = {1,2,3,4};
[Link](numeros[0]); // imprime 1
Lembre-se: o índice inicial é sempre 0.
5. Exercícios do Texto e Resoluções
Exercício 1 – Ordem inversa
Enunciado:
Leia 5 números do teclado e armazene num array.
Mostre todos os números na ordem inversa.
Solução:
using System;
class Program
{
static void Main()
{
int[] numeros = new int[5];
for (int i = 0; i < 5; i++)
{
[Link]("Digite o número {0}: ", i+1);
numeros[i] = [Link]([Link]());
}
[Link]("\nNúmeros na ordem inversa:");
for (int i = 4; i >= 0; i--)
{
[Link](numeros[i]);
}
}
}
Dica de lógica: usar for reverso para imprimir do último para o primeiro.
Exercício 2 – Números pares
Enunciado:
Leia 10 números e mostre apenas os pares.
Solução:
using System;
class Program
{
static void Main()
{
int[] numeros = new int[10];
for (int i = 0; i < 10; i++)
{
[Link]("Digite o número {0}: ", i+1);
numeros[i] = [Link]([Link]());
}
[Link]("\nNúmeros pares:");
for (int i = 0; i < 10; i++)
{
if (numeros[i] % 2 == 0)
[Link](numeros[i]);
}
}
}
Truque: número par = n % 2 == 0.
Exercício 3 – Valores abaixo da média
Enunciado:
Leia 20 números.
Calcule a média.
Mostre os valores abaixo da média.
Solução:
using System;
class Program
{
static void Main()
{
int[] valores = new int[20];
int soma = 0;
for (int i = 0; i < 20; i++)
{
[Link]("Digite o número {0}: ", i+1);
valores[i] = [Link]([Link]());
soma += valores[i];
}
double media = soma / 20.0;
[Link]("\nValores abaixo da média ({0}):", media);
for (int i = 0; i < 20; i++)
{
if (valores[i] < media)
[Link]("Índice {0} → Valor {1}", i, valores[i]);
}
}
}
Dicas:
Média = soma ÷ quantidade
Percorrer o array duas vezes: primeiro para somar, depois para comparar
Usar double para não perder casas decimais
Exercício 4 – Sistema estudantes e docentes
Enunciado resumido:
Estudantes: nome, teste1, teste2 → mostrar média, positivos nos 2 testes, contar médias
negativas.
Docentes: nome, nº de estudantes → mostrar docentes com turmas > 50.
Sistema encerra ao digitar 5.
Observação: este é um mini-projeto, combina arrays, loops e condições (while + if).
Exercício 5 – Multiplicar arrays
Dois arrays do mesmo tamanho:
1. 0 a 100
2. múltiplos de 5
Criar um terceiro array que seja produto elemento a elemento.
Exercício 6 – Ordenação
Receber várias idades e mostrar em ordem crescente.
Exercício 7 – Estatísticas
Valores entre 35 e 300.
Mostrar média e quantidade de números ímpares.
6. Exercícios Propostos Extras
1. Lê 10 números → mostrar maior e menor.
2. Lê 15 números → contar pares e ímpares.
3. Lê 8 números → mostrar na ordem inversa.
4. Lê 10 números → mostrar apenas os não repetidos.
5. Lê 12 números → calcular média de posições pares e ímpares.
Truques gerais:
% 2 → par ou ímpar
for reverso → imprimir do fim para o início
Média → soma ÷ quantidade
Array como gaveta numerada → índice inicia em 0
Perfeito! Vamos continuar a apostila, agora com as soluções completas dos exercícios
propostos e desafios extras, comentadas e prontas para copy-paste.
📘 APOSTILA DE C# – ARRAYS
(CONTINUAÇÃO)
7. Exercícios Propostos – Soluções
🔹 Exercício 1 – Maior e menor valor
Enunciado:
Lê 10 números e mostra o maior e o menor.
Solução:
using System;
class Program
{
static void Main()
{
int[] numeros = new int[10];
int maior, menor;
for (int i = 0; i < 10; i++)
{
[Link]("Digite o número {0}: ", i+1);
numeros[i] = [Link]([Link]());
}
maior = menor = numeros[0]; // inicializar com o primeiro valor
for (int i = 1; i < 10; i++)
{
if (numeros[i] > maior) maior = numeros[i];
if (numeros[i] < menor) menor = numeros[i];
}
[Link]("\nMaior número: {0}", maior);
[Link]("Menor número: {0}", menor);
}
}
Dica: inicializar maior e menor com o primeiro elemento ajuda a não precisar de valores fixos.
🔹 Exercício 2 – Contar pares e ímpares
using System;
class Program
{
static void Main()
{
int[] numeros = new int[15];
int pares = 0, impares = 0;
for (int i = 0; i < 15; i++)
{
[Link]("Digite o número {0}: ", i+1);
numeros[i] = [Link]([Link]());
if (numeros[i] % 2 == 0) pares++;
else impares++;
}
[Link]("\nPares: {0}", pares);
[Link]("Ímpares: {0}", impares);
}
}
Truque: % 2 identifica par ou ímpar imediatamente.
🔹 Exercício 3 – Ordem inversa
using System;
class Program
{
static void Main()
{
int[] numeros = new int[8];
for (int i = 0; i < 8; i++)
{
[Link]("Digite o número {0}: ", i+1);
numeros[i] = [Link]([Link]());
}
[Link]("\nNúmeros na ordem inversa:");
for (int i = 7; i >= 0; i--)
[Link](numeros[i]);
}
}
Truque: índice do último elemento = [Link] - 1.
🔹 Exercício 4 – Valores únicos
using System;
using [Link];
class Program
{
static void Main()
{
int[] numeros = new int[10];
List<int> unicos = new List<int>();
for (int i = 0; i < 10; i++)
{
[Link]("Digite o número {0}: ", i+1);
numeros[i] = [Link]([Link]());
}
for (int i = 0; i < 10; i++)
{
bool repetido = false;
for (int j = 0; j < 10; j++)
{
if (i != j && numeros[i] == numeros[j])
{
repetido = true;
break;
}
}
if (!repetido) [Link](numeros[i]);
}
[Link]("\nValores únicos:");
foreach (int num in unicos)
[Link](num);
}
}
Truque: compara cada elemento com todos os outros; se não houver repetição, adiciona à lista
de únicos.
🔹 Exercício 5 – Média por posição par/ímpar
using System;
class Program
{
static void Main()
{
int[] numeros = new int[12];
int somaPar = 0, somaImpar = 0, contPar = 0, contImpar = 0;
for (int i = 0; i < 12; i++)
{
[Link]("Digite o número {0}: ", i+1);
numeros[i] = [Link]([Link]());
if (i % 2 == 0) { somaPar += numeros[i]; contPar++; }
else { somaImpar += numeros[i]; contImpar++; }
}
[Link]("\nMédia das posições pares: {0}", somaPar /
(double)contPar);
[Link]("Média das posições ímpares: {0}", somaImpar /
(double)contImpar);
}
}
Truque: posição par/ímpar → índice % 2.
🔹 Exercício 6 – Multiplicar arrays
using System;
class Program
{
static void Main()
{
int[] array1 = new int[21]; // 0 a 20
int[] array2 = new int[21]; // múltiplos de 5
int[] produto = new int[21];
for (int i = 0; i <= 20; i++)
{
array1[i] = i;
array2[i] = i * 5;
produto[i] = array1[i] * array2[i];
}
[Link]("Produtos dos arrays:");
for (int i = 0; i <= 20; i++)
[Link](produto[i]);
}
}
Truque: usar mesmo índice para multiplicar elementos correspondentes.
🔹 Exercício 7 – Ordenação de idades
using System;
class Program
{
static void Main()
{
int[] idades = new int[10];
for (int i = 0; i < 10; i++)
{
[Link]("Digite a idade {0}: ", i+1);
idades[i] = [Link]([Link]());
}
[Link](idades); // função pronta do C# para ordenar
[Link]("\nIdades em ordem crescente:");
foreach (int idade in idades)
[Link](idade);
}
}
Truque: C# tem [Link]() → simplifica muito ordenação.
🔹 Exercício 8 – Estatísticas
using System;
class Program
{
static void Main()
{
int[] valores = new int[10];
int soma = 0, impares = 0;
for (int i = 0; i < 10; i++)
{
[Link]("Digite um valor (35 a 300) {0}: ", i+1);
valores[i] = [Link]([Link]());
soma += valores[i];
if (valores[i] % 2 != 0) impares++;
}
double media = soma / 10.0;
[Link]("\nMédia dos valores: {0}", media);
[Link]("Quantidade de ímpares: {0}", impares);
}
}
Truque: aproveita o mesmo for para somar e contar ímpares, economizando linhas de código.
✅ Dicas gerais para arrays
Índices começam em 0
Vetor = 1 dimensão, Matriz = 2 ou mais dimensões, Jagged = array de arrays
% 2 → par ou ímpar
Média → soma ÷ quantidade
for reverso → imprimir do fim para o início
[Link]() → ordenação pronta
📘 APOSTILA DE C# – ARRAYS
AVANÇADOS E MINI-PROJETOS
1. Declaração de Arrays segundo o modelo da docente
Vetor (1 dimensão)
tipo[] nomeDoArray = new tipo[tamanho];
int[] idades = new int[10];
string[] nomes = new string[5];
Matriz (2 ou mais dimensões)
tipo[,] nomeDaMatriz = new tipo[linhas, colunas];
int[,] notas = new int[3,2]; // 3 linhas, 2 colunas
string[,] turmas = new string[2,3];
Inicialização de valores
int[] numeros = new int[3] {1,2,3};
string[,] linguagens = new string[2,2] { {"C#","Java"}, {"Python","[Link]"} };
Truque:
Sempre que o número de elementos não é fixo, podemos usar int quant =
[Link]([Link]()); e depois int[] array = new int[quant];.
2. Mini-Projetos Inspirados em Situações Reais
🔹 Projeto 1 – Sistema de Estudantes
Situação: cadastro de estudantes com nome, teste1, teste2. Mostrar médias, positivos, negativos.
Exemplo de declaração da docente:
string[] nomes = new string[quantidade];
int[] teste1 = new int[quantidade];
int[] teste2 = new int[quantidade];
Código base: já apresentado no item anterior.
🔹 Projeto 2 – Pescadores
Situação:
Cada pescador captura peixes em kg.
Mostrar total de peixe, média por pescador, quem ultrapassou 50 kg.
string[] pescadores = new string[5];
int[] kgPeixe = new int[5];
for (int i=0;i<5;i++){
[Link]("Nome do pescador: ");
pescadores[i] = [Link]();
[Link]("Kg de peixe capturado: ");
kgPeixe[i] = [Link]([Link]());
}
int total=0;
for(int i=0;i<5;i++){
total+=kgPeixe[i];
if(kgPeixe[i]>50)
[Link]("{0} ultrapassou 50 kg", pescadores[i]);
}
[Link]("Total de peixe: {0} kg", total);
[Link]("Média por pescador: {0} kg", total/5.0);
🔹 Projeto 3 – Comerciante com descontos
Situação:
Guardar valores de vendas e aplicar 10% de desconto se valor > 100.
Mostrar valores finais.
string[] produtos = new string[4];
double[] precos = new double[4];
for(int i=0;i<4;i++){
[Link]("Produto: "); produtos[i] = [Link]();
[Link]("Preço: "); precos[i] = [Link]([Link]());
}
for(int i=0;i<4;i++){
double final = precos[i];
if(precos[i]>100) final *=0.9;
[Link]("Produto: {0}, Preço final: {1:F2}", produtos[i],
final);
}
🔹 Projeto 4 – Parque de Carros
Situação:
Cada carro paga um valor por hora.
Calcular total arrecadado e valor médio.
string[] carros = new string[6];
int[] horas = new int[6];
double[] tarifa = new double[6];
for(int i=0;i<6;i++){
[Link]("Placa do carro: "); carros[i] = [Link]();
[Link]("Horas estacionado: "); horas[i] =
[Link]([Link]());
tarifa[i] = horas[i]*5; // R$5 por hora
}
double total=0;
for(int i=0;i<6;i++){
total += tarifa[i];
[Link]("Carro {0} → valor a pagar: {1}", carros[i], tarifa[i]);
}
[Link]("Total arrecadado: {0}", total);
[Link]("Média por carro: {0:F2}", total/6.0);
🔹 Projeto 5 – Banco
Situação:
Guardar saldo de clientes.
Identificar clientes com saldo negativo e calcular saldo total.
string[] clientes = new string[5];
double[] saldos = new double[5];
for(int i=0;i<5;i++){
[Link]("Cliente: "); clientes[i]=[Link]();
[Link]("Saldo: "); saldos[i]=[Link]([Link]());
}
double total=0;
for(int i=0;i<5;i++){
total += saldos[i];
if(saldos[i]<0)
[Link]("{0} possui saldo negativo: {1}", clientes[i],
saldos[i]);
}
[Link]("Saldo total do banco: {0}", total);
🔹 Projeto 6 – Hotel
Situação:
Cada quarto tem ocupação em dias.
Calcular total de diárias e faturamento.
string[] quartos = new string[4];
int[] dias = new int[4];
double precoDiaria = 120;
for(int i=0;i<4;i++){
[Link]("Número do quarto: "); quartos[i]=[Link]();
[Link]("Dias ocupados: "); dias[i]=[Link]([Link]());
}
double total=0;
for(int i=0;i<4;i++){
double faturamento = dias[i]*precoDiaria;
total += faturamento;
[Link]("Quarto {0} → Faturamento: {1}", quartos[i],
faturamento);
}
[Link]("Faturamento total do hotel: {0}", total);
3. Exercícios Propostos Extras (Para prática)
1. Criar um sistema de biblioteca: livros, autor, quantidade disponível.
2. Cadastro de funcionários: nome, salário, departamento → mostrar média salarial por
departamento.
3. Sistema de supermercado: produtos, preço unitário, quantidade → calcular total e
aplicar desconto para compras acima de 200.
4. Parque de estacionamento com tarifa variável: moto, carro, caminhão → calcular
arrecadação total e média.
5. Banco com clientes e limites de crédito → listar clientes que ultrapassaram o limite.
Truques gerais:
Vetor para quantidade fixa de dados, lista para quantidade variável.
Matrizes se precisar organizar em linhas e colunas (ex.: turmas, tabelas de preços).
Sempre usar for para percorrer arrays e calcular totais, médias ou aplicar condições.
Usar if para aplicar descontos, limites, ou validar condições (positivos, negativos, maior
que X).
Perfeito! Vamos organizar todos esses exercícios do teu texto com soluções completas em C#,
usando a forma de declaração da docente, arrays, validações e comentários, prontos para copy-
paste.
📘 APOSTILA DE C# – EXERCÍCIOS
RESOLVIDOS
Exercício 1 – Nomes e Idades
Enunciado:
Armazenar vários nomes no array N e idades correspondentes no array I.
Validar a idade (ex.: entre 0 e 120).
Mostrar:
a) Todos os nomes com suas idades.
b) Nomes com idade abaixo de 20.
Solução:
using System;
class Program
{
static void Main()
{
int quant;
[Link]("Quantas pessoas deseja cadastrar? ");
quant = [Link]([Link]());
string[] N = new string[quant];
int[] I = new int[quant];
for(int i = 0; i < quant; i++)
{
[Link]("Nome: ");
N[i] = [Link]();
do
{
[Link]("Idade: ");
I[i] = [Link]([Link]());
if(I[i]<0 || I[i]>120) [Link]("Idade inválida,
tente novamente.");
} while(I[i]<0 || I[i]>120);
}
[Link]("\n--- Todos os nomes e idades ---");
for(int i=0;i<quant;i++)
[Link]("{0} → {1} anos", N[i], I[i]);
[Link]("\n--- Idades abaixo de 20 ---");
for(int i=0;i<quant;i++)
if(I[i]<20)
[Link]("{0} → {1} anos", N[i], I[i]);
}
}
Exercício 2 – Soma de arrays e ímpares
Enunciado:
Receber dois arrays M e N do mesmo tamanho, valores entre 1 e 100.
Mostrar:
a) Um terceiro array S que é a soma de M e N.
b) Quantos números ímpares existem no array N.
Solução:
using System;
class Program
{
static void Main()
{
int tamanho;
[Link]("Digite o tamanho dos arrays: ");
tamanho = [Link]([Link]());
int[] M = new int[tamanho];
int[] N = new int[tamanho];
int[] S = new int[tamanho];
for(int i=0;i<tamanho;i++)
{
do {
[Link]("M[{0}] (1-100): ", i); M[i] =
[Link]([Link]());
} while(M[i]<1 || M[i]>100);
do {
[Link]("N[{0}] (1-100): ", i); N[i] =
[Link]([Link]());
} while(N[i]<1 || N[i]>100);
S[i] = M[i]+N[i];
}
[Link]("\nArray S (soma de M e N):");
for(int i=0;i<tamanho;i++)
[Link](S[i]);
int impares = 0;
for(int i=0;i<tamanho;i++)
if(N[i]%2 !=0) impares++;
[Link]("Quantidade de números ímpares no array N: {0}",
impares);
}
}
Exercício 3 – Valores e negativos
Enunciado:
Armazenar N valores.
Mostrar: quantidade de números negativos e elementos das primeiras 3 posições.
Solução:
using System;
class Program
{
static void Main()
{
int tamanho;
[Link]("Digite a quantidade de valores: ");
tamanho = [Link]([Link]());
int[] valores = new int[tamanho];
int negativos = 0;
for(int i=0;i<tamanho;i++)
{
[Link]("Valor[{0}]: ", i);
valores[i] = [Link]([Link]());
if(valores[i]<0) negativos++;
}
[Link]("\nQuantidade de números negativos: {0}",
negativos);
[Link]("Elementos das primeiras 3 posições:");
for(int i=0;i<[Link](3,tamanho);i++)
[Link]("Posição {0} → {1}", i, valores[i]);
}
}
Exercício 4 – Sistema de Estudantes e Docentes
Enunciado resumido:
Estudantes: nome, teste1, teste2 (1 a 20). Mostrar média, positivos nos 2 testes, contagem
de médias negativas.
Docentes: nome, nº de estudantes. Mostrar docentes com turmas > 50.
Sistema termina ao digitar 5.
Solução: (usando arrays como a docente)
using System;
class Program
{
static void Main()
{
int opcao = 0;
string[] nomesEst = new string[100];
int[] teste1 = new int[100];
int[] teste2 = new int[100];
int contEst = 0;
string[] nomesDoc = new string[50];
int[] qtdTurma = new int[50];
int contDoc = 0;
while(opcao != 5)
{
[Link]("\nMenu: 1-Estudante 2-Docente 3-Relatório Est
4-Relatório Doc 5-Sair");
opcao = [Link]([Link]());
switch(opcao)
{
case 1:
[Link]("Nome do estudante: ");
nomesEst[contEst] = [Link]();
[Link]("Teste1: "); teste1[contEst] =
[Link]([Link]());
[Link]("Teste2: "); teste2[contEst] =
[Link]([Link]());
contEst++;
break;
case 2:
[Link]("Nome do docente: ");
nomesDoc[contDoc] = [Link]();
[Link]("Quantidade de estudantes: ");
qtdTurma[contDoc] = [Link]([Link]());
contDoc++;
break;
case 3:
[Link]("\n--- Estudantes ---");
int neg = 0;
for(int i=0;i<contEst;i++)
{
double media = (teste1[i]+teste2[i])/2.0;
[Link]("{0} → Média: {1}", nomesEst[i],
media);
if(teste1[i]>0 && teste2[i]>0)
[Link]("{0} teve nota positiva nos 2
testes", nomesEst[i]);
if(media<10) neg++;
}
[Link]("Quantidade com média negativa: {0}",
neg);
break;
case 4:
[Link]("\n--- Docentes ---");
for(int i=0;i<contDoc;i++)
if(qtdTurma[i]>50) [Link]("Docente com
turma > 50: {0}", nomesDoc[i]);
break;
case 5:
[Link]("Encerrando...");
break;
}
}
}
}
Exercício 5 – Multiplicação de Arrays
using System;
class Program
{
static void Main()
{
int[] A = new int[21]; // 0 a 20
int[] B = new int[21]; // múltiplos de 5
int[] C = new int[21]; // produto
for(int i=0;i<=20;i++)
{
A[i]=i;
B[i]=i*5;
C[i]=A[i]*B[i];
}
[Link]("Produto de arrays:");
for(int i=0;i<=20;i++)
[Link](C[i]);
}
}
Exercício 6 – Idades em ordem crescente
using System;
class Program
{
static void Main()
{
int[] idades = new int[10];
for(int i=0;i<10;i++)
{
[Link]("Idade[{0}]: ", i);
idades[i] = [Link]([Link]());
}
[Link](idades);
[Link]("\nIdades em ordem crescente:");
foreach(int idade in idades)
[Link](idade);
}
}
Exercício 7 – Valores entre 35 e 300
using System;
class Program
{
static void Main()
{
int[] valores = new int[10];
int soma=0, impares=0;
for(int i=0;i<10;i++)
{
do
{
[Link]("Valor[{0}] (35-300): ", i);
valores[i] = [Link]([Link]());
} while(valores[i]<35 || valores[i]>300);
soma += valores[i];
if(valores[i]%2 != 0) impares++;
}
[Link]("Média: {0}", soma/10.0);
[Link]("Quantidade de ímpares: {0}", impares);
}
}