C语言一维数组
一维数组的创建
- 定义一维数组
- 数据类型 数组名[数组长度]
int a[10];
char b[10];
float d[10];
double c[10];
//数组长度决定数组可以储存多少个数据
-
什么是数组呢?
- 数组就是多个普通变量有规律的连接在一起
- 数组就是多个普通变量有规律的连接在一起
-
数组的初始化
- 定义数组的时候直接赋值
int a[10]={0,1,2,3,4,5,6,7,8,9};//赋值的时候要加{}
int b[10]={0};//将数组内的每个变量全部赋值为0
int c[10]={1,2,3};//将数组的前三个变量分别赋值为1,2,3,后面的变量自动赋值为0
int d[]={1,2,3};//通过后面的赋值自动将数组长度定义为3
- 2、错误的初始化赋值
//no.1
int a[];//不存在数组长度为0的数组
//no.2
int b[3];
b[3]={1,2,3};//不存在先定义,再初始化赋值
- 数组的访问
- 使用for循环逐个访问对应数组下标的变量
- 数组名[数组下标] 数组下标从0开始,最大值为数组长度减1
一维数组的常规操作
插入
#include<stdio.h>
int main()
{
int a[10];//定义一个数组
for(int i=0;i<10;i++)//循环遍历数组
{
scanf("%d",&a[i]);//逐个插入
}
return 0;
}
查找
#include<stdio.h>
int main()
{
int a[10]={1,2,3,4,5,6,7,8,9,0};//定义一个数组
for(int i=0;i<10;i++)//循环遍历数组
{
if(a[i]==6)//查找数组内值为6的数组下标
{
printf("%d",i);
}
}
return 0;
}
查找+修改
#include<stdio.h>
int main()
{
int a[10]={1,2,3,4,5,6,7,8,9,0};//定义一个数组
for(int i=0;i<10;i++)//循环遍历数组
{
if(a[i]==6)//查找数组内值为6的变量
{
a[i]=666;//将其值修改为666
break;
}
}
for(int i=0;i<10;i++)
{
printf("%d ",a[i]);
}
return 0;
}
查找+删除
#include<stdio.h>
int main()
{
int a[10]={1,2,3,4,5,6,7,8,9,0};//定义一个数组
int size=10;
for(int i=0;i<10;i++)//循环遍历数组
{
if(a[i]==6)//查找数组内值为6的数组下标
{
for(int j=i;j<10;j++)
{
a[j]=a[j+1];
}
size--;
break;
}
}
for(int i=0;i<size;i++)
{
printf("%d ",a[i]);
}
return 0;
}
查找+有序插入
#include<stdio.h>
int main()
{
int x=3;//定义一个变量x
int a[10]={1,2,4,9};//定义一个数组
int size=4;//数组大小
for(int i=0;i<10;i++)//循环遍历数组
{
if(a[i]>3)
{
size++;
for(int j=4;j>i;j--)//将比3大的数后移一位
{
a[j]=a[j-1];
}
a[i]=3;//再将3插入
break;//结束插入
}
}
for(int i=0;i<size;i++)
{
printf("%d ",a[i]);
}
return 0;
}
排序—>冒泡排序
#include <stdio.h>
int main()
{
//冒泡排序
int array[10] = { 60,70,80,90,100,10,20,30,40,50 };
int curSize = 10;
//排序
//int count = 0;
for (int i = 0; i < curSize; i++) //每个元素都需要一个机会冒泡
{
for (int j = 0; j < curSize-1-i; j++) //描述每个元素冒泡过程
{
//从小到大排序
if (array[j] > array[j + 1]) //不满足规则交换
{
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
//count++;
}
}
}
for (int i = 0; i < curSize; i++)
{
printf("%d\t", array[i]);
}
return 0;
}
字符数组和字符串
- 字符数组和数字类数组处理方案相同的
- 字符串: 存在一个不可见字符\0
- 字符串的打印:用 %s做打印
- %s的工作原理: 从首地址打印到\0 所以%s对应的是地址
- 字符数组的定义及初始化
char a[4]={'a','b','c'};
char b[]={'a','b','c'};//自动推断长度为3
char c[]="iloveyou";//字符有一个不可见字符,因此自动推断长度为9
- 字符数组操作字符串
char array[] = { 'A','B','C' };
char inputstr[] = { 'A','B','C','D','\0','A','B','C' };
//%s对应的是地址
printf("%s\n", &inputstr[0]); //打印ABCD 即&inputstr[0]到\0
printf("%s\n", &inputstr[2]); //打印CD 即&inputstr[2]到\0
printf("%s\n", &array[0]); //打印ABC烫烫烫烫烫烫烫烫烫烫烫烫烫烫?
// 数组名代表第一个元素的地址
char output[] = "ILoveyou";
printf("%s\n", output); //output等同于&output[0]
- 字符串输入函数
//字符串输入函数: gets:输入+puts:打印
char passw[20];
//所有字符串处理用的数组
gets_s(passw, 20); //20一般用的是passw的长度
puts(passw); //自带换行
字符串处理函数(加头文件 #include <string.h>)
-
strcat: 连接
- 原型:extern char *strcat(char *dest,char *src);
- 功能:把src所指字符串添加到dest结尾处(覆盖dest结尾处的’\0’)并添加’\0’。
- 说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。 返回指向dest的指针。
-
strcpy:拷贝
- 原型:extern char *strcpy(char *dest,char *src);
- 功能:把src所指由NULL结束的字符串复制到dest所指的数组中
- 说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。
-
strcmp:比较
- 原型:extern int strcmp(char *s1,char * s2);
- 功能:比较字符串s1和s2。
- 说明:
当s1<s2时,返回值<0
当s1=s2时,返回值=0
当s1>s2时,返回值>0
-
strlen:统计可见长度
- 原型:extern int strlen(char *s);
- 功能:计算字符串s的长度
- 说明:返回s的长度,不包括结束符NULL