c语言中一维数组和二维数组,详解C++中的一维数组和二维数组

C++一维数组

定义一维数组

定义一维数组的一般格式为:

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

例如:

int a[10];

它表示数组名为a,此数组为整型,有10个元素。

关于一维数组的几点说明:

1) 数组名定名规则和变量名相同,遵循标识符定名规则。

2) 用方括号括起来的常量表达式表示下标值,如下面的写法是合法的:

int a[10];

int a[2*5];

int a[n*2]; //假设前面已定义了n为常变量

3) 常量表达式的值表示元素的个数,即数组长度。例如,在“int a[10];”中,10表示a数组有10个元素,下标从0开始,这10个元素是: a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7], a[8],a[9]。注意最后一个元素是a[9]而不是a[10]。

4) 常量表达式中可以包括常量、常变量和符号常量,但不能包含变量。也就是说,C++不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。例如,下面这样定义数组是不行的:

int n;

cin>>n; //输入a数组的长度

int a[n]; //企图根据n的值决定数组的长度

如果把第1,2行改为下面一行就合法了:

const int n=5;

引用一维数组的元素

数组必须先定义,然后使用。只能逐个引用数组元素的值而不能一次引用整个数组中的全部元素的值。

数组元素的表示形式为:

数组名[下标]

下标可以是整型常量或整型表达式。例如:

a[0]= a[5]+ a[7]- a[2*3]

【例】数组元素的引用。

#include

using namespace std;

int main( )

{

int i, a[10];

for (i=0;i<=9;i++)

a[i]=i;

for (i=9;i>=0;i--)

cout<

cout<

return 0;

}

运行结果如下:

9 8 7 6 5 4 3 2 1 0

程序使a[0]~a[9]的值为0~9,然后按逆序输出。

一维数组的初始化

1) 在定义数组时分别对数组元素赋予初值。例如:

int a[10]={0,1,2,3,4,5,6,7,8,9};

2) 可以只给一部分元素赋值。例如:

int a[10]={0,1,2,3,4};

3) 如果想使一个数组中全部元素值为1,可以写成:

int a[10]={1,1,1,1,1,1,1,1,1,1};

不能写成

int a[10]={1*10};

不能给数组整体赋初值。

4) 在对全部数组元素赋初值时,可以不指定数组长度。例如:

int a[5]={1,2,3,4,5};

可以写成

int a[]={1,2,3,4,5};

一维数组程序举例

【例】用数组来处理求Fibonacci数列问题。

可以用20个元素代表数列中的20个数,从第3个数开始,可以直接用表达式f[i]=f[i-2]+f[i-1]求出各数。程序如下:

#include

#include

using namespace std;

int main( )

{

int i;

int f[20]={1,1}; //f[0]=1,f[1]=1

for(i=2;i<20;i++)

f[i]=f[i-2]+f[i-1]; //在i的值为2时,f[2]=f[0]+f[1],依此类推

for(i=0;i<20;i++) //此循环的作用是输出20个数

{

if(i%5==0) cout<

cout<

}

cout<

return 0;

}

运行结果如下:

【例】编写程序,用起泡法对10个数排序(按由小到大顺序)。

起泡法的思路是:将相邻两个数比较,将小的调到前头。见图5.2。然后进行第2趟比较,对余下的前面5个数按上法进行比较,见图。

ba0b6f72ba06cba25a72cadc1c45da1c.png

886092f40d1e10504d35ead6c48c7278.png

可以推知,如果有n个数,则要进行n-1趟比较(和交换)。在第1趟中要进行n-1次两两比较,在第j趟中要进行n-j次两两比较。

根据以上思路写出程序,今设n=10,本例定义数组长度为11,a[0]不用,只用a[1]~a[10],以符合人们的习惯。从前面的叙述可知,应该进行9趟比较和交换。

#include

using namespace std;

int main( )

{

int a[11];

int i, j, t;

cout<

for (i=1;i<11;i++) //输入a[1]~a[10]

cin>>a[i];

cout<

for (j=1;j<=9;j++) //共进行9趟比较

for(i=1;i<=10-j;i++)//在每趟中要进行(10-j)次两两比较

if (a[i]>a[i+1]) //如果前面的数大于后面的数

{

t=a[i];a[i]=a[i+1];a[i+1]=t;

}//交换两个数的位置, 使小数上浮

cout<

for(i=1;i<11;i++) //输出10个数

cout<

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值