赞
踩
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 耄耋之年。
- #define _CRT_SECURE_NO_WARNINGS 1
- //任意一个人输入年龄,就可以判断出他是哪个年龄段的人?
- //0-9 垂髫之年;10-19 志学之年;20-29 弱冠之年;
- //30-39 而立之年;40-49 不惑之年;50-59 知命之年;
- //60-69 花甲之年;70-79 古稀之年;80-89 杖朝之年;
- //90-99 耄耋之年。
- #include<stdio.h>
- #include<string.h>
- int main() {
- int age;
- char ch='y';
- char s[10][10] = {"垂髫之年","志学之年","弱冠之年", "而立之年", "不惑之年", "知命之年", "花甲之年", "古稀之年", "杖朝之年", "耄耋之年"};
- //for (int i = 0; i < 10; i++)
- //{
- // for (int j = 0; j < 10; j++) {
- // printf("%c", s[i][j]);
- // }
- // printf("\n");
- //}
- //while (1) {
- // printf("请输入你的年龄:(0---99)\n");
- // scanf("%d", &age);
- // printf("你正处于的阶段是:");
- // for (int n = 0; n < 10; n++) {
- // printf("%c", s[age / 10][n]);
- // }
- // printf("\n");
- // printf("如果想退出请按n:\n");
- // getchar();
- // scanf("%c", &ch);
- // if (ch == 'n')
- // {
- // break;
- // }
- //}
-
- while (ch!= 'n') {
- printf("请输入你的年龄:(0---99)\n");
- scanf("%d", &age);
- if (age < 0 || age > 99) { // 对输入进行判断
- printf("请输入正确的年龄!\n");
- continue; // 输入不正确,重新输入
- }
- printf("你正处于的阶段是:%s\n", s[age / 10]); // 直接输出对应的字符串
- printf("如果想退出请按n:\n");
- getchar(); // 吃掉输入缓冲区中的换行符
- scanf("%c)", &ch);
-
- }
-
- }

2.定义一个长度为10的int数组,
自定义一组数据,
统计数组中的总和、平均值、最大值、最小值、以及奇数和偶数的个数.
- #define _CRT_SECURE_NO_WARNINGS 1
- #include<stdio.h>
- //定义一个长度为10的int数组,
- //自定义一组数据,
- //统计数组中的总和、平均值、最大值、最小值、以及奇数和偶数的个数.
- //int getSum(int a[],int length) {
- // int sum = 0;
- // for (int i = 0; i < length; i++)
- // {
- // sum += a[i];
- // }
- // return sum;
- //}
- //double getAverage(int sum, int length) {
- // return 1.0*sum/length;
- //}
- //int getMax(int a[], int length) {
- // int max=a[0];
- // for (int i = 0; i < length; i++)
- // if (a[i] > max)
- // max = a[i];
- // return max;
- //}
- //int getMin(int a[], int length) {
- // int min = a[0];
- // for (int i = 0; i < length; i++)
- // if (a[i] <min)
- // min = a[i];
- // return min;
- //}
- //int getOddCount(int a[], int length) {
- // int x = 0;
- // for (int i = 0; i < length; i++)
- // if (a[i] % 2 == 0)
- // x++;
- // return x;
- //}
- //int getEvenCount(int a[], int length) {
- // int x = 0;
- // for (int i = 0; i < length; i++)
- // if (a[i] % 2 != 0)
- // x++;
- // return x;
- //}
- //int main() {
- // int array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
- // int length = sizeof(array) / sizeof(int);
- // int sum = getSum(array,length);
- // double average = getAverage(sum, length);
- // int max = getMax(array,length);
- // int min = getMin(array,length);
- // int oddCount = getOddCount(array,length);
- // int evenCount = getEvenCount(array,length);
- //
- // printf("数组中元素的总和为:%d\n" ,sum);
- // printf("数组中元素的平均值为:%f\n" ,average);
- // printf("数组中元素的最大值为:%d\n" , max);
- // printf("数组中元素的最小值为:%d\n" , min);
- // printf("数组中奇数的个数为:%d\n" ,oddCount);
- // printf("数组中偶数的个数为:%d\n" , evenCount);
- //
- // return 0;
- //}
-
-
- int main() {
- int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
- int length = sizeof(array) / sizeof(int);//求数组的长度
- int sum = 0, max = array[0], min = array[0], oddCount = 0, evenCount = 0;
-
- for (int i = 0; i < length; i++) {
- sum += array[i]; // 计算总和
- if (array[i] > max) max = array[i]; // 计算最大值
- if (array[i] < min) min = array[i]; // 计算最小值
- if (array[i] % 2 == 0) evenCount++; // 计算偶数个数
- else oddCount++; // 计算奇数个数
- }
-
- printf("数组中元素的总和为:%d\n", sum);
- printf("数组中元素的平均值为:%f\n", 1.0 * sum / length);
- printf("数组中元素的最大值为:%d\n", max);
- printf("数组中元素的最小值为:%d\n", min);
- printf("数组中奇数的个数为:%d\n", oddCount);
- printf("数组中偶数的个数为:%d\n", evenCount);
- return 0;
- }

3.有一个数组:int [] arr = {8,4,2,1,23,344,12}。
猜数游戏:从键盘中任意输入一个数据,判断数组中是否包含此数。
- #define _CRT_SECURE_NO_WARNINGS 1
- //有一个数组:int [] arr = {8,4,2,1,23,344,12}。
- //猜数游戏:从键盘中任意输入一个数据,判断数组中是否包含此数。
- #include<stdio.h>
- //int main() {
- // int arr[] = { 8,4,2,1,23,344,12 };
- // int num;
- // int length = sizeof(arr) / sizeof(int);
- // printf("请输入任意一个数\n");
- // scanf("%d", &num);
- // for (int i = 0; i < length; i++)
- // {
- // if (arr[i] == num) {
- // printf("该数组存在该数字\n");
- // break;
- // }
- // if(i==length-1&& arr[length - 1] != num)
- // printf("该数组不存在该数字\n");
- // }
- // return 0;
- //}
-
- #define LENGTH 7
- int isNumExist(int arr[], int num) {
- for (int i = 0; i < LENGTH; i++) {
- if (arr[i] == num) {
- return 1;
- }
- }
- return 0;
- }
- int main() {
-
- int arr[] = { 8,4,2,1,23,344,12 };
- int num;
- printf("请输入一个数\n");
- scanf("%d",&num);
- if (isNumExist(arr, num)) {
- printf("该数组存在该数字\n");
- }else
- printf("该数组不存在该数字\n");
-
- return 0;
- }

4.int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};
要求将以上数组中的0项去掉,将不为0的值存入一个新的数组.
- #define _CRT_SECURE_NO_WARNINGS 1
- #include<stdio.h>
- //int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};
- //要求将以上数组中的0项去掉,将不为0的值存入一个新的数组.
- //int main() {
- // int oldArr[] = { 1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5 };
- // int length=16;
- // int newArr[16]={0};
- // int j = 0;
- // for (int i = 0; i < length; i++)
- // {
- // if (oldArr[i] != 0)
- // newArr[j++] = oldArr[i];
- //
- // }
- // for (int i = 0; i < length; i++) {
- // printf("%d \t",newArr[i]);
- // }
- //
- // printf("\n");
- // return 0;
- //}
- #define LENGTH 16
-
- void removeZeros(int oldArr[], int length, int newArr[]) {
- int j = 0;
- for (int i = 0; i < length; i++) {
- if (oldArr[i] != 0) {
- newArr[j++] = oldArr[i];
- }
- }
- }
-
- int main() {
- int oldArr[] = { 1, 3, 4, 5, 0, 0, 6, 6, 0, 5, 4, 7, 6, 7, 0, 5 };
- int newArr[LENGTH] = { 0 };
- removeZeros(oldArr, LENGTH, newArr);
- printf("新数组为:\n");
- for (int i = 0; i < LENGTH; i++) {
- if (newArr[i] != 0) {
- printf("%d ", newArr[i]);
- }
- }
- printf("\n");
- return 0;
- }

5.//把一个数组的元素逆序交换, int[] a = { 5, 11, 15, 24, 36, 47, 59, 66 };
//交换元素后int[] b = { 66 ,59 ,47 ,36 ,24,15 ,11 ,5 };
- #define _CRT_SECURE_NO_WARNINGS 1
- //把一个数组的元素逆序交换, int[] a = { 5, 11, 15, 24, 36, 47, 59, 66 };
- //交换元素后int[] b = { 66 ,59 ,47 ,36 ,24,15 ,11 ,5 };
- #define LENGTH 8
- #include <stdio.h>
- //void changeArr(int a[],int b[], int length) {
- // int j = length - 1;
- // for (int i = 0; i < length; i++)
- // {
- // b[i] = a[j--];
- // }
- //}
- //void printArr(int a[],int length) {
- // for (int i = 0; i < length; i++)
- // {
- // printf("%d ", a[i]);
- // }
- // printf("\n ");
- //}
- //int main() {
- // int a[]= { 5, 11, 15, 24, 36, 47, 59, 66 };
- // int b[LENGTH]={0};
- // printf("交换前数组:\n");
- // printArr(a, LENGTH);
- // changeArr(a,b , LENGTH);
- // printf("交换后数组:\n");
- // printArr(b, LENGTH);
- // return 0;
- //}
-
-
- void reverseArray(int original[], int reversed[], int length) {
- for (int i = 0; i < length; i++) {
- reversed[i] = original[length - i - 1];
- }
- }
-
- void printArray(int arr[], int length) {
- for (int i = 0; i < length; i++) {
- printf("%d ", arr[i]);
- }
- printf("\n");
- }
-
- int main() {
- int original[LENGTH] = { 5, 11, 15, 24, 36, 47, 59, 66 };
- int reversed[LENGTH] = { 0 };
- printf("原数组:");
- printArray(original, LENGTH);
- reverseArray(original, reversed, LENGTH);
- printf("逆序数组:");
- printArray(reversed, LENGTH);
- return 0;
- }
-
-

6.小游戏 下五子棋
- #define _CRT_SECURE_NO_WARNINGS 1
- #include <stdio.h>
- #define checkerboard_length 15
- //打印输出棋盘
- void print(char checkerboard[15][15]) {
- //输出棋盘
- for (int i = 0; i < checkerboard_length; i++) {
- for (int j = 0; j < checkerboard_length; j++) {
- printf("%c", checkerboard[i][j]);
- }
- printf("\n");
- }
- }
-
- //判断坐标是否越界
- int checkPointCross(int x, int y) {
- if (x < 0 || x > 13 || y < 0 || y > 13) {
- return 0;
- }
- return 1;
- }
-
- //判断坐标处是否已有棋子
- int checkPointExit(int x, int y, char checkerboard[15][15]) {
- if (checkerboard[x - 1][y - 1] != '+') {
- return 0;
- }
- return 1;
- }
-
- //判断输赢
- int judgeWinLose(int flag, char checkerboard[15][15],char black,char white) {
- if (flag) {
- //判断黑棋的输赢
- for (int i = 0; i < checkerboard_length; i++) {
- for (int j = 0; j < checkerboard_length; j++) {
- //遍历每个棋子,横向向右找五个
- 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) {
- return 1;
- }
- //遍历每个棋子,竖直向下找五个
- 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) {
- return 1;
- }
- //遍历每个棋子,斜向右下找五个
- 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) {
- return 1;
- }
- }
- }
- return 0;
- }
- else {
- //判断白棋的输赢
- for (int i = 0; i < checkerboard_length; i++) {
- for (int j = 0; j < checkerboard_length; j++) {
- //遍历每个棋子,横向向右找五个
- 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) {
- return 1;
- }
- //遍历每个棋子,竖直向下找五个
- 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) {
- return 1;
- }
- //遍历每个棋子,斜向右下找五个
- 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) {
- return 1;
- }
- }
- }
- return 0;
- }
- }
-
- //开始下棋
- void playChess( int flag, char checkerboard[15][15],char black,char white) {
- while (1) {
- if (flag) {
- printf("黑棋下子!\n");
- printf("请输入横坐标:\n");
- int x,y;
- scanf("%d",&x);
- printf("请输入纵坐标:\n");
- scanf("%d", &y);
- if (checkPointCross(x, y) && checkPointExit(x, y, checkerboard)) {
- checkerboard[x - 1][y - 1] = black;
- //下棋之后打印棋盘
- print(checkerboard);
- //判断输赢
- if (judgeWinLose(flag, checkerboard,black,white)) {
- printf("黑棋胜!\n");
- break;
- }
- }
- else {
- printf("坐标越界或坐标处已有棋子!\n");
- continue;
- }
- flag = 0;
- }
- else {
- printf("白棋下子!\n");
- printf("请输入横坐标:\n");
- int x, y;
- scanf("%d",&x);
- printf("请输入纵坐标:\n");
- scanf("%d",&y);
- if (checkPointCross(x, y) && checkPointExit(x, y, checkerboard)) {
- checkerboard[x - 1][y - 1] = white;
- //下棋之后打印棋盘
- print(checkerboard);
- //判断输赢
- if (judgeWinLose(flag, checkerboard, black, white)) {
- printf("白棋胜!\n");
- break;
- }
- }
- else {
- printf("坐标越界或坐标处已有棋子!\n");
- continue;
- }
- flag = 1;
- }
- }
- }
-
-
-
-
- int main() {
- //初始化棋盘
- //创建棋盘二维数组
- char checkerboard[15][15];
- //定义一个标记flag。true-黑棋,false-白棋
- int flag = 1;
- //定义黑棋样式
- char black = '#';
- //定义白棋样式
- char white = '*';
- //创建数组num,为棋盘进行边界行列赋值
- char num[] = { '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15' };
- //初始化数组
-
- for (int i = 0; i < checkerboard_length; i++) {
- for (int j = 0; j < checkerboard_length; j++) {
- checkerboard[i][j] = '+';
- //把棋盘最后一列的'十'替换为num数组中的元素
- if (j == checkerboard_length - 1) {
- checkerboard[i][j] = num[i];
- }
- //把棋盘最后一行的'十'替换为num数组中的元素
- if (i == checkerboard_length - 1) {
- checkerboard[i][j] = num[j];
- }
- }
- }
- //打印棋盘
- print(checkerboard);
- //开始下棋
- playChess(flag, checkerboard, black, white);
- return 0;
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。