清华大学C++语言程序设计(第六单元随堂笔记数组)
数组
概念:数组是具有一定顺序关系的若干对象的集合体,组成数组的对象称为该数组的元素。
数组的声明
数据类型 标识符 [常量表达式1] [常量表达式2]········;
记一个错误解决的方法:
解决VS编译错误MSB375,MSB3754,MSB3755,MSB4036
解决VS编译错误MSB375,MSB3754,MSB3755,MSB4036
例6-1数组的定义和使用
#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数组
a[i] = i * 2 - 1;
b[10 - i - 1] = a[i];
}
//以下是C++11 里面的for的新写法,表示依次取出字符串数组result中的元素
for (const auto &e : a) { //将数组的每个元素都循环下来
cout << e << " ";
}
}
数组的存储和初始化
略
数组作为函数的参数
数组元素和数组名都可以作为函数的参数以实现函数间数据的传递和共享。
##使用数组名传递数据时候,传递的是地址。##
使用数组名作为函数参数
#include<iostream>
using namespace std;
int sum(int list[], int num) {
//这个实测函数中不能使用c++11新特性中将整个列表循环下来(可能是因为我太菜)
if (num == 0) {
return list[0];
}
else {
return sum(list, num - 1) + list[num];
}
}
int main() {
int list[5] = { 1,2,3,4,5 };
cout<<sum(list, 5);
}
对象数组
定义一个储存一系列点的数组
#include<iostream>
using namespace std;
class Point {
public:
Point(int x1, int y1) {
x = x1;
y = y1;
}
~Point() {
cout << x <<","<< y<<"已经被删除"<<endl; }; //析构函数无论写不写都需要
int getx(Point &p1) {
return p1.x;
}
int gety(Point &p1) {
return p1.y;
}
void showpoint() {
cout << "("<<x<<","<<y << ")";
}
private:
int x;
int y;
};
int main() {
Point p_List[2] = { Point(1,2),Point(2,4) };
int num = 0;
for (auto &e : p_List) {
p_List[num].showpoint();
num++;
e.showpoint();
}
}
数组综合实例
#include<iostream>
#include<math.h>
using namespace std;
class Point {
public:
Point(float x1, float y1) {
x = x1;
y = y1;
}
float getx() {
return x;
}
float gety() {
return y;
}
private:
float x;
float y;
};
class line {
public:
line(Point list_p[],int num) {
float sum1 = 0;
float sum2 = 0;
for (int i = 0; i < num; i++) {
sum1 += list_p[i].getx();
sum2 += list_p[i].gety();
}
ave_x = sum1 / num;
ave_y = sum2 / num;
double l_xy = 0;
double l_xx = 0;
double l_yy = 0;
for (int i = 0; i < num; i++) {
l_xy += (list_p[i].getx() - ave_x)*(list_p[i].gety() - ave_y);
l_xx += (list_p[i].getx() - ave_x)*(list_p[i].getx() - ave_x);
l_yy += (list_p[i].gety() - ave_y)*(list_p[i].gety() - ave_y);
}
a = l_xy / l_xx;
b = ave_y - a*ave_x;
lineFitvalue = l_xy / (sqrt(l_xx*l_yy));
}
void show() {
cout << "直线方程为:y=" << a << "*x+" << b << endl;
cout << "相关系数为:" << lineFitvalue << endl;;
}
float geta() { return a; }
float getb() { return b; }
float getave_x() { return ave_x; }
float getave_y() { return ave_y; }
private:
float a;
float b;
float ave_x;
float ave_y;
float lineFitvalue;
};
int main() {
Point list_p[10] = {
Point(6,10),
Point(14,20),
Point(26,30),
Point(33,40),
Point(46,50),
Point(54,60),
Point(67,70),
Point(75,80),
Point(84,90),
Point(100,100)
};
line linez(list_p, 10);
linez.show();
}
运行结果: