zl程序教程

您现在的位置是:首页 >  其他

当前栏目

数组知识点

2023-09-11 14:20:02 时间

数组的定义

一组数据的集合,用于储存大批量相同数据类型的数据

一维数组

 基本格式

数据类型 数组名 [数组大小]

使用

数组名[下标]

int score[50];
	score[0] = 80;
	score[1] = 85;
	//……
	score[49] = 75;
	//score[50]:数组访问越界,从0开始,个数为50个
	float f[10];
	f[1] = 1.1;
	f[2] = 2.2;

特点

  1. 是一组有序数据的集合
  2. 用一个数组名和下标来唯一地表示数组中的每个元素
  3. 数据中的每个元素都是属于同一数据类型。不能把不同数据类型的数据放在同一个数组

数组的初始化

int score1 = 80;//初始化赋值
	int score2 = 83;
	int score3 = 76;
	int score6;
	score6 = 66;//赋值
	//int score……;
	printf("%d\n", score1);
int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };
	//使用初始化列表方式给数组初始化赋值
	printf("%d\t%d\t%d\t", arr1[0], arr1[1], arr1[9]);

	int arr2[8] = { 0,1,2,3,4,5 };
	//可以只给部分元素初始化赋值,从下标为0开始赋值,没有赋值元素默认为0
	printf("%d\t%d\t%d\t", arr2[0], arr2[1], arr2[9]);
	int arr3[] = { 1,2,3,4,5,6 };
	//int arr3[];
	//定义数组时必须给定数组大小
	//int arr4[n];//给定的数组大小必须为整型常量,不能是变量,也不能是小数

	int arr5[] = { 1,2,3,4,5,6 };
	//初始化列表方式给定数组大小,根据列表数据个数决定数组大小

输入输出

int arr6[10] = { 0 };
	//所有数组元素初始化为0,
	// 没有初始化的数组,元素储存的是乱数据
	//可以循环输入输出数组元素
	for (int i = 0; i < 10; i++)
	{
		printf("%d\t", arr6[i]);//使用循环变量i控制数组下标改变
	}
	putchar('\n');
	for (int i = 0; i < 10; i++)
	{
		scanf("%d", &arr6[i]);
	}
	for (int i = 0; i < 10; i++)
	{
		printf("%d\t", arr6[i]);//使用循环变量i控制数组下标改变
	}

	putchar('\n');

二维数组

 基本格式

数据类型 数组名 数据行列

/二维数组:相当于多个一维数组的组合
	float f[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
	//定义一个3行4列二维数组f,并给每个元素赋值
	printf("%f\t%f\t%f\t%f\n", f[0][0], f[0][1], f[1][0], f[2][3]);//1,2,5,12
	//二维数组内存大小=单个数组元素大小*行数*列数
	printf("%d\t", sizeof(f));//48

赋值

int arrs1[4][5] = { 0 };//全部赋值
	int arrs2[3][4] = { 1,2,3,4,5 };//给部分元素赋值
	int arrs3[3][4] = { {1,2,3,4},
					  {5,6,7,8},//每一行分别赋值
					  {9,10} };//每一行部分元素赋值
	int arrs5[][4] = { {1,2,3,4},
	{5,6,7,8}, {9,10} };//初始赋值行下标可省略,列下标不能省略
	

双重循环输入

	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 4; i++)
		{
			scanf("%d\t", f[i][j]);//双重循环输入
		}

	}
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 4; i++)
		{
			printf("%d\t", f[i][j]);//双重循环输出
		}
		putchar('\n');
	}

字符数组

用来存储字符数据的数组,一个元素存放一个数组

//字符数组:字符类型数组
	char ch [10] = { 'a','h',',','\\','1','5' };
	ch [8] = 's';
	char s[20] = "abcdefg123456!@#";
	s[10] = '\n';//把第10个改为回车

	for (int i = 0; i < 20; i++)
	{
		//printf("%c", s[i]);
		putchar(s[i]);
	}
	printf("%s", s);//以%s格式整体输出整个字符串


	scanf("%s", s);//以%s格式输入整个字符串
	//以字符串格式输入不用带&
	printf("%s", s);//以%s格式整体输出整个字符串
	//以字符串格式输出不用带&

	gets(s);//gets为字符串输入函数
	puts(s);//puts为字符串输出函数

	//char str[10] = "abcdefghij";所以要少一位
	char str[10] = "abcdefghi";
	puts(str);

	char strl[6] = "";//"\0"初始化为空字符串
	//字符串需要以'\0'作为结束标志(ASCLL码为0)
	// 字符串处理总是会以'\0'作为结束
	
	//二维字符数组
	char strs[5][10] = { "abcdefg","123456","!@#$%^","_+()" };
	for (int i = 0; i < 5; i++)
	{
		puts(strs[i]);
	}
	//一个中文占两个字符位置

常用字符串处理函数

        /strlen:求字符串长度函数
		printf("%d\n", strlen(strl));//6
		printf("%d\n", sizeof(strl));//20
		printf("%d\n", strlen("abcdefg"));//7
		printf("%d\n", sizeof("abcdefg"));//8
		//strlen只计算有效字符的个数,不会计算'\0'
		//sizeof计算所有字符个数,会计算'\0'

		//strcat:字符串连续函数
		char str1[20] = "abcdefg", str2[10] = "123456";
		puts(str1);
		puts(str2);//将str2连接到str1中
		strcat(str1,str2);
		puts(str1);
		puts(str2);
         
        //strcpy:字符串拷贝函数(复制字符串)
		char str1[10] = "", str2[10] = "";
		gets(strl);
		gets(str2);
		puts(strl);
		puts(str2);
		strcpy(str1, str2);
		puts(strl);
		puts(str2);

		//strcmp:字符串比较函数(比较两个字符串的大小)
		char str1[10] = "", str2[10] = "";
		gets(strl);
		gets(str2);
		puts(strl);
		puts(str2);
		printf("%d\n", strcmp(str1, str2));
		/*
		比较规则:
		第一个大于第二个 返回1
		第一个小于第二个 返回-1
		等于   0
		比较原理:ASCLL码字符大小
		第一个不同的字符的比较大的字符串就大,反之小
		*/