您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > Pascal转C++教程
C++语言是C语言的面向对象升级版,基本的语法和C语言几乎相同,且几乎兼容C语言的所有功能。相比于C语言,C++语言提供了STL(标准模板库),这使得C++语言在OI竞赛中相比Pascal语言和C语言有了不小的优势。更加精简、灵活的语法标准模板库(STL)C++中没有过程的概念,无论是否有返回值,都叫做函数。(这只是概念上的问题,对编程影响不大)C++中的数组下标一定从0开始。(尽量养成从0开始使用的习惯)C++中的大小写在任何平台下都是敏感的。C++中的赋值是=,逻辑相等是==。C++中的表达式比Pascal更广义。(不太建议活用表达式的语法,因为可能会使得程序难以被看懂)C++的异常很少,基本只有程序没法继续运行时才会异常跳出,例如段错误。数组下标越界一般是不会异常的,整数溢出也不会异常(其实有些算法会利用整数溢出的特性),甚至被0除都不会异常。由于我水平有限,讲课的逻辑不一定整理的很好,有些细节可能也会忘记。对于不懂的问题,你们可以直接在课上问我或上网问我。另一方面,也可以利用百度知道这样的网站提问。除了我的讲课内容,还有一个参考资料就是C++Reference(C++参考),里面介绍了各个头文件的内容和相关用法,如果有的用法忘记了可以用于查询。最后要说的是,我的讲课以面向OI竞赛为主,关于C++语言的用法主要讲竞赛中会用到的内容,如果想要系统的学习整个C++语言,建议买一本C++Primer阅读。但阅读书籍可能会需要很长很长时间,并且不少用法竞赛中也不会涉及到,所以大家视情况量力而行。#includecstdio#definemaxn1000usingnamespacestd;inta[maxn];//maxn被替换为1000intmain(){intn;scanf(%d,&n);for(inti=0;in;i++)scanf(%d,&a[i]);for(inti=0;in;i++)printf(%d\n,a[i]);return0;}预处理指令主函数{相当于Pascal中的begin,}相当于Pascal中的end,语句和Pascal语言一样用;分隔,一般一行写一条语句。C++中有两种方法使用注释(不编译的内容)。//后到行尾的内容为注释(和Pascal中的//一样)。/*和*/中间的内容为注释,相当于Pascal中的{和}。头文件(#include)宏定义(#define)头文件分为标准头文件和用户自定义的头文件,例如你可以自己创建一个myheader.h的文件,然后在别的程序中include它。include的作用就是将头文件中的代码复制到include的位置。但由于OI竞赛中只能提交一个源代码文件,所以这种技术在OI竞赛中用不到。OI竞赛中,需要include的都是标准头文件。标准头文件中包括一些预置的常用函数。OI竞赛中会用到的标准头文件有两类:继承自C的头文件和STL头文件。C的头文件一般以c开头,例如前面的cstdio。cstdio:包含读入输出相关函数,可以记为c+std(standard)+io(input&output)。一般来说这个头文件必然要包含。cstring:包含C-style字符串相关的函数。cmath:包含数学相关的函数。cstdlib:包括随机函数等。ctime:获取时间当做随机函数的种子。STL头文件:后面会详细介绍STL。宏是一种预处理指令,编译器会在编译期将定义的宏替换为指定内容。例如在程序的最前面写了#definemaxn1000,那么程序中所有的maxn都会被替换为1000。这和定义常量很类似。更多关于宏的介绍可以参见后面的ppt和Pascal中的主程序一样,是程序开始执行的地方。不同的地方是C++的主函数有返回值,类型为int,并且正常结束时应该返回0。在其他函数中,也可以用cstdlib头文件中的函数exit(0)直接退出整个程序,其中的参数0表示的就是主函数返回值。整型实型字符型布尔型int、short、long、longlong其中int和long为32位带符号整型(Pascal中的longint),范围是-231~231-1。short为16位带符号整型(Pascal中的integer),范围是-215~215-1。longlong为64位带符号整型(Pascal中的int64),范围是-263~263-1。int的最大值约为2.1×109,为首选整型类型。在对应的带符号整型前面加上unsigned,也就是unsignedint、unsignedshort、unsignedlong、unsignedlonglong。其中unsignedint可以直接写为unsigned。无符号整型不能存储负数,但存储的最大值可以扩大一倍,例如unsigned的范围就是0~232-1。C++中有float、double和longdouble三种实型,精度依次递增,一般使用double。char类型只能存储字符,计算机内部是用ASCII码表示字符的,实际的范围是0~255。字符常量使用单引号包围的。bool型只能为true或false。某些特殊的字符可以用转义的方法表示。转义字符以反斜杠(\)开头,例如'\n'。下面是比较常见的五种转义字符:\n换行\\反斜杠\?问号\'单引号\双引号1字节:char、bool2字节:short、unsignedshort4字节:int、unsigned、long、unsignedlong、float8字节:longlong、unsignedlonglong、double12字节:longdoubleint类型的常量:2、100等(不需要任何后缀)double类型的常量:0.0、1.5、1e50等char类型的常量:'a'、'd'等(将字符夹在单引号间)bool类型的常量:true和falseunsigned类型的常量:50u、50U(在非负整数后加上u或U后缀)longlong类型的常量:1000ll、1000LL十六进制前加0x前缀,例如0x100f、0x100F(大写小写均可)。八进制前加0前缀,例如0144,它表示八进制的144,十进制的值是100。因此不要随便加多余的零,防止被当做八进制处理。定义变量的方式为类型名+变量名:定义变量时也可以直接指定初值:intx1,y1;charx2,y2;doublex3,y3;boolx4,y4;inta=10;charb='p';doublec=1.2;longlongd=1000LL;boole=true;C++语言几乎可以在程序的任何地方定义变量,但定义的变量只有在定义之后才能使用,如果在定义处之前就使用会给出编译错误。假如将A类型的变量或常量赋值给B类型的变量,A类型就会被隐式地转换为B类型。两个不同类型进行二元运算时,小类型也会被隐式转换成大类型以便运算。inta=100;longlongb=a;//int类型的a被隐式转换为longlong类型后赋值给bdoublex=1.5;inty=10;doublez=x*y;//int类型的y被隐式转换为double类型后和x相乘除了隐式类型转换,在需要的时候,我们也可以显式地对变量的类型进行转换。其实我也比较推荐大家尽量使用显式类型转换,这样可以避免某些可能的错误。显示转换的方法是(type)x,其中type是要转换成的类型。假如后面要转换的是一个表达式,需要加上括号,即(type)(a+b),这是由于运算符优先级的问题,后面会再次提到。这里int类型的a被显式转换成longlong类型后和int类型的a相乘,由于相乘的两个类型不同,后面int类型的a会被隐式转换成longlong类型后再与前面的a相乘。这里不进行显式类型转换的话,由于相乘的两个类型都是int,就会发生溢出,不过溢出这种错误运行时并不会报错。inta=1000000000;longlongb=(longlong)a*a;实型-整型:去除小数部分,仅保留整数部分整型-实型:无变化,精度可能会损失整型-字符型:ASCII码布尔型-整型:true变成1,false变成0整型-布尔型:0变成false,其他变成true注意有些转换可能会溢出,例如unsigned-int,longlong-int等由于有隐式类型转换,将数字字符转换成数字可以直接写成ch-'0',类似的还有ch-'a',其中ch表示数字字符或小写字母字符。假如要从大类型转换为小类型(如longlong转换为int、double转换为int),因为精度可能会损失,建议使用显式类型转换提示自己。指针是指向特定类型内存地址的类型。C++中的&运算符可以取出某个变量在内存中的地址,以便赋值给相应的指针类型。后面讲运算符时还会介绍通过new的方式给指针赋值。空指针的值为0(也可以用NULL表示)。inta=100;int*b=&a;//b是一个指向int类型的指针//并且将它初始化为a变量的地址*b=*b*2;//相当于a变量被乘2了int*c=0;//c是一个空指针*c=*c*2;//运行到这条时会错误引用和指针有相似的地方,但更恰当的理解是给变量取别名。引用在定义时必须被恰当地初始化,并且之后就不能再修改成其他变量的别名。inta=100;int&b=a;//b是一个int的引用类型//并且它被初始化指向ab=b*2;//相当于a变量被乘2了引用指针类型指向的地址时,需要在指针变量名前加*,但引用是和普通变量一样直接使用。定义指针和引用变量时需注意,每一个指针或引用变量前都要加*或&。int*a,b,&c=b;//a是指向int的指针类型//b是普通的int类型//c是指向int的引用类型和Pascal中一样,C++里也可以定义常量,适当地定义常量不仅方便编程,也能够使程序意义更明确。常量定义后就不能够再修改,除了直接输入常量的值,也可以通过常量表达式定义常量。constdoublepi=3.141592653;constintinf=1000000000;constcharspace='';constdoublepi=acos(-1);constintinf=10000*10000;对于某些很长的类型名,可以通过typedef在使用类型之前取别名,例如:typedeflonglongLL;这样LL就可以直接表示longlong类型了。再例如:typedefint*pint;就可以用pint来表示指向int的指针了。CPU在单位时间内能一次处理的二进制数的位数。当前的CPU基本都支持64位字长,但由于操作系统是32位的,因此当前绝大多数64位CPU都运行在了32位字长的模式下。C++中的int类型就是32位长的,也就是占用4字节(8个位为一个字节)。它和CPU的字长相同,可以获得最高的效率,是首选的整数类型。反码和补码是针对一个特定的原码来说的。反码就是将原码01取反,补码就是在反码的基础上再加1。例如原码是00001111,反码就是11110000,补码就是11110001。计算机内部表示整数使用的是二进制的方法,但是int类型也可以为负整数,对于负整数,就需要用到反码和补码。int类型总共有32位,其中第一位是符号位,假如为0就是非负整数,否则是负整数,后面31位用来记录数字的信息。下面为了方便叙述,将32位的整型简化为8位。先考虑最高位是0的情况,那么这个数就是后面7位二进制表示的整数,例如(01010101)2=85。继续考虑第二种情况:最高位为1。此时这个二进制用来表示一个负数,这个负数的绝对值就是相应补码表示的正整数。例如(10101010)2,先将所有位都取反,得到(01010101)2,再加上1得到(01010110)2=86。因此(10101010)2表示的整数是-86。特
本文标题:Pascal转C++教程
链接地址:https://www.777doc.com/doc-3797771 .html