上课笔记-1
程序员文章站
2022-04-26 09:39:33
...
4班 20200320 笔记
课前-自己写开平方根(square root)函数
开平方根的原理很简单
一开始a=1,然后每次a = (a+ x/a)/2
// 这个函数只是单纯的求绝对值函数
float abs(float aNum){
if (aNum< 0){
return - aNum;
} else {
return aNum;
}
}
// 这个函数只负责判断两个数的临近程度
bool closeEnough(float aRoot, float aNum){
return abs(aNum- aRoot)< 0.000001;
}
// 这是求平方根的函数,它了解求平方根的算法
float sqrt(float aNum){
float f1= 1;
while (!closeEnough(f1* f1, aNum)){
f1= (f1 + aNum/ f1)/ 2;
}
return f1;
}
简单吧
编程英语
学英语,作为programer,英语很重要的哦~,更多见https://editor.csdn.net/md/?articleId=104996813
PI蒙特卡洛
// 这个函数只负责求最大公约数
int gcd(int aNum1, int aNum2){
if (aNum2> 0){
return gcd(aNum2, aNum1 % aNum2);
} else {
return aNum1;
}
}
// 这个函数只负责判断两个随机数是否互质
bool coPrime(){
int a, b;
a= rand();
b= rand();
if (gcd(a, b)== 1){
return true;
}
return false;
}
// 这个函数负责各种蒙特卡洛测试,只负责返回结果的数量
int Mante(int aCount, bool test()){
int cc= 0;
for (int i=0; i< aCount; i++){
if (test()){
cc++;
}
}
return cc;
}
// 这个函数了解蒙特卡洛测试原则和pi的计算公式
// 任意两个数互质的概率是6/pi*pi
float gcdCalcPi(){
float f1;
int a= 100000000;
f1= Mante(a, coPrime);
f1= f1/ a;
f1= 6/ f1;
f1= sqrt(f1);
}
// 主程序只负责高端显示
int main(){
srand(time(0));
float f1= gcdCalcPi();
cout << f1 << endl;
return 0;
}
算法的时间复杂度并不大,线性结构,但可以求出π的近似值。
结构体与类
面向对象和面向过程
举个最简单点的例子来区分 面向过程和面向对象
有一天你想吃鱼香肉丝了,怎么办呢?你有两个选择
1、自己买材料,肉,鱼香肉丝调料,蒜苔,胡萝卜等等然后切菜切肉,开炒,盛到盘子里。
2、去饭店,张开嘴:老板!来一份鱼香肉丝!
这就是面向对象和面向过程
结构体与类的命名规范开头大写
做个实验试试struct和class。**提示:**class如果想类外调用,必须要public。
都挺简单,不多说。
重载-比较类
class node {
public:
int a;
int b;
};
node d1, d2;
...
int main() {
if (d1 < d2) {
cout << d2 << endl;
}
return 0
}
这个程序能成功吗,不能,因为两个类不能比较,那我不服!不支持就重新定义小于号,这种方法就是运算符重载,运算符重载是典型的重载样例。
运算符重载的新关键字是operator。
实例:
struct Date{
int year;
int month;
int day;
void show(){
cout << year << "-" << month << "-" << day << endl;
}
bool operator>(Date ad){
if (year> ad.year){
return true;
} else if (year< ad.year){
return false;
} else if (month > ad.month) {
return true;
} else if (month < ad.month) {
return false;
} else if (day > ad.day){
return true;
} else {
return false;
}
}
};
这样子再调用就没事了,这个operator函数重载了大于号,当然也可以重载别的,这个函数不需要显式调用,是隐式调用。不懂可以查。main函数中就可以比较两个类了(只能比较大于号)
int main(){
Date d1, d2;
d1={2020,3,20};
d2={2020,1,24};
d1.show();
d2.show();
cout << (d1> d2) << endl;
cout << (d2> d1) << endl;
}
成功!????
详细代码:https://github.com/Github-Programer/Program/tree/master/C%2B%2B/LearnClass/20200320-zhao