1.绕点(x,y)逆时针旋转a度后,原坐标(x1,y1)变为(x2,y2)公式为
X2=(x1-x)*cos(a)-(y1-y)*sin(a)+x;
Y2=(x1-x)*sin(a)+(y1-y)*cos(a)+y;
2.三角函数
sin(弧度)=函数值
asin(函数值)=弧度(弧度=度数*pi/180)
3.立方和公式
1^3+2^3+3^3+4^3+…+n^3=(1+2+3+4+..+n)^2=(n*(n+1)/2)^2
4.平方和公式
1^2+2^2+3^2+..+n^2=(n*(n+1)*(2n+1))/6
5.关于c++流格式控制符的使用
流格式控制符定义在
tw(n)
指定打印字段的宽度
tprecision(n)
设置一个浮点数的精度
fixed
将一个浮点数以一个定点数的形式输出
showpoint
将一个浮点数以带小数,带结尾是0的形式输出,即便他没有小数部分
left
将输出内容左对齐
right
将输出内容右对齐
一、tw(n)
默认情况下,输出内容需要多少个位置,cout就仅仅占用那么多屏幕位置。你可以使用
tw(n),指定一个输出内容占用多少个位置。
例如:
cout<
这样c++之前打印5个空位置,(注意:是之前),,101之前打印3个空位置。
tw(n)每次只作用一个输出字段,所以,要想每个字段输出都设置宽度,必须每次都要写
一遍tw(n)
二、tprecision(n)
tprecision(n)指定一个浮点数的精度。
1.)可以指定一个浮点数打印几位数字,其中n是总位数!!包括小数之前和之后的数字。
超出的位数会被四舍五入进去!!!
(tprecision(n)不是舍弃,在高精度向低精度转换时,超出部分会被舍弃,如一个double
k=1.5,inti=k,这时候0.5被舍去,i=1,高精度向低精度转换超出位数会被舍弃!)
例如
doublenum=1.23456;
cout<
cout<
cout<
2)与tw()不同tprecision(n)一直作用到下一个tprecisin(n)之前,所以,只需要
写一个tprecision(n)就可以。tw()要每次都写
C++四舍五入用
三、fixed
fixed可以强制数值不以科学技术法显示,即只用小数形式显示。
(在遇见大的浮点数时候,计算机会以科学技术法形式显示浮点数)
默认情况下,使用fixed之后,小数点后面数字位数为6,
如:doublei=1.23;
cout<
会输出1.230000
3)我们可以使用fixed和tprecision(n)一起使用的方法,来改变这个小数点后的位数,当
tprecision(n)作用于fixed之后时候,
tprecision(n)指定的是小数点后的数字位数
如:doublek=3.141592653;
cout<
输出:3.14
这时候,后面也会四舍五入,,即只要用了tprecision(n)就会四舍五入!!!!
4)一旦使用了fixed之后,它会作用于后面所有的浮点数.
5)注意,默认情况下,没有小数的部分不会显示小数点。但使用fixed之后,会强制显示小
数点。
如doublei=1;
cout<
显示1.000000
四、showpoint(与tprecision(n)一起使用)
showpoint强制小数后面以0显示。
cout<
cout<
cout<
五、right/left对齐方式
大多数系统默认情况下为右对齐,
可以使用;eft,将输出格式左对齐
用法
cout<
cout<
cout<
6.关于oj各编译平台的64位整形数据输入输出的问题
(1)在win下的VC6.0里面,声明数据类型的时候应该写作
__int64a;
输入输出的时候用%I64d
scanf(”%I64d”,&a);
printf(”%I64d”,a);
(2)在linux下的gcc/g++里面,数据类型声明写作
longlonga;
输入输出时候用%lld
(3)在win下的其它IDE里面[包括高版本VisualStudio],数据类型声明用上面两种均可
输入输出用%I64d
6.关于double和float的精度问题
C/C++的浮点数据类型有float和double两种。
类型float大小为4字节,即32位,内存中的存储方式如下:
符号位(1bit)
指数(8bit)
尾数(23bit)
类型double大小为8字节,即64位,内存布局如下:
符号位(1bit)
指数(11bit)
尾数(52bit)
符号位决定浮点数的正负,0正1负。
指数和尾数均从浮点数的二进制科学计数形式中获取。
如,十进制浮点数2.5的二进制形式为10.1,转换为科学计数法形式为(1.01)*(10^1),由
此可知指数为1,尾数(即科学计数法的小数部分)为01。
根据浮点数的存储标准(IEEE制定),float类型指数的起始数为127(二进制01111111),
double类型指数的起始数为1023(二进制),在此基础上加指数,得到的就
是内存中指数的表示形式。尾数则直接填入,如果空间多余则以0补齐,如果空间不够则0
舍1入。所以float和double类型分别表示的2.5如下(二进制):
符号位
指数
尾数
0
10000000
0
1
0000
7.关于内存的分配和栈与堆的区别
C++中int*p=newint[4]是什么意思
创建int型指针,并指向长度为4*sizeof(int)的一段内存。
追问:那它动态在哪里了?还不是先设定了内存空间?回答:你这个要区分int*p=new
int[4]和intp[4]两者的区别:
前者:在堆中分配内存,需要通过delete来释放,这段内存可以在p的命名空间以外使用,
大小几乎无限制;
后者:在栈中分配内存,不需要释放,但是这段内存在p的命名空间外不可以使用(超出其
命名空间自动释放),大小有限制(1M)
补充:int*p=newint[4]和intp[4]的区别:
前者在堆里分配内存,需要通过delete来释放,这段内存出了p的命名空间还可以使用。
new分配空间理论上大小无限制(但是受限于操作系统位数以及内存大小)
后者在栈里面分配内存,不需要释放,这段内存出了p的命名空间自动释放不可使用。大小
有限制(1M)。追问:”这段内存可以在p的命名空间以外使用“。。能通俗点儿么。。。刚
刚接触。。。有点混乱。。回答:给你一个示例吧:
例如有一个函数如下
voidfunction(int*&a,int*&b)
{
int*p1=newint[4];//在堆中分配4个int的内存
intp2[4];//在栈中分配4个int的内存
for(inti=0;i<4;i++)
{//赋值
p1[i]=i;
p2[i]=i;
}
//分别用a、b指向p1、p2
a=p1;
b=p2;
}
p1,p2都是临时变量,命名空间都在函数function内。
当函数执行完毕后,p1,p2这两个变量名都已经不可以访问,但是p1指向的内存依旧存在,
p2的已经被释放。
可以用一个main来验证一下:
intmain()
{
int*a,int*b;
function(a,b);
//虽然出了function,但是在function里面用new分配的内存依旧可以访问
//下面这段输出没有问题
for(inti=0;i<4;i++)
printf("%dn",a[i]);
//出了function,栈内分配的内存已经被释放,不可访问
//执行下面代码的时候会程序会报错
for(inti=0;i<4;i++)
printf("%dn",b[i]);
//这段代码好像是看每次pc能否有4个空余栈空间供程序输出,能则能编译通过,不能则
报error
}
不知道这么说你清楚了没有?
追问:呃。。。我知道内存释放的。。。我的问题在后面啊。。“new分配空间理论上大小无
限制”。。。
不是4个int的长度么。。就是这儿个intp[4]混了,什么叫无大小限制。。能举个例子么?
回答:我的意思是说用new来分配的话,可以分配一个很大的内存空间(几乎没有限制,
比如512M);但是在栈里面会对大小有限制,好像是不能超过1M。你可以尝试一下:
int*p=newint[1024*1024*512];//在堆里面分配512M个int空间,没问题
intp[1024*1024*32];//在栈里面分配32M个int空间,有的编译器直接不通过,有的会
在运行的时候报错。
追问:就是说栈空间很小,堆空间很大,除去需要自己用new后要释放空间,这样定义两
个数组没有差别?
回答:使用上主要是要注意:
(1)由于堆里面分配的内存需要delete释放,因此要么在使用完后在命名空间内释放,要
么保存该指针值,在其他地方释放。否则容易造成内存泄露;
(2)内存地址可以用多个指针去指向(即赋给多个指针对象),因此需要注意避免重复
delete。这是造成内存错误的另一个主要原因。
8.关于c++算数移位和逻辑移位
c++中,整数分有符号数和无符号数两种,对于这两种数做左移、右移运算,稍有区别:
1、如果是无符号数,不管是左移还是右移都是“逻辑移位”
2、如果是有符号数,左移运算,那么做的是“逻辑移位”,同1中无符号数的左移。右移
运算,那么做的是“算术移位”。
cout<<(2|0xf)<<""<<(i|0xffffffff)<
ps:16进制0x,2进制B,单目|优先级低于<<。
9.关于卡特兰数的问题
卡塔兰数是组合数学中一个常在各种计数问题中出现的数列。以比利时的数学家欧仁·查
理·卡塔兰(1814–1894)命名。
卡塔兰数的一般项公式为
前几项为(OEIS中的数列A000108):1,1,2,5,14,42,132,429,1430,4862,
16796,58786,208012,742900,2674440,9694845,35357670,129644790,477638700,
1767263190,6564120420,24466267020,91482563640,343059613650,24,
4861946401452,...
性质Cn的另一个表达形式为
所以,Cn是一个自然数;
它也满足C(n)=(4n-2)/(n+1)*C(n-1)
10.判断两条线段相交
第一步快速排斥
相当于两条线段初步判断是否相交,但是有盲区,需进行跨立实验
第二步跨立实验
使用叉积确定相对于任意一条线段而言,另一条线段的两个端点都在这条线段的两侧。
叉积公式
向量a(x1,y1),b(x2,y2)叉积=x1y2-x2y1
注意叉积为一个垂直于a,b两向量的一条向量,符合右手定则。该向量的大小等于以向量
a,b为两边的平行四边形的面积。
点积则为长度,即平常我们所接触的乘cos夹角值得那种。
11.欧拉公式
负指数:e^+-ix=cosx+-isinx
外心与内心的距离:d平方=R平方-2Rr
本文发布于:2023-03-16 00:59:53,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/1678899594270165.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:立方怎么打.doc
本文 PDF 下载地址:立方怎么打.pdf
留言与评论(共有 0 条评论) |