本手册针对 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")