数组

一、一维数组的定义
1.一维数组的定义
一维数组的格式如下:
类型标识符 数组名[常量表达式];
(1)其中,类型标识符可以是任何基本数据类型,也可以是结构体等构造类型,相同类型的数组可以一起定义。
(2) 数组名必须是合法的标识符。
(3)常量表达式的值即为数组元素的个数。
例如,“int h[50];”就表示定义一个一维数组h共有50个元素,它们的编号从0开始到49,每个元素都是int类型。
下面的几个定义也是允许:
int d[50],g[100];
int a[510];
#define N 50
int b[N];
假设要存储10000个人的中考成绩和性别,可以定义两个数组:
int score[10000];//或者float score[10000];
bool xb[10000];//或者 char xb[10000];
2. 一维数组的元素引用
(1)数组定义好后,就可以“引用”数组中的任意一个元素。引用格式为“数组名[下标」”,如h[5]、h[i
2+1]等。其中,下标只能为整型常量或整型表达式,值必须在数组定义的下标范围内,否则会出现“下标越界错误”。
(2)需要注意的是,不能一次引用整个数组,只能逐个引用数组的单个元素。 例如,对于一个数组a来说,语句“cout<<a;”是不合法的。
二、一维数组的输入与输出
1.一维数组的输入、输出等操作,都是采用循环语句结合下标变化逐个元素进行。例如,输出一个数组可以写成:
int h[100];
for(i = 0; i < 100; i++) cout << h[i];
2.那么,批量数据如何一次性输入到一维数组中呢?一般有以下两种方法。
(1) 键盘读入
例如:
int h[100];
for(i = 0; i < 100;i++) cin >> h[i];
(2)直接赋值例如:
int h[100],a[20];
for(i = 0;i <100; i++) h[i] = 0;
for(i = 0;i <20; i++) a[i] = i * 2 + 1;
3.C++里还提供了两个函数给数组“整体”赋值。
(1) memset 函数
memset 函数是给数组“按字节”进行赋值,般用在char型数组中,如果是int类型的数组,一般赋值为0和-1。使用前需要包含头文件:#include 。
例如,“memset(h,0,sizeof(h));”就是将h数组所有元素均赋值为0.
(2) fill 函数
fill 函数是给数组“按元素”进行赋值,可以是整个数组,也可以是部分连续元素,可以赋任何值。使用前需要包含头文件.#include 。例如,“fill(a,a+10.5);”就是将a数组的前10个元素赋值为5。
另外,C++还支持在定义数组的同时,给所有或者部分元素赋值。
例如:
int a[10]={0,1,2,3,4,5,6,7,8,9};
int a[10]={0,1,2,3,4};//部分赋初值,后面的元素自动初始化为 0
int a[]={1,2,3,4,5};//不定义数组长度,直接根据赋值个数定
例1 阅读并上机调试程序,体会memset和fill 函数的作用。
#include
#include
using namespace std;
int main(){
int a[10],b[10],c[10],d[10],i;
memset(a.0.sizeof(a) );// 将 a 数组所有元素均赋值0
for(i = 0; i <9; i++) cout << a[i] <<““;
cout << a[9] << endl;
memset(b,1,sizeof(b));
//将b数组所有元素均赋值为二进制数
for(i = 0;i < 9;i++) cout << b[i] <<" “;
cout << b[9] << endl;
memset (c,0,5) ;
//将c数组前5个字节都赋值为0,所以只能确定c[0]==0,其他元素值不确定
for(i = 0;i < 9; i++) cout << c[i] <<” “for(i = 0;i < 9;i++) cout << b[i] <<“”;
cout << b[9] << endl;memset (c,0,5) ;//将c数组前5个字节都赋值为0,所以只能确定c[0]==0,其他元素值不确定
for(i = 0;i < 9; i++) cout << c[i] <<" ";
cout << c[9] << endl;
fill(d,d+5,8);//将d数组前5个元素都赋值为8,其他元素值不确定
for(i = 0;i < 9;i++) cout << d[i] <<““;
cout<< d[9] << endl;
return 0;
}
三、一维数组的插入删除
1.在实际应用中,经常需要在数组中插入一个元素,或者删除数组中的某一个元素,称为数组的“插入”操作或者“删除”操作。插入一个元素,需要先找到插入的位置(假设下标为x),将这个元素及其之后的所有元素依次往后移一位(注意要从后往前进行操作),再将给定的元素插入(覆盖)到位置x,如图5.3-1所示。删除某一个元素,也需要先找到删除的位置(假设下标为x)将下标为x+1及其之后的所有元素依次向前移一位,覆盖原来位置上的元素,插入操作需要注意把数组下标定义的足够大。
2.一维数组的插入和删除的一些实际问题有插队问题和队伍调整。
四、一维数组的元素排序
最基本的排序算法:选择排序、冒泡排序和插入排序。
(1)选择排序
基本思想:每一趟从待排序的数据,通过“打擂台”比较选出最小的元素,放在这些数据的最前面。
(2)冒泡排序
基本思想:从第一个数开始,依次不断比较相邻的两个元素,如果“逆序”就交换。
(3)插入排序
基本思想:把所有待排序元素分成前后两段,前一段是已经排序好的,后一段是待排序的。
五、二维数组的定义和操作
1.二维数组的定义和初始化
(1)如果一维数组的每一个元素又是一个一维数组,则称这种数组为“二维数组”。
(2)定义二维数组的一般格式为:
类型标识符 数组名[常量表达式1][常量表达式2];
常量表达式1的值表示第一维大小,常量表达式2的值表示第二维大小,常量表达式1和常量表达式2的乘积就是二维数组的元素个数。例如:
int h[4][5];
(3)在二维数组定义的同时,可以进行初始化赋值。例如:
int a[2] [3]={{1.2,3},{4,5.6}};//分行初始化
int a[2][3]={1,2,3,4,5,6}; //不分行初始化
以上两种初始化都相当于下面6个语句:
a[o][0] =1;a[0][1] =2;a[0][2]= 3;
a[1][0] =4;a[1][1] = 5;a[1][2] = 6;
也可以给数组中的部分元素初始化。例如:
int a[2][3] ={{1.2}.{4}};
第一行只有2个初值,按顺序分别赋值给a[0][0]和a[0][1],第二行的初值4赋给a[1][o].其他元素默认为0。
在定义二维数组时,可以省略第一维的大小,但是第二维的大小不能省略。例如,“inta[][5];”是允许的,被省略的第一维大小根据初值的个数由系统来确定。例如:
int a[][4] ={1,2,3,4,5,6,7,8,9,10,11,12};
系统根据()中的元素个数,自动确定a数组的第一维大小为3。
2二维数组的储存及元素引用
(1)因为二维数组本质上是一维数组的每一个元素又是一个一维数组,而计算机内部存储一维数组采用的是连续存储单元。所以,二维数组的存储方式是“行优先”的连续存储,先逐个存储第0行上的所有元素,再逐个存储第1行上的所有元素,依此类推。
(2)引用二维数组的某一个元素,格式为:
数组名【下标1][下标2]
例如:
cin >> h[3][1];h[3][1] = h[3][1] * 2; cout << h[3][1];
3.二维数组的输入与输出
二维数组的输入、输出操作也是针对每一个元素进行,结合两个维度的下标变化,用循环嵌套实现。
六、字符数组
在这里插入图片描述

需要注意的是,在用scanf的%格式或gets读入字符串时,会在字符串未尾自动添加一个空字符‘\0’。而使用getchar等方法读入字符串时,则要在字符串后手动加‘\0’。
例如:
#include
using namespace std;
int main(){
chars1[20],s2[20];
scanf("%s",s1);
scanf("%s",s2);
printf("%s\n”,s1);
printf("%s\n",s2);
return 0;
}
运行程序,输入“Hello world”。
输出为:
Hello
world!
感想:通过这一章的学习,我又学到了很多新的知识,我感觉,数组这一章比之前学的都要难很多,所以我学起来也比较吃力,有很多的知识都没有掌握,不过我也学到了一些的知识。
收获:了解了一维数组和二维数组的基本知识,能够解决一些基本的问题。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值