当前位置:   article > 正文

c语言 --- 二维数组_c语言创建二维数组

c语言创建二维数组

认识二维数组

  • 如何创建二维数组

  1. //NO.1 如何创建二维数组,固定语法: 类型 数组名[数组长度1][数组长度2];
  2. int array[2][2];

数组长度1:2 → 行
数组长度2:2 → 列
总元素个数:数组长度1 × 数组长度2==行 × 列
最大下标是:数组名[ 数组长度1 - 1 ][ 数组长度2 - 1 ]   最大下标是array[1][1] 不可能是array[2][2]

  • 在内存上的长相:在内存中是一段连续的内存,可以人为地让它有行有列

常规操作

  • 数组的初始化

  • 数组的遍历 → for循环遍历

  1. //No.1 完整初始化->有几个元素赋几个值
  2. int array1[2][2]={1,2,3,4};
  3. //No.2 默认初始化->缺省初始化 不做初始化其他元素默认为0
  4. int array2[2][2]={1,2};
  5. //No.3 带{}默认初始化 ,一个{}代表一行
  6. int array3[3][4]={{1},{2},{3}}; //第一行第一个元素:1[其他值默认为0],第二个第一个元素:2,第三行第一个元素:3
  7. //No.4 数据完整初始化,数组长度1可以不写
  8. int array[][3]={1,2,3,4,5,6,7,8,9}; //自动推导数组长度1是:3
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int array[3][4] =
  5. {
  6. 1,2,3,4,
  7. 5,6,7,8,
  8. 9,10,11,12
  9. };
  10. //先遍历行再遍历列
  11. for (int i = 0; i < 3; i++)
  12. {
  13. for (int j = 0; j < 4; j++)
  14. {
  15. printf("array[%d][%d]=%d\t", i, j, array[i][j]);
  16. }
  17. printf("\n"); //形成行列关键点->二维数组没有行和列之说 列完成的时候换一下行 形成行和列
  18. }
  19. printf("请输入二维数组中的值:\n");
  20. //用for循环嵌套来做输入
  21. for (int i = 0; i < 3; i++)
  22. {
  23. for (int j = 0; j < 4; j++)
  24. {
  25. scanf_s("%d", &array[i][j]);
  26. }
  27. }
  28. printf("你输入的数组是:\n");
  29. for (int i = 0; i < 3; i++)
  30. {
  31. for (int j = 0; j < 4; j++)
  32. {
  33. printf("array[%d][%d]=%d\t", i, j, array[i][j]);
  34. }
  35. printf("\n"); //形成行列关键点
  36. }
  37. //scanf 不能接受空格的字符串输入
  38. //gets 接受字符的空格输入
  39. return 0;
  40. }
  41. /*输出*/
  42. array[0][0]=1 array[0][1]=2 array[0][2]=3 array[0][3]=4
  43. array[1][0]=5 array[1][1]=6 array[1][2]=7 array[1][3]=8
  44. array[2][0]=9 array[2][1]=10 array[2][2]=11 array[2][3]=12
  45. 请输入二维数组中的值:
  46. 1 2 4 5
  47. 43 3 21 1
  48. 43 3 23 42
  49. 你输入的数组是:
  50. array[0][0]=1 array[0][1]=2 array[0][2]=4 array[0][3]=5
  51. array[1][0]=43 array[1][1]=3 array[1][2]=21 array[1][3]=1
  52. array[2][0]=43 array[2][1]=3 array[2][2]=23 array[2][3]=42
  • 二维数组的基本操作

    • 行列数据的操作(excel表数据操作)

      • 行求和

      • 列求和

    • 二维数组充当地图

    • 矩阵变化

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int array[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
  5. int rowSum[3] = { 0 }; //有3行的结果
  6. int colSum[4] = { 0 }; //有4列的结果
  7. //求一行的和
  8. for (int i = 0; i < 3; i++) //所有的i相同就是一行
  9. {
  10. for (int j = 0; j < 4; j++)
  11. {
  12. rowSum[i] += array[i][j];
  13. }
  14. }
  15. //求一列的和
  16. for (int j = 0; j < 4; j++) //j相同 先遍历列就可以求一列的和
  17. {
  18. for (int i = 0; i < 3; i++)
  19. {
  20. colSum[j] += array[i][j];
  21. }
  22. }
  23. //特定数字表示特定含义
  24. int map[8][8] =
  25. {
  26. 1,1,1,1,1,1,1,1,
  27. 1,0,1,1,1,0,1,1,
  28. 1,0,1,1,1,0,1,1,
  29. 1,0,1,1,1,0,1,1,
  30. 1,0,0,0,0,0,1,1,
  31. 1,1,1,0,1,1,1,1,
  32. 1,1,1,0,1,1,1,1,
  33. 1,1,1,1,1,1,1,1
  34. };
  35. for (int i = 0; i < 8; i++)
  36. {
  37. for (int j = 0; j < 8; j++)
  38. {
  39. switch (map[i][j])
  40. {
  41. case 0: //if(map[i][j]==0)
  42. printf("★"); //一个汉字字符占用两个位置
  43. break;
  44. case 1: //if(map[i][j]==1)
  45. printf(" "); //要打印两个空格才能对齐
  46. break;
  47. }
  48. }
  49. printf("\n");
  50. }
  51. return 0;
  52. }
  53. /*输出*/
  54. ★ ★
  55. ★ ★
  56. ★ ★
  57. ★★★★★

/*
    1   2   3   4    
    12  13  14    5
    11    16    15  6
    10  9   8   7

    //魔方矩阵
    4 9 2
    3 5 7
    8 1 6
    //线性代数
    //矩阵的乘法. . .
    //矩阵的加法. . .
*/

  • 二维数组操作字符串→ 二维数组可以形成行、列特性,一维数组可以存一个字符串,二维数组可以存多个字符串→ 一行存一个字符串

    • 初始化→ 一个{ }就是一行,没有数据的列默认为 ' \0 '

    • 遍历

    • 多个字符串排序

  1. #include <stdio.h>
  2. #include <string.h>
  3. int main()
  4. {
  5. //No.1 二维字符数组一般是用来存储多个字符串->4行20列 一行存一个字符串
  6. char str[4][20] = { {"1.ILoveyou"},{"2.IMissyou"},{"2.我想吃饭"}, {"4.我想睡觉"} }; //注意列不要超过了
  7. //可以用两个下标的方式访问 和数字类的二维数组一样的使用方式 很少这样去用
  8. //No.3 字符串排序->冒泡排序->从小到大排序
  9. char temp[20] = { "" }; //一行存一个字符串|做交换要准备一行出来
  10. for (int i = 0; i < 4; i++)
  11. {
  12. for (int j = 0; j < 4 - 1 - i; j++)
  13. {
  14. if (strcmp(str[j],str[j+1])>0) //字符串比较也不能直接比较必须要用strcmp
  15. {
  16. //注意点:字符串不能用赋值的方式使用,拷贝操作必须用strcpy
  17. strcpy_s(temp, 20, str[j]);
  18. strcpy_s(str[j], 20, str[j + 1]);
  19. strcpy_s(str[j + 1], 20, temp);
  20. }
  21. }
  22. }
  23. printf("%c\n", str[0][0]); //打印其中的某一个字符
  24. printf("%c\n", str[0][1]);
  25. printf("%c\n", str[0][2]);
  26. printf("%c\n", str[0][3]);
  27. //No.2 数组名[下标]:表示每一行的首地址
  28. for (int i = 0; i < 4; i++)
  29. {
  30. puts(str[i]); //操作字符串用一个下标即可,操作数字类的必须是两个下标
  31. }
  32. printf("请输入四个字符串:"); //让用户输入字符串
  33. for (int i = 0; i < 4; i++)
  34. {
  35. scanf_s("%s", str[i], 20); //str[i]代表的就是每一行的首地址->已经是地址了,所以不需要取地址
  36. }
  37. for (int i = 0; i < 4; i++)
  38. {
  39. printf("%s\n", str[i]);
  40. }
  41. return 0;
  42. }
  43. /*输出*/
  44. 1
  45. .
  46. I
  47. L
  48. 1.ILoveyou
  49. 2.IMiss
  50. 2.我想吃饭
  51. 4.我想睡觉
  52. 请输入四个字符串:hhaha
  53. enter
  54. tab
  55. ctrl
  56. hhaha
  57. enter
  58. tab
  59. ctrl
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/319779
推荐阅读
相关标签
  

闽ICP备14008679号