清华大学ACM集训队培训资料.docx
- 文档编号:1375961
- 上传时间:2022-10-21
- 格式:DOCX
- 页数:16
- 大小:71.10KB
清华大学ACM集训队培训资料.docx
《清华大学ACM集训队培训资料.docx》由会员分享,可在线阅读,更多相关《清华大学ACM集训队培训资料.docx(16页珍藏版)》请在冰豆网上搜索。
清华大学ACM集训队培训资料
清华大学ACM集训队培训资料(内部使用)
一、C++基础
基本知识
所有的C++程序都是有函数组成的,函数又叫做子程序,且每个C++程序必须包含一个main函数,编译器(能够把源代码转换成目标代码的程序)把翻译后的目标代码和一些启动代码组合起来,生成可执行文件,main函数就是可执行文件的入口,所以,每个C++程序有且只有一个main函数。
下面我们看一个最简单C++程序。
(程序1.1)
程序1.1
intmain(){return0;}
在这个程序中,如果缺少任何一个字符,编译器就无法将其翻译成机器代码。
此外,C++是对大小写敏感的,这就意味着,如果我将mian()函数拼为Main(),哪么,编译器在编译这段程序的时候就会出错。
编辑源文件
能够提共管理程序开发的所有步骤,包括编辑的程序成为集成开发环境(integrateddevelopmentevironments,IDE)。
在windows系统下,使用较为广泛的有MicrosoftVisualC++、Dev-Cpp等,在UNIX系统下,有Vim、emacs、eclipes等。
这些程序都能提供一个较好的开发平台,使我们能够方便的开发一个程序,接下我们所要了解的都是标准C++,所有源代码都在Dev-cpp下编写,能够编译通过。
如果我们修改程序1.1中的main()函数的名称,将其改为Main(),那么,IDE就会给出错误信息,比如“[Linkererror]undefinedreferenceto`WinMain@16'”,因为编译器没有找到main函数。
接下来,我们来看一个经典的C++例子(程序1.2)
程序1.2
#include
usingnamespacestd;
intmain(void)
{
cout<<"HelloWrold!
"< return0; } 运行结果 HelloWorld! 程序说明 第一行“#include 因为在输出操作中需要做很多事,C++编译器就提供了很多已经写好的函数(成为C++标准库),我们做的只是拿来用就可以了。 第二行的“usingnamespacestd;”是使用标准命名空间,因为我们在程序中用到了在标准命名空间里的函数和对象。 目前可以不了解其具体如何实现,在以后的程序设计中可以再对其进行了解。 在明函数中“cout<<”HelloWorld! ”< eHeH”,“endl”表明打印完这句话之后需要换行。 如果我们替换引号内的内容,程序的输出就会相应改变。 另外一个C++程序例子 //ourfunc.cpp--definingyourownfunction #include voidsimon(int);//functionprototypeforsimon() intmain() { usingnamespacestd; simon(3);//callthesimon()function cout<<"Pickaninteger: "; intcount; cin>>count; simon(count);//callitagain cout<<"Done! "< return0; } voidsimon(intn)//definethesimon()function { usingnamespacestd; cout<<"Simonsaystouchyourtoes"< }//voidfunctionsdon'tneedreturnstatements 下面试运行情况: Simonsaystouchyourtoes3times. Pickaninteger: 512 Simonsaystouchyourtoes512times. Done! 程序中包含了cin语句来从键盘上获取数据。 该程序中包含了除main函数以外的另一个函数simon(),他和main函数定义的格式相同,函数的统一格式如下: typefunctionname(argumentlist) { statements } 注意,定义simon()的代码在main()函数的后面,C++中不允许将函数定义在另一个函数内。 每个函数的定义都是独立的,所有的函数的创建都是平等的。 simon()函数的函数头定义如下: voidsimon(intn) 以void开头表明simon()没有返回值,因此我们不能类是这样的使用它。 simple=simon(3); 有返回值的函数如下 //convert.cpp--convertsstonetopounds #include intstonetolb(int);//functionprototype intmain() { usingnamespacestd; intstone; cout<<"Entertheweightinstone: "; cin>>stone; intpounds=stonetolb(stone); cout< cout< return0; } intstonetolb(intsts) { return14*sts; } 下面是运行情况: Entertheweightinsone: 14 14stone=196pounds. 程序通过cin语句给stone提供一个值,然后在main函数中,把这个值传递给stonetolb()函数,这个植被赋给sts之后,stonetolb()用return 将14*sts返回给main()。 函数头中的int表明stonetolb()将返回一个整数。 除了int类型之外,C++的内置数据类型还有: unsignedlong、long、unsignedint、unsignedshort、short、char、unsignedchar、signedchar、bool、 float、double、longdouble。 对于数据的输入和输出有几道练习题 至 二、算法基础 1.什么是算法 算法是完成特定任务的有限指令集。 所有的算法必须满足下面的标准: a.输入。 由外部题共零个或多个输入量。 b.输出。 至少产生一个输出量。 c.明确性。 每条指令必须清楚,不具模糊性。 d.有限性。 如果跟踪算法的指令,那么对于所有的情况,算法经过有限步以后终止。 e.有效性。 每条指令必须非常基础,原则上使用笔和纸就可以实现 例选择排序 voidSelectionSort(Typea[],intn) //Sortthearrata[1: n]intonondecreasingorder. { for(inti=1;i<=n;i++) { intj=1; for(intk=i+1;k<=n;k++) if(a[k] j=k; Typet=a[i]; a[i]=a[j]; a[j]=t; } } 使用该函数时,应将Type替换为C++中的数据类型 3.性能分析 程序P所用时间定义为T(P),T(P)是编译时间和运行时间之和。 下面我们计算一下选择排序运行时所要花费的时间 SelectionSort cost times for(inti=1;i<=n;i++) c1 { intj=1; c2 for(intk=i+1;k<=n;k++) c3
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 清华大学 ACM 集训队 培训资料