一、数组基础
1、数组的类型:
元素类型名[元素个数]
2、数组的定义:
元素类型名 数组名[元素个数] 定义一个包含十个int型元素的数组,数组名为arr:
int arr[10];//int为元素的类型,不是数组的类型,数组是int[10]类型的。
3、数组的初始化
数组的初始化分为完全初始化和部分初始化。
int arr[5] = {1, 2, 3, 4, 5};//完全初始化。
//完全初始化即为给数组的每个元素都赋值。
int arr2[5] = {1, 2}; //部分初始化。
//部分初始化为给数组的部分元素赋值,其余元素为随机值。
int arr3[5] = {}; //数组置零,即全部元素的值都为零。
4、数组遍历
编译器不会检查数组是否越界,可提高编译效率
数组遍历输入
void scfarr(int arr[], int len)
{
int i = 0;
for(i=0; i
数组遍历输出
void prtarr(int arr[], int len)
{
int i = 0;
for(i=0; i
5、数组名作为左值和右值
右值:
数组名arr作为右值代表第一个元素的首地址。
&arr代表数组的首地址,与arr数值相等,代表含义不同,(&arr+1)代表整个数组的后一项。
左值:
左值代表的是变量所对应的内存空间,数组作为一个整体,没有匹配的数值与其空间对应。
故数组不能作为左值,只能被初始化。
6、传值调用
数组名作为参数,要加上元素个数。
数组名作为参数传递的是数组首元素首地址。
数组名作为参数时,丢失了数组本身的大小,退化成了一个指针 。
子函数对数组的操作会改变元素的值,但不会改变元素的地址,在子函数内改变的地址作为形参在子函数结束时被销毁。
二、数组的应用
1、冒泡排序
void mppx(int arr[], int len)
//arr为被排序的数组名,len为数组长度。
{
int i = 0, j = 0, tem = 0;
for(i=0; i
arr[j+1])
{
tem = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tem;
}
}
}
return;
}
2、选择排序
void xzpx(int arr[], int len)
//arr为被排序的数组名,len为数组长度。
{
int i = 0, j = 0, tem = 0;
for(i=0; i
arr[j])
{
tem = arr[j];
arr[j] = arr[i];
arr[i] = tem;
}
}
}
return;
}
3、进制转换
int fun(void)
{
char arr[100]={0}, i = 0;
int a = 0, b = 0;
printf("输个数!\n");
scanf("%d",&a);
printf("几进制?\n");
scanf("%d",&b);
do
{
arr[i] = a % b;
a = a / b;
i++;
}while(a > 0);
for(i=i-1; i>=0;i--)
{
if(arr[i] < 10)
printf("%d",arr[i]);
else
printf("%c",arr[i]-10+'A');
}
}
4、二分法查找数据的角标
#include
int search_arr_element(int arr[], int left, int right, int data);
void main(void)
{
int arr[5] = {1, 2, 3, 4, 5};
printf("%d\n",find_data(arr, arr[0], arr[4], 5));
return;
}
int find_data(int arr[], int left, int right, int data)
{
int mid = 0;
while (left <= right)
{
mid = (left+right) / 2;
if(data > arr[mid])
{
left = mid + 1;
}
else if(data < arr[mid])
{
right = mid - 1;
}
else
{
return mid;
}
}
return -1;
}
5、循环右移
#include
#include
void right(char arr[], int wei); void main(void) { char arr[] = "qaujetg"; int a = 0; printf("几位?\n"); scanf("%d", &a); right(arr, a); printf("%s\n", arr); return; } void right(char arr[], int wei) { int i = 0, j = 0, tem = 0, len = strlen(arr); for(i=0; i
0; j--) arr[j] = arr[j-1]; arr[0] = tem; } return; }