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 耄耋之年。

#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;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值