最近一直用python,之前学过的C++已经忘得差不多了,最近打算重新拾起来!
我用的编译器是CodeBlocks,网上有很多教程,自行安装即可。
1、
#include <iostream>
using namespace std;
int main()
{
cout << "Hello, world!" << endl;
return 0;
}
输出结果为:(这里也可以将endl替换成"\n"或者直接在输出的内容后面加"\n",即cout << "Hello, world!\n";)
如果不加后面的<< endl或者<< '\n',输出结果为:(没有换行)
也可以使用多个<<,用于输出多个值(相当于python中的+)
#include <iostream>
using namespace std;
int main()
{
cout << "1 " << "2";
return 0;
}
输出结果为:
2、
单行注释:以//开始,直到行末为止
多行注释:以/*开始,以*/结束
3、七种基本的C++数据类型:
布尔型——bool——true或false
字符型——char
整型——int
浮点型——float
双浮点型——double
无类型——void
宽字符型——wchar_t(typedef short int wchar_t,所以wchar_t实际上的空间和short int一样)
(typedef为一个已有的类型取一个新的名字)
3、空格符(" ")和空字符("\0")
(1)空字符的长度为0,空格符的长度为1
(2)
char a[] = "a b"; //输出是a b
char b[] = "a\0b"; //输出是a(因为遇到"\0"代表结束)
4、常用函数
(1)sizeof(a):获取a所属数据类型的大小
(2)生成随机数:
rand():该函数只返回一个[seed, RAND_MAX)区间中的伪随机数。
生成随机数之前必须要先调用srand()函数为rand()生成随机数种子。
用来指定种子的函数,若不显式调用则系统默认调用srand(1)来指定rand()的初始化种子。srand函数指定的种子会对应一个随机数系列,所以当你用srand指定一样的种子时,rand出来的随机数序列总是一样的。当然为了防止一样,一方面我们可用流逝的时间作为种子,即用time函数来获取系统时间,time函数会返回一个time_t的数据,表示1970年1月1日0时0分0秒开始到目前的时间间隔,单位为秒,然后我们将这个time_t类型的数据转换为unsigned类型就可以srand成种子了,即srand((unsigned)time(0)或srand((unsigned)time(NULL)。还有一个办法是利用程序的ID来作为初始化种子,即srand((unsigned)getpid())。
要取得[0,n) 就是rand()%n,表示 从0到n-1的数;
要取得[a,b)的随机整数,使用(rand() % (b-a))+ a;
要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a;
要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1;
通用公式:a + rand() % n;其中的a是起始值,n是整数的范围。
(3)setw()
cout<<‘s’<<setw(8)<<‘a’<<endl;
输出显示s和a之间有7个空格。
setw()只对其后面紧跟的输出产生作用,默认右对齐。如上例中,表示a共占8个位置,保持右对齐,不足的位置用空格填充。若输入的内容超过setw()设置的长度,则按实际长度输出。
5、变量定义
(注意区分定义和声明:除非有extern关键字,否则都是变量的定义;在一个程序中,变量只能定义一次,却可以声明多次;定义时会分配存储空间,而声明不会)
例如:
int i; //定义单个
int i, j, k; //也可以定义多个,多个之间用逗号分隔
变量在定义的时候也可以初始化值:
int i = 1;
int i = 1, j = 3, k = 5;
对于函数声明:如果在函数调用之前没有函数定义也没有函数声明,则函数调用出错。只要在函数调用前进行函数声明,则函数的定义可以在任何地方,否则就要把函数定义在函数调用前面(也就是子函数放到main函数前面)。
// 函数声明
int func();
int main()
{
// 函数调用
int i = func();
}
// 函数定义
int func()
{
return 0;
}
6、局部变量和全局变量
局部变量:在函数或一个代码块内部声明的变量,局部变量只能在函数内部或者代码块内部使用。
全局变量:在所有函数外部声明的变量,全局变量在整个程序内使用。
注意:局部变量和全局变量的名称可以相同,但是在函数内部,局部变量的值会覆盖掉全局变量的值(也就是函数内部局部变量起作用),在函数外部仍然时全局变量起作用。
7、字符常量(包括转义序列)被括在单引号中,字符串常量被括在双引号中。
8、定义常量
//一般都把常量定义为大写字母
#define LENGTH 100
#define NEWLINE '\n'
也可以把常量定义为指定类型的常量
const int LENGTH = 100;
const char NEWLINE = '\n';
(注意#define后面没有分号,const后面要有分号;#define不使用等号,const使用等号)
9、运算符
(1)关系逻辑运算符
&&——与运算(如果两个操作数都非零,则为真)
||——或运算(如果两个操作数中有任意一个非零,则为真)
!——非运算(如果操作数为真,则!后为假,反之同理)
(2)位运算符
&——按位与(AND)(两位都为1,则结果为1,否则为0)
|——按位或(OR)(两位只要至少有一个为1,则结果为1,否则为0)
^——按位异或(XOR)(两位不同则为1,否则为0)
~——按位“翻转”(1变成0,0变成1)
<<——二进制左移运算符
>>——二进制右移运算符
(3)杂项运算符
Condition ? X : Y——条件运算符(如果Condition为真,则值为X,否则为Y)(可以替代if…else语句)
&——指针运算符(返回变量的地址)
*——指针运算符(指向一个变量)
10、循环
(1)while循环
(2)for循环
(3)do…while循环
注:for( ; ; )——无限循环(可以按Ctrl+C终止无限循环)
11、循环控制语句
(1)break
(2)continue
(3)goto
12、判断语句
(1)if…
(2)if…else if…else
if()
{}
else if()
{}
else if()
{}
else
{}
(3)switch
switch(a)
{
case 1:
……
case 2:
……
default:
……
}
13、定义函数
#函数定义
return_type function_name( parameter list )
{
body of the function
}
return_type:函数返回的值的数据类型,有些函数不需要返回值,则return_type为void
parameter list:例如int num1, int num2,即参数名称前必须写清参数类型
#函数声明
return_type function_name( parameter list );
例如:int max(int num1, int num2);
或者int max(int, int);
因为在函数声明中,参数的名称不重要,只有参数的类型是必需的。
注意:当在一个源文件中定义函数且在另一个文件中调用函数时,函数声明是必需的。在这种情况下,应该在调用函数的文件顶部声明函数。
14、函数参数
传值调用——将实参的值赋给形参,这种情况下,改变形参的值对实参无影响
#函数定义
void func(int x, int y)
#函数调用
func(a, b)
指针调用——将实参的地址赋给形参,在函数内,根据(形参中存储的)地址调用实参值,这种情况下,修改形参会影响到实参。
#函数定义
void func(int *x, *y)
#函数调用
func(&a, &b)
引用调用——将实参的引用赋给形参,在函数内,形参和实参对应同一个内存存储空间,是同一个对象,只是名字不同,这种情况下,修改形参会影响到实参。
#函数定义
void func(int &x, int &y)
#函数调用
func(a, b)
注:
&a(取址):如果是&a,a存的是一个值,&a即取出a的地址
*a(取值):如果是*a,a存的是一个地址,*a即取出a的值
15、数学函数
(1)cos(a):返回弧度角a的余弦值
(2)sin(a):返回弧度角a的正弦值
(3)tan(a):返回弧度角a的正切值
(4)log(a):返回参数a的自然对数
(5)pow(x, y):返回x的y次方
(6)hypot(x, y):返回两个参数平方和的平方根(也就是说,参数为一个直角三角形的两个直角边,函数会返回斜边的长度。)
(7)sqrt(a):返回参数a的平方根
(8)abs(a):返回整数a的绝对值
(9)fabs(a):返回一个浮点数a的绝对值
(10)floor(a):返回一个小于或等于参数a的最大整数
16、数组
(1)数组定义
例如:
int a[10];
(2)数组初始化
int a[5] = {1, 2, 4, 7, 10}
//花括号之间的元素数目不能大于数组指定的元素数目
//如果省略了数组大小,则数组的大小为初始化时元素的个数
(3)二维数组定义
int a[3][4] //3行4列的数组
(4)二维数组初始化
方法一:
int a[3][4] = {
{0, 1, 2, 3}, //第一行
{4, 5, 6, 7}, //第二行
{8, 9, 10, 11} //第三行
}
方法二:
int a[3][4] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}
(5)
一维数组使用for循环输出每个元素;二维数组使用两层for循环输出每个元素。
17、字符串
string str1 = "Hello";
string str2 = "World";
string str3;
// 用加号可以进行字符串拼接
str3 = str1 + str2
// 求字符串长度
length = str3.size()
18、基本的输入输出
输入:cin >> xxxx;
输出:cout << xxxx << endl;
19、C++中的圆周率表示
Pi= acos(-1.0);