天南之城的后花园

本文是《算法笔记》胡凡、曾磊著 的精炼总结。用于博主本人的快速复习,具有极强主观性,请酌情学习。
int占4字节,**范围大概$10^9$**内。long long占8字节,$10^9$外用long long。float占4字节,1位符号位、8位指数位、23位尾数位,有效精度6~7位。double占8字节,1位符号位、11位指数位、52位尾数位,有效精度15~16位。尽量用double。char小写字母比大写字母ascll码大32。char单个字符常量必须用单引号。char[]字符串常量用双引号。bool在整型转布尔时,非零为true,零为false宏定义末尾不加分号
#define 标识符 常量
推荐使用const定义常量
const 数据类型 变量名 = 常量
宏定义陷阱
#include<iostream>
using namespace std;
#define CAL(x) (x * 2 + 1)
int main(){
int a = 1;
printf("%d\n",CAL(a+1));
return 0;
}
输出结果:
4
因为宏定义是直接将对应的部分替换,然后才进行编译和运行的。
即上式CAL(a+1)=(a + 1 x 2 +1),而不是((a + 1) x 2 + 1)
作用是给复杂的数据类型起一个别名。
如:
#include<cstdio>
typedef long long LL;
...
冒泡排序
memset填充方法
memset(数组名, 值, sizeof(数组名));
如:
...
int a[5]={1,2,3,4,5};
memset(a,0,sizeof(a));
...
执行完第3行后,a的值为
0 0 0 0 0
只有初始化是才能直接赋值整个字符串,在程序其他位置不允许这种操作。
对于字符数组,可以使用getchar/putchar进行单个字符的输入输出
...
char str[5][5];
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
str[i][j]=getchar();
}
getchat();//把输入中每行末尾的换行符吸收掉
}
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
putchar(str[i][j]);
}
putchar('\n');
}
...
对于字符数组,可以使用gets/puts进行字符串的输入输出
...
char str1[20];
char str2[5][10];
gets(str1);
for(int i=0;i<3;i++){
gets(str2[i]);
}
puts(str1);
for(int i=0;i<3;i++){
puts(str2[i]);
}
...
在一维字符数组(或者二维字符数组的第二维)的末尾都有一个空字符\0,以表示存放的字符串的结尾。
(gets、scanf输入是自动添加\0,并占一位。而puts和printf就是通过识别\0作为字符串的结尾的)
关于\0的特别提醒:
...
char str[15];
for(int i=0;i<3;i++){
str[i]=getchar();
}
puts(str);
...
输入如下:
T^T
结果如下:
T^T腫?w?@
stdio.h头文件下
如果想要从屏幕输入int型变量n并将int型变量n输出到屏幕,写法是这样的:
scanf("%d",&n);
printf("%d",n);
而事实上,上面的写法其实可以表示成下面的样子,其中screen表示屏幕:
scanf(screen,"%d",&n);
printf(screen,"%d",n);
可以发现,scanf的输入其实是把screen的内容以“%d”的格式传输到n中(即从左至右),而printf的输出则是把n以"%d"的格式传输到screen上(即从右到左)。
而sscanf与sprintf把screen换成了字符数组:
sscanf(str,"%d",&n);
sprintf(str,"%d",n);
sscanf作用是把字符数组str中的内容以"%d"的格式写到n中
...
char str[100] = "123";
sscanf(str,"%d",&n);
printf("%d\n",n);
...
输出结果
123
sprintf作用是把n以"%d"的格式写到字符数组str中
...
char str[100];
sprintf(str,"%d",n);
printf("%s\n",str);
...
输出结果
233
事实上,sscanf与sprintf可以进行更加复杂的操作:
...
int n;
double db;
char str[100]="2048:3.14,hello",str2[100];
sscanf(str,"%d:%lf,%s",&n,&db,str2);
...
...
int n=12;
double db=3.1415;
char str[100],str2[100]="good";
sprintf(str,"%d:%.2f,%s",n,db,str2);
...