一、什么是数组
二、数组的定义
格式:类型标识符 数组名[长度];
int a[4]; //定义了一个数组a ,他是一个整型数组,而且它里面含有4个元素,每一个元素都是一个整型变量
它们分别是 a[0],a[1],a[2],a[3]
float pay[5]; //定义了一个
三、数组的赋处值
int a[3]={12,56,34};
float price[5]={1.2,3.4,2.4}
注意:
1、在定义数组时,写在数组中括号的数只表示数组的长度,也就是所含有元素的个数
2、数组的下标是从零开始的
3、数组的最大下标能够到长度减一
4、给数组赋初值,赋值个数不能大于数组的长度
5、赋值个数可以小于数组长度,如果小于数组长度,对于没有赋到的值:
6、数组里面的值可以重复
7、数组名可以由用户自己取,但是需要符合c语言的语法规则
1:必须要以——或英文字母开头
2:不能包含特殊字符 (,*, )
3: 不能与关键字同名:for int double char
A)整型或实型:0
B)字符型:“空字符”
数组的输入和输出:
有数组必须要循环
输出:
int a[10]={1,2,3,4,5,6,7,4,58};
for(int i=0;i<10;i++)
{
printf("%d",a[i]);
}
输入:
int a[10],i;
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
层数可以变化,n来保存
数组的简单应用
int a[4]={1,2},k;
int a[4]={0};//把数组a里面的值都赋值为零
第30集 数组的应用一
让用户输入10个数,然后求出十个数的和,求出最大值与最小值。
int a[10],sum=0,max,min,temp;
for(int i=0;i<10;i++)
{
printf("请输入10个整数:");
scanf("%d",&a[i]);
sum+=a[i];
}
printf("sum=%d",sum);
max=a[0];
for(int i=1;i<10;i++)
{
if(max<a[i])
{
temp=max;
max=a[i];
a[i]=temp;
}
}
min=a[0];
for(int i=1;i<10;i++)
{
if(min>a[i])
{
temp=min;
min=a[i];
a[i]=temp;
}
}
printf("max=%d,min=%d",max,min);
第32集
关于数组的查找
让用户输入一个要查找的数,然后在已知的数组中查找,如果找到了,就输出对应的下标,如果没找到就输出-1
int n,index;
printf("请输入要查找的数:");
scanf("%d",&n);
int a[8]={13,25,73,84,95,56,37,28};
for(int i=0;i<8;i++)
{
printf("%5d",a[i]);
}
for(int i=0;i<8;i++)
{
if(n==a[i])
{
printf("找到了%d下标为%d",n,index);
}
}
关于数组的反转,把数组中的值反过来。
int a[8]={21,42,536,64,75,86,47,80},i,j,temp;
for(int i=0;i<8;i++)
{
printf("%5d",a[i]);
}
printf("\n");
for(i=0;j=7;i<j;i++,j--)
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
for(int i=0;i<8;i++)
{
printf("%5d",a[i]);
}
printf("\n");
数组元素的删除
算法分析:
1:定义一个数组,定义一个变量存放要删除的数
2:查找到要删除的数在数组中的位置,找到对应的下标
3:通过下标去删除对应的数组元素
4:为了看到删除后的结果,输出数组
for(i=n;i<7-1;i++)
{
a[n]=a[i+1];
}
for(j=要删除的下标;j<长度-1;j++)
{
a[j]=a[j+1];
}
main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10},del,index=-1,i,j;
for(i=0;i<10;i++)
{
printf("%4d",a[i]);
}
printf("\n");
printf("请输入要删除的数给delete:");
scanf("%d",&del);
for(i=0;i<10;i++)
{
if(a[i]==del)
{
index=i;//保存下标的位置
break;
}
}
if(index==-1)
{
printf("要删除的数%d没找到",del);
}else
{
for(j=index;j<9;j++)//删除下标为index的元素
{
a[j]=a[j+1];
}
for(i=0;i<9;i++)
{
printf("%4d",a[i]);
}
}
}
数组的插入
在一个有序的数组中,插入一个数,让插入后的数组,依然保持有序。
main()
{
int a[11]={10,20,30,40,50,60,70,80,90,100},insert,index=-1,i,j;
for(i=0;i<10;i++)
{
printf("%4d",a[i]);
}
printf("\n");
printf("请输入要插入的数给insert:");
scanf("%d",&insert);
for(i=0;i<10;i++)
{
if(a[i]>insert)
{
break;
}
}
index=i;//保存下标的位置,这里很重要
for(j=10;j>index;j--)//插入下标为index的元素
{
a[j]=a[j-1];
}
a[index]=insert;
for(i=0;i<11;i++)
{
printf("%4d",a[i]);
}
}
34集数组的应用举例之二
先对数组进行升序排列
int a[8]={1,4,2,7,34,12,-1},i,j,temp;
for(j=0;j<8;j++)
{
printf("%4d",a[j]);
}
printf("\n");
for(j=0;j<8;j++)//冒泡排序
{
for(i=j+1;i<8;i++)
{
if(a[j]>a[i])
{
temp=a[j];
a[j]=a[i];
a[i]=temp;
}
}
}
for(j=0;j<8;j++)
{
printf("%4d",a[j]);
}
排序算法
for(i=0;i<数组长度;i++)
for(j=i+1;j<数组长度;j++)
if(a[i]>a[j])//从小到大
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
给的数组a,从数组中找出小于数组平均数的元素,存放在数组b中
int a[10]={52,34,25,45,37,78,23,78,93,12},i,j=0,sum,b[10]={0};
float avg;
for(i=0;i<10;i++)
{
sum+=a[i];
}
for(i=0;i<10;i++)
{
printf("%4d",a[j]);
}
avg=sum/10.0;
printf("%4d",avg);
for(i=0;i<10;i++)
{
if(a[i]<avg)
{
b[j++]=a[i];
}
}
for(i=0;i<j;i++)
{
printf("%4d",b[i]);
}
36集二维数组
什么是二维数组
(一维数组只有一行)
二维数组,有行有列
0列 1 2
第0行 1 2 3
4 5 6
2行 7 8 9
如何定义二维数组:
格式: 类型标识符 数组名[行的长度][列的长度];
ex: int a[3][4];//一共有多少个元素?等于3*4=12个
意义:定义了一个二维数组名为a这个数组里面含有12个元素,而每一个元素都是一个整型变量,他们是
a[0][0],a[0][1],a[0][2],a[0][3] 对于第一行而言,行的下标都是零,只有列的下标在变化
a[1][0],a[1][1],a[1][2],a[1][3]
a[2][0],a[2][1],a[2][2],a[2][3]
对于第一列而言,列的下标都是0,只有行的下标在变化。
如何给二维数组赋初值,就是给二维数组每一个元素赋初值
1)int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
2)int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
3)可以省略行但不能省略列
A:int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};
B:int a[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
C:int a[][4]={1,2,3,4,5,6,7,8,9,10,11};
a[2][3]=0;
D:int a[][4]={{1,3,4},{5,6,7,8},{9,10,11,12}};
a[0][3]=0;
二维数组的行的长度,表示一共有多少行。列的长度表示每一行的元素个数
二维数组的赋值原则:要优先满足前面的行,然后再来满足后面的行。(前面的行不能少元素,后面的行可以少元素)
数组的输入和输出:
1)有数组就要用循环,一维数组,只要一个循环。
2)二维数组,它也要循环,两次循环
我们要输出三行,而且第一行又要输出四个数据
先来输出第一行的4个元素
printf("%d",a[0][0]);
printf("%d",a[0][1]);
printf("%d",a[0][2]);
printf("%d",a[0][3]);
for(i=0;i<3;i++)//3行的长度
{
for(j=0;j<4;j++)//4列的长度
{
printf("%5d",a[i][j]);
}
printf("\n");
}
二、数组的定义
格式:类型标识符 数组名[长度];
int a[4]; //定义了一个数组a ,他是一个整型数组,而且它里面含有4个元素,每一个元素都是一个整型变量
它们分别是 a[0],a[1],a[2],a[3]
float pay[5]; //定义了一个
三、数组的赋处值
int a[3]={12,56,34};
float price[5]={1.2,3.4,2.4}
注意:
1、在定义数组时,写在数组中括号的数只表示数组的长度,也就是所含有元素的个数
2、数组的下标是从零开始的
3、数组的最大下标能够到长度减一
4、给数组赋初值,赋值个数不能大于数组的长度
5、赋值个数可以小于数组长度,如果小于数组长度,对于没有赋到的值:
6、数组里面的值可以重复
7、数组名可以由用户自己取,但是需要符合c语言的语法规则
1:必须要以——或英文字母开头
2:不能包含特殊字符 (,*, )
3: 不能与关键字同名:for int double char
A)整型或实型:0
B)字符型:“空字符”
数组的输入和输出:
有数组必须要循环
输出:
int a[10]={1,2,3,4,5,6,7,4,58};
for(int i=0;i<10;i++)
{
printf("%d",a[i]);
}
输入:
int a[10],i;
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
层数可以变化,n来保存
数组的简单应用
int a[4]={1,2},k;
int a[4]={0};//把数组a里面的值都赋值为零
第30集 数组的应用一
让用户输入10个数,然后求出十个数的和,求出最大值与最小值。
int a[10],sum=0,max,min,temp;
for(int i=0;i<10;i++)
{
printf("请输入10个整数:");
scanf("%d",&a[i]);
sum+=a[i];
}
printf("sum=%d",sum);
max=a[0];
for(int i=1;i<10;i++)
{
if(max<a[i])
{
temp=max;
max=a[i];
a[i]=temp;
}
}
min=a[0];
for(int i=1;i<10;i++)
{
if(min>a[i])
{
temp=min;
min=a[i];
a[i]=temp;
}
}
printf("max=%d,min=%d",max,min);
第32集
关于数组的查找
让用户输入一个要查找的数,然后在已知的数组中查找,如果找到了,就输出对应的下标,如果没找到就输出-1
int n,index;
printf("请输入要查找的数:");
scanf("%d",&n);
int a[8]={13,25,73,84,95,56,37,28};
for(int i=0;i<8;i++)
{
printf("%5d",a[i]);
}
for(int i=0;i<8;i++)
{
if(n==a[i])
{
printf("找到了%d下标为%d",n,index);
}
}
关于数组的反转,把数组中的值反过来。
int a[8]={21,42,536,64,75,86,47,80},i,j,temp;
for(int i=0;i<8;i++)
{
printf("%5d",a[i]);
}
printf("\n");
for(i=0;j=7;i<j;i++,j--)
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
for(int i=0;i<8;i++)
{
printf("%5d",a[i]);
}
printf("\n");
数组元素的删除
算法分析:
1:定义一个数组,定义一个变量存放要删除的数
2:查找到要删除的数在数组中的位置,找到对应的下标
3:通过下标去删除对应的数组元素
4:为了看到删除后的结果,输出数组
for(i=n;i<7-1;i++)
{
a[n]=a[i+1];
}
for(j=要删除的下标;j<长度-1;j++)
{
a[j]=a[j+1];
}
main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10},del,index=-1,i,j;
for(i=0;i<10;i++)
{
printf("%4d",a[i]);
}
printf("\n");
printf("请输入要删除的数给delete:");
scanf("%d",&del);
for(i=0;i<10;i++)
{
if(a[i]==del)
{
index=i;//保存下标的位置
break;
}
}
if(index==-1)
{
printf("要删除的数%d没找到",del);
}else
{
for(j=index;j<9;j++)//删除下标为index的元素
{
a[j]=a[j+1];
}
for(i=0;i<9;i++)
{
printf("%4d",a[i]);
}
}
}
数组的插入
在一个有序的数组中,插入一个数,让插入后的数组,依然保持有序。
main()
{
int a[11]={10,20,30,40,50,60,70,80,90,100},insert,index=-1,i,j;
for(i=0;i<10;i++)
{
printf("%4d",a[i]);
}
printf("\n");
printf("请输入要插入的数给insert:");
scanf("%d",&insert);
for(i=0;i<10;i++)
{
if(a[i]>insert)
{
break;
}
}
index=i;//保存下标的位置,这里很重要
for(j=10;j>index;j--)//插入下标为index的元素
{
a[j]=a[j-1];
}
a[index]=insert;
for(i=0;i<11;i++)
{
printf("%4d",a[i]);
}
}
34集数组的应用举例之二
先对数组进行升序排列
int a[8]={1,4,2,7,34,12,-1},i,j,temp;
for(j=0;j<8;j++)
{
printf("%4d",a[j]);
}
printf("\n");
for(j=0;j<8;j++)//冒泡排序
{
for(i=j+1;i<8;i++)
{
if(a[j]>a[i])
{
temp=a[j];
a[j]=a[i];
a[i]=temp;
}
}
}
for(j=0;j<8;j++)
{
printf("%4d",a[j]);
}
排序算法
for(i=0;i<数组长度;i++)
for(j=i+1;j<数组长度;j++)
if(a[i]>a[j])//从小到大
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
给的数组a,从数组中找出小于数组平均数的元素,存放在数组b中
int a[10]={52,34,25,45,37,78,23,78,93,12},i,j=0,sum,b[10]={0};
float avg;
for(i=0;i<10;i++)
{
sum+=a[i];
}
for(i=0;i<10;i++)
{
printf("%4d",a[j]);
}
avg=sum/10.0;
printf("%4d",avg);
for(i=0;i<10;i++)
{
if(a[i]<avg)
{
b[j++]=a[i];
}
}
for(i=0;i<j;i++)
{
printf("%4d",b[i]);
}
36集二维数组
什么是二维数组
(一维数组只有一行)
二维数组,有行有列
0列 1 2
第0行 1 2 3
4 5 6
2行 7 8 9
如何定义二维数组:
格式: 类型标识符 数组名[行的长度][列的长度];
ex: int a[3][4];//一共有多少个元素?等于3*4=12个
意义:定义了一个二维数组名为a这个数组里面含有12个元素,而每一个元素都是一个整型变量,他们是
a[0][0],a[0][1],a[0][2],a[0][3] 对于第一行而言,行的下标都是零,只有列的下标在变化
a[1][0],a[1][1],a[1][2],a[1][3]
a[2][0],a[2][1],a[2][2],a[2][3]
对于第一列而言,列的下标都是0,只有行的下标在变化。
如何给二维数组赋初值,就是给二维数组每一个元素赋初值
1)int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
2)int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
3)可以省略行但不能省略列
A:int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};
B:int a[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
C:int a[][4]={1,2,3,4,5,6,7,8,9,10,11};
a[2][3]=0;
D:int a[][4]={{1,3,4},{5,6,7,8},{9,10,11,12}};
a[0][3]=0;
二维数组的行的长度,表示一共有多少行。列的长度表示每一行的元素个数
二维数组的赋值原则:要优先满足前面的行,然后再来满足后面的行。(前面的行不能少元素,后面的行可以少元素)
数组的输入和输出:
1)有数组就要用循环,一维数组,只要一个循环。
2)二维数组,它也要循环,两次循环
我们要输出三行,而且第一行又要输出四个数据
先来输出第一行的4个元素
printf("%d",a[0][0]);
printf("%d",a[0][1]);
printf("%d",a[0][2]);
printf("%d",a[0][3]);
for(i=0;i<3;i++)//3行的长度
{
for(j=0;j<4;j++)//4列的长度
{
printf("%5d",a[i][j]);
}
printf("\n");
}