关于“数组”的总结和整理。

  • 随着学习的不断深入,我们遇到和研究的问题越来越难,当然处理的数据也越来越多,数据的值和数量越来越大。这时候我们普通的输入输出已经应付不过来了。数组便是用于处理这方面的问题。数组是一组具有相同类型的变量集合,每个数据项被称为数组元素,C程序通过数组的下标实现对数组的访问。
     数组在目前的学习中分为  一维数组,二维数组 两种在声明数组时,前面的 int,double等是代表着数组的基类型。在声明数组时,方括号内为常量,我们也可以是用宏常量定义数组,但是一定不能用变量定义。
     基本格式是:  类型标识符  数组名[常量表达式]
     接下来注意的就是数组的初始化,对你定义的数组数据初始化。可以写出全部,也可以写出部分其他自动为0。如果没有数组初始化,有两种结果。1  定义放在int main()之外,初始值默认为0。2  定义在int main()之内,初始值则为随机值。
     数组定义时的常量表达式是表示系统给这个数组分配的内存。访问是一定要在范围之内,否则数据无法存储,程序就会异常关闭。这就是数组越界。
     二维数组可以理解为一个表格。基本格式为:
    类型  数组名[第一维长度][第二维长度]。例如a[i][j]  表示的就是 一个排列为i行j列的元素。
     接下来是数组这章的易错点和注意点。
    1.c++语言只能逐个引用数组元素,不能一次引用整个数组。
    2.数组变量可以像同类型的普通变量使用。
    3.一维数组输入可以用for循环,二维数组用的是循环嵌套。
    4.数组声明在main函数外面时,数组才可以开的很大,放在main函数之内,数组稍大就会异常退出。
    5.把数组a中k个元素到数组b,可以用memcpy(b,a,sizeof(int)*k)。使用memcpy函数需要头文件cstring。
    6.也可以把数组定义为布尔类型。用做标志常量。
    7.在学习数组的时候也学习关于排序的知识
    1.冒泡排序。for(int i=0;i<n-1;i++)
    for(int j=0;j<n-i;j++)
    if(b[j]>b[j+1])
    {
    swap(b[j],b[j+1]);
    将数组元素进行排序,可以从大到小也可以从小到大。
    8.关于排序还有一个简单的方法。系统自带的sort排序,将数组元素从小到大排序,不过得用到头文件algorirhm。
    9.a[i][j]中含有i*j个元素,同样也不能超出元素指定的范围,否则也会越界。
    10.将二维数组看成一个矩阵或表格。将题目简单化。
    11.也有一种排序方法为选择排序。可自己选择排序方式。
    程序为
    void inssort(int*a int num)
    {
    for(i=1;i<num;i++)
    {
    l=i-1;temp=a[i];
    while(l>=0&&a[l]>temp)
    {
    a[l+1]=a[l];
    l--;
    }
    a[l+1]=temp;
    最后给大家分享一道题。
    扫雷游戏是一款十分经典的单机小游戏。它的精髓在于,通过已翻开格子所提示的周围格地雷数,来判断未翻开格子里是否是地雷。
    现在给出n行m列的雷区中的地雷分布,要求计算出每个非地雷格的周围格地雷数。
    注:每个格子周围格有八个:上、下、左、右、左上、右上、左下、右下。
    输入
    第一行包含两个整数n和m,分别表示雷区的行数和列数。1 <= n <= 100, 1 <= m <= 100。
    接下来n行,每行m个字符,‘*’表示相应格子中是地雷,‘?’表示相应格子中无地雷。字符之间无任何分隔符。
    输出
    n行,每行m个字符,描述整个雷区。若相应格中是地雷,则用‘*’表示,否则用相应的周围格地雷数表示。字符之间无任何分隔符。
    样例输入
    3 3
    *??
    ???
    ?*?
    样例输出
    *10
    221
    1*1
    我的作答是
    #include<iostream>
    using namespace std;
    char a[110][110];
    int main()
    {
    int n,m,b=0;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++)
    cin>>a[i][j];
    for(int k=1;k<=n;k++)
    {
    for(int p=1;p<=m;p++)
    {
    if(a[k][p]=='*')
    cout<<'*';
    if(a[k][p]=='?')
    {
    for(int i=k-1;i<=k+1;i++)
    {
    for(int j=p-1;j<=p+1;j++)
    {
    if(a[i][j]=='*')
    b++;
    }
    }
    cout<<b;
    b=0;
    }
    }
    cout<<endl;
    }
    return 0;
    }
    这题用到了二维数组的定义和字符数组,和对题目的深度剖析。当没读到*号时。在它周围几个空格里在有一个循环嵌套。来判断周围的雷数。
     以上是我对数组的理解和总结。如有错误和不足。请大家提出。
     
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值