C++心得(精选9篇)
我们的题目是银行定期存款管理系统,在编程过程中,我预订的任务是学习并掌握MFC,并将其运用到我们的程序中。学习MFC的过程是我认为非常痛苦的事,因为完全都是自学,并且因为图书馆中的相关书籍全部被借阅出去,所以没有太多的自学资料,因此虽然费了很大的精力,但仍是无果。经过了很多的小组讨论和自己的心理斗争后最终决定放弃MFC而将自己能力以内的程序尽可能地优化,就这样,我开始在半路阶段加入了程序优化的工作,一遍遍的调试程序,遇到某个攻坚问题,几个人一起在网上查询,一起想解决的办法,就这样,我们团结地将我们现在认为将近完美的程序呈现给老师和同学。
一开始学习MFC时,我总是不能很好的转换思维,不能将自己以前的编程思想和以前的一些不良编程习惯甩掉,因此很多的程序都联系不起来,反而是自己学会了好多的零碎的片面却无法将程序大楼竖起来。在困惑很久后,我选择了询问老师,老师耐心地将MFC的思维方式讲给了我听,这让我受益匪浅,虽然我最后没能将MFC成功的做出来,但我认为我从MFC中才直接地感受到了C++中面向对象编程的封装性。以前用C++编程时总是将类中的变量随便规定属性,甚至在编程的过程中突然需要加一个变量,为了省事直接将其放于public中,在学习了解MFC后,深刻地感受到自己以前的编程习惯是多么的不科学,而那些习惯又是多么的重要。
我们这一次是以团队的形式来做这个项目,并且作为这个小组的组长,我感觉自己的压力很大,因为团队合作不仅讲求整体的团结而且为了团队工作的高效又要有明确的分工。在我们的小组工作中每个人都一刻不放松自己手里的工作,而一些时候我们又配合地很密切,尤其是当我们遇到程序的瓶颈时,我们都是在宿舍里你一句我一句地出谋划策,在遇到一个提取时间的程序时,大家纷纷查询各种辅导书,上网查各种资料,在遇到定期存款支取问题时甚至打电话给家长,寻求“场外支持”,种种的配合都给我们这个部门协调的运作提供了动力。我感谢我的团队,他们让我有一种很舒服的做事情的感觉。
最终决定放弃MFC,我承认自己有一种如释重负的感觉,但是也有一丝惭愧,无论老师要求与否,既然自己决定了就应该走下去,但是我最后退却了,感觉很遗憾也很羞愧,因为我认为对自己降低要求就是放纵自己堕落。
在这几周的面向对象的课程设计中,通过完成本次任务,我所收获到的东西颇丰。
利用设计这次学生信息管理的机会,使我熟练地掌握了上学期所学的C++面向对象程序编程,也更加深入理解了学生信息管理的操作原理和了解了文件的用法及其作用,为日后如何熟练使用文件打下坚实的基础。此外,本次算法的实现采用了C和C++语言面向对象编程,使我对基类的构建,派生类的使用等等各类c的知识,有更深层次的认识。
在这次课程设计中,我还懂得了程序开发的一些比较重要的步骤,如总体分析,程序模块设计等。相信通过此次课程设计会为我以后的学习和工作带来很大的好处。最重要的还是激发我对编程的兴趣和热情,让我从一个只懂理论变成了做一些小程序,让我们对编程更加热爱。
最重要的是,在这次的编程中我们不断地从源程序中寻找错误,修改错误,通过不断地更新程序提升对编程的理解。虽然现有的编程还不完美,但是执着认识到了追求完美的信念,相信在下一次的面向对面编程的过程中能将程序推向所能的极致。
1、回文是指正读,反读均相同的字符序列,如“abba”和“abdba”均是回文,但是“good”不是回文,试用STACK类编写该程序。
#include
int top = 1;char *cMyStack =(char *)malloc((iLen/2+1)*sizeof(char));//定位对原始数组的检测索引初始位置 cMyStack[0] = iLen/2;if(1 == iLen%2){ ++cMyStack[0];}
//将原始数组的一半元素入栈 for(top=1;top<=iLen/2;top++){ cMyStack[top] = *(cScr+top-1);} //从栈顶开始依次匹配
while(*(cScr+cMyStack[0])== cMyStack[--top] && cMyStack[0]++ < iLen){} if(0 == top){//是回文数 free(cMyStack);return 1;} else {//不是回文数
free(cMyStack);return 0;} } 运行结果:
2.利用两个栈类S1、S2模拟一个队列时,编写一程序利用栈的运算实现队列的插入、删除以及判断队列空的运算。
#include
template
assert(!mStack2.empty());mStack2.pop();} template
sq.pushBack(1);printQueue(sq);sq.pushBack(2);printQueue(sq);sq.pushBack(3);printQueue(sq);sq.popFront();printQueue(sq);sq.popFront();printQueue(sq);sq.popFront();printQueue(sq);return 0;} 运行结果:
实验2:
声明复数的类Complex,使用友元函数add实现复数的加法。
#include < iostream > using namespace std;
class Complex { private:
double real, image;public :
Complex(){}
Complex(double a,double b)
{
real = a;image = b;}
void setRI(double a, double b){
real = a;image = b;} double getReal(){ return real;}
double getImage(){ return image;} void print(){ if(image>0)
cout<<“复数:”<< real <<“ + ”<< image <<“i”<< endl;if(image<0)
cout<<“复数:”<< real <<“-”<< image <<“i”<< endl;}
friend Complex add(Complex ,Complex);//声明友元函数 };
Complex add(Complex c1, Complex c2)//定义友元函数
{
Complex c3;
c3.real = c1.real + c2.real;//访问Complex类中的私有成员
c3.image = c1.image + c2.image;return c3;}
void main(){
Complex c1(29, 0.634), c2, c3;c2.setRI(85,106.012);c3 = add(c1, c2);
cout<<“复数一:”;c1.print();cout<<“复数二:”;c2.print();cout<<“相加后:”;c3.print();}
结果:
实验三:
7-5 定义一个基类Shape,在此基础上派生出一个Rectangle和Circle,二者都有getArea()函数计算对象的面积。使用Rectangle类创建一个派生类Square.#include
public: Shape(){}
double GetArea()
{
return 0.1;}
};class Rectangle: public Shape {
public:
Rectangle(double w,double h)
{
width=w;height=h;}
double GetArea(){
return width*height;}
private: double width,height;};class Circle:public Shape { private: double r;
public: Circle(double rr){ r=rr;}
double GetArea(){
return PI*r*r;} };
int main(){
Rectangle * rec=new Rectangle(5,6);
Circle * cir=new Circle(5);
cout<<“RecArea:”< cout<<“CirArea:”< return 1; } 运行结果: 7-10.定义一个Object类,有数据成员weight及相应的操作函数,由此派生出Box类,增加数据成员height和width及相应的操作函数,声明一个Box对象,观察构造函数和析构函数的调用顺序。#include object(){ cout<<“构造object对象”< class box:public object { private: int Height,Width;public: box(){ 姓名:王小宁 班级: 学号: 031012 1234 第一题: 题目: 编写一个类,声明一个数据成员和一个静态数据成员,其构造函数初始化数据成员,并把静态数据成员加1,其析构函数把静态数据成员减1.(1)编写一个应用程序,创建该类的3个对象,然后显示其数据成员和静态数据成员,再析构每个对象,并显示它们对静态数据成员的影响。 (2)修改该类,增加静态成员函数并访问静态数据成员,并声明静态数据成员为保护成员。体会静态成员函数的使用,静态成员之间与非静态成员之间互访问题。 编程思想: 首先,定义一个类,其中含有两个类的私有变量,一个静态数据变量,定义构造函数,将初值赋给两个私有变量,并将静态数据变量加1,并显示.定义一个析构函数,并通过析构函数将静态成员变量减1.并显示。 修改以上的类,增加一个静态成员函数并通过静态成员函数来访问静态成员变量。在主函数中利用一个指向函数的指针指向这个静态成员函数,并通过这个指针来访问类中的静态数据。代码实现: 代码1: #include static int count; A(int a=0,int b=0) { X=a; Y=b; count++; cout<<“startcount=”< count--; cout<<“overcount=”< int GetX(){return X;} int GetY(){return Y;} private: int X,Y;};int A::count=0;int main(){ int *countp=&A::count;A z(2,3);cout<<“x=”< cout<<“x=”< 问题及心得: 在这次试验中,我理解了静态变量与普通变量之间的差异与联系。在实验过程中因未初静态变量始化而无法通过编译,并且注意到静态变量一定要在类外初始化。 题目2: 创建一个Person类,该类中有字符数组,表示姓名、街道地址、市、省和邮政编码。其功能有修改姓名、显示数据信息。要求其功能函数的原型放在类定义中,构造函数初始化每个成员,显示信息函数要求把对象中的完整信息打印出来。其中数据成员为保护的,函数为公有的。 编程思想: 创建一个PERSON类,定义姓名、街道地址、市、省和邮政编码分别为CHAR型的指针私有型变量。在定义公有型的构造函数,并在构造函数中申请动态内存来保存初始化的内容,并用相应的私有性的指针变量指向,再利用复制函数则指针中将会存放入输入内容。定义公有的析构函数释放动态申请的空间。定义一个公有的改变函数改变其中一个变量,方法与构造函数相似。 代码实现: #include private: char *name;char *street;char *pro;char *city;char *code; public: Person(char *aname,char *astreet,char *apro,char *acity,char *acode){ name=new char[strlen(aname)+1]; strcpy(name,aname); street=new char[strlen(astreet)+1]; strcpy(street,astreet); pro=new char[strlen(apro)+1]; strcpy(pro,apro); city=new char[strlen(acity)+1]; strcpy(city,acity); code=new char[strlen(acode)+1]; strcpy(code,acode); cout<<“constructor”< delete[] name; delete[] street; delete[] pro; delete[] city; delete[] code; cout<<“destructor”< delete[] name; name=new char[strlen(aname)+1]; strcpy(name,aname);} void show(){ cout<<“姓名:”< cout<<“街道地址:”< cout<<“省份:”< cout<<“城市:”< cout<<“邮政编码:”< 运行结果: 网易C++笔试题1. #i nclude 和#i nclude “filename.h” 有什么区别? 答:对于#i nclude ,编译器从标准库路径开始搜索filename.h 对于#i nclude “filename.h”,编译器从用户的工作路径开始搜索filename.h 网易C++笔试题2. 在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”? 答:C++语言支持函数重载,C 语言不支持函数重载,函数被C++编译后在库中的名字与C 语言的不同。假设某个函数的原型为: void foo(int x, int y); 该函数被C 编译器编译后在库中的名字为_foo , 而C++ 编译器则会产生像_foo_int_int 之类的名字。 C++提供了C 连接交换指定符号extern“C”来解决名字匹配问题。 网易C++笔试题3. 一个类有基类、内部有一个其他类的成员对象,构造函数的执行顺序是怎样的? 答:先执行基类的(如果基类当中有虚基类,要先执行虚基类的,其他基类则按照声明派生类时的.顺序依次执行),再执行成员对象的,最后执行自己的。 网易C++笔试题4. New delete 与malloc free 的区别 答案:用malloc 函数不能初始化对象,new 会调用对象的构造函数。Delete 会调用对象的destructor,而free 不会调用对象的destructor. 网易C++笔试题5. Struct 和class 的区别 答案:struct 中成员变量和成员函数默认访问权限是public,class 是private 网易C++笔试题6.请问下面程序有什么错误? int a[60][250][1000],i,j,k; for(k=0;k<=1000;k++) for(j=0;j<250;j++) for(i=0;i<60;i++) a[i][j][k]=0; 答案:把循环语句内外换一下 网易C++笔试题7. 请写出下列代码的输出内容 #include main { int a,b,c,d; a=10; b=a++; c=++a; d=10*a++; printf(“b,c,d:%d,%d,%d”,b,c,d); return 0; } 答:10,12,120 网易C++笔试题8. 写出BOOL,int,float,指针类型的变量a 与零的比较语句, 答案: BOOL : if ( !a ) int : if ( a == 0) float : const EXPRESSION EXP = 0.000001 if ( a < EXP && a >-EXP) pointer : if ( a != NULL) 网易C++笔试题9.已知strcpy 函数的原型是: char *strcpy(char *strDest, const char *strSrc); 其中strDest 是目的字符串,strSrc 是源字符串。不调用C++/C 的字符串库函数,请编写函数 strcpy 答案: char *strcpy(char *strDest, const char *strSrc) { if ( strDest == NULL || strSrc == NULL) return NULL ; if ( strDest == strSrc) return strDest ; char *tempptr = strDest ; while( (*strDest++ = *strSrc++) != ‘’) ; return tempptr ; } 网易C++笔试题10.写一个函数找出一个整数数组中,第二大的数 答案: const int MINNUMBER = -32767 ; int find_sec_max( int data[] , int count) //类似于1 4 4 4这样的序列将认为1是第二大数 { int maxnumber = data[0] ; int sec_max = MINNUMBER ; for ( int i = 1 ; i < count ; i++) { if ( data[i] >maxnumber ) { sec_max = maxnumber ; maxnumber = data[i] ; } else { if ( data[i] >sec_max ) sec_max = data[i] ; } } return sec_max ; 概念简介 C++这个词在中国大陆的程序员圈子中通常被读做“C加加”,而西方的程序员通常读做“C plus plus”,“CPP”。 它是一种使用非常广泛的计算机编程语言。C++是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格。 发展历程 在C的基础上,一九八三年由贝尔实验室的Bjarne Strou-strup推出了C++。 C++进一步扩充和完善了C语言,成为一种面向 对象的程序设计语言。C++目前流行的编译器 最新版本是Borland C++4.5,Symantec C++6.1,和Microsoft VisualC++ 。C++提出了一些更为深入的概念,它所支持的这些面向对象的概念容易将问题空间直接地映射到程序空间,为程序员提供了一种与传统结构程序设计不同的思维方式和编程方法。因而也增加了整个语言的复杂性,掌握起来有一定难度。 C++由美国AT&T贝尔实验室的本贾尼斯特劳斯特卢普博士在20世纪80年代初期发明并实现(最初这种语言被称作“C with Classes”带类的C)。开始,C++是作为C语言的增强版出现的,从给C语言增加类开始,不断的增加新特性。虚函数(virtual function)、运算符重载(operator overloading)、多重继承(multiple inheritance)、模板(template)、异常(exception)、RTTI、命名空间(name space)逐渐被加入标准。 语言特点 优点 C++代码 C++设计成静态类型、和C同样高效且可移植的多用途程序设计语言。 C++设计成直接的和广泛的支持多种程序设计风格(程序化程序设计、资料抽象化、面向对象程序设计、泛型程序设计)。 C++设计成给程序设计者更多的选择,即使可能导致程序设计者选择错误。 C++设计成尽可能与C兼容,借此提供一个从C到C++的平滑过渡。 C++避免平台限定或没有普遍用途的特性。 C++不使用会带来额外开销的特性。 C++设计成无需复杂的程序设计环境。 出于保证语言的简洁和运行高效等方面的考虑,C++的很多特性都是以库(如STL)或其他的形式提供的,而没有直接添加到语言本身里。关于此类话题,Bjarne Stroustrup的《C++语言的设计和演化》(1994)里做了详尽的陈述。 C++在一定程度上可以和C语言很好的结合,甚至目前大多数C语言程序是在C++的集成开发环境中完成的。C++相对众多的面向对象的语言,具有相当高的性能。 C++引入了面向对象的概念,使得开发人机交互类型的应用程序更为简单、快捷。很多优秀的程序框架包括MFC、QT、wxWidgets就是使用的C++。 1 计算 a^b << 2 (运算符优先级问题) int a = 2; int b = 1; int c = 2; cout << (a ^ b << c); 6 2 根据先序中序求后序 3 a[3][4]哪个不能表示 a[1][1]: *(&a[0][0]) *(*(a+1)+1) *(&a[1]+1) *(&a[0][0]+4) cout << *(&a[1][1]) << endl <<*(*(a+1)+1) << endl << *(&a[1]+1) << endl << *(&a[0][0]+4); 6 6 0012FEC8 5 4 for(int i...) for(int j...) printf(i,j); printf(j) 会出现什么问题 J没有定义,不在其作用域 5 for(i=0;i<10;++i,sum+=i);的运行结果 int i, sum = 0; for(i=0;i<10;++i,sum+=i); cout << sum; 55 6 10个数顺序插入查找二叉树,元素62的比较次数 7 10个数放入模10hash链表,最大长度是多少 8 fun((exp1,exp2),(exp3,exp4,exp5))有几个实参 2个,逗号运算符, 9 希尔 冒泡 快速 插入 哪个平均速度最快 10 二分查找是 顺序存储 链存储 按value有序中的哪些 11 顺序查找的平均时间 12 *p=NULL *p=new char[100] sizeof(p)各为多少 都是4 13 频繁的插入删除操作使用什么结构比较合适,链表还是数组 链表 14 enum的声明方式 enum A{ a1, a2, a3, }; 15 1-20的两个数把和告诉A,积告诉B,A说不知道是多少, B也说不知道,这时A说我知道了,B接着说我也知道了,问这两个数是多少 大题: 1 把字符串转换为小写,不成功返回NULL,成功返回新串 char* toLower(char* sSrcStr) { char* sDest= NULL; if( __1___) { int j; sLen = strlen(sSrcStr); sDest = new [_______2_____]; if(*sDest == NULL) return NULL; sDest[sLen] = ; while(_____3____) sDest[sLen] = toLowerChar(sSrcStr[sLen]); } return sDest; } char toLowerChar(char a) { if(a >= A && a <= Z) return a - A + a; } char* toLower(char* sSrcStr) { char* sDest= NULL; if(sSrcStr) { int j; int sLen = strlen(sSrcStr); sDest = new char[sLen + 1]; if(*sDest == NULL) return NULL; sDest[sLen] = ; while(sLen--) sDest[sLen] = toLowerChar(sSrcStr[sLen]); } return sDest; } 2 把字符串转换为整数 例如:“-123” -> -123 main() { ..... if( *string == - ) n = ____1______; -1* num(string+1) else n = num(string); ..... } int num(char* string) { for(;!(*string==0);string++) { int k; k = __2_____; *string j = --sLen; while( __3__) j-- k = k * 10; num = num + k; } return num; } 附加题: 1 linux下调试core的命令,察看堆栈状态命令 2 写出socks套接字 服务端 客户端 通讯程序 3 填空补全程序,按照我的理解是添入:win32调入dll的函数名 查找函数入口的函数名 找到函数的调用形式 把formView加到singledoc的声明 将singledoc加到app的声明 4 有关系 s(sno,sname) c(cno,cname) sc(sno,cno,grade) 1 问上课程 “db”的学生no 2 成绩最高的学生号 3 每科大于90分的人数 20腾讯招聘 选择题(60) c/c++ os linux 方面的基础知识 c的Sizeof函数有好几个! 程序填空(40) 1.(20) 4空x5 不使用额外空间,将 A,B两链表的元素交叉归并 2.(20) 4空x5 MFC 将树序列化 转存在数组或 链表中! 发信人: ChinaOfey (勇敢的傻,傻得勇敢), 信区: Career_Plaza 标 题: 腾讯笔试题 发信站: 水木社区 (Sat Nov 5 16:25:25 ), 站内 希望明年的兄弟有用!(B卷) 第一部分:基本都是数据结构题+1,2道操作系统和数据库相关的(比较基本) 有印象的: 1,为节省空间,两个栈共用一个空间,栈底在两边,问什么时候表明空间用完 答案:栈顶相遇时 这道题就是很基础的一个题目,因为是第一道题,所以印象比较深^_^ 2,char A[5]; char* B =“abcdefg”; void * C; C = new char[100]; sizeof(A) sizeof(B) size(C) 5,4,4 3,爸爸,妈妈,妹妹,小强,至少两个人同一生肖的概率是多少 1- 12*11*10*9/12*12*12*12 = 43% ,我忘用1减了.... 然后还有几个看程序给结果的题,考察了类,指针的内容 第二部分:程序填空 主要要能看出他的思路 第三部分:写代码 1,关于mfc的,一个控件,显示时间,1s钟刷新一次 2,SQL语言进行简单的数据库操作,建表,查询,求平均工资等 不记得语言了,因此只好自创....ft 3,Unix进程通信有哪些方式,各有什么特点? (其中A卷给的是道网络编程题目) 第四部分:主观题 考rp的,比较无聊,手都写酸了.... 程序4说明] 设 M 叉树采用列表法表示,即每棵子树对应一个列表,列表的结构为:子树根结点的值部分 (设为一个字符) 和用“( )”,括起来的各子树的列表 (如有子树的话) ,各子列表间用“ ,”,分隔。例如下面的三叉树可用列表 a( b( c,d ),e,f( g,h,i ))表示。 本程序输入列表,生成一棵 M 叉树,并由 M 叉树输出列表。假定输入无错误。 [程序4] #include〈stdio.h〉 #include〈stdlib.h〉 #define M 3 typedef struct node{ char val; struct node *subTree[M]; } NODE; char buf[255] ,*str = buf NODE *d = NULL NODE *mackTree( ) /*由列表生成M叉树*/ { int k; NODE *s ; s = __(1)__ s -> val = *str++ ; for ( k = 0 ; k < M ; k++ ) s-> subTree[k] = NULL ; if(*str=( ){ k = 0; do { str++; s -> subTree[k] = __(2)__ ; if ( *str == ) ) { str++; break ; } k = k+l ; } while ( __(3)__ ); } return s ; } void walkTree( NODE *t ) /*由 M 叉树输出列表*/ { int i ; if( t != NULL ) { __(4)__ if ( t -> subTree[0] == NULL ) return ; putchar ( ( ) ; for ( i = 0 ; i < m ; i++) { __(5)__ if ( i! = M - l && t -> subTree[i+l] != NULL ) putchar ( , ) ; } putchar ( ) ) ; } } void main( ) { printf( “Enter exp:” ) ; scanf( “%S” , str ) ; d = makeTree() ; walkTree( d ) ; put ) ; } 有两个集合 集合A{1,7,19,21,55,100。。。} 集合B{7,22,100。。。} 两个集合都是10万个数据(已排序),要求写一个算法,判断B是不是A的子集,算法时间复杂度为Q(N) 上海华育国际课程开设方面完全按照培训中心要求:讲师拥有内部上岗证证书,教学使用商用设备,学生使用内部教材,考试按照内部题库,教学质量体系等均按照部培训要求所设立。为保证教学与市场需求接轨,中心所有讲师全部外聘,并且都是在合作方企业工作5年以上的优秀工程师组成。培训期间同时将安排学员参加部分工程实习,获取工作经验。 上海华育国际根据国家的教育方针,在上级主管部门的领导和支持下,确立了以市场需求为导向,以社会需求为目标的办学理念,面向社会常年招生。充分诠释着管理团队的扎实负责的办学理念,在强化技能教育的同时,注重德育教育,不断增强学生的职业道德意识。在督促学生完善自我的同时,不拘一格,把学生培养成修养和学养兼具的人才。上海华育国际组织项目研发,推动成果转化,发展高新技术产业,加快人才培养,促进“产、学、研”合作,为推动社会、经济、科技的发展和学校学科建设、科研开发、产业发展作出了贡献,同时,也建立起学校与地方政府部门、企业紧密联系合作的崭新模式。 1.快速排序是什么呢? 快速排序的基本思想是:通过一趟快速排序,把待排记录分成两 个子序列,其中一个子系列中的记录都小于另一个子序列,然后, 分别对两个子序列进行快速排序。 可以看出,快速排序的核心就是划分子序列。 2.下面让我们了解一下递归函数快速排序的思想: (1)将待排序的数据放入某数组中(如数组a[]) 中,下标从 low 到 high; (2)对数组进行如下操作:从数组中取一个元素值作为枢轴 记录(一般取第 0 号元素,即 a[0]),存入 key(一个变量) 中; (3)在数组 a 中,将 key 调整到适当位置,然后将比 key 大的元素都放在 key 的右边,比 key 小的数都放在 key 的左边。 (4)这一趟排序的结果是key 将原数组 a 分割成 了两个子数组,key 的左边的值都比key 小,右边的都比 key 大。 (5)此时,问题就成了如何都将这两个子数组进行排序的问题,显然 对这两个子数组调用上述方法即可,即进行递归调用上述方法, 直到排序完成。 (6)显然,通过上述过程,当我们处理完所有的元素时,最终结果 为:每个元素的左边的元素都不大于该元素,而右边的元素都不小 于该元素。 3.如何确定key的位置呢? 我们确定key的值后,利用 key 将数组 a 划分成两个子数组。 具体方法: (1)取出数组的第 0 个元素,作为分界值放到 key 里, 即 key = a[0]; 此时,数组元素 a[0] 空闲,用一个左探针left 指示,即 left = 0; (2)利用右探针 right 从右往左走,寻找小于 key 的元素,找到 后就将该元素的值放进 left 所指示的空闲位置,此时 right 所 指示位置成为空闲位置; (3)让左探针 left 往右走,寻找比 key 大的元素,找到则将该 元素的值放进 right 所指示的空闲位置。此时 left 所指示位置 变为空闲; (4)循环执行 2、3步,直到 right 不再大于 left为止(此时, 意味着将所有元素都与 key 进行了比较), left 与 right 相遇的 地方就是 key 的位置。 具体的代码: #include void QuickSort( int a[], int low, int high); void main() { int a[] = { 32, 8, 65, 18, 19, 12, 61 }; int i; QuickSort(a, 0, 6); for(i=0; i<7; i++) printf(“%4d”, a[i]); } //QuickSort方法,实现函数的快速排序 void QuickSort( int a[], int low, int high) { int key; int left, right; // 若待排序列为空或仅有一个元素,则无需排序 if( low >= high ) return ; // 1 将待排记录划分成两个子序列 // 1.1 选择序列中第一元素作为轴记录 key = a[low]; // 1.2 根据轴记录 key 将待排序列划分成两个子序列 left = low; right = high; while( left< right ) { while( left= key) right--; // right从后向前扫描,跳过“大”的元素 a[left] = a[right];// 遇到“小”元素,移动到前面去 while( left left++; //left 从前向后扫描,跳过小于轴记录的元素 a[right] = a[left]; // 遇到“大”元素,移动到后面去 } // 1.3 放置轴记录 a[left] = key; // 2.对两个子序列分别进行快速排序 QuickSort(a, low, left-1); QuickSort(a, left+1, high); 1.写一个函数,将其中的 都转换成4个空格, 2.实现双向链表删除一个节点P,在节点P后插入一个节点,写出这两个函数。 3.Windows程序的入口是哪里?写出Windows消息机制的流程。 4.如何定义和实现一个类的成员函数为回调函数? 5.C++里面是不是所有的动作都是main引起的?如果不是,请举例, 6.C++里面如何声明const void f(void)函数为C程序中的库函数? 7.内联函数在编译时是否做参数类型检查? void g(base & b){ b.play; } void main(){ son s; g(s); return; } 8.下列哪两个是等同的 int b; A const int* a = &b; B const* int a = &b; C const int* const a = &b; 【C++心得】推荐阅读: MMD学习心得(马列心得)06-10 《于丹论语心得》读书心得10-08 家长心得:《践行父母规》学习心得10-17 国培计划心得体会教师心得06-17 读书心得体会读书心得体会07-02 心得体会,师德楷模心得体会07-05 读书心得是什么(乔布斯传读书心得)09-30 文秘实习心得体会例文实习心得体会06-01 跟班学习心得体会-跟班学习心得体会09-20C++上机实验报告 篇4
网易C++笔试题 篇5
C++笔试(5) 腾讯 篇6
上海c++培训哪家好 篇7
C++ 递归函数的详解 篇8
经典普天C++笔试题 篇9