C语言多维数组

下面是“C语言多维数组”的完整使用攻略。

多维数组的定义与初始化

在C语言中,多维数组可以用来存储表格或矩阵等数据结构,它由一系列一维数组所组成,因此可以说,多维数组其实就是数组的数组。在定义多维数组时,需要确定它的维数和每一维的大小,例如:

int arr[3][4]; //表示一个3行4列,总共12个元素的二维数组

也可以在定义同时初始化,例如:

int arr[2][2] = {{1, 2}, {3, 4}}; //表示一个2行2列的二维数组,初始值分别为1,2,3,4

需要注意的是,在C语言中,多维数组不一定要求每一维的大小相同,比如可以这样定义一个不规则的三维数组:

int arr[2][3][4] = {
    {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}},
    {{13, 14, 15, 16}, {17, 18, 19, 20}}
};

多维数组的访问

C语言中的多维数组是通过一维数组来实现的,因此在访问多维数组元素时,需要根据每一维的大小计算出在一维数组中的位置,然后通过数组下标访问,例如:

int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};
int a = arr[0][1]; //访问第1行第2列的元素,结果为2
int b = arr[1][2]; //访问第2行第3列的元素,结果为6

下面以一个三维数组为例,访问其中的元素:

int arr[2][3][4] = {
    {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}},
    {{13, 14, 15, 16}, {17, 18, 19, 20}}
};
int c = arr[0][1][2]; //访问第1个3维数组中第2行第3列的元素,结果为7
int d = arr[1][0][3]; //访问第2个3维数组中第1行第4列的元素,结果为16

多维数组的传递

在C语言中,多维数组作为函数参数时,需要指定每一维的大小,否则会出现编译错误。例如,如果定义一个函数用来打印二维数组,其参数应该如下:

void printArray(int arr[][3], int rows)
{
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }
}

这样,我们就可以将一个二维数组传递给该函数进行打印了,例如:

int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};
printArray(arr, 2);

示例说明

下面给出两个示例来说明多维数组的使用。

示例1:使用多维数组求矩阵的乘积

给定两个矩阵A和B,分别为3行4列和4行2列,求两个矩阵的乘积C,即:

     |1 2 3 4|   |5 6|   |? ?|
A =  |5 6 7 8|,  |7 8| = |? ?|
     |9 0 1 2|   |9 0|   |? ?|

首先,定义三个二维数组A、B和C用来存储矩阵:

int A[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 0, 1, 2}};
int B[4][2] = {{5, 6}, {7, 8}, {9, 0}, {1, 2}};
int C[3][2] = {};

然后,使用两重循环,分别遍历A和B矩阵中的元素,把它们相乘后累加到C矩阵对应位置上:

for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 2; j++) {
        for (int k = 0; k < 4; k++) {
            C[i][j] += A[i][k] * B[k][j];
        }
    }
}

最后,输出C矩阵的元素即可:

printf("%d %d\n", C[0][0], C[0][1]);
printf("%d %d\n", C[1][0], C[1][1]);
printf("%d %d\n", C[2][0], C[2][1]);

输出结果为:

38 44
97 114
46 54

示例2:使用多维数组统计成绩并计算平均分

有5名学生,每人分别参加3门课程的考试,分数如下表所示,请使用多维数组统计每门课程的总分和平均分,并分别输出。

   |语文  数学  英语|
李明| 85   92     78|
王华| 76   85     67|
张强| 90   85     88|
赵丽| 88   79     92|
刘洋| 66   79     83|

首先,定义一个二维数组score用来存储每个学生每门课程的成绩,并初始化它:

int score[5][3] = {{85, 92, 78}, {76, 85, 67}, {90, 85, 88}, {88, 79, 92}, {66, 79, 83}};

然后,定义两个一维数组sum和avg分别用来存储每门课程的总分和平均分:

int sum[3] = {}, avg[3] = {};

接着,使用两重循环,分别遍历score中的每个元素,把它们累加到sum中:

for (int i = 0; i < 5; i++) {
    for (int j = 0; j < 3; j++) {
        sum[j] += score[i][j];
    }
}

最后,计算平均分并输出:

for (int i = 0; i < 3; i++) {
    avg[i] = sum[i] / 5;
    printf("%s%d%s%d%s%d%s%d\n", "第", i+1, "门课程总分为:", sum[i], ",平均分为:", avg[i], "。");
}

输出结果为:

第1门课程总分为:405,平均分为:81。
第2门课程总分为:420,平均分为:84。
第3门课程总分为:408,平均分为:81。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言多维数组 - Python技术站

(0)
上一篇 2023年5月10日
下一篇 2023年5月10日

相关文章

  • C语言编写基于TCP和UDP协议的Socket通信程序示例

    下面我来为你详细讲解“C语言编写基于TCP和UDP协议的Socket通信程序示例”的攻略。 一、Socket简介 Socket(套接字)是一种应用程序编程接口(API),也是一种通信协议,用于在计算机网络上实现进程间通信和数据传输。Socket可以用于不同操作系统之间、不同应用程序之间、不同计算机之间的通信。 二、基于TCP协议的Socket通信 1. 创建…

    C 2023年5月22日
    00
  • C语言编程中常见的五种错误及对应解决方案

    C语言编程中常见的五种错误及对应解决方案 C语言作为一门古老而广泛应用的编程语言,因为其高效、灵活、强大的特性受到了广泛的关注和使用。但是,在编写C程序时,常常会遇到各种错误,本文将介绍C语言编程中常见的五种错误及对应的解决方案,以帮助读者更好地避免这些错误并提高编程能力。 1. 语法错误(Syntax Error) 语法错误指在编译程序时发生的错误,通常是…

    C 2023年5月23日
    00
  • php和js如何通过json互相传递数据相关问题探讨

    PHP和JS通过JSON进行数据交互是非常常见的做法,通常来说,大多数数据都是以JSON格式进行传递的。下面是一些具体的做法: 通过PHP将数据编码成JSON格式 在PHP中,可以使用json_encode()函数将数据编码成JSON格式。例如,假设我们有一个名为$person的关联数组,里面包含有一个人的名字和年龄。我们可以这样来使用json_encode…

    C 2023年5月23日
    00
  • 详解如何将c语言文件打包成exe可执行程序

    下面详细讲解如何将C语言文件打包成可执行程序。 1. 编写C语言代码 首先,需要编写C语言代码,比如我们可以写一个非常简单的“Hello World”程序,代码如下: #include <stdio.h> int main() { printf("Hello World!\n"); return 0; } 把以上程序保存为ma…

    C 2023年5月23日
    00
  • C语言设计前中后队列实例代码

    C语言设计前中后队列实例代码攻略 在本篇文章中,我们将学习如何在C语言中设计前、中、后队列,并提供相应的示例代码。下面将分别对前、中、后队列进行介绍和说明。 前队列 前队列,也称为顺序队列。它是一种数据结构,它具有先进先出(First in First Out,简称FIFO)的特点,是一种简单但基本的数据结构,常用在队列缓存、消息队列、web服务器等领域。下…

    C 2023年5月24日
    00
  • C语言中强制类型转换的常见方法

    C语言中的强制类型转换指的是将一个数据类型转换成另一个数据类型。常见的强制类型转换方法包括以下几种: 1. 强制转换运算符 强制转换运算符包括(type)value、type(val)两种写法,其中type为要转换的目标数据类型,value为要转换的源数据。 示例: double a = 3.141592; int b = (int)a; // 强制将dou…

    C 2023年5月24日
    00
  • C 程序 指针变量

    关于C程序中的指针变量,以下是一个完整的使用攻略。 1. 什么是指针变量? 指针变量,顾名思义,是指向内存中某个地址的变量,它可以存储变量或者常量的地址,也可以指向另一个指针变量的地址。 1.1 声明指针变量 在声明指针变量时,需要指定指针变量指向的数据类型,以及指针变量本身的类型。如下是指针变量的声明方式: int *p; // p是一个指向int类型数据…

    C 2023年5月10日
    00
  • C语言进制转换代码分享

    关于C语言进制转换代码分享的完整攻略,我将从如下几个方面进行详细讲解: 算法思路 代码实现 示例说明 1. 算法思路 进制转换主要是将一个数从一种进制转换为另一种进制,比如将二进制数转换为十进制数、将十进制数转换为十六进制数等。 其中,将一个整数从十进制转换为另一种进制的方法是通过除余法实现的。具体过程如下: 用被转换的数一直除以进制数(转换后的进制数),取…

    C 2023年5月24日
    00
合作推广
合作推广
分享本页
返回顶部