PAT知识点快速学习--num1

绝对值在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

如果重新定义构造函数,默认函数会被覆盖

时间才能证明一切,选好了就尽力去做吧!
原文地址:https://www.cnblogs.com/tingxilin/p/11222094.html