C Language Advanced Tutorial-C Language Array (5): Inicialización de matrices bidimensionales (multidimensionales) y ejemplos completos basados en matrices->Problema de selección de sombreros

Tutorial avanzado de lenguaje C: matriz de lenguaje C (5): inicialización de matriz bidimensional (multidimensional) y ejemplos completos basados ​​en matrices -> problema de selección de sombreros

inserte la descripción de la imagen aquí

1. El entorno de compilación de este artículo.

El entorno de compilación de este artículo utiliza un entorno de desarrollo integrado: Visual Studio 2019
inserte la descripción de la imagen aquí

El enlace al sitio web oficial de Visual Studio 2019 es el siguiente

Enlace al sitio web oficial de Visual Studio 2019
inserte la descripción de la imagen aquí

Las características del entorno de desarrollo integrado de Visual Studio 2019 son

  • Visual Studio 2019 instala el servicio de colaboración de código Live Share de forma predeterminada.
  • Nueva ventana de bienvenida para ayudar a los usuarios a escribir código rápidamente, funcionalidad de búsqueda mejorada, mejoras de rendimiento general.
  • Ayuda de Visual Studio IntelliCode AI.
  • Mejor virtualización de Python y compatibilidad con Conda.
  • Y soporte para proyectos .NET Core 3.0, incluidos WinForms y WPF, etc.

2. Inicialización de matriz bidimensional

  • Los arreglos bidimensionales se inicializan de manera similar a los arreglos unidimensionales.
  • La diferencia es poner el valor inicial de cada fila entre llaves {} y poner todas las filas entre un par de llaves.
	// 二维数组的初始化
	int numbers[3][4] =
	{
    
    
		{
    
    10,20,30,40}, // 第一行的值 
		{
    
    15,25,35,45}, // 第二行的值 
		{
    
    47,48,49,50}  // 第三行的值 
	};
  • Cada conjunto de valores para un elemento en una fila de inicialización está encerrado entre llaves, y todos los valores iniciales están encerrados en otro par de llaves. Los valores en una fila están separados por comas, y los valores en cada fila deben estar separados por comas.
  • Si el valor inicial especificado es menor que el número de elementos en una fila, estos valores se asignarán a cada elemento en secuencia a partir del primer elemento de cada fila, y los elementos restantes que no hayan especificado un valor inicial serán inicializado a 0.

Proporcione solo: un valor, puede inicializar toda la matriz a 0:

int numbers[3] [4] = {
    
    0};

3. Inicialización de matriz tridimensional

  • Los arreglos tridimensionales son una extensión de los arreglos bidimensionales.
  • Las matrices tridimensionales se inicializan con 3 niveles de paréntesis anidados.
  • Los paréntesis interiores contienen el valor inicial de cada fila.

La inicialización de la matriz tridimensional es la siguiente

// 三维数组初始化
	int numbers[2][3][4] = 
	{
    
    
		{
    
    
			// 第一个块3行
			{
    
    10,20,30,40},
			{
    
    15,25,35,45},
			{
    
    47,48,49,50}
			},
			{
    
    
			// 第二个块3行
			{
    
    10,20,30,40},
			{
    
    15,25,35,45},
			{
    
    47,48,49,50}
		}
	};
  • Se puede ver que el valor inicializado se coloca en los corchetes externos uno por uno. Los corchetes externos se componen de dos bloques que contienen líneas 3. Cada bloque también se coloca entre paréntesis, y cada línea en cada bloque también está entre paréntesis, por lo que la matriz tridimensional tiene 3 niveles de paréntesis anidados.
  • En términos generales, por ejemplo, una matriz de seis dimensiones utiliza 6 capas de corchetes anidados para contener el valor inicial del elemento. Puede omitir
    los paréntesis para cada fila, pero es más seguro poner entre paréntesis el valor de cada fila porque es menos propenso a errores.

4. Use el ciclo for para encontrar la suma de los valores de los elementos de la matriz tridimensional

4.1, bucle for para encontrar la suma de los valores de los elementos de la matriz

El código para usar el bucle for para encontrar la suma de los valores de los elementos de la matriz tridimensional es el siguiente

	int sum = 0;

	// 使用for循环求三维数组元素值的和
	for (int i = 0; i < 2; i++)
	{
    
    
		for (int j = 0; j < 3; j++)
		{
    
    
			for (int k = 0; k < 4; k++)
			{
    
    
				sum += numbers[i][j][k];
			}
		}
	}

	printf("使用for循环求三维数组元素值的和为:%d\n", sum);
  • Cada bucle itera sobre una dimensión de matriz.
  • Para cada valor de i, se ejecuta completamente el ciclo controlado por j, y para cada valor de i, se ejecuta completamente el ciclo controlado por k.

4.2 El resultado de ejecución del ciclo for para calcular la suma de los valores de los elementos de la matriz

El resultado de ejecución del ciclo for para calcular la suma de los valores de los elementos de la matriz es el siguiente

inserte la descripción de la imagen aquí

5. Use el operador sizeof para encontrar la suma de los valores de los elementos de la matriz tridimensional

5.1 El operador sizeof calcula la suma de los valores de los elementos del arreglo

El código para usar el operador sizeof para encontrar la suma de los valores de los elementos de una matriz tridimensional es el siguiente

	// 使用sizeof运算符求三维数组元素值的和
	sum = 0;
	for (int i = 0; i < sizeof(numbers) / sizeof(numbers[0]); i++)
	{
    
    
		for (int j = 0; j < sizeof(numbers[0]) / sizeof(numbers[0][0]); j++)
		{
    
    
			for (int k = 0; k < sizeof(numbers[0][0]) / sizeof(numbers[0][0][0]); k++)
			{
    
    
				sum += numbers[i][j][k];
			}
		}
	}

	printf("使用sizeof运算符求三维数组元素值的和为:%d\n", sum);
  • Puede pensar en la matriz de números como una matriz de matrices bidimensionales.
  • La expresión sizeof(numbers) obtiene el número de bytes ocupados por la matriz de números completa, y sizeof(numbers[0]) obtiene la cantidad de bytes ocupados por la sub-matriz bidimensional, por lo que la expresión sizeof(numbers)/sizeof (numbers[0]) obtiene el número de elementos en la primera dimensión.
  • Del mismo modo, puede pensar en cada subarreglo bidimensional como un arreglo unidimensional de arreglos unidimensionales. Divida el número de bytes en la matriz bidimensional por el número de bytes en su subarreglo para obtener el número de subarreglos, que es la segunda dimensión de los números.
  • Finalmente, el valor tridimensional se obtiene dividiendo el número de bytes en el subarreglo unidimensional por el número de bytes en un elemento.

5.2 El operador sizeof calcula el resultado de la operación de la suma de los valores de los elementos del arreglo

El resultado de la operación del operador sizeof para calcular la suma de los valores de los elementos de la matriz es el siguiente

inserte la descripción de la imagen aquí

6. Ejemplo de síntesis de matriz: compra de sombrero

inserte la descripción de la imagen aquí

6.1 Descripción del problema

Ejemplo de síntesis de matrices: la descripción del problema de selección de sombreros es la siguiente

  • Usar un sombrero demasiado grande puede ser peligroso, puede tapar los ojos y hacer que alguien se golpee contra algo, lo que puede provocar lesiones o incluso la muerte.
  • Del mismo modo, usar un sombrero que es demasiado pequeño puede provocar dolores de cabeza constantes y hacer que uno se vea estúpido. El programa de este ejemplo usará una matriz para calcular el tamaño del sombrero. Sus unidades se usan comúnmente en los Estados Unidos y el Reino 6 1/2Unido 7 7/8.
  • Para el programa de este ejemplo, simplemente ingrese la circunferencia del sombrero en pulgadas y se mostrarán las dimensiones del sombrero.

6.2 Proceso de diseño del programa

6.2.1 Tamaño del sombrero definido por matriz

El código para el tamaño del sombrero definido con una matriz es el siguiente

	// 用数组定义的帽子大小与字符相同
    /*
    数组存储帽子的大小从6 1/2到7 7/8
    每一行定义一个大小相同的字符
    通过对三行使用相同的索引来选择大小。
    例如索引2选择6又3/4。
    */
    char size[3][12] = 
    {
    
               
       {
    
    '6', '6', '6', '6', '7', '7', '7', '7', '7', '7', '7', '7'},
       {
    
    '1', '5', '3', '7', ' ', '1', '1', '3', '1', '5', '3', '7'},
       {
    
    '2', '8', '4', '8', ' ', '8', '4', '8', '2', '8', '4', '8'}
    };

    // 数值为1/8英寸
    int headsize[12] =
    {
    
    
        164,166,169,172,175,178,181,184,188,191,194,197
    };

6.2.2 Definir variables relacionadas

El código para definir las variables relevantes es el siguiente

	float cranium = 0.0;                // 头围,十进制英寸
    int your_head = 0;                  // 头的八分之一
    bool hat_found = false;             // 表示找到合适的帽子

6.2.3 Introduzca la circunferencia de la cabeza

El código para ingresar la circunferencia de la cabeza se ve así

	// 输入头部的周长
    printf("输入您的眉毛以上的头部周长,以英寸为十进制值: ");
    scanf(" %f", &cranium);


    your_head = (int)(8.0 * cranium);      // 换算成八分之一英寸

6.2.4 Buscar la talla del sombrero

El código para buscar el tamaño del sombrero se ve así

	 /*
        搜索帽子的尺寸:
            要么你的头对应第一个头大小元素,要么你的头大于一个头大小元素,小于或等于下一个头大小元素。
            在本例中,大小是第二个头大小值。          
    */
    unsigned int i = 0;                     // 循环计数器
    if (your_head == headsize[i])           // 检查最小尺寸拟合
        hat_found = true;
    else
    {
    
    
        for (i = 1; i < 12; ++i)
        {
    
    
            // 在头部尺寸数组中查找头部尺寸
            if (your_head > headsize[i - 1] && your_head <= headsize[i])
            {
    
    
                hat_found = true;
                break;
            }
        }
    }

6.2.5 Salida de los resultados de la búsqueda de sombreros

El código para buscar el tamaño del sombrero se ve así

	// 输出探寻帽子的结果
    if (hat_found)
        printf("\n你的帽子大小是 %c %c%c%c\n\n",size[0][i], size[1][i], (size[1][i] == ' ') ? ' ' : '/', size[2][i]);
    // If no hat was found, the head is too small, or too large
    else
    {
    
    
        if (your_head < headsize[0])        // 检查是否太小
            printf("\n太小啦!你就是众所周知的针头。恐怕没有帽子给你了。\n\n");
        else                               // 它一定太大了
            printf("\n太大啦!用专业术语来说,你是个笨蛋。恐怕没有帽子给你了。\n\n");
    }

6.3 Resultados de la ejecución del programa

Ejemplo de síntesis de matriz: el resultado de ejecución del programa de compra de sombreros es el siguiente

  1. Resultados de ejecución de ajuste de tamaño de gorra
    inserte la descripción de la imagen aquí

  2. Ejecutar resultados con un tamaño de sombrero demasiado grande
    inserte la descripción de la imagen aquí

  3. Ejecutar resultado con tamaño de sombrero demasiado pequeño
    inserte la descripción de la imagen aquí

Siete, el programa completo

inserte la descripción de la imagen aquí

El programa completo de este artículo es el siguiente

5.1 Programa de archivo Main.h

#ifndef MAIN_H
#define MAIN_H


#include <stdio.h>
#include <stdlib.h>


#endif

5.2 Programa de archivos Main.c

#define _CRT_SECURE_NO_WARNINGS

#include "Main.h"

int main()
{
    
    
	system("color 3E");

	// 二维数组的初始化
	//int numbers[3][4] =
	//{
    
    
	//	{10,20,30,40}, // 第一行的值 
	//	{15,25,35,45}, // 第二行的值 
	//	{47,48,49,50}  // 第三行的值 
	//};

	//int numbers[3][4] = { 0 };

	// 三维数组初始化
	int numbers[2][3][4] = 
	{
    
    
		{
    
    
			// 第一个块3行
			{
    
    10,20,30,40},
			{
    
    15,25,35,45},
			{
    
    47,48,49,50}
			},
			{
    
    
			// 第二个块3行
			{
    
    10,20,30,40},
			{
    
    15,25,35,45},
			{
    
    47,48,49,50}
		}
	};



	int sum = 0;

	// 使用for循环求三维数组元素值的和
	for (int i = 0; i < 2; i++)
	{
    
    
		for (int j = 0; j < 3; j++)
		{
    
    
			for (int k = 0; k < 4; k++)
			{
    
    
				sum += numbers[i][j][k];
			}
		}
	}

	printf("使用for循环求三维数组元素值的和为:%d\n", sum);


	// 使用sizeof运算符求三维数组元素值的和
	sum = 0;
	for (int i = 0; i < sizeof(numbers) / sizeof(numbers[0]); i++)
	{
    
    
		for (int j = 0; j < sizeof(numbers[0]) / sizeof(numbers[0][0]); j++)
		{
    
    
			for (int k = 0; k < sizeof(numbers[0][0]) / sizeof(numbers[0][0][0]); k++)
			{
    
    
				sum += numbers[i][j][k];
			}
		}
	}

	printf("使用sizeof运算符求三维数组元素值的和为:%d\n", sum);

	system("pause");
	return 0;
}


5.3 Programa de archivos Hat.h

#ifndef HAT_H
#define HAT_H


#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>


#endif

5.4 Programa de archivos Hat.c

#define _CRT_SECURE_NO_WARNINGS

#include "Hat.h"


int main()
{
    
    
	system("color 3E"); 


    // 用数组定义的帽子大小与字符相同
    /*
    数组存储帽子的大小从6 1/2到7 7/8
    每一行定义一个大小相同的字符
    通过对三行使用相同的索引来选择大小。
    例如索引2选择6又3/4。
    */
    char size[3][12] = 
    {
    
               
       {
    
    '6', '6', '6', '6', '7', '7', '7', '7', '7', '7', '7', '7'},
       {
    
    '1', '5', '3', '7', ' ', '1', '1', '3', '1', '5', '3', '7'},
       {
    
    '2', '8', '4', '8', ' ', '8', '4', '8', '2', '8', '4', '8'}
    };

    // 数值为1/8英寸
    int headsize[12] =
    {
    
    
        164,166,169,172,175,178,181,184,188,191,194,197
    };

    float cranium = 0.0;                // 头围,十进制英寸
    int your_head = 0;                  // 头的八分之一
    bool hat_found = false;             // 表示找到合适的帽子

    // 输入头部的周长
    printf("输入您的眉毛以上的头部周长,以英寸为十进制值: ");
    scanf(" %f", &cranium);


    your_head = (int)(8.0 * cranium);      // 换算成八分之一英寸

    /*
        搜索帽子的尺寸:
            要么你的头对应第一个头大小元素,要么你的头大于一个头大小元素,小于或等于下一个头大小元素。
            在本例中,大小是第二个头大小值。          
    */
    unsigned int i = 0;                     // 循环计数器
    if (your_head == headsize[i])           // 检查最小尺寸拟合
        hat_found = true;
    else
    {
    
    
        for (i = 1; i < 12; ++i)
        {
    
    
            // 在头部尺寸数组中查找头部尺寸
            if (your_head > headsize[i - 1] && your_head <= headsize[i])
            {
    
    
                hat_found = true;
                break;
            }
        }
    }

    // 输出探寻帽子的结果
    if (hat_found)
        printf("\n你的帽子大小是 %c %c%c%c\n\n",size[0][i], size[1][i], (size[1][i] == ' ') ? ' ' : '/', size[2][i]);
    // If no hat was found, the head is too small, or too large
    else
    {
    
    
        if (your_head < headsize[0])        // 检查是否太小
            printf("\n太小啦!你就是众所周知的针头。恐怕没有帽子给你了。\n\n");
        else                               // 它一定太大了
            printf("\n太大啦!用专业术语来说,你是个笨蛋。恐怕没有帽子给你了。\n\n");
    }

	system("pause");
	return 0;
}

8. Resumen

inserte la descripción de la imagen aquí

Este artículo presenta principalmente el método de inicialización de la matriz multidimensional de la matriz de programación avanzada del lenguaje C.
Presenta cómo inicializar una matriz bidimensional.
Describe cómo inicializar matrices tridimensionales (multi).

Este artículo termina aquí.

  • Espero que la inicialización de matrices bidimensionales (multidimensionales) de este artículo y los ejemplos integrales basados ​​en matrices -> problema de selección de sombreros.
  • Puede ayudarte a aprender el lenguaje C.
  • Tu apoyo es la mayor motivación para mi creación.
    inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/m0_47419053/article/details/127342617
Recomendado
Clasificación