目录
第一章:变量和常亮
1. 变量名
注意不要取名为 begin 、 end 、 next 、 index、 list、 link 等
2. 基本数据类型
int和long区别如下:
32位系统:long是4字节32位,int是4字节32位。
64位系统:long是8字节64位,int是4字节32位。
注:
1. float的精度是保证至少7位有效数字是准确的
2. C++代码中将数字赋值给float变量,如果给出警告warning C4305: “=”: 从“int”到“float”截断,则超出了float的精度范围,在我的测试中赋值为16777216及以下整数没有警告,赋值为16777217时给出了警告。
3. 数据类型转换
整型数据也可以转换为字符型数据,但只会留下最右边的一个字节(第0位 到第7位),其他字节丢弃
char a= 334;
cout << a<<",";//直留下最右边的一个字节,即334-256=78,或者说只留下16进制表示的后两位所表示的数值
int b = a;
cout << b;
输出结果:N,78
4. 转义字符
\n, \\, \0, \’, \"。
第二章
1. 输入输出控制符
用scanf可以一次读入多个类型不同的变量,只要输入的各项之间用空格分隔即可。
- 输入字符时,不会跳过空格(空格也会被当作字符读入), 输入其他类型的数据时,会跳过空格。
- 如果在输入中有scanf中出现的非控制字符,则这些字符会被跳过,但要在输入框里对应非控制字符。
int n,m; char c; float f;
scanf("%d %c,%f:%d",&n,&c,&f,&m);
printf("%d,%c,%f,%d",n,c,f,m);
return 0;
输入:12 k,3.75:290【Enter】
输出:12,k,3.750000,290
2. 控制printf 输出整数的宽度
%nd(如%4d,%12d) 以n字符宽度输出整数, 宽度不足时用空格填充。
%0nd(如%04d,%012d) 以n字符宽度输出整数, 宽度不足时用0填充。
%.nf(如%.4f,%.3f) 输出浮点数, 精确到小数点后n位
3. printf 中的格式控制符
%x: 以十六进制形式读入或输出 int整数
- 0x… 表示输入形式代表输入的是16进制数整形,用以区别于十进制
printf("%x,%d,%u",0x17, 0xffffffff,0xffffffff);
输出 => 11,-1,4294967295
- %u: 以无符号整数形式输出整数
举例:
int n,m;
scanf("%d %u",&n,&m ); //读取之后m内保存的还是-1,但是输出的时候自动以无符号数的形式输出
printf("%d %u",n,m);
输入:1 -1
输出:1 4294967295(-1的补码,以无符号数的形式输出)
int n,m;
scanf("%d %d",&n,&m );
printf("%d %u",n,m);
输入:1 -1
输出:1 4294967295(-1的补码,以无符号数的形式输出)
4. 表达式的精度
a+b、 a-b、 a*b、 a/b这四个表达式的值,就是a和b做算术运算的结果。表达式的值的类型,以操作数中精度高的类型为准。
精度:double > long long > int > short > char
5. 溢出
两个整数类型进行加、减、乘都可能导致计算结果超出了结果类型所能表示的范围,这种情况就叫做溢出。溢出部分直接被丢弃。
#include<iostream>
using namespace std;
int main() {
unsigned int a ;
cin >> a; //此处输入4294967298
cout << a<<endl; //输出为4294967295
unsigned int b = 4294967298;
cout << b; //输出为2
return 0;
}
6. 自增自减运算
++a ,–a 则返回值为加减之后的值,a++ ,a–在后则返回值为操作前的值,但是操作结束之后a的值总是有相应的变化。
7. 逻辑表达式
逻辑表达式是短路计算的,即对逻辑表达式的计算,在整个表
达式的值已经能够断定的时候即会停止
- exp1 && exp2 : 如果已经算出表达式exp1为假,那么整个表达式的值肯定为假,于是表达式exp2就不需要再计算
- exp1 || exp2 : 如果已经算出exp1为真,那么整个表达式必定为真,于是exp2也不必计算
- 所以在写代码的时候,判定里面最好不要有自增自减运算,因为不能确定所有逻辑表达式是否能被执行****
int a = 0, b = 2;
int n = a++ && ++b;
cout << n << "," << a << "," << b;
输出结果为:0,1,2
8. scanf 和cin 输入数据
- cin >> m >> n … 表达式的值,在成功读入所有变量时为true,否则为false
int n,m;
freopen("c:\\Users\\Administrator\\Downloads\\...txt", "r", stdin);
while(cin >> n >> m ) {
printf("%d",n+m);
}
注: Ctrl+Z 然后 回车,程序结束
- 用cin读入所有输入的字符, 包括空格,回车:
#include <iostream>
using namespace std;
int main()
{
freopen("c:\\Users\\Administrator\\Downloads\\11.txt", "r", stdin);
int c;
while ((c = cin.get()) != EOF) {
% 或 while( cin >> n) //读取的过程中,cin.get()的返回值一直是int类型的非负数,直到读取结束时,返回-1,即EOF%
cout << (char)c;
}
return 0;
}
- scanf()表达式的值:
scanf(…)表达式的值为int,表示成功读入的变量个数。
int n,m;
freopen("c:\\Users\\Administrator\\Downloads\\...txt", "r", stdin);
printf("%d",scanf("%d%d",&n,&m));
- 用scanf读入所有输入的字符,包括空格,回车
char c;
freopen("c:\\Users\\Administrator\\Downloads\\...txt", "r", stdin);
while(scanf("%c",&c) != EOF) {
// 或 while(scanf("%d",&n) == 1) %
//每次读取了几项,scanf的返回值就是多少,此处每次都读取一项,故scanf()=1,直到数据读取结束时,scanf()返回-1
printf("%c",c);
}
int n,m;
freopen("c:\\Users\\Administrator\\Downloads\\...txt", "r", stdin);
while(scanf("%d%d",&n,&m) == 2) {
printf("%d",n+m);
}
注:直到输入 Ctrl+Z 然后 回车,程序结束
注:读取文件数据时,读取结束的时候,cin或者scanf()会自动返回EOF,即cin>>n 为false,scanf(" ",& ,&…)==EOF, (c = cin.get()) == EOF
- freopen对于数据的读写
freopen("c:\\Users\\Administrator\\Downloads\\1.txt", "r", stdin);
freopen("c:\\Users\\Administrator\\Downloads\\out1.txt", "w", stdout);
第三章:条件语句和循环语句
1. switch语句
表达式的值 必须是整数类型(int,char ……)
switch (表达式) {
//表达式的值 必须是整数类型(int,char ……)
case 常量表达式1: //常量表达式必须是整数类型的常量(int,char…)
语句组1
break;
case 常量表达式2:
语句组2
break;
……
case 常量表达式n:
语句组n
break;
default:
语句组n + 1
-
switch语句在进入某case分支后,会一直执行到第一个碰到的“break;”,即使这个“break;”是在后面的case分支里面。如果没有碰到“break;”,则会向下一直执行到switch语句末尾的“}”,包括“default:”部分的语句组也会被执行。
-
比如下面的程序n%6=1,则执行case 1:,因为在case 1里不存在break;,所以会一直向后执行,直至遇到break;
#include <iostream>
using namespace std;
int main() {
int n;
scanf("%d", &n);
switch (n % 6) {
case 0:
printf("case 0");
break;
case 1:
printf("case 1");
case 2:
case 3:
printf("case 2 or 3");
break;
case 4:
printf("case 4");
break;
}
return 0;
}
2. for循环
for循环结构里的“表达式1”和“表达式3”都可以是用逗号连接的若干个表达式。
for( int i= 15, j = 0; i > j; i - =2 ,j += 3