Matriz de linguagem C de programação avançada em linguagem C
Tutorial avançado de linguagem C - array de linguagem C (1)
Muitas vezes precisamos armazenar um grande número de valores de dados de algum tipo em um programa.
- Por exemplo, se você escrever um programa que rastreie o desempenho de um time de basquete, precisará armazenar os pontos do jogo e os pontos do jogador para uma temporada e, em seguida, exibir os pontos de um jogador para toda a temporada ou calcular a pontuação da temporada como o jogo progride pontuação média.
- Podemos escrever um programa que usa uma variável diferente para cada pontuação. No entanto, se houver muitos jogos em uma temporada, isso pode ser muito complicado, porque cada jogador com um jogo precisa de muitas variáveis.
- todos os resultados de basqueteOs tipos são os mesmos, a diferença é a pontuação, mas todas são pontuações de basquete.
- Idealmente, esses pontos devem ser organizados sob um nome, como o nome do jogador, para que não haja a necessidade de definir variáveis para cada item de dados.
- Este artigo apresentará como usar arrays em programas em linguagem C e, em seguida, como se referir a um conjunto de valores por um nome ao escrever programas que usam arrays.
Em primeiro lugar, a introdução do problema
- A melhor maneira de ilustrar o conceito de arrays e sua utilidade é através de um exemplo de como programas simples podem se tornar ao trabalhar com arrays. Este exemplo calculará a nota média dos alunos em uma turma.
Para calcular a nota média dos alunos em uma turma, suponha que haja apenas 10 alunos na turma. Para calcular a média de um conjunto de números, some todos eles e divida pelo número de números para obter a média:
- O procedimento é o seguinte
#define _CRT_SECURE_NO_WARNINGS
#include "Main.h"
int main()
{
system("color 3E");
// 存储学生成绩值
int grade = 0;
// 学生人数
unsigned int count = 10;
// /成绩的总和
long sum = 0L;
// 成绩的平均值
float average = 0.0f;
for (unsigned int i = 0; i < count; ++i)
{
printf("输入第%d个学生成绩: ", i + 1);
scanf("%d", &grade);
sum += grade; // 把它加到sum
}
average = (float)sum / count; // 计算平均值
printf("\n十个学生的平均成绩是: %f\n", average);
system("pause");
return 0;
}
Pressione F5 para depurar o resultado da seguinte forma
- Se você estiver interessado apenas na média, não precisará armazenar as pontuações acima. Este programa soma todas as pontuações e as divide por contagem (que é 10).
- Este programa simples usa apenas uma nota variável para armazenar cada nota inserida no loop. O loop é executado quando o valor de i é 0, 1, 2, 3...9 para um total de 10 iterações.
- Suponha que você queira escrever este programa em um programa mais complexo, você precisa inserir alguns valores, depois gerar a pontuação de cada pessoa e, finalmente, gerar a pontuação média.
- No programa acima, há apenas uma variável. Cada vez que um ponto é adicionado, o valor do ponto antigo é substituído e não pode ser usado novamente.
- Como armazenar todas as pontuações? Você pode declarar 10 variáveis inteiras para armazenar frações, mas não pode inserir esses valores em um loop for. Em vez disso, você precisa adicionar código para ler esses valores um por um. Mas isso é muito complicado.
- Neste momento, arrays devem ser usados para resolver o problema de armazenamento numérico
2. O que é uma matriz
- Uma matriz é um número fixo de itens de dados do mesmo tipo, e os itens de dados na matriz são chamados de elementos.
- Os elementos na matriz são todos int, long ou outros tipos.
- A declaração de matriz a seguir é muito semelhante a declarar uma variável normal com um único valor, mas com um número entre colchetes após o nome.
números longos[10];
- O número entre colchetes define o número de elementos a serem armazenados no array, chamado de dimensão do array. As matrizes têm um tipo que combina o tipo de elementos e o número de elementos na matriz. Portanto, se dois arrays têm o mesmo número de elementos e o mesmo tipo, os dois arrays são do mesmo tipo.
- Cada item de dados armazenado no array é acessado com o mesmo nome, que neste caso são
números. - Para selecionar um elemento, use o valor do índice entre colchetes após o nome da matriz.
- Os valores de índice são inteiros consecutivos a partir de 0. 0 é o valor do índice do primeiro elemento, e o valor do índice do elemento da matriz de números anterior é 0~9. O valor de índice
0 representa o primeiro elemento e o valor de índice 9 representa o último elemento. Assim, os elementos do array podem ser representados como números[0],
números[1], números[…números[9].
Como mostrado abaixo
3. Use matrizes
- O seguinte usará o conhecimento de matriz para resolver o problema de pontuação média.
- Use uma matriz para armazenar todas as pontuações a serem calculadas. ou seja, armazenar todas as pontuações para que possam ser reutilizadas.
Agora reescreva o programa para calcular a média de 10 pontuações: o
código fica assim:
#define _CRT_SECURE_NO_WARNINGS
#include "Main.h"
int main()
{
system("color 3E");
// 存储学生成绩的数组
int grades[10];
// 学生人数
unsigned int count = 10;
// /成绩的总和
long sum = 0L;
// 成绩的平均值
float average = 0.0f;
printf("输入十个学生的成绩分数值:\n");
for (unsigned int i = 0; i < count; ++i)
{
printf("输入第%d个学生成绩--> ", i + 1);
scanf("%d", &grades[i]);
sum += grades[i];
}
average = (float)sum / count; // 计算平均值
printf("\n十个学生的平均成绩是: %.2f\n", average);
system("pause");
return 0;
}
Pressione F5 para depurar o resultado da seguinte forma
- O programa inicia com o usual #include <stdio.h>, já que as funções printf() e scanf() são usadas aqui.
- No início da função main(), declare um array de 10 inteiros, seguido de algumas variáveis necessárias para o cálculo:
// 存储学生成绩的数组
int grades[10];
// 学生人数
unsigned int count = 10;
// /成绩的总和
long sum = 0L;
// 成绩的平均值
float average = 0.0f;
-
A variável de contagem é do tipo unsigned int porque deve ser não negativa.
-
Em seguida, solicite uma pontuação com a seguinte declaração:
printf("输入十个学生的成绩分数值:\n");
- Em seguida, use um loop para ler os valores e acumulá-los:
for (unsigned int i = 0; i < count; ++i)
{
printf("输入第%d个学生成绩--> ", i + 1);
scanf("%d", &grades[i]);
sum += grades[i];
}
-
O loop for usa o formato padrão e o loop continua enquanto i for menor que count. O loop conta de 0 a 9,
não de 1 a 10, então cada membro do array pode ser acessado diretamente usando a variável de loop i. -
Use a função scanf() para ler cada valor da entrada no elemento i do array: o 1º valor é armazenado em number[0], o 2º valor de entrada é armazenado em number[1]... o 10º valor de entrada é armazenado em number[9].
-
Em cada iteração do loop, o valor lido é adicionado à soma. Quando o loop terminar, calcule e exiba a média com a seguinte instrução:
average = (float)sum / count; // 计算平均值
printf("\n十个学生的平均成绩是: %.2f\n", average);
- O método de calcular a média é dividir a soma pelo número de frações contadas, e o valor da contagem é 10.
Este programa também pode adicionar a função de inserir as notas de cada aluno. O
código adicionado é o seguinte
for (unsigned int i = 0; i < count; i++)
{
printf("第%d个学生的成绩是: %d\n", i, grades[i]);
}
Pressione F5 para depurar o resultado da seguinte forma
- Este loop for itera sobre os elementos na matriz e gera cada valor. Use a variável de controle de loop como
o número de sequência correspondente a cada elemento e acesse o elemento do array correspondente. Os valores numéricos desses elementos obviamente correspondem aos números inseridos. - Para obter uma pontuação começando em 1, você pode usar a expressão i+1 na instrução de saída para obter uma pontuação de 1 a 10, já que i é de 0
a 9.
4. Programa completo
O código completo do programa é o seguinte
- arquivo main.h
#pragma once
#include <stdio.h>
#include <stdlib.h>
- arquivo main.c
#define _CRT_SECURE_NO_WARNINGS
#include "Main.h"
int main()
{
system("color 3E");
存储学生成绩值
//int grade = 0;
学生人数
//unsigned int count = 10;
//
/成绩的总和
//long sum = 0L;
//
成绩的平均值
//float average = 0.0f;
//for (unsigned int i = 0; i < count; ++i)
//{
// printf("输入第%d个学生成绩: ", i + 1);
// scanf("%d", &grade);
// sum += grade; // 把它加到sum
//}
//average = (float)sum / count; // 计算平均值
//printf("\n十个学生的平均成绩是: %f\n", average);
// 存储学生成绩的数组
int grades[10];
// 学生人数
unsigned int count = 10;
// /成绩的总和
long sum = 0L;
// 成绩的平均值
float average = 0.0f;
printf("输入十个学生的成绩分数值:\n");
for (unsigned int i = 0; i < count; ++i)
{
printf("输入第%d个学生成绩--> ", i + 1);
scanf("%d", &grades[i]);
sum += grades[i];
}
average = (float)sum / count; // 计算平均值
for (unsigned int i = 0; i < count; i++)
{
printf("第%d个学生的成绩是: %d\n", i, grades[i]);
}
printf("\n十个学生的平均成绩是: %.2f\n", average);
system("pause");
return 0;
}