当前位置:   article > 正文

c语言数组概念_c语言中数组的概念

c语言中数组的概念

C语言数组
概念 数组是一类相同元素的集合
1.数组是一类元素的集合
2.数组的引用可以用下标
3.数组是在内存里开辟空间的
4.数组是用来储存一组数据的
5.数组储存的数据是一个类型

定义:数组是用来储存一组数据的,是一类相同元素的集合,可以用下标引用,在内存里开辟空间的,
储存的数据是一个类型,数组的下标从0开始,最大下标是长度减1,
引用:可以用指针,指针可以通过数组名加下标或者指针加下标来实现,
数组的传递是通过指针来实现的,因为数组名代表的是数组的首地址。
元素类型:数组的元素可以是任何数据类型,包括基本类型和自定义类型。
元素存储:数组的元素在内存中是连续存储的。
初始化:数组的初始化可以在定义时指定int a[10]={0},也可以在后面逐个赋值或使用循环赋值。
使用方法  int a[10]

数组的分类
按照定义类型划分
1.短整型 short int a [10]
2.整形 int a
3.长整形 long int a
3.浮点型  double float
4.指针数组  int *p[10]
5.结构体数组  struct stu  boy[10];
本质上还是数组,存储数据是结构体

按照维度划分
1.一维数组
类似于平房结构
2.二维数组
类似于一栋楼房
3.三位数组

数组的练习题

1.任意一个人输入年龄,就可以判断出他是哪个年龄段的人?
0-9 垂髫之年;10-19 志学之年;20-29 弱冠之年;
30-39 而立之年;40-49 不惑之年;50-59 知命之年;
60-69 花甲之年;70-79 古稀之年;80-89 杖朝之年;
90-99 耄耋之年。

  1. #define _CRT_SECURE_NO_WARNINGS 1
  2. //任意一个人输入年龄,就可以判断出他是哪个年龄段的人?
  3. //0-9 垂髫之年;10-19 志学之年;20-29 弱冠之年;
  4. //30-39 而立之年;40-49 不惑之年;50-59 知命之年;
  5. //60-69 花甲之年;70-79 古稀之年;80-89 杖朝之年;
  6. //90-99 耄耋之年。
  7. #include<stdio.h>
  8. #include<string.h>
  9. int main() {
  10. int age;
  11. char ch='y';
  12. char s[10][10] = {"垂髫之年","志学之年","弱冠之年", "而立之年", "不惑之年", "知命之年", "花甲之年", "古稀之年", "杖朝之年", "耄耋之年"};
  13. //for (int i = 0; i < 10; i++)
  14. //{
  15. // for (int j = 0; j < 10; j++) {
  16. // printf("%c", s[i][j]);
  17. // }
  18. // printf("\n");
  19. //}
  20. //while (1) {
  21. // printf("请输入你的年龄:(0---99)\n");
  22. // scanf("%d", &age);
  23. // printf("你正处于的阶段是:");
  24. // for (int n = 0; n < 10; n++) {
  25. // printf("%c", s[age / 10][n]);
  26. // }
  27. // printf("\n");
  28. // printf("如果想退出请按n:\n");
  29. // getchar();
  30. // scanf("%c", &ch);
  31. // if (ch == 'n')
  32. // {
  33. // break;
  34. // }
  35. //}
  36. while (ch!= 'n') {
  37. printf("请输入你的年龄:(0---99)\n");
  38. scanf("%d", &age);
  39. if (age < 0 || age > 99) { // 对输入进行判断
  40. printf("请输入正确的年龄!\n");
  41. continue; // 输入不正确,重新输入
  42. }
  43. printf("你正处于的阶段是:%s\n", s[age / 10]); // 直接输出对应的字符串
  44. printf("如果想退出请按n:\n");
  45. getchar(); // 吃掉输入缓冲区中的换行符
  46. scanf("%c)", &ch);
  47. }
  48. }

2.定义一个长度为10的int数组,
自定义一组数据,
统计数组中的总和、平均值、最大值、最小值、以及奇数和偶数的个数.

  1. #define _CRT_SECURE_NO_WARNINGS 1
  2. #include<stdio.h>
  3. //定义一个长度为10的int数组,
  4. //自定义一组数据,
  5. //统计数组中的总和、平均值、最大值、最小值、以及奇数和偶数的个数.
  6. //int getSum(int a[],int length) {
  7. // int sum = 0;
  8. // for (int i = 0; i < length; i++)
  9. // {
  10. // sum += a[i];
  11. // }
  12. // return sum;
  13. //}
  14. //double getAverage(int sum, int length) {
  15. // return 1.0*sum/length;
  16. //}
  17. //int getMax(int a[], int length) {
  18. // int max=a[0];
  19. // for (int i = 0; i < length; i++)
  20. // if (a[i] > max)
  21. // max = a[i];
  22. // return max;
  23. //}
  24. //int getMin(int a[], int length) {
  25. // int min = a[0];
  26. // for (int i = 0; i < length; i++)
  27. // if (a[i] <min)
  28. // min = a[i];
  29. // return min;
  30. //}
  31. //int getOddCount(int a[], int length) {
  32. // int x = 0;
  33. // for (int i = 0; i < length; i++)
  34. // if (a[i] % 2 == 0)
  35. // x++;
  36. // return x;
  37. //}
  38. //int getEvenCount(int a[], int length) {
  39. // int x = 0;
  40. // for (int i = 0; i < length; i++)
  41. // if (a[i] % 2 != 0)
  42. // x++;
  43. // return x;
  44. //}
  45. //int main() {
  46. // int array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  47. // int length = sizeof(array) / sizeof(int);
  48. // int sum = getSum(array,length);
  49. // double average = getAverage(sum, length);
  50. // int max = getMax(array,length);
  51. // int min = getMin(array,length);
  52. // int oddCount = getOddCount(array,length);
  53. // int evenCount = getEvenCount(array,length);
  54. //
  55. // printf("数组中元素的总和为:%d\n" ,sum);
  56. // printf("数组中元素的平均值为:%f\n" ,average);
  57. // printf("数组中元素的最大值为:%d\n" , max);
  58. // printf("数组中元素的最小值为:%d\n" , min);
  59. // printf("数组中奇数的个数为:%d\n" ,oddCount);
  60. // printf("数组中偶数的个数为:%d\n" , evenCount);
  61. //
  62. // return 0;
  63. //}
  64. int main() {
  65. int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
  66. int length = sizeof(array) / sizeof(int);//求数组的长度
  67. int sum = 0, max = array[0], min = array[0], oddCount = 0, evenCount = 0;
  68. for (int i = 0; i < length; i++) {
  69. sum += array[i]; // 计算总和
  70. if (array[i] > max) max = array[i]; // 计算最大值
  71. if (array[i] < min) min = array[i]; // 计算最小值
  72. if (array[i] % 2 == 0) evenCount++; // 计算偶数个数
  73. else oddCount++; // 计算奇数个数
  74. }
  75. printf("数组中元素的总和为:%d\n", sum);
  76. printf("数组中元素的平均值为:%f\n", 1.0 * sum / length);
  77. printf("数组中元素的最大值为:%d\n", max);
  78. printf("数组中元素的最小值为:%d\n", min);
  79. printf("数组中奇数的个数为:%d\n", oddCount);
  80. printf("数组中偶数的个数为:%d\n", evenCount);
  81. return 0;
  82. }

3.有一个数组:int [] arr = {8,4,2,1,23,344,12}。
猜数游戏:从键盘中任意输入一个数据,判断数组中是否包含此数。

  1. #define _CRT_SECURE_NO_WARNINGS 1
  2. //有一个数组:int [] arr = {8,4,2,1,23,344,12}。
  3. //猜数游戏:从键盘中任意输入一个数据,判断数组中是否包含此数。
  4. #include<stdio.h>
  5. //int main() {
  6. // int arr[] = { 8,4,2,1,23,344,12 };
  7. // int num;
  8. // int length = sizeof(arr) / sizeof(int);
  9. // printf("请输入任意一个数\n");
  10. // scanf("%d", &num);
  11. // for (int i = 0; i < length; i++)
  12. // {
  13. // if (arr[i] == num) {
  14. // printf("该数组存在该数字\n");
  15. // break;
  16. // }
  17. // if(i==length-1&& arr[length - 1] != num)
  18. // printf("该数组不存在该数字\n");
  19. // }
  20. // return 0;
  21. //}
  22. #define LENGTH 7
  23. int isNumExist(int arr[], int num) {
  24. for (int i = 0; i < LENGTH; i++) {
  25. if (arr[i] == num) {
  26. return 1;
  27. }
  28. }
  29. return 0;
  30. }
  31. int main() {
  32. int arr[] = { 8,4,2,1,23,344,12 };
  33. int num;
  34. printf("请输入一个数\n");
  35. scanf("%d",&num);
  36. if (isNumExist(arr, num)) {
  37. printf("该数组存在该数字\n");
  38. }else
  39. printf("该数组不存在该数字\n");
  40. return 0;
  41. }

4.int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};
要求将以上数组中的0项去掉,将不为0的值存入一个新的数组.

  1. #define _CRT_SECURE_NO_WARNINGS 1
  2. #include<stdio.h>
  3. //int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};
  4. //要求将以上数组中的0项去掉,将不为0的值存入一个新的数组.
  5. //int main() {
  6. // int oldArr[] = { 1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5 };
  7. // int length=16;
  8. // int newArr[16]={0};
  9. // int j = 0;
  10. // for (int i = 0; i < length; i++)
  11. // {
  12. // if (oldArr[i] != 0)
  13. // newArr[j++] = oldArr[i];
  14. //
  15. // }
  16. // for (int i = 0; i < length; i++) {
  17. // printf("%d \t",newArr[i]);
  18. // }
  19. //
  20. // printf("\n");
  21. // return 0;
  22. //}
  23. #define LENGTH 16
  24. void removeZeros(int oldArr[], int length, int newArr[]) {
  25. int j = 0;
  26. for (int i = 0; i < length; i++) {
  27. if (oldArr[i] != 0) {
  28. newArr[j++] = oldArr[i];
  29. }
  30. }
  31. }
  32. int main() {
  33. int oldArr[] = { 1, 3, 4, 5, 0, 0, 6, 6, 0, 5, 4, 7, 6, 7, 0, 5 };
  34. int newArr[LENGTH] = { 0 };
  35. removeZeros(oldArr, LENGTH, newArr);
  36. printf("新数组为:\n");
  37. for (int i = 0; i < LENGTH; i++) {
  38. if (newArr[i] != 0) {
  39. printf("%d ", newArr[i]);
  40. }
  41. }
  42. printf("\n");
  43. return 0;
  44. }

5.//把一个数组的元素逆序交换, int[] a = { 5, 11, 15, 24, 36, 47, 59, 66 };
//交换元素后int[] b = { 66 ,59 ,47 ,36 ,24,15 ,11 ,5 };

  1. #define _CRT_SECURE_NO_WARNINGS 1
  2. //把一个数组的元素逆序交换, int[] a = { 5, 11, 15, 24, 36, 47, 59, 66 };
  3. //交换元素后int[] b = { 66 ,59 ,47 ,36 ,24,15 ,11 ,5 };
  4. #define LENGTH 8
  5. #include <stdio.h>
  6. //void changeArr(int a[],int b[], int length) {
  7. // int j = length - 1;
  8. // for (int i = 0; i < length; i++)
  9. // {
  10. // b[i] = a[j--];
  11. // }
  12. //}
  13. //void printArr(int a[],int length) {
  14. // for (int i = 0; i < length; i++)
  15. // {
  16. // printf("%d ", a[i]);
  17. // }
  18. // printf("\n ");
  19. //}
  20. //int main() {
  21. // int a[]= { 5, 11, 15, 24, 36, 47, 59, 66 };
  22. // int b[LENGTH]={0};
  23. // printf("交换前数组:\n");
  24. // printArr(a, LENGTH);
  25. // changeArr(a,b , LENGTH);
  26. // printf("交换后数组:\n");
  27. // printArr(b, LENGTH);
  28. // return 0;
  29. //}
  30. void reverseArray(int original[], int reversed[], int length) {
  31. for (int i = 0; i < length; i++) {
  32. reversed[i] = original[length - i - 1];
  33. }
  34. }
  35. void printArray(int arr[], int length) {
  36. for (int i = 0; i < length; i++) {
  37. printf("%d ", arr[i]);
  38. }
  39. printf("\n");
  40. }
  41. int main() {
  42. int original[LENGTH] = { 5, 11, 15, 24, 36, 47, 59, 66 };
  43. int reversed[LENGTH] = { 0 };
  44. printf("原数组:");
  45. printArray(original, LENGTH);
  46. reverseArray(original, reversed, LENGTH);
  47. printf("逆序数组:");
  48. printArray(reversed, LENGTH);
  49. return 0;
  50. }

6.小游戏 下五子棋

  1. #define _CRT_SECURE_NO_WARNINGS 1
  2. #include <stdio.h>
  3. #define checkerboard_length 15
  4. //打印输出棋盘
  5. void print(char checkerboard[15][15]) {
  6. //输出棋盘
  7. for (int i = 0; i < checkerboard_length; i++) {
  8. for (int j = 0; j < checkerboard_length; j++) {
  9. printf("%c", checkerboard[i][j]);
  10. }
  11. printf("\n");
  12. }
  13. }
  14. //判断坐标是否越界
  15. int checkPointCross(int x, int y) {
  16. if (x < 0 || x > 13 || y < 0 || y > 13) {
  17. return 0;
  18. }
  19. return 1;
  20. }
  21. //判断坐标处是否已有棋子
  22. int checkPointExit(int x, int y, char checkerboard[15][15]) {
  23. if (checkerboard[x - 1][y - 1] != '+') {
  24. return 0;
  25. }
  26. return 1;
  27. }
  28. //判断输赢
  29. int judgeWinLose(int flag, char checkerboard[15][15],char black,char white) {
  30. if (flag) {
  31. //判断黑棋的输赢
  32. for (int i = 0; i < checkerboard_length; i++) {
  33. for (int j = 0; j < checkerboard_length; j++) {
  34. //遍历每个棋子,横向向右找五个
  35. if (checkerboard[i][j] == black && checkerboard[i][j + 1] == black && checkerboard[i][j + 2] == black && checkerboard[i][j + 3] == black && checkerboard[i][j + 4] == black) {
  36. return 1;
  37. }
  38. //遍历每个棋子,竖直向下找五个
  39. if (checkerboard[i][j] == black && checkerboard[i + 1][j] == black && checkerboard[i + 2][j] == black && checkerboard[i + 3][j] == black && checkerboard[i + 4][j] == black) {
  40. return 1;
  41. }
  42. //遍历每个棋子,斜向右下找五个
  43. if (checkerboard[i][j] == black && checkerboard[i + 1][j + 1] == black && checkerboard[i + 2][j + 2] == black && checkerboard[i + 3][j + 3] == black && checkerboard[i + 4][j + 4] == black) {
  44. return 1;
  45. }
  46. }
  47. }
  48. return 0;
  49. }
  50. else {
  51. //判断白棋的输赢
  52. for (int i = 0; i < checkerboard_length; i++) {
  53. for (int j = 0; j < checkerboard_length; j++) {
  54. //遍历每个棋子,横向向右找五个
  55. if (checkerboard[i][j] == white && checkerboard[i][j + 1] == white && checkerboard[i][j + 2] == white && checkerboard[i][j + 3] == white && checkerboard[i][j + 4] == white) {
  56. return 1;
  57. }
  58. //遍历每个棋子,竖直向下找五个
  59. if (checkerboard[i][j] == white && checkerboard[i + 1][j] == white && checkerboard[i + 2][j] == white && checkerboard[i + 3][j] == white && checkerboard[i + 4][j] == white) {
  60. return 1;
  61. }
  62. //遍历每个棋子,斜向右下找五个
  63. if (checkerboard[i][j] == white && checkerboard[i + 1][j + 1] == white && checkerboard[i + 2][j + 2] == white && checkerboard[i + 3][j + 3] == white && checkerboard[i + 4][j + 4] == white) {
  64. return 1;
  65. }
  66. }
  67. }
  68. return 0;
  69. }
  70. }
  71. //开始下棋
  72. void playChess( int flag, char checkerboard[15][15],char black,char white) {
  73. while (1) {
  74. if (flag) {
  75. printf("黑棋下子!\n");
  76. printf("请输入横坐标:\n");
  77. int x,y;
  78. scanf("%d",&x);
  79. printf("请输入纵坐标:\n");
  80. scanf("%d", &y);
  81. if (checkPointCross(x, y) && checkPointExit(x, y, checkerboard)) {
  82. checkerboard[x - 1][y - 1] = black;
  83. //下棋之后打印棋盘
  84. print(checkerboard);
  85. //判断输赢
  86. if (judgeWinLose(flag, checkerboard,black,white)) {
  87. printf("黑棋胜!\n");
  88. break;
  89. }
  90. }
  91. else {
  92. printf("坐标越界或坐标处已有棋子!\n");
  93. continue;
  94. }
  95. flag = 0;
  96. }
  97. else {
  98. printf("白棋下子!\n");
  99. printf("请输入横坐标:\n");
  100. int x, y;
  101. scanf("%d",&x);
  102. printf("请输入纵坐标:\n");
  103. scanf("%d",&y);
  104. if (checkPointCross(x, y) && checkPointExit(x, y, checkerboard)) {
  105. checkerboard[x - 1][y - 1] = white;
  106. //下棋之后打印棋盘
  107. print(checkerboard);
  108. //判断输赢
  109. if (judgeWinLose(flag, checkerboard, black, white)) {
  110. printf("白棋胜!\n");
  111. break;
  112. }
  113. }
  114. else {
  115. printf("坐标越界或坐标处已有棋子!\n");
  116. continue;
  117. }
  118. flag = 1;
  119. }
  120. }
  121. }
  122. int main() {
  123. //初始化棋盘
  124. //创建棋盘二维数组
  125. char checkerboard[15][15];
  126. //定义一个标记flag。true-黑棋,false-白棋
  127. int flag = 1;
  128. //定义黑棋样式
  129. char black = '#';
  130. //定义白棋样式
  131. char white = '*';
  132. //创建数组num,为棋盘进行边界行列赋值
  133. char num[] = { '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15' };
  134. //初始化数组
  135. for (int i = 0; i < checkerboard_length; i++) {
  136. for (int j = 0; j < checkerboard_length; j++) {
  137. checkerboard[i][j] = '+';
  138. //把棋盘最后一列的'十'替换为num数组中的元素
  139. if (j == checkerboard_length - 1) {
  140. checkerboard[i][j] = num[i];
  141. }
  142. //把棋盘最后一行的'十'替换为num数组中的元素
  143. if (i == checkerboard_length - 1) {
  144. checkerboard[i][j] = num[j];
  145. }
  146. }
  147. }
  148. //打印棋盘
  149. print(checkerboard);
  150. //开始下棋
  151. playChess(flag, checkerboard, black, white);
  152. return 0;
  153. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/492789
推荐阅读
相关标签
  

闽ICP备14008679号