C语言学习笔记——排序和查找(二)

简介: C语言学习笔记——排序和查找

3.二维数组

3.1.二维数组代码示例

请用二维数组输出如下图形

0 0 0 0 0 0

0 0 1 0 0 0

0 2 0 3 0 0

0 0 0 0 0 0

#include<stdio.h>
void main() {
  int arr[4][6], i, j;
  for (i = 0; i < 4; i++) {//通过for循环将数组遍历,并给数组元素逐一赋值0
    for (j = 0; j < 6; j++) {
      arr[i][j] = 0;
    }
  }
  arr[2][1] = 2;
  arr[2][3] = 3;
  arr[1][2] = 1;
  for (i = 0; i < 4; i++) {
    for (j = 0; j < 6; j++) {
      printf("%d ", arr[i][j]);
    }
    printf("\n");
  }
}

bb14f221c942417da812d1c47834ef2f.png

1.首先通过数组的遍历(第一个for循环中,外层for循环为行遍历,内层for循环为列遍历),将数组元素逐一赋值为0

a33eccdf0bd240c79a4b3f89d0f8ce0f.png

2.后通过单一数组元素赋值,将某些元素赋值为特定的值

4ab60af582104263b678d3d3fa9651c8.png

3.二维数组在计算机中的本质还是一位数组,他的地址是在前一个元素的地址上➕1个数组元素的单位大小(如果是int类型的数组,则➕4;如果是double类型,则➕8;如果是char类型则➕1,以此类推)

71520c8c68e64d4fbf3b8031055005bd.png

3.2.二维数组的使用方式

1.

类型 数组名[大小][大小] = {{值 1,值 2..},{值 1,值 2..},{值 1,值 2..}};

2.

类型 数组名[大小][大小] = { 值 1,值 2,值 3,值 4,值 5,值 6 ..};

3.3.二维数组的练习

  1. int arr[3][2]={{4,6},{1,4},{-2,8}};遍历该二维数组,并得到和
//int arr[3][2] = { {4,6},{1,4},{-2,8} }; 遍历该二维数组,并得到和
#include<stdio.h>
void main() {
  int arr[3][2] = { {4,6},{1,4},{-2,8} };
  int i, j, sum = 0;
  for (i = 0; i < 3; i++) {//行遍历
    for (j = 0; j < 2; j++) {//列遍历
      sum += arr[i][j];//设置一个变量记录每次变量的元素的和
    }
  }
  printf("该数组全部元素的和为%d", sum);
}

338b3d2e5db1435fb5b2fa56e8413875.png

2.定义二维数组,用于保存三个班,每个班五名同学成绩,并求出每个班级平均分、 以及所有班级平均分

//定义二维数组,用于保存三个班,每个班五名同学成绩,并求出每个班级平均分、 以及所有班级平均分
#include<stdio.h>
void main() {
  double arrScore[3][5], score = 0.0, classScore = 0.0, totalScore = 0.0;
  int i, j;
  for (i = 0; i < 3; i++) {//行遍历
    printf("\n");
    for (j = 0; j < 5; j++) {//列遍历
      printf("请输入%d班%d号同学的成绩", i +1, j + 1);
      scanf_s("%lf", &arrScore[i][j]);//将成绩存入数组中
    }
  }
  for (i = 0; i < 3; i++) {
    classScore = 0.0;//每次列遍历前需要将classScore归零
    for (j = 0; j < 5; j++) {
      printf("\n%d班%d号同学的成绩为:%.2f", i + 1, j + 1, arrScore[i][j]);
      classScore += arrScore[i][j];//统计得到班级的总成绩
    }
    totalScore += classScore;//每次列遍历后得到全部的总成绩
    classScore /= 5;//得到班级的平均成绩
    printf("\n%d班的平均分为:%.2f:", i + 1, classScore);
  }
  totalScore /= 15;//得到全部的平均成绩
  printf("\n所有班级的平均分为:%.2f", totalScore);
}

7430b274d95a4d0592fccdac81c4fc5d.png

3.4.二维数组使用细节和注意事项

  1. 可以只对部分元素赋值,未赋值的元素自动取“零”值
#include<stdio.h>
void main() {
  int arr[2][3] = { {1}, {2} }, i, j;
  for (i = 0; i < 2; i++) {
    for (j = 0; j < 3; j++) {
      printf("%d\t", arr[i][j]);
    }
    printf("\n");
  }
}

c8e1ffe4ecac4278a1e62eedc21f0cde.png

2.如果对全部元素赋值,那么第一维的长度可以不给出

#include<stdio.h>
void main() {
  int arr[][3] = { 1, 2, 3, 4, 5, 6}, i, j;
  for (i = 0; i < 2; i++) {
    for (j = 0; j < 3; j++) {
      printf("%d\t", arr[i][j]);
    }
    printf("\n");
  }
}

55caba59ffc94d3faa025ce0548c5d64.png

3.二维数组可以看作是由一维数组嵌套而成的;如果一个数组的每个元素又是一个数组,那么它就是二维数组。例如:二维数组 a[3][4]可看成三个一维数组,它们的数组名分别为 a[0]、a[1]、a[2]。这三个一维数组都有 4 个元素,如,一维数组 a[0] 的元素为 a[0][0]、a[0][1]、a[0][2]、a[0][3]


相关文章
|
29天前
|
搜索推荐 算法 C语言
【排序算法】八大排序(上)(c语言实现)(附源码)
本文介绍了四种常见的排序算法:冒泡排序、选择排序、插入排序和希尔排序。通过具体的代码实现和测试数据,详细解释了每种算法的工作原理和性能特点。冒泡排序通过不断交换相邻元素来排序,选择排序通过选择最小元素进行交换,插入排序通过逐步插入元素到已排序部分,而希尔排序则是插入排序的改进版,通过预排序使数据更接近有序,从而提高效率。文章最后总结了这四种算法的空间和时间复杂度,以及它们的稳定性。
78 8
|
29天前
|
搜索推荐 算法 C语言
【排序算法】八大排序(下)(c语言实现)(附源码)
本文继续学习并实现了八大排序算法中的后四种:堆排序、快速排序、归并排序和计数排序。详细介绍了每种排序算法的原理、步骤和代码实现,并通过测试数据展示了它们的性能表现。堆排序利用堆的特性进行排序,快速排序通过递归和多种划分方法实现高效排序,归并排序通过分治法将问题分解后再合并,计数排序则通过统计每个元素的出现次数实现非比较排序。最后,文章还对比了这些排序算法在处理一百万个整形数据时的运行时间,帮助读者了解不同算法的优劣。
77 7
|
2月前
|
算法 C语言
【C语言】排序查找
【C语言】排序查找
|
2月前
|
C语言
C语言学习笔记-知识点总结上
C语言学习笔记-知识点总结上
89 1
|
2月前
|
NoSQL 算法 Redis
Redis的实现三:c语言实现平衡二叉树,通过平衡二叉树实现排序集
本博客介绍了如何在C语言中实现一个平衡二叉树,并通过这个数据结构来模拟Redis中的排序集功能。
16 0
|
6月前
|
C语言
C语言学习笔记之初识字符串
C语言学习笔记之初识字符串
44 5
|
6月前
|
文件存储 C语言
|
6月前
|
存储 机器学习/深度学习 编译器
C语言代码学习笔记
<编程精粹:编写高质量C语言代码> 读书笔记
|
5月前
|
C语言
|
5月前
|
C语言