• 【重拾C语言】六、批量数据组织(一)数组(数组类型、声明与操作、多维数组;典例:杨辉三角、矩阵乘积、消去法)


    目录

    前言

    六、批量数据组织——数组

    6.1 成绩统计——数组类型

    6.1.1 数组类型

    6.1.2 数组声明与操作

    6.1.3 成绩统计

    6.2 统计多科成绩——多维数组

    6.3 程序设计实例

    6.3.1 杨辉三角形

    6.3.2 矩阵乘积

    6.3.3 消去法

    6.4 线性表——分类与检索


    前言

    ChatGPT

            C语言是一种通用的、过程式的计算机编程语言,由贝尔实验室的Dennis Ritchie在20世纪70年代初开发。它被设计成一种简单、高效和可移植的语言,用于系统级编程和应用程序开发。

    以下是C语言的一些主要特点:

    1. 结构化编程:C语言支持结构化编程,它提供了顺序执行、条件语句(如if-else和switch)和循环结构(如for和while),使程序更易于阅读、理解和维护。

    2. 中级语言:C语言同时具备高级语言和低级语言的特点。它提供了丰富的控制结构和操作符,可以直接访问内存和硬件,并且允许程序员进行底层的操作,如位操作和指针运算。

    3. 可移植性:C语言编写的程序具有很高的可移植性,因为它的语法和特性在不同的计算机系统上基本保持一致。这使得程序可以在不同的平台上进行编译和执行,而无需对代码进行太多的修改。

    4. 强大的标准库:C语言提供了一个丰富的标准库,其中包含了各种函数和工具,用于处理输入输出、字符串操作、内存管理、数学运算等。这些函数可以提高程序开发的效率,并且可以跨平台使用。

    5. 面向系统编程:由于C语言具有直接访问内存和硬件的能力,它经常用于开发操作系统、嵌入式系统和驱动程序等底层软件。C语言还提供了位操作和指针等特性,使得程序员可以更好地控制系统资源。

    6. 扩展性:C语言允许程序员编写自定义的函数和库,以扩展语言的功能。这使得C语言非常适合大型项目的开发,可以将代码组织成模块化的结构,并通过函数调用进行复用。

            尽管C语言相对较为底层,但它仍然是一种非常重要和广泛应用的编程语言。它为程序员提供了强大的控制能力和性能优势,并且在各种领域,如系统编程、嵌入式开发、游戏开发等方面都得到了广泛应用。许多现代编程语言,如C++、Java和Python,都受到了C语言的影响,并在其基础上进行了扩展和改进。

            C语言中的数组是一种用于存储多个相同类型元素的数据结构。它是一种线性数据结构,可以按照索引访问和操作其中的元素。数组在C语言中被广泛应用于各种编程任务,包括数据的组织、存储和处理。同时,数组也是其他数据结构和算法的基础,如字符串、栈、队列、排序算法等。

    六、批量数据组织——数组

    6.1 成绩统计——数组类型

    6.1.1 数组类型

    • 数组是个数固定、类型相同的若干个变量的有序集合;
    • 数组中的变量称为数组元素;
    • 通常用数组来表示向量、矩阵等;
    • 举例:
      • int a[50],j[11] ;

      • 一个单词 由  若干个    字符   组成
        • char word[1000];

      • 一个向量 由  若干个    实数  组成
        • float data[4];

      • 一个矩阵 由  若干个    向量  组成
        • float vector[2][4];

    6.1.2 数组声明与操作

            在C语言中,声明一个数组需要指定元素的类型和数组的名称,还可以指定数组的大小(即元素的数量)。以下是一个示例的数组声明:    

            79b28db9022d452487302e2a2e947185.png

            在上述示例中,我们声明了一个名为a的整型数组,它包含了5个元素。

            数组的元素可以通过索引访问,索引从0开始,依次增加。例如,要访问数组中的第一个元素,可以使用numbers[0];要访问第三个元素,可以使用numbers[2]。我们可以使用索引来读取、修改或赋值数组中的元素。  

            注意:数组的有效索引范围是从0到数组大小减1。如果尝试访问超出数组边界的索引,将导致未定义的行为或错误。

    6.1.3 成绩统计

    1. #include
    2. #define SIZE 5
    3. int main() {
    4. int scores[SIZE]; // 存储成绩的数组
    5. int i;
    6. int sum = 0;
    7. float average;
    8. // 读取成绩
    9. printf("请输入%d个学生的成绩:\n", SIZE);
    10. for (i = 0; i < SIZE; i++) {
    11. printf("学生%d的成绩:", i + 1);
    12. scanf("%d", &scores[i]);
    13. }
    14. // 计算总分
    15. for (i = 0; i < SIZE; i++) {
    16. sum += scores[i];
    17. }
    18. // 计算平均成绩
    19. average = (float)sum / SIZE;
    20. // 打印结果
    21. printf("总成绩:%d\n", sum);
    22. printf("平均成绩:%.2f\n", average);
    23. return 0;
    24. }

    8238405bbd42421e9e1f2d4cacf9ae8c.png

    6.2 统计多科成绩——多维数组

           C语言的数组还支持多维数组的概念。多维数组是指包含多个维度的数组,可以用于表示表格、矩阵等复杂的数据结构。例如,以下是一个二维数组的声明和访问示例:

    1. int matrix[3][3]; // 声明一个3x3的整型矩阵
    2. // 访问矩阵中的元素
    3. matrix[0][0] = 1; // 第一行第一列的元素
    4. matrix[1][2] = 5; // 第二行第三列的元素

            在上述示例中,声明了一个名为matrix的二维整型数组,它是一个3x3的矩阵。通过使用两个索引,我们可以访问矩阵中的特定元素。

    1. #include
    2. #define NUM_STUDENTS 5
    3. #define NUM_SUBJECTS 3
    4. int main() {
    5. int scores[NUM_STUDENTS][NUM_SUBJECTS]; // 存储成绩的二维数组
    6. int i, j;
    7. int sum[NUM_STUDENTS] = {0}; // 每个学生的总分
    8. float average[NUM_STUDENTS]; // 每个学生的平均成绩
    9. // 读取成绩
    10. printf("请输入%d个学生的%d门成绩:\n", NUM_STUDENTS, NUM_SUBJECTS);
    11. for (i = 0; i < NUM_STUDENTS; i++) {
    12. printf("学生%d的成绩:\n", i + 1);
    13. for (j = 0; j < NUM_SUBJECTS; j++) {
    14. printf("科目%d:", j + 1);
    15. scanf("%d", &scores[i][j]);
    16. sum[i] += scores[i][j];
    17. }
    18. average[i] = (float)sum[i] / NUM_SUBJECTS;
    19. }
    20. // 打印结果
    21. printf("\n学生成绩统计:\n");
    22. for (i = 0; i < NUM_STUDENTS; i++) {
    23. printf("学生%d的总成绩:%d\n", i + 1, sum[i]);
    24. printf("学生%d的平均成绩:%.2f\n\n", i + 1, average[i]);
    25. }
    26. return 0;
    27. }

    1. 请输入5个学生的3门成绩:
    2. 学生1的成绩:
    3. 科目11
    4. 科目22
    5. 科目33
    6. 学生2的成绩:
    7. 科目14
    8. 科目25
    9. 科目36
    10. 学生3的成绩:
    11. 科目17
    12. 科目28
    13. 科目39
    14. 学生4的成绩:
    15. 科目19
    16. 科目28
    17. 科目37
    18. 学生5的成绩:
    19. 科目16
    20. 科目25
    21. 科目34
    22. 学生成绩统计:
    23. 学生1的总成绩:6
    24. 学生1的平均成绩:2.00
    25. 学生2的总成绩:15
    26. 学生2的平均成绩:5.00
    27. 学生3的总成绩:24
    28. 学生3的平均成绩:8.00
    29. 学生4的总成绩:24
    30. 学生4的平均成绩:8.00
    31. 学生5的总成绩:15
    32. 学生5的平均成绩:5.00

    6.3 程序设计实例

    6.3.1 杨辉三角形

            杨辉三角形是一个由数字排列成三角形的数列,它的每个数字等于它上方两个数字的和。以下是使用一维数组实现的杨辉三角形的打印代码示例:

    1. #include
    2. #define MAX_ROWS 10
    3. int main() {
    4. int triangle[MAX_ROWS][MAX_ROWS];
    5. // 初始化杨辉三角形的第一列和对角线为1
    6. for (int i = 0; i < MAX_ROWS; i++) {
    7. triangle[i][0] = 1;
    8. triangle[i][i] = 1;
    9. }
    10. // 计算并填充杨辉三角形的其他元素
    11. for (int i = 2; i < MAX_ROWS; i++) {
    12. for (int j = 1; j < i; j++) {
    13. triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j];
    14. }
    15. }
    16. // 打印杨辉三角形
    17. for (int i = 0; i < MAX_ROWS; i++) {
    18. for (int j = 0; j <= i; j++) {
    19. printf("%d ", triangle[i][j]);
    20. }
    21. printf("\n");
    22. }
    23. return 0;
    24. }

    b063a3493aef4b68ae5571554722931f.png

    6.3.2 矩阵乘积

            矩阵乘积是指两个矩阵相乘得到的结果矩阵。

    1. #include
    2. #define ROWS_A 2
    3. #define COLS_A 3
    4. #define ROWS_B 3
    5. #define COLS_B 2
    6. void matrixMultiply(int A[ROWS_A][COLS_A], int B[ROWS_B][COLS_B], int C[ROWS_A][COLS_B]) {
    7. for (int i = 0; i < ROWS_A; i++) {
    8. for (int j = 0; j < COLS_B; j++) {
    9. C[i][j] = 0;
    10. for (int k = 0; k < COLS_A; k++) {
    11. C[i][j] += A[i][k] * B[k][j];
    12. }
    13. }
    14. }
    15. }
    16. int main() {
    17. int matrixA[ROWS_A][COLS_A] = {{1, 2, 3}, {4, 5, 6}};
    18. int matrixB[ROWS_B][COLS_B] = {{7, 8}, {9, 10}, {11, 12}};
    19. int result[ROWS_A][COLS_B];
    20. matrixMultiply(matrixA, matrixB, result);
    21. printf("Result:\n");
    22. for (int i = 0; i < ROWS_A; i++) {
    23. for (int j = 0; j < COLS_B; j++) {
    24. printf("%d ", result[i][j]);
    25. }
    26. printf("\n");
    27. }
    28. return 0;
    29. }

    e6ed604c03d04d84b66571093ddccbf1.png

    6.3.3 消去法

            消去法是一种解线性方程组的方法,通过行变换将方程组化为上三角形矩阵,然后回代求解未知数。

    1. #include
    2. #define SIZE 3
    3. void gaussianElimination(float matrix[SIZE][SIZE], float constants[SIZE], float solutions[SIZE]) {
    4. for (int k = 0; k < SIZE - 1; k++) {
    5. for (int i = k + 1; i < SIZE; i++) {
    6. float factor = matrix[i][k] / matrix[k][k];
    7. for (int j = k; j < SIZE; j++) {
    8. matrix[i][j] -= factor * matrix[k][j];
    9. }
    10. constants[i] -= factor * constants[k];
    11. }
    12. }
    13. for (int i = SIZE - 1; i >= 0; i--) {
    14. solutions[i] = constants[i];
    15. for (int j = i + 1; j < SIZE; j++) {
    16. solutions[i] -= matrix[i][j] * solutions[j];
    17. }
    18. solutions[i] /= matrix[i][i];
    19. }
    20. }
    21. int main() {
    22. float matrix[SIZE][SIZE] = {{2, -1, 1}, {-3, 2, -2}, {1, -1, 2}};
    23. float constants[SIZE] = {-2, 6, 5};
    24. float solutions[SIZE];
    25. gaussianElimination(matrix, constants, solutions);
    26. printf("Solutions:\n");
    27. for (int i = 0; i < SIZE; i++) {
    28. printf("x%d = %.2f\n", i+1, solutions[i]);
    29. }
    30. return 0;
    31. }

    c2a3b4e2691a4d01a9625fed3dfeb16e.png

    6.4 线性表——分类与检索

    【重拾C语言】六、批量数据组织(二)线性表——分类与检索(主元排序、冒泡排序、插入排序、顺序检索、对半检索)_QomolangmaH的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_63834988/article/details/133620693?spm=1001.2014.3001.5501

  • 相关阅读:
    springboot+jsp+ssm助农系统农产品宣传网站设计
    K8s之Replicaset控制器详解
    PowerShell系列(十二):PowerShell Cmdlet高级参数介绍(二)
    OpUtils局域网唤醒:远程引导计算机
    万丈高楼平地起——基于飞桨PaddleGAN与PaddleRS实现建筑物样本扩充工具
    Redis常用命令补充和持久化
    ImageMagick命令注入漏洞(CVE-2016–3714)
    C++类型转换
    就近值 reduce用法 时间戳与时间点对比循环查找
    基于springboot医院碳排放管理平台设计与实现-计算机毕业设计源码+LW文档
  • 原文地址:https://blog.csdn.net/m0_63834988/article/details/133580645