C++数组学习记录

一维数组

一维数组定义:

一维数组:一条线,代表列的个数
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++中,必须[]和{}只至少有一个有数字

  1. 2.中的[]可以让编译器来计算元素个数

  1. 3.中的{},其默认只为0

  1. 下面的代码表示:未知元素个数!是错误的

int array[] = {};

在c++中可以省略=号

int days[]{1,12};

小项目练习

  1. 动态地从键盘录入信息并赋值

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)求长度

  1. 累加

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;
  1. 求数组中的最大值和最小值

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; 
  1. 定义一个整型数组,赋值后求出奇数个数和偶数个数

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. 查找输入的数字在数组的下标,没有找到则下标为-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;
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值