一维数组
一维数组定义:
一维数组:一条线,代表列的个数
int num[]={198,98,'c',230};
数组中的所有元素必须属于相同的数据类型,数组代表一个连续的空间
特殊:这个只能存在于c和c++里面,原因是因为字符在c/c++中是用数值表示的
int num[]={198,98,'c',230};
cout <<num[2]<<endl;
输出
一维数组
初始化一维数组
int years[6] = {1012,2013,2014};
int days[]={1,11};
int array[100]={};
ps:
1.后面的元素个数与声明的一致;后面3个元素未初始化,默认值为0
2和3都是正确的表达式,在c/c++中,必须[]和{}只至少有一个有数字
2.中的[]可以让编译器来计算元素个数
3.中的{},其默认只为0
下面的代码表示:未知元素个数!是错误的
int array[] = {};
在c++中可以省略=号
int days[]{1,12};
小项目练习
动态地从键盘录入信息并赋值
const int N = 5;
int nums[N];
for(int i=0;i<sizeof(nums)/sizeof(int);i++)
{
cout <<"请输入第"<<(i+1)<<"个数组元素:";
cin >>nums[i];
}
for(int i=0;i<N;i++)
{
cout <<nums[i]<<endl;
}
sizeof(nums)/sizeof(int)求长度
累加
int nums[] = {8,10,33,7,8};
int sum = 0;
int numslen = sizeof(nums)/sizeof(int);
for(int i=0;i<numslen;i++)
{
cout<<nums[i]<<'\t';
sum+=nums[i];
}
cout << sum << endl;
求数组中的最大值和最小值
int nums[] = {8,10,33,7,44};
int max=nums[0];
int min=nums[0];
int numslen = sizeof(nums)/sizeof(int);
for(int i=0;i<numslen;i++)
{
if(max<nums[i])
{
max=nums[i];
maxindex=i;
}
if(min>nums[i])
{
min=nums[i];
minindex=i;
}
}
cout<<"最大值:"<<max<<'\t'<<"最大值下标:"<<maxindex+1<<endl;
cout<<"最小值:"<<min<<'\t'<<"最小值下标:"<<minindex+1<<endl;
定义一个整型数组,赋值后求出奇数个数和偶数个数
int nums[] = {8,10,33,7,44};
int odd = 0;
int even = 0;
for(int i=0;i<numslen;i++)
{
if(nums[i]%2==0)
{
even++;
}else{
odd++;
}
}
cout<<"奇数个数:"<<odd<<'\t'<<"偶数个数:"<<even<<endl;
查找输入的数字在数组的下标,没有找到则下标为-1
int test;
int testindex=INT_MIN;//INT_MIN表示足够大的负数
cin>>test;
for(int i=0;i<numslen;i++)
{
if(test==nums[i])
{
testindex=i;
break;
}
}
if(testindex == INT_MIN)
{
cout << "数组中没有这个数字哦!"<<endl;
}else{
cout<<"该数的下标为"<<testindex<<endl;
}
进阶
数组排序系列
冒泡排序
原理:依次比较相邻的两个数,将大数放在前面,小数放在后面。
思路:
1、第一轮比较的次数:数组的总长度-1
2、下一轮比上一轮比较的次数:少一次
int temp;
int nums1[]={8, 7, 6, 4, 5};
for(int i=0;i<sizeof(nums1)/sizeof(int)-1;i++)
{
for(int j=0;j<sizeof(nums1)/sizeof(int)-1-i;j++)
{
if(nums1[j]<nums1[j+1])
{
temp=nums1[j];
nums1[j]=nums1[j+1];
nums1[j+1]=temp;
}
}
}
cout<<"冒泡排序:";
for(int i=0;i<sizeof(nums)/sizeof(int)-1;i++)
{
cout<<nums1[i];
}
ps:上图来自于bug师姐
选择排序
原理:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。
思路:
1、循环一轮
2、第一个和第二个比较大小,第二个再和第三个比较大小,以此类推
3、需要确定第一个最小的下标和数值,所以就需要min(max)、minIndex(maxIndex)
4、通过下标比较,来进行整合排序
int nums[] = {8, 7, 6, 4, 5};
int min = nums[0];
int minIndex = 0;
int test=0;
for(int i=0;i<sizeof(nums)/sizeof(int);i++)
{
min=nums[i];
minIndex=i;
for(int j=i+1;j<sizeof(nums)/sizeof(int);j++)
{
if(min>nums[j])
{
min=nums[j];
minIndex=j;
}
}
if(minIndex>i)
{
test=nums[minIndex];
nums[minIndex]=nums[i];
nums[i]=test;
}
}
cout<<"排序排序:";
for(int i=0;i<sizeof(nums)/sizeof(int);i++)
{
cout<<nums[i];
}
数组的插入和删除
思路:
1、将原本的数组排序好
2、将要插入的数字放到比该数字大的地方
3、从最后那个数字开始,到比那个数字大的地方结束(倒序),将他们的下标加一
double power[99];// 数组的大小一旦确定了,就不能再更改了
int powerCount=0;//当前数组中的元素个数
double inserpower;//需要插入的数值
int inserIndex=0;
power[powerCount++]=48292;
power[powerCount++]=43789;
power[powerCount++]=40918;
power[powerCount++]=44852;
power[powerCount++]=49382;
double temp;
//将数组排序
for(int i=0;i<powerCount;i++)
{
for(int j=0;j<powerCount-i-1;j++)
{
if(power[j]<power[j+1])
{
temp=power[j];
power[j]=power[j+1];
power[j+1]=temp;
}
}
}
cout<<"排序后:"<<endl;
for(int i=0;i<powerCount;i++)
{
cout <<power[i]<<'\t';
}
cout <<endl;
//将插入的数字加入到排序好的数组中
cout <<"请输入要插入的数字:";
cin >>inserpower;
//1、找到第一个比插入数字大的位置inserIndex
for(int i=0;i<powerCount;i++)
{
if(inserpower>power[i])
{
inserIndex = i;//控制下标
break;
}
}
//2、从最后一个元素开始,将数字复制到后面一个元素中
for(int i=powerCount-1;i>=inserIndex;i--)
{
power[i+1]=power[i];
}
//3、将要插入的数字赋值给下标为 insertIndex
power[inserIndex] = inserpower;
powerCount++;
cout<<"插入后:"<<endl;
for(int i=0;i<powerCount;i++)
{
cout << power[i] <<'\t';
}
二维数组
二维数组定义:
二维数组一个平面,代表行和列
int num[3][6];
二维数组的图示:
小游戏
二维数组动态赋值
学生多门学科的成绩
string stu_names[]{"刘备","关羽","张飞"};
string course_names[]{"语文","数学","英语"};
const int ROW=3;
const int COL=3;
double scores[ROW][COL];
for(int i=0;i<ROW;i++)
{
for(int j=0;j<COL;j++)
{
cout<<stu_names[i]<<"的"<<course_names[j]<<"成绩:";
cin>>scores[i][j];//重点需要理解
}
}
//打印结果
cout <<"\t";
for(int i=0;i<COL;i++)
{
cout<<course_names[i]<<"\t";
}
cout<<endl;
for(int i=0;i<ROW;i++)
{
cout<<stu_names[i]<<"\t";
for(int j=0;j<COL;j++)
{
cout<<scores[i][j]<<"\t";
}
cout<<endl;
}