数组笔记

一.知识点的整理

通过前几章的学习,我们已经可以编写程序来解决各种相当复杂的问题了,但是当需要处理的数据比较多的时候,仅仅靠之前所学的知识是不够的,即使是简单的问题也可能需要比较复杂的程序来处理。因此,我们引入了数组。

①一维数组的定义:

类型标识符   数组名[常量表达式]

常量表达式表示数组元素的个数,不能是变量。

数组元素从0开始。

e.g.   a[3]中有3个元素,依次为a[0],a[1],a[2]。

②一维数组的引用:

数组名[下标]

注意:只能逐个引用数组元素,而不能一次引用整个数组;

     引用时,下标值应在数组定义的的下标值范围内。

③一维数组的初始化:

类型标识符   数组名[常量表达式]={1,2,3……}

可以赋值部分,则剩余元素自动赋值为零,也可以全赋值。

如果没赋值,则随机赋值给元素随机大数。

④数组越界:

即要访问的元素不在数组的储存空间中。

数组越界是实际编程中常见错误,而且这类错误往往难以捕捉。因为越界语句本身并不一定导致程序立即出错,数组越界访问系统时不一定会给出任何提示,会造成内存的混乱。

⑤二维数组

定义:若一维数组的元素也是一维数组时,就构成了数组的数组,即二维数组

数据类型   数组名[常量表达式1][常量表达式2]

与一维数组类似,二维数组从a[0][0]开始,引用,赋值也与一维类似。

可以把元素想象成矩阵,解题时重点考虑元素变换的关系问题。

⑥字符类型为由一个字符组成的字符常量或字符变量。字符数组是指元素为字符的数组。字符数组是用来存放字符序列或字符串的。字符数组也有一二三维之分。

二.实际应用

①一维数组的应用

数组逆序重放

#include <iostream>

using namespace std;

int main(){

    int n,a[1000],i;

    cin>>n;

    for(i=1;i<=n;i++)

    cin>>a[i];

    for(i=n;i>=1;i--)

    cout<<a[i]<<" ";

    return 0;

}

②二维数组的应用:

矩阵变换行

#include<iostream>

using namespace std;

int main()

{

    int a[6][6],i,j,m,n;

    for(i=1;i<=5;i++)

      for(j=1;j<=5;j++)

        cin>>a[i][j];

        cin>>n>>m;

    for(i=1;i<=5;i++)

      swap(a[m][i],a[n][i]);

    for(i=1;i<=5;i++)

        {

            for(j=1;j<=5;j++)

            cout<<a[i][j]<<" ";

            cout<<endl;

        }

}

扫雷计算

#include<iostream>

using namespace std;

char a[110][110];

int main()

{

  int m,n,i,j,x;

  cin>>m>>n;

  for(i=1;i<=m;i++)

  for(j=1;j<=n;j++)

  cin>>a[i][j];

  for(i=1;i<=m;i++)

 {

 for(j=1;j<=n;j++)

{

    x=0;

    if(a[i][j]=='*')

       cout<<"*";

     else

    {   

    if(a[i+1][j]=='*')x=x+1;

    if(a[i][j+1]=='*')x=x+1;

    if(a[i+1][j+1]=='*')x=x+1;

    if(a[i-1][j]=='*')x=x+1;

    if(a[i][j-1]=='*')x=x+1;

    if(a[i-1][j-1]=='*')x=x+1;

    if(a[i-1][j+1]=='*')x=x+1;   

    if(a[i+1][j-1]=='*')x=x+1;

    cout<<x;

}

}    

 cout<<endl;

 }

return 0;

}

三.注意事项与感想

①字符常量只能是单个字符,字符串常量可以是多个字符。

②字符串用scanf输入时,不用加&。

③我的感想:

    应用数组之后,很明显感觉到在解决一些实际问题的时候方便了许多,减少了一些步骤,使得在解决一些问题的时候不再像之前一样繁琐了。但是在最初使用数组时,还是有些不适应的,初期经常忘了加for(i.....)。在学习了数组以后,能解决的实际问题变多了不少,很多不熟悉的题型接法,感觉自己学起来也是很吃力的,在遇到一个新的题型时,总是毫无思路,而且不够熟悉掌握最基本的代码,还是容易犯很多小错误,导致做oj题总是各种各样的错误出现。

需要学习的地方还有很多很多,只希望自己能不放弃,多重复,多尝试,努力积攒经验,在熟练掌握最基础的题目后不断尝试新题目,尽自己所能多开拓思路,学习别人的做法,希望最终能真正地学会,能够切实地解决一些实际问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值