编程是一种控制计算机的方式。
当我们对某句代码有疑问时,最佳的训练方式是立即去编写出来,测试一下代码的运行结果与我们的预期是否一致。
有的时候,我们可以“故意犯错”,比如少写分号、使用全角符号、漏写命名空间、变量定义重复,看看会产生什么后果。自己先踩一遍坑后,遇到相同的问题就可以很快解决了。
如果你碰到简单问题就只会求助老师,而不是自己动手去实践,那么你很难有明显的进步。
很多概念晦涩难懂,在现阶段的学习过程中,直接照做而不理解原理,以节约时间和精力。在以后的学习过程中,还有很多的机会去深究这些概念的本质。

一、C++程序的基本结构
#include <iostream> //头文件
using namespace std; //命名空间
int main(){ //main()主函数是程序开始执行的地方
cout<<"Hello,World."<<endl;//输出Hello,World.并换行(endl)
return 0;
}
- 头文件<iostream> 包含了程序中输入、输出即cin、cout的定义。
- using namespace std; 告诉编译器使用std命名空间。命名空间是为了作为附加信息来区分不同库中相同名称的函数、类、变量等。本质上,命名空间相当于分组。
- //是一个单行注释,用于解释说明。
- 分号是语句结束符,也就是每个语句必须以分号结束。
- {}成为块,其中的所有语句是一个语句块。
- 注意缩进(使用 Tab 键缩进 ),使代码更美观,更整齐。
- 程序报错,要看当前行和上一行。
- 不小心点到行号,产生红色的行,再点一次行号取消。
- 不小心按下insert键,可以再按一次取消。
- 按住Ctrl键,鼠标滚轮上滚、下滚可以放大、缩小代码文字。
二、变量的定义:变量是指程序运行过程中其值可以被改变的标识符。
- 变量必须先定义,才可以使用,第一个字符必须是字母或下划线。
- 变量不能重名。
- 变量名字不能与语言标识符(关键字)冲突。
- 严格区分大小写,A和a可以作为两个不同的变量名。
变量不需要起很长的名字,但是至少要一看到变量名就知道它是干什么的。一份可读性良好的程序不仅方便供他人观看,也能够使自己编写程序时思路更加清晰。
三、整数使用示例:
#include<iostream> //输入输出cin cout
using namespace std;
int main(){
int a,b;//定义变量a、b int表示整数类型
cin>>a>>b;//输入变量a、b
cout<<a+b<<endl; //输出两数之和
cout<<a-b<<endl; //差
cout<<a*b<<endl; //积
cout<<a/b<<endl; //商
cout<<a%b<<endl; //求余数,模运算
return 0;
}
四、实数使用示例:
#include<iostream> //C++输入输出
#include<iomanip> //输出保留几位小数格式的头文件
using namespace std;
int main(){
double a,b; //定义变量a、b double表示双精度浮点型
cin>>a>>b; //输入变量a、b
//下面setprecision(2)中的2表示保留2位小数
cout<<setprecision(2)<<fixed<<a-b<<endl;//输出a-b结果
cout<<setw(5)<<a-b<<endl;//给输出指定显示宽度
//以下输出方法不常用,仅做了解
cout<<scientific<<a-b<<endl;//以科学计数法形式
return 0;
}
五、常用的基本数据类型(bool、char、int、long long、float、double)及数据范围:
数据类型 | 大小 | 一般的数据范围 | |
bool | 布尔型 | 1Byte | 1(true) or 0(false) |
char | 字符型 | 1Byte | -128~127 |
unsigned char | 1Byte | 0~255 | |
int | 整型 | 4Bytes | -231 ~ (231-1) -2147483648~2147483647 |
long | 4Bytes | -2147483648~2147483647 | |
short | 2Bytes | -32768~32767 | |
long long | 长整型 | 8Bytes | -263 ~(263-1) long long的最大值:9223372036854775807 long long的最小值: -9223372036854775808 |
unsigned int | 4Bytes | 0~4294967295 | |
unsigned long | 4Bytes | 0~4294967295 | |
unsigned short | 2Bytes | 0~65535 | |
unsigned long long | 8Bytes | 0~18446744073709551615 | |
float | 单精度浮点 | 4Bytes | 实际精度6~7位 -(10的38次方)~10的38次方 |
double | 双精度浮点 | 8Bytes | 实际精度15~16位 -(10的308次方)~10的308次方 -1.79E+308 ~ +1.79E+308 小数建议用double类型 |
记住一点:非题目规定,碰到浮点型数据用double来存储。
六、算术运算符:+(加号) 加法运算 (3+3)
– (减号)减法运算 (3–1) 负 (–1)
*(星号) 乘法运算 (3*3)
/ (正斜线) 除法运算 (3/3)
%(百分号)取模运算符,求余数10%3=1 (10/3=3·······1)
后续学习的运算符会越来越多,如果不是很清楚运算符的优先级,加小括号区分。
七、整型变量的自增、自减运算符:
#include<iostream>
using namespace std;
int main(){
int a=1;
int b=a++; //后+先赋值,另有自减运算符a--
cout<<a<<' '<<b<<endl; //b输出是1
int c=++a; //先+后赋值, 另有自减运算符--a
cout<<a<<' '<<c<<endl;//c输出是3
return 0;
}
#include<iostream>
using namespace std;
int main(){
float a=1.234;
int b=(int)a;//float类型的变量a转换为int类型的变量b
cout<<a<<' '<<b<<endl;//小数转为整数,可能损失精度
char c='a';
int d=c; //将字符型变量c强制转换成整型变量d
cout<<c<<' '<<d<<endl; //所以d输出是97
int e=65;
char f=e; //将整型变量e强制转换成字符型变量f
cout<<e<<' '<<f<<endl; //所以f的输出是A
return 0;
}
九、字符与整数的联系:ASCII码 每个常用char字符都对应一个0~127的数字,二者之间可以相互转化:
#include <iostream>
using namespace std;
int main(){
char a='z';
cout<<(int)a<<endl; //输出122
int b=66;
cout<<(char)b<<endl; //输出B
return 0;
}
常用ASCII值:‘A’-‘Z’ 是65~90,’a’-‘z’是97-122,’0’-‘9’是48-57。字符可以参与运算,运算时会将其当做整数:
#include <iostream>
using namespace std;
int main(){
int a='a'-'b';
int b='a'*'b';
char c='a'-32;
cout<<a<<endl; //输出-1
cout<<b<<endl; //输出9506
cout<<c<<endl; //输出A
return 0;
}
十、C++常量 常量是指再程序运行过程中其值不能被改变的标识符。常量一般大写(是编程习惯,非语法要求)。
通过 #define 定义常量
格式:#define 常量名 常量值
如: #define PI 3.14
通过 const 定义常量
格式:const 常量类型 常量名 常量值;
如: const double PI = 3.14;
注意:#define只是简单的字符串替换,没有类型检查,因此在实际编程中,建议大家使用const来定义常量。
#define pi 3.14 //符号常量,无类型,不建议使用
const double PI=3.14; //const常量,有类型,推荐使用
十一、数位分离
拆位:拆出一个整数n的每一位。
拆位原理:理解一个整数的构成原理。
例如:567 = 5 * 100 + 6* 10 + 7*1;如何拆出567的个位、十位、百位?显然,百位=567/100%10;十位=567/10%10;个位=567%10。
十二、scanf/printf 函数 (C语言输入输出) ,通常情况下,效率高于cin和cout 。
#include<iostream> //头文件
using namespace std;
int main(){
int a=3; //整型
float b=3.12345678; //单精度浮点型
double c=3.12345678;//双精度浮点型,小数推荐使用double类型
char d='y'; //字符型
scanf("%d",&a);//输入时,变量前面必须加&(取地址符)
printf("%d\n",a);//整数int输出
printf("%f\n",b);//float输出
printf("%lf\n",c);//double输出
printf("%c\n",d);//字符char输出
return 0;
}
附1、ASCII码 字符类型在计算机中存储的是二级制整数,就是常说的ASCII码。ASCII ( American Standard Code for Information Interchange) 即美国信息交换标准代码, 是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符 [1] 。
附2、几个常见的常量和函数 INT_MAX和INT_MIN是C/C++中的常量,分别表示最大最小整数,头文件是 limits.h 或 climits。
它们具体代表的值如下:
INT_MAX=231-1=2147483647 常量,代表整数int最大数
INT_MIN=-231=-2147483648 常量,代表整数int最小数
sizeof( ):计算数据类型或者变量占用的内存大小,单位是字节
#include<iostream>
#include<climits> //极大值、极小值头文件
using namespace std;
int main(){
cout<<INT_MAX<<" "<<INT_MIN<<endl;//int最大值、最小值
cout<<sizeof(int)<<" "<<sizeof(short);//int和sort占用的字节数
return 0;
}
附3、复合运算符 a+=b
a += b 相当于 a = a + b。
同理理解:
a -= b、
a *= b、
a /= b、
a %= b。
注意:
1、+=中间不能加空格,不能写为+ =。
2、a += b从效率上来说,高于a = a + b。