C语言数组题目汇

C语言数组题目汇

  • 一维数组题目汇
    • 1数组常用的库函数和操作符strlen和sizeof
    • 2.数组下标访问arr
      • 2.1.基本数组访问方法
      • 2.2利用循环进行全部数组访问
  • 二维数组题目汇
    • 1.不同的方式打印二维数组
      • 1.1利用下标的方式
      • 1.2利用指针地址的方式
    • 2.数组作为函数参数-将一个整形数组排序(冒泡排序)
      • 2.1什么是冒泡排序
      • 2.2冒泡排序的举例
  • 三数组名介绍
    • 1.什么是数组名
    • 2数组名特殊的例外

一维数组题目汇

1数组常用的库函数和操作符strlen和sizeof

代码一

int main()
{
	int arr[] = { 1,2,3 };//不完全初始化
	char arr2[4] = { 'a',98 };
	char arr3[4] = "ab";
	char arr4[] = "abshsh";
	printf("%d\n", sizeof(arr4));
	printf("%d\n", strlen(arr4));
	return 0;
}

代码二


int main()
{
	char arr1[] = "abc";
	char arr2[] = { 'a','b','c' };
	printf("%d\n", sizeof(arr1));
	printf("%d\n", sizeof(arr2));//其中的arr2中只有三个字符串'a','b','c'里面没有\0
	printf("%d\n", strlen(arr1));
	printf("%d\n", strlen(arr2));//15是乱码了
	return 0;
}

补充说明:sizeof计算arr4所占空间的大小,7个元素-char 7*1=7,strlen求字符串的长度,当到\0时就停止了,求的是’\0’之前的字符串的个数,arr3中里面有三个字符ab还有一个\0,strlen和sizeof没什么关系
strlen是求字符串长度的-只能针对字符串求长度-库函数-使用时引用头文件
sizeof 计算变量,数组,类型的额大小-单位是字符-操作符

2.数组下标访问arr

2.1.基本数组访问方法

int main()
{
	char arr[] = "abcdef";
	printf("%c\n", arr[3]);
	return 0;
}

2.2利用循环进行全部数组访问

方法一

int main()
{
	char arr[] = "abcdef";
	int i = 0;
	for (i = 0;i < 6;i++)
	{
		printf("%c ", arr[i]);
	}
	return 0;
}

方法二

int main()
{
	char arr[] = "abcdef";
	int i = 0;
	int len = strlen(arr);
	for (i = 0;i < len;i++)
	//for (i = 0;i < (int)strlen(arr);i++)//strlen是无符号数,转成int有符号整型数
	{
		printf("%c ", arr[i]);
	}
	return 0;
}

补充说明 //for (i = 0;i < (int)strlen(arr);i++)//strlen是无符号数,转成int有符号整型数

方法三

int main()
{

	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int sz = sizeof(arr) / sizeof(arr[0]);//下标访问打印字符
	int i = 0;
	for (i = 0;i < sz;i++)
	{
		printf("%d", arr[i]);
	}
	return 0;
}

方法四打印地址,利用地址访问

int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	int i = 0;
	for (i = 0;i < sz;i++)
	{
		printf("&arr[%d]=%p\n", i, &arr[i]);
	}
	return 0;
}

补充说明:%d对应的是i

二维数组题目汇

1.不同的方式打印二维数组

1.1利用下标的方式

#include
int main()
{
	int arr[3][4] = { {1,2,3},{4,5} };
	//1 2 3 4
	//4 5 0 0
	//0 0 0 0
	int i = 0;
	for (i = 0;i < 3;i++)
	{
		int j = 0;
		for (j = 0;j < 4;j++)
		{
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}

1.2利用指针地址的方式

int main()
{
	int arr[3][4] = { {1,2,3},{4,5} };
	int i = 0;
	for (i = 0;i < 3;i++)
	{
		int j = 0;
		for (j = 0;j < 4;j++)
		{
			printf("&arr[%d][%d]=%p\n", i, j, &arr[i][j]);
		}
	}
	return 0;
}//与打印一维数组一样

2.数组作为函数参数-将一个整形数组排序(冒泡排序)

2.1什么是冒泡排序

C语言数组题目汇_第1张图片

补充说明:将一个整形数组排序
冒泡排序:相邻两个元素之间进行计较排序
10个元素9趟,变成9个元素8趟,每一趟就是相邻两个元素进行比较交换

2.2冒泡排序的举例

对于9,8,7,6,5,4,3,2,1,0进行升降排序

#include
void bubble_sort(int arr[],int sz)//注意哦sz不能在函数中计算
{
	//确定冒泡排序的趟数,n个元素有n-1个趟数
	int i = 0;
	for (i = 0;i < sz - 1;i++)
	{
		//每一趟冒泡排序
		int j = 0;
		for (j = 0;j < sz -1- i;j++)//sz-i=可以知道不同的趟数
		{
			if (arr[j] > arr[j + 1])
			{
				int tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
			}
		}
	}

}
int main()
{
	int arr[] = { 9,8,7,6,5,4,3,2,1,0 };
	int i = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);
	//对arr进行排序,排成升序
	bubble_sort(arr, sz);//冒泡排序函数
	for (i = 0;i < sz;i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

还有另一种方法就是 int flag = 1;假设这一趟要排序的数据已经有序//这是一个状态的定义,如果为一则不用再冒泡排序了

void bubble_sort(int arr[], int sz)
{
	int i = 0;
	for (i = 0;i < sz - 1;i++)
	{
		int flag = 1;
		每一趟冒泡排序
		int j = 0;
		for (j = 0;j < sz - 1 - i;j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
				flag = 0;//本趟排列的数据其实不完全有序
			}
		}
		if (flag == 1)
		{
         break;
		}
	}
}

补充说明:1.break只能在for和Switch中使用,在循环语句中使用,在这里不是作用于if语句,而是在这个条件满足的条件下怎样

三数组名介绍

1.什么是数组名

#include
int main()
{
	int arr[10] = { 1,2,3,4,5 };
	printf("%p\n", arr);
	printf("%p\n", &arr[0]);
	printf("%d\n", *arr);
	return 0;
}

补充说明:从计算结果可知:数组名就是首元素的地址

2数组名特殊的例外

1.sizeof(数组名)-数组名表示整个数组,计算的是整个数组的大小,单位是字节
2.&数组名,数组名代表整个数组,&数组名,取出的是整个数组的地址

来点实际的例子

int main()
{
	int arr[] = { 1,2,3,4,5 };
	//例子1234455
	printf("%p\n", arr);
	printf("%p\n", &arr[0]);
	printf("%p\n", &arr);
	printf("%p\n", arr+1);
	printf("%p\n", &arr[0]+1);
	printf("%p\n", &arr + 1);

补充说明;arr,&arr[0]取的是首元素的地址1,下标为0的为首元素
&arr-数组的地址和数组首元素的地址是一样的,但代表的意义不一样,有什么不一样呢?可以参考后面三个打印的结果明显看出,地址的增加的数目不同。一个是单个,一个是整体。

你可能感兴趣的:(学习,c语言,算法)