数组的概念
一个集合,里面存放了相同类型的数据
数组属于线性表的顺序存储结构,也称为顺序表
![](https://i-blog.csdnimg.cn/blog_migrate/188f6000aad4404c0ae1de4e560692c6.png)
数组分为 一维数组,二维数组,字符数组
一维数组
数组的定义方式
一维数组定义的三种方式
1:数据类型 数组名[ 数组长度 ];
2: 数据类型 数组名[ 数组长度 ]={值1,值2 ....};
3: 数据类型 数组名[ ] ={值1 ,值2 ......};
数组的基本操作
数组基本操作有输入,输出,插入,删除,查询,修改等功能
数组的输入
void input(int arr[],int len){
int i;
int *p=arr; //指针
for(i=0;i<len;i++){
printf("请输入第%d个元素:",(i+1));
scanf("%d",&arr[i]);
//scanf("%d",arr+i);
//scanf("%d",p+i);
}
}
数组的输出(遍历数组)
void output(int arr[],int len){
//定义循环变量
int i;
int *p=arr;
for(i=0;i<len;i++){
printf("%d ",arr[i]);
//printf("%d ",*(arr+i));
//printf("%d ",*(p+i));
}
}
数组的查询
//根据元素的值去找 下标
int searchValue(int arr[],int len,int value){
int i;
for(i=0;i<len;i++){
if(value==arr[i]){
return i;
}
}
return -1;
}
//根据下标 查找元素
int seachKey(int arr[],int len,int key){
//判断 位置是否在数组范围之内
if(key<0 || key>=len){
printf("位置不对!");
return 0; //exit(0); 结束程序
}
int i;
for(i=0;i<len;i++){
if(){
}
}
printf("查找的元素是:%d\n",arr[key]);
}
数组的修改
//根据元素值修改
void updateValue(int arr[],int len){
//修改前,修改后
int firstvalue,lastvalue;
printf("请输入你要修改的元素:\n");
scanf("%d",&firstvalue);
printf("请输入你要修改后的元素:\n");
scanf("%d",&lastvalue);
int i;
for(i=0;i<len;i++){
if(arr[i]==firstvalue){
arr[i]=lastvalue;
}
}
}
//根据位置修改
void updateKey(int arr[],int len){
int key,value;
printf("请输入你要修改的位置:");
scanf("%d",&key);
printf("请输入你要修改后的值:");
scanf("%d",&value);
if(key<0 || key>=len){
printf("位置不对!");
return 0;
}
arr[key]=value;
}
数组的插入
![](https://i-blog.csdnimg.cn/blog_migrate/4632c516ef6bd504e8bd85e564536ab9.png)
void insert(int arr[],int *len,int index,int value){
int i,temp;
if(index<0 || index>*len-1){
return;
}
//元素后移
for(i=len-1;i>=index;i--){
arr[i+1]=arr[i]
}
//插入元素
arr[index]=value;
//长度变化
(*len)++;
}
数组的删除
![](https://i-blog.csdnimg.cn/blog_migrate/b64c404c9eedbbd8209e5cc3689e1436.png)
void delete(int arr[],int len,int index){
int i;
if(index<0 || index>*len-1){
return;
}
//元素前移
for(i=index;i<*len-1;i++){
arr[i]=arr[i+1];
}
//
(*len)--;
}
二维数组
二维数组就是在一维数组上,多加一个维度
二维数组定义方式
二维数组定义方式
数据类型 数组名[ 行数 ][ 列数 ];
数据类型 数组名[ 行数 ][ 列数 ] = { {数据1,数据2 } ,{数据3,数据4 } };
数据类型 数组名[ 行数 ][ 列数 ] = { 数据1,数据2,数据3,数据4};
数据类型 数组名[ ][ 列数 ] = { 数据1,数据2,数据3,数据4};
二维数组的基本操作
二维数组 的基本操作有输入,输出等功能
二维数组的输入
int arr[3][4];
for(int i=0;i<3;i++){
for(int j=0;j<4;j++){
scanf("%d",&arr[i][j]);
}
}
二维数组的输出
for(int i=0;i<3;i++){
for(int j=0;j<4;j++){
printf("%d ",arr[i][j]);
}
printf("\n");
}
字符数组
//1、大括号初始化字符数组时,需要预留一个空间做结束标志\0,否则会乱码
char a[5]={'a','b','c','d','e'}; //乱码
//2、双引号初始化时,自带结束标志
char str[]="hello";
strlen 求字符串长度时,不带\0
sizeof 求字符串长度时,带\0
字符数组两种键盘录入方式
1、gets (字符串);
2、scanf("%s",字符串);
//可以校验是否越界,stdin 是标准输入流(键盘输入)
fgets(a,sizeof(a),stdin);