程序 = 数据结构 + 算法
Donald E. Knuth(⾼德纳, 1974年图灵奖): • 《计算机程序设计的艺术》(The Art of Computer Programming) //他在不到30岁的时候提出了数据结构和算法这两个计算机专有名词
用什么语言?
选⼀门⾼级语⾔:
• 建议 C / C++ / Java / Python 任意⼀门 选择适合⾃⼰的开发环境:
• C / C++ :Code::Blocks / Xcode / Visual Studio Community / ……
• Java :Eclipse / IntelliJ IDEA Community / ……
• Python : PyCharm Community / ……
C语言
由 丹尼斯·⾥奇(Dennis M. Ritchie, 1941-2011)设计
• 1972年诞⽣
• 与UNIX关系密切
• 活跃⾄今
• 众多C-Like Language
C++ 语言
由 本贾尼·斯特劳斯特卢普(Bjarne Stroustrup)设计
• 1982-1983诞⽣
• 以C为基础
• ⾯向对象程序设计语⾔(Object Oriented Programming)
• 标准模板库(STL)
Java 语言
SUN公司1995年发布;现在属于甲⾻⽂(Oracle)公司
• 运⾏于虚拟机(JVM)
• ⾼可移植性
• ⾯向对象程序设计语⾔(Object Oriented Programming)
• 与编译型语⾔相⽐,效率……
java 把资源回收问题交给了虚拟机
Python 语言
吉多·范罗苏姆(Guido van Rossum)于1989年创造
• Python3 于2008年发布
• 解释型语⾔
• ⾯向对象程序设计语⾔
• ⽬前排⾏榜第⼀
• 简单易学、功能丰富
hello
c
并没有包含库在这是包含头文件,等于是把头文件拷贝到这个地方,来代替这一行。里面有声明等信息
#include<stdio.h>
int main(){
printf("hello~");
return 0;
}
c++
cout是个对象
java
python
变量
-
c语言参数传递通通是值传递
c++比c增加了面向对象的部分
上图Stu *pzs
的逻辑中心点是变量的名字pzs,pzs的左边是一个*
,右边没东西,表示pzs是一个*
(代表指针),再往左边找是Stu,代表*
指向Stu对象。
17行 &符号是个运算符
16行 *符号不是运算符,代表一个指针 -
C++引用
int &r = a;
这句话定义了一个东西,同时进行初始化
这里=不是运算符,代表赋值
中心点:r
左边是一个&,并不是运算符取地址,这里代表引用型。
C++的引用型规定在创建时必须有它所引用的变量,而且终生不再变换。
打印出100
在这里可以把r当做a的外号,r就是a,a就是r
C++的引用不能换人
- java语法上取消指针
8种基本类型
byte 1字节
short 2字节
int 4字节
long 8字节
float 4字节
double 8字节
char 2字节
boolean 1字节
其他都是引用类型
上图15行是个赋值语句
赋的是引用的值
打印出来 是类名(包括了包名)+ 地址
打印两个,发现是引用的同一个实例
java引用可以随便换人,下图14行创建的实例就会变成垃圾等待虚拟机回收。
java不管是传参返回值都是传值返回值(和C一样),不存在传引用。
- python的变量通通是引用型的
创建一个变量是4,下一句话创建了一个对象是5
a一开始引用4,后来引用5,地址不同
打印结果:
代码:
4是一个地址,5是一个地址,python里每一个值都是一个对象。
打印结果:
代码:
这里字符串是一个对象,这里把地址赋值给了a
打印结果:
模板和泛型
为什么需要模板和泛型
C++模板 template<>
重载<< (友元函数)
再增加一个构造方法,并将属性改为private
此时直接构造即可
放入vector(向量,一个模板)
Java泛型
generic type 通用类型 常用容器类
自己定一个泛型
python
不需要模板和泛型
函数与递归
C语言中sizeof 不是函数
输出4
输出4
输出
- 求数组中的最大值
array 右边是[] 代表是个数组,再看左边是int 代表是一个放整型元素的数组
19行 数组名不代表一个数组,在括号里对数组名求值,求得数组地址(数组首元素的地址),传入函数。
函数用指针承接地址,第5行括号里也可以写成array[],这也相当于一个指针,而不是一个数组。
Java方法
main是一个静态的,不能访问非静态的成员
Python函数
有return 就是有返回值的,没有return 就是返回void
返回值的作用
- 返回我想要的值
- 返回状态
c语言中main函数最后一行是返回0,因为错误有很多种,成功只有一种
递归
自己调自己
实际上递归不会永远执行,因为函数调用需要占用内存,无穷递归会使内存不足而终止程序。
阶乘
hanoi