Na inicialização parcial acima os demais valores são considerados zero: 10 20 0 0 0
Exemplo
int numeros[4] = {10, 20, 30, 40}; // Tamanho 4. Índices de 0 a 3.printf("Primeiro elemento (Índice 0): %d\n", numeros[0]); // Imprime 10printf("Último elemento (Índice 3): %d\n", numeros[3]); // Imprime 40// ATENÇÃO!// printf("%d", numeros[4]); // ERRO: Índice fora dos limites (Out-of-Bounds)
Atenção: Nunca acesse um índice que exceda o tamanho declarado do array. Isso leva a Comportamento Indefinido (Undefined Behavior), corrompendo a memória e causando falhas imprevisíveis.
Inferência de Tamanho
int x[] = {1, 2, 3};
O compilador calcula automaticamente o tamanho.
O compilador ele executa uma contagem estática dos valores literais fornecidos e ajusta o metadata do array para garantir que o bloco de memória seja grande o suficiente (e somente o necessário).
Exercício
Crie um programa que:
Inicializa um vetor de tamanho 5 com valores: 1, 0, 0, 0, 2.
Imprime o primeiro e o último elementos.
Modifica o valor do elemento de índice 3 para 8.
Imprime o valor do elemento de índice 3.
Percorrendo Vetores com Loop
A maneira mais segura de processar todos os elementos é usando laços de repetição (for ou while).
#include<stdio.h>#define TAMANHO 5intmain() {
int numeros[TAMANHO] = {10, 20, 30, 40, 50};
for(int i = 0; i < TAMANHO; i++) {
printf("%d\n", numeros[i]);
}
return0;
}
Dica: Usar constantes (#define ou const int) para definir o tamanho do array é uma prática essencial para evitar "números mágicos" (magic numbers).
Exercício
Modifique o programa abaixo para exibir os elementos do array ordem reversa:
#include<stdio.h>#define TAMANHO 5intmain() {
int numeros[TAMANHO] = {10, 20, 30, 40, 50};
for(int i = 0; i < TAMANHO; i++) {
printf("%d\n", numeros[i]);
}
return0;
}
Leitura de Dados do Usuário
#include<stdio.h>intmain() {
int notas[4];
for(int i = 0; i < 4; i++) {
printf("Digite a nota: ");
scanf("%d", ¬as[i]);
}
return0;
}
Exercício
Crie um programa que:
Leia 10 números inteiros e armazene em um vetor
Calcule a Soma e a Média
Lembrando: Variáveis em Memória
Quando criamos uma variável, estamos alocando espaço na memória.
Tipos diferentes de variável tomam espaços diferentes na memória. Exemplo:
Em C, o tamanho da segunda dimensão (colunas) é obrigatório na declaração. O compilador precisa saber o tamanho do bloco para calcular endereços corretamente. Fonte da imagem: learningc.org
Criando e Inicialização de Matrizes
int matrix[2][3]; // Contém valores de "garbage" (indeterminados)// SEMPRE INICIALIZAR EXPLICITAMENTE EM C!
int matrix[2][3] = {
{1, 2, 3},
{4, 5, 6}
};
Exemplo
Armazenar notas de:
3 alunos
2 provas
float notas[3][2];
Aluno 0 -> Prova 1 e Prova 2
Aluno 1 -> Prova 1 e Prova 2
Aluno 2 -> Prova 1 e Prova 2
printf("%d", matriz[0][1]); // Imprime o elemento da linha 0, coluna 1
Iteração (Loop Aninhado):
for (int i = 0; i < 2; i++) { // Percorre Linhasfor (int j = 0; j < 3; j++) { // Percorre Colunasprintf("%d ", matriz[i][j]);
}
printf("\n"); // Quebra linha após cada linha da matriz
}
#include<stdio.h>#define TAMANHO_LINHAS 3#define TAMANHO_COLUNAS 3intmain() {
int matriz[TAMANHO_LINHAS][TAMANHO_COLUNAS];
printf("Por favor, insira os 9 valores da matriz:\n\n");
for (int i = 0; i < TAMANHO_LINHAS; i++) {
// A cada nova linha, pedimos ao usuário para preencher os valores da coluna.printf("Insira os %d valores da Linha %d:\n", TAMANHO_COLUNAS, i + 1);
for (int j = 0; j < TAMANHO_COLUNAS; j++) {
printf(" Elemento [%d][%d]: ", i, j);
scanf("%d", &matriz[i][j]);
}
}
printf("\nLeitura da matriz concluída com sucesso!\n");
return0;
}
Exercício A
Crie um programa que leia uma matriz 4x4 imprima:
maior valor
menor valor
soma da diagonal principal
Exercício B
Crie um programa que inicializa duas matrizes 5x3 e pede que o usuário selecione uma das opções abaixo:
Opção 1: Calcular a soma das matrizes
Opção 2: Calcular a subtração das matrizes
O programa deve exibir o resultado da operação selecionada.
Matriz em Memória
Row-Major Order: C armazena matrizes na ordem das linhas.
Arrays são fundamentais na programação em C porque:
Permitem armazenar múltiplos dados
Tornam algoritmos mais eficientes
Matrizes permitem representar dados bidimensionais
Amplamente utilizadas em computação científica
Servem como base para: imagens, simulações, jogos, IA
Próximo Tópico: Strings em C
Dúvidas e Discussão
Exercício e Questões
Questão 1
Um array float temperaturas[7] foi declarado. Se um programador tenta acessar o elemento na posição temperaturas[8], qual é a consequência mais provável, do ponto de vista da segurança em C?
A) O programa irá compilar com erro e não rodará.
B) O compilador emitirá um aviso (warning), mas o programa funcionará corretamente.
C) O programa tentará ler/escrever fora dos limites alocados, resultando em Comportamento Indefinido (Undefined Behavior).
D) O sistema operacional irá travar imediatamente.
Questão 2
Qual é o erro no código abaixo?
int v[5];
v[5] = 10;
Questão 3
Qual das alternativas representa corretamente uma matriz 3x4 em C?
A)
int matriz[3,4];
B)
int matriz[3][4];
C)
intmatriz(3)(4);
Questão 4
Qual é o erro abaixo?
int matriz[2][2];
matriz[2][0] = 5;
Exercício 1
Crie um programa que:
Leia um vetor com 8 posições
Conte quantos números são pares
Conte quantos números são ímpares
Exercício 2
Crie um programa que:
Leia 10 números
Armazene em um vetor
Ordene os números em ordem crescente
Exiba o vetor ordenado
Exercício 3
Crie um programa que inicialize uma matriz 4 x 3 e imprima a matriz transposta.
Transposta: Dado uma matriz de , a matriz transposta é definida como .
Exercício 4
Crie um programa que calcule e imprime a multiplicação de duas matrizes. Se as matrizes forem incompatíveis, o programa deve exibir uma mensagem de erro.