绝对值在1e9范围内可定义成int,1e10-1e18是long long,注意,在大于2^31-1的时候,为long long赋初值要加LL
char c=111//直接输出以后会发现出来的是对应111的ascii的字符
ascii范围0-127,小写字母比大写多32,大写A65
无论是对字符数组单独赋值还是直接赋值字符串,都可以printf%s直接输出
bool类在非0都是true,比如-1,也是true,而true会打印为1,这时候初始赋值-1,输出按照%d 就是1
强制类型转换(int)a这种是直接舍掉,但是float类的%.1f遵守四舍五入
#define pi 3.14
const double pi=3.14都是对的,都是不可更改的常量
宏定义由于是完全替换,有时候因为空格问题存在陷阱
define Cal(x) (x*2+1)
在实际的a=1 Cal(x+1)中 x+1*2+1=4,添加括号的过程极容易出现问题
0x3fffffff是(1<<30)-1
n=m=a=3;//会让他们都变成3
n/=m+1代表的是n=n/(m+1)
~a是按位取反
(a=3)a^0b10=1,^是异或,不一样的是1
字符串和字符数组在输入的时候%s,后面不用&,其他都用
long long对应%lld,double对应%lf,但是double的输出是%f
scanf("%d:%d:%d",&a,&n,&c);对应的输入数据应该是12:33:12这种的
但是如果中间是空格的话,可以不加。
注意scanf(%s)这里面遇到第一个空格就停止d
注意%c可以读取空格,并且,如果他们前面有东西,是遇到空格停止,不是跳到空格下一个
scanf(%d%c%s,&a,&b,&c);在输入1 ab c这种情况下,a=1 b为空格,c="ab"
如果需要输出%或者\,两次才可输出 printf("%%") printf("\")
printf没有&
printf(%3d,a);如果a不足三位,右对齐,占三位,左边补空格,如果大于等于三位正常输出
如果printf(%03d,a);唯一的区别就是,补0而不是空格
printf(%.3f,a)浮点数(double也可)保持三位小数(带四舍六入五成双(跟四舍五入的区别是,如果最后一位是5,在前面一位是奇数的时候进位,在是偶数的时候社区,但是题目里如果说保留几位小数,或者精确到小数点后几位,都要这么写)),四舍五入是round()
c1=getchar()
getchar()
c2=getchar()
这样可以跳过字符。
puchar(c1)//这类可以输出。
abs是整型的,fabs是浮点的,不可以混,abs对应<stdlib.h>,fabs对<math.h>
typedef long long LL
是给数据类型起别名,整个文件里面都用别名操作即可,不用在main里面
double db;floor(db)向下取整,ceil(db)向上取整。注意如果是db负数,floor出来的绝对值更大,向下是向真实的下。
pow(double r,double h)r^h r的h次方。上面这三个,还有sqrt,输出都要用浮点数%f,不然都是0,对整数用也是%f!!!!
log(x),实质上logex,如果有别的东西,logab这种的,用 logeb/logea来解决
sin cos tan里面是弧度制。(真的会在考试用到咩。。)
pi=acos(-1)//因为cos(pi)=-1
一旦用了switch 每个case都要有break,最后要有default
数组大小超过1e6,记得开在main外面。
多行的时候可以用getchar()吸收每行末尾换行符号,注意scanf里面如果先读了整数,再读取字符,换行啥的要getchar一下
gets将换行作为识别符号,读取一行(gets遇到空格不会停哦),所以中间也要getchar
如果你在int a,char c,读取的时候,先输入1然后换行,字符c在%c读取就会把换行读进去
如果读取的时候不用%s也不用gets,这时候若要使用printf或者puts,一定要记得加' '
下面几个用字符串数组也是可以的哦
strlen(str)返回长度,不包括' '
strcmp(a,b)是对ab进行比较,a大返回正数,b大返回负数,(都不一定是绝对值1哦),完全相同返回0
从0~min(strlen(a),strlen(b))进行比较,前面从哪位开始比出大小,就谁大,如果前面都相同的话,谁长谁大
eg:"abce">"abcde",因为前面已经比出来大小了
strcpy(a,b)b复制给a
若数组是形参,直接修改本体,不能作为返回值出现
指针是unsigned类的整数
int *p1,p2;p2不是指针
指针变量存的是地址,因此赋值也是赋值地址int*p=&a;//是赋给p不是*p的哦
int*p;
p=&a;
int *p;p-1偏移的是一个int的位置
int a[10] a=&a[0]//a代表的是地址
在void swap(int*a,int*b)中,调用函数传入的是swap(&a,&b),*a,*b是指针,swap函数里面当做指针用
void swap(int *a,int*b)
{
int temp=*a;
*a=*b;
*b=temp;
}
在void change(int&a)中,传入change(a),&a是引用,函数里面对a的改变是真实生效的,在函数里面就当做变量a正常用
void swap2(int &a,int &b)
{
int temp=a;
a=b;
b=temp;
}
常量不可以使用引用,如果void swap(int &*a1,int&*a2),实际上传入的额应该是*a1和*a2两个指针,但是&a这是常量,所以要用int*p=&a,然后传入p这种操作
如果struct student ,student*p,stu ,访问里面元素(*p).id,或者p->id;但是stu只能是stu.id
如果重新定义构造函数,默认函数会被覆盖