C++数组、指针与字符串(一)

C++数组、指针与字符串

1.数组的定义与使用

数组是具有一定顺序关系的若干相同类型变量的集合体,组成数组的变量称为该数组的元素。

数组的定义

类型说明符 数组名[常量表达式] [常量表达式]…;

数组名的构成方法与一般变量名相同。

例如:int a[10];

表示a为整型数组,有10个元素:a[0]…a[9]

例如:int a[5] [3]

表示a为整型二维数组,其中第一维有5个下标(04),第二维有3个下表(02),数组的元素个数为15,可以用于存放5行3列的整型数据表格。

数组元素的使用

数组必须定义,后使用。可以逐个引用数组元素

例如:

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

b[1][2]=a[2][3]/2
例:
#include<iostream>
using namespace std;
int main() {
	int a[10], b[10];
	for (int i = 0; i < 10; i++) {
		a[i] = i * 2 - 1;
		b[10 - i - 1] = a[i];
	}
	for (int i = 0; i < 10; i++) {
		cout << "a[" << i << "]=" << a[i] << "   ";
		cout << "b[" << i << "]=" << b[i] << endl;
	}
	return 0;
}

2.数组的存储与初始化

一维数组的存储

数组元素在内存中顺序存放,它们的地址是连续的。元素间物理地址上相邻,对应着逻辑次序上的相邻。

一维数组的初始化

列出全部元素的初始值

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

只给一部分元素值定初值

例如:static int a[10]={0,1,2,3,4};

二维数组的存储

按行存放

例如:float a[3][4];
                     a00 a01 a02 a03
  可以理解为:a       a10 a11 a12 a13
                    a20 a21 a22 a23

二维数组的初始化

将所有值写在一个{},内按顺序初始化

例如:static int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}:

分行列出二维数组的初值

例如:static int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

可以只对部分元素初始化

例如:static int a[3][4]={{1},{0,6},{0,0,11}};

列出全部初始值,第1维下标个数可以省略

例如:static int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};
或者  static int a[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
#include"iostream"
using namespace std;
int main() {
	int i;
	int f[20] = { 1,1 };//初始化第0、1个数
	for (int i = 2; i < 20; i++)//求第2~19个数
		f[i] = f[i - 2] + f[i - 1];
	for (i = 0; i < 20; i++) {
		if (i % 5 == 0)cout << endl;
		cout.width(12); //设置输出宽度为12
		cout << f[i];
	}
	return 0;
}

运行结果:
           1           1           2           3           5
           8          13          21          34          55
          89         144         233         377         610
         987        1597        2584        4181        6765

3.一维数组的应用举例

循环从键盘读入若干组选择题答案,计算并输出每组答案的正确率,直到输入ctal+z为止
每组连续输入5个答案,每个答案可以是‘a’...‘d’.
#include<iostream>
using namespace std;
int main() {
	const char key[] = { 'a','c','b','a','d' };
	const int NUM_QUES = 5;
	char c;
	int ques = 0, numCorrect = 0;
	cout << "enter the" << NUM_QUES << "question tests:" << endl;
	while (cin.get(c)) {
		if (c != '\n') {
			if (c == key[ques]) {
				numCorrect++; cout << " ";
			}
			else
				cout << "*";
			ques++;
		}else{
		
			cout << "Score" << static_cast<float>(numCorrect) / NUM_QUES * 100 << "%";
			ques = 0; numCorrect = 0; cout << endl;
		}
	}
	return 0;
}
运行结果:
enter the 5 question tests:
acbba
   **Score60%
acbad
     Score100%
abbda
 * **Score40%
bbacb
*****Score0%

4.数组作为函数参数

数组元素作为实参,与单个变量一样。

数组名作参数,形、实参数都应是数组名,类型要一样,传送的是数组首地址。对形参数组的改变会直接影响到实参数组。

主函数中初始化一个二维数组,表示一个矩阵,矩阵,并将每个元素都输出,然后调用子函数,分别计算每一行的元素之和,将和直接存放在每行的第一个元素中,返回主函数之后输出各行元素的和。 
#include"iostream"
using namespace std;
void rowSum(int a[][4], int nRow) {//计算二维数组A每行元素的值的和,
	for (int i = 0; i < nRow; i++) {
		for (int j = 1; j < 4; j++)
			a[i][0] += a[i][j];
	}
}
int main() {
	int table[3][4] = { {1,2,3,4,},
	{2,3,4,5},{3,4,5,6,} };
	for (int i = 0; i < 3; i++) {
		for (int j = 0; j < 4; j++)
			cout << table[i][j] << " ";
		cout << endl;
	}
	rowSum(table, 3);//调用子函数,计算各行和
	for (int i = 0; i < 3; i++)
		cout << "Sum for row" << i << "is" << table[i][0] << endl;

}
运行结果:
1 2 3 4
2 3 4 5
3 4 5 6
Sum for row0is10
Sum for row1is14
Sum for row2is18

5.对象数组

对象数组的定义与访问

定义对象数组

类名 数组名[元素个数];

访问对象数组元素

通过下标访问:数组名[下标].成员名

对象数组初始化

数组中每一个元素被对象创建时,系统都会调用类构造函数初始化该对象。

通过初始化列表赋值。

例:Point a[2]={Point(1,2),Point(3,4)};

如果没有为数组元素指定显示式初始值,数组元素便使用默认初始化(调用默认构造函数)。

数组元素的构造和析构

构造数组时,元素所属的类未声明构造函数,则采用默认构造函数。

各元素对象的初始值要求为相同的值时,可以声明具有默认形参值的构造函数。

各元素对象的初值要求为不同的值时,需要声明带形参的构造函数。

当数组中的每一个对象被删除时,系统都要调用一次析构函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值