本手册针对 0 基础向,带你入门编 #include
int main(){ std::cout << "Hello, World!" << std::endl; return 0; }
编译运行之后就可以看到运行的结果,输出了一句“Hello, World!”。
### 编程语言学习
C++、Python、Java 是使用较多,应用较广的编程语言。
R 语言较多用于统计分析、绘图。
当然其他语言也很有趣好玩,但是在这里我们将先学习这 4 门编程语言。
准备好了吗?
### C++ 10分钟入门
首先我们学习变量、类型、运算符、函数、条件和循环语句等知识。
打开你的 IDE,新建一个`hello.cpp`文件。
一个C++程序开头一般是引入头文件,意味着我们的程序里面要用到头文件中的东西。
```cpp
#include <iostream>
接下来是 main 函数,函数就是一段可以完成一定功能的代码。
int main(){
// 我是一个什么也没有做的 main 函数
return 0;
}
main 前面的 int 是代表这个函数会返回一个整数。
如你所见,main 是函数的名字,一个 C++程序在执行的时候,main 函数就是它的入口。
函数用圆括号()表示接收参数,没有参数也可以。
函数的主体用花括号{}包起来。
//表示注释,注释是写给人看的,比如你可以解释代码的作用。
return 0; 是一个语句,表示我们的 main 函数返回0,main 函数返回0就是正常结束了。
接下来我们加上一些功能:
#include <iostream>
int main(){
int x = 5; // 定义了一个整数变量,并赋值为5。
// 注意每句语句后面都用了分号;结尾
x = x + 10; // 把原来的 x加上10,再赋值给 x
// 在控制台输出x = 15,endl 表示换行符,std::表示在 std 的命名空间里
std::cout << "x = " << x << std::endl;
return 0;
}
在你的 IDE 中点击执行代码的按钮(有的是 RUN,有的是▸),就可以看到程序的输出了:
x = 15
然后我们来写个函数吧:
#include <iostream>
// 函数的定义,a 是一个类型为整数的参数
// add10前面的 int 表示函数的返回结果是一个整数
int add10(int a){
return a+10;
}
int main(){
int x;
std::cin >> x; // 从控制台接收用户的输入
x = add10(x); // 这里调用了 add10 函数,把原来的 x 作为参数传入进去,再把函数的返回值赋值给x。
std::cout << "x = " << x << std::endl;
return 0;
}
程序往往要处理不同情况,所以我们来加上一些判断语句吧。
#include <iostream>
int add(int a){
// 定义一个存储结果的变量res
int res = 0;
if (a < 10){ // 如果 a 比10小
res = a+20; // 让 res = a+20
} else {
res = a+10; // 让 res = a+10
}
return res; // 返回 res
}
int main(){
int x;
std::cin >> x;
x = add(x);
std::cout << "x = " << x << std::endl;
return 0;
}
看到了吗?if后面圆括号里是我们判断的条件。这个条件是个表达式,如果表达式的值为真,那就执行圆括号后面的花括号内的语句。
else 表示条件为假的情况,那就执行它后面花括号里的语句。
程序经常会重复执行一段代码,这叫做循环,我们来看看吧:
#include <iostream>
int main(){
// 圆括号里有3个语句,分别是(初始化; 循环继续的条件; 循环变量的变化)
for(int i=0; i<10; i++){ // i++表示的是把i +1赋值给 i
std::cout << "#";
}
return 0;
}
这段程序会输出10个#。
好啦,到此,你已经入门 C++啦,开心吗😎。
更多的语法和用法,我们在之后的实践中会继续介绍的,是不是很期待?!!~
Python 10分钟入门
Python 的语法也很简单的,来看看吧。
print("Hello world")
等一下,这句代码拿到哪里执行呢?
你可以在 Terminl里输入python(有的可能要输入python3),然后你会看到下面这样的提示(prompt):
>>>
这就是交互模式,在这里输入代码吧!
输入quit()或者按 Ctrl+D 退出交互模式。
插一句:说到终端,Mac 下推荐使用 iTerm2
你还可以下载一个 IDE,推荐使用 PyCharm、Jupyter Notebook。
x = 5 # 赋值5给变量 x,井号后面的是注释
x = x + 10
在 Python 里面不用定义类型(但是变量是有类型的),语句后面也不用分号,不需要写 main 函数,程序的入口就是第一句语句。
然后我们来看看怎么写函数吧。
def add(x):
return x+10 # 返回 x+10
x = int(input()) # 从用户那里接收一个输入,转变为 int 类型。
x = add(x) # 调用函数
看到了吗,def 然后是函数名,然后是圆括号和里面的参数,然后是冒号。
函数体没有花括号了,而是通过缩进,也就是用4个空格或者是 tab 键代表一层缩进,注意一个 Python 文件缩进要么都是4个空格(都用2个也可以),要么都是 tab 键。
那怎么实现条件判断呢?
def add(x):
res = 0
if x < 10:
res = x + 20
else:
res = x + 10
return res
循环呢?
# 首先介绍的是 while 循环
i = 0
while i < 10:
print('#', end='') #这里我们用 end='',告诉 print 函数不要换行
i += 1 # python 里不能用 i++,但可以用 i+=1来表示让 i 增加 1(C++里面也可以)
# 接下来介绍的是 for 循环
for i in range(10): # range(10)表示的是从0到9。
print('#', end='')
是不是很简单呢?
我们稍微看一眼 Python 里的数据结构吧
lst = [] # 这是一个空的列表,列表是存储多个数据的数据结构。
lst.append(1) # 增加一个数字 1
lst.append(True) #增加一个布尔值 True
lst.append('abc') #增加一个字符串'abc'
# 现在的 lst 是[1,True, 'abc']
print(lst[0]) # 通过索引取出第1个元素,注意是从0开始的哦
lst.pop() # pop 操作会弹出最后一个元素,也就是 'abc',现在的 lst 是[1,True]
好啦,你已经入门 Python 啦~
Java 10分钟入门
不知道你看到这里会不会有些累了,如果还是很有精神就和我继续学习吧。
class Main {
public static void main(String[] args) {
System.out.println("hello world");
}
}
Java 是一门面向对象编程语言,所以最外面一层是个 class Main,表示一个名字是 Main 的类,它有一个函数叫做 main。
这个 main 函数前面的 public static void 是干嘛的呢?
public是说这个 main 函数对于 Main 类外面的人来说是可见、可调用的。
static 是说你不需要一个 Main 类的对象就可以调用 main 函数。
void 是说 main 函数没有返回值。
Java 和 C++有点像,main 后面的圆括号里是参数,String[] argv 表示一个类型为字符串数组,名字是 argv的变量。
System.out.println是输出一句语句,并换行。
那么,Java 又要用什么 IDE 呢?
Java 中函数又是怎么写呢?
import java.io.*; // 就像 C++里引入头文件一样,将 java.io 库中的类都引入进来
import java.util.*;
class Main {
// 这就是一个函数,参数是 int 类型,返回值也是 int 类型。
public static int add(int x){
return x+10;
}
public static void main(String[] args) {
// 定义一个Scanner 类的变量,叫做 keyboard。
// 注意到我们用了 new 来创建一个变量,System.in作为Scanner 初始化的参数传进去了。
Scanner keyboard = new Scanner(System.in);
int x = keyboard.nextInt(); //调用 nextInt 方法来获取用户的下一个输入
x = add(x); //调用add 函数
System.out.println("x = " + x); // 输出 x = 15,注意这里用加号+把"x = "这个字符串和 x 这个变量连接起来。
}
}
Java 的 for 和 if 语句和 C++的类似:
import java.io.*;
import java.util.*;
class Main {
public static int add(int x){
int res = 0;
if (x < 10){
res = x + 20;
} else {
res = x + 10;
}
return res;
}
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
int x = keyboard.nextInt();
x = add(x);
System.out.println("x = " + x);
// 循环输出10个井号
for(int i=0; i<10; i++){
System.out.print("#");
}
}
}
好啦,是不是觉得和 C++很像呢?我们也入门完 Java 了呢~
R 语言10分钟入门
R 语言是一个适合做数据分析和数据可视化的编程语言。
IDE 我强烈推荐Rstudio,好看好用还免费。
同样,R有交互模式,你可以在终端输入R(一定要大写才行呢!),回车。然后看见这样的 prompt:
>
因为 R 的使用者更多的是非计算机专业人士,所以使用体验非常友好。
记住一个有用的命令:help(),在交互模式下,你可以快速用它来查找一个函数怎么用,比如:
> help(solve)
也可以这样
> ?solve
我们了看看 R 语言具体怎么用吧:
print("hello world") # 井号后面是注释
x <- c(100, 3.3, 21) # 函数 c() 可以由任意多个参数,它返回一个这些参数组成的向量
# =,<-或者->都可以拿来赋值
5 -> y
z = x*y # 向量和数字相乘,会将向量中每个值都乘上这个数字
min(z) # 返回向量 z 中最小的元素
z = sort(z) #将 z 排序后赋值给 z
s1 <- seq(-5, 5, by=.2) #生成序列-0.5, -4.8, ..., 4.8, 5.0
s2 <- 1:100 # 得到序列1,2,3,...,100
s3 <- rep(1:3, each=5) # 得到1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
s4 <- rep(1:3, 5) #得到1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
# 函数
# 函数名字为twosam,用来计算双样本的t-统计量(这是一个统计学的名词)
# 接收的参数为 y1, y2两个向量
twosam <- function(y1, y2) {
# n1为y1的长度,n2为y2的长度,两句之间用分号;分隔开
n1 <- length(y1); n2 <- length(y2)
# 计算各自的均值
yb1 <- mean(y1); yb2 <- mean(y2)
# 计算方差
s1 <- var(y1); s2 <- var(y2)
# 计算双样本的t-统计量
s <- ((n1-1)*s1 + (n2-1)*s2)/(n1+n2-2)
tst <- (yb1 - yb2)/sqrt(s*(1/n1 + 1/n2))
# 函数最后一句会作为函数的返回值,你也可以写 return(tst)
tst
}
# 调用函数,假设 data 是个已在内存中的变量
tstat <- twosam(data$male, data$female)
R的基本运算符包括+,-,*,/和做幂运算用的^。 还有常用的数学函数,如log,exp,sin,cos,tan,sqrt 等等。
在上面例子里你也可以发现,R 提供了大量的函数,为我们实现了许多统计量的计算,如 sum、mean、var等。
不用 IDE 也可以!
只要在终端执行命令 就可以,也超级简单的。
javac hello.java #编译
java hello #运行
也许你要说,那 C++呢?也可以哦!
g++ hello.cpp -o hello # 编译
./hello #运行
那 Python 呢!?Python 是解释型语言,不需要编译,所以只要运行就可以
python hello.py
R 也是解释型语言,不过你需要在交互模式下输入:
> source("hello.r")