一些面试题

1.用c实现两个128位正整数的最小公倍数主要考虑大数类

2.Windows中COM编程中如何判断两个interface的指针是同一个父COM对象??/

3.TCP/IP连接的唯一性如何确定

4.100个棋子,两个人按顺序取,每人每次至少取一个,至多取10个,取得最后一个者为胜者,问你会选择先取还是后取?为什么?

5.10个房间里放着随机数量的金币。每个房间只能进入一次,并只能在一个房间中拿金币。一个人采取如下策略:前四个房间只看不拿。随后的房间只要看到比前四个房间都多的金币数,就拿。否则就拿最后一个房间的金币。a)编程计算这种策略拿到最多金币的概率。b)证明这是不是最优策略。

6.线程的优缺点,编程中应该注意的问题

一位同学整理的常见笔试/面试题目,答案仅供参考这个东西有些参考价值,和同学讨论一下发现还是有些错误,

1.已知strcpy函数的原型是:
char*strcpy(char*strDest,constchar*strSrc);
其中strDest是目的字符串,strSrc是源字符串。不调用C++/C的字符串库函数,请编写函数strcpy
答案:
char*strcpy(char*strDest,constchar*strSrc)
{
if(strDest==NULL||strSrc==NULL)
returnNULL;
if(strDest==strSrc)
returnstrDest;
char*tempptr=strDest;
while((*strDest++=*strSrc++)!=‘’)
;
returntempptr;
}

2.已知类String的原型为:
classString
{
public:
String(constchar*str=NULL);//普通构造函数
String(constString&other);//拷贝构造函数
~String(void);//析构函数
String&operate=(constString&other);//赋值函数
private:
char*m_data;//用于保存字符串
};
请编写String的上述4个函数。
答案:
String::String(constchar*str)
{
if(str==NULL)//strlen在参数为NULL时会抛异常才会有这步判断
{
m_data=newchar[1];
m_data[0]='';
}
else
{
m_data=newchar[strlen(str)+1];
strcpy(m_data,str);
}
}
String::String(constString&other)
{
m_data=newchar[strlen(other.m_data)+1];
strcpy(m_data,other.m_data);
}
String&String::operator=(constString&other)
{
if(this==&other)
return*this;
delete[]m_data;
m_data=newchar[strlen(other.m_data)+1];
strcpy(m_data,other.m_data);
return*this;
}
String::~String(void)
{
delete[]m_data;
}

3.简答
3.1头文件中的ifndef/define/endif干什么用?
答:防止该头文件被重复引用。
3.2#include<filename.h>和#include“filename.h”有什么区别?
答:对于#include<filename.h>,编译器从标准库路径开始搜索filename.h
对于#include“filename.h”,编译器从用户的工作路径开始搜索filename.h
3.3在C++程序中调用被C编译器编译后的函数,为什么要加extern“C”?
答:C++语言支持函数重载,C语言不支持函数重载。函数被C++编译后在库中的名字与C语言的不同。假设某个函数的原型为:voidfoo(intx,inty);
该函数被C编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字。
C++提供了C连接交换指定符号extern“C”来解决名字匹配问题。
3.4一个类有基类、内部有一个其他类的成员对象,构造函数的执行顺序是怎样的。(Autodesk)
答:先执行基类的(如果基类当中有虚基类,要先执行虚基类的,其他基类则按照声明派生类时的顺序依次执行),再执行成员对象的,最后执行自己的。
3.5请描述一个你熟悉的设计模式(Autodesk)
3.6在UML中,聚合(aggregation)和组合(composition)有什么区别Autodesk)
答案:聚合关系更强,类似于pages和book的关系;组合关系要弱,类似于books和bookshelf的关系。
3.7C#和C++除了语法上的差别以外,有什么不同的地方?(Autodesk,Microsoft)
答案:(C#我只是了解,不是很精通)
(1)c#有垃圾自动回收机制,程序员不用担心对象的回收。(2)c#严禁使用指针,只能处理对象。如果希望使用指针,则仅可在unsafe程序块中能使用指针。(3)c#只能单继承。(4)必须通过类名访问静态成员。不能像C++中那样,通过对象访问静态成员。(5)在子类中覆盖父类的虚函数时必须用关键字override,覆盖父类的方法要用关键字new
3.8ADO.net和ADO的区别?
答案:实际上除了“能够让应用程序处理存储于DBMS中的数据“这一基本相似点外,两者没有太多共同之处。但是ADO使用OLEDB接口并基于微软的COM技术,而ADO.NET拥有自己的ADO.NET接口并且基于微软的.NET体系架构。众所周知.NET体系不同于COM体系,ADO.NET接口也就完全不同于ADO和OLEDB接口,这也就是说ADO.NET和ADO是两种数据访问方式。ADO.net提供对XML的支持。
3.9Newdelete与mallocfree的区别(Autodesk)
答案:用malloc函数不能初始化对象,new会调用对象的构造函数。Delete会调用对象的destructor,而free不会调用对象的destructor.
3.10#defineDOUBLE(x)x+x(Autodesk)
i=5*DOUBLE(10);i是多少?正确的声明是什么?
答案:i为60。正确的声明是#defineDOUBLE(x)(x+x)
3.11有哪几种情况只能用intializationlist而不能用assignment?(Autodesk)
答案:当类中含有const、reference成员变量;基类的构造函数都需要参数;类中含有其他类的成员对象,而该类的构造函数都需要参数。
3.11C++是不是类型安全的?(Autodesk)
答案:不是。两个不同类型的指针之间可以强制转换。C#是类型安全的。
3.12main函数执行以前,还会执行什么代码?(Autodesk)
答案:全局对象的构造函数会在main函数之前执行。
3.13描述内存分配方式以及它们的区别。(Autodesk,Microsoft)
答案:1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。
(2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集。
(3)从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。
3.14什么是虚拟存储器?virtualmemory怎样映射到physicalmemory?页面替换算法有哪些?(Microsoft)
见操作系统p238页。掌握的页面替换算法NRU,FIFO,第二次机会页面替换算法,LRU
3.15有四个同样的容器,里面装满了粒数相同的药丸,正常药丸的质量为m,变质药丸的质量为m+1,现在已知这四个容器中,有一个装的全是变质药丸,用电子秤只称一次,找出哪个容器装的是变质药丸(Microsoft)
答案:把四个容器依次编号为1、2、3、4,然后从中分别取出1、2、3、4粒药丸,称这10粒药丸的质量,如果质量为10m+1,则说明第一个容器装的是变质药丸,如果为10m+2则说明第二个装的变质药丸,依次类推。
3.16比较一下C++中static_cast和dynamic_cast的区别。(Autodesk)
dynamic_casts在帮助你浏览继承层次上是有限制的。它不能被用于缺乏虚函数的类型上,它被用于安全地沿着类的继承关系向下进行类型转换。如你想在没有继承关系的类型中进行转换,你可能想到static_cast
3.17Struct和class的区别(Autodesk)
答案:struct中成员变量和成员函数默认访问权限是public,class是private
3.18当一个类A中没有生命任何成员变量与成员函数,这时sizeof(A)的值是多少,如果不是零,请解释一下编译器为什么没有让它为零。(Autodesk)
答案:肯定不是零。我举个反例,如果是零的话,声明一个classA[10]对象数组,而每一个对象占用的空间是零,这时就没办法区分A[0],A[1]…了
3.19在8086汇编下,逻辑地址和物理地址是怎样转换的?(Intel)
答案:通用寄存器给出的地址,是段内偏移地址,相应段寄存器地址*10H+通用寄存器内地址,就得到了真正要访问的地址。
3.20描述一下C++的多态(microsoft)
答案:C++的多态表现在两个部分,一个是静态连编下的函数重载,运算符重载;动态连编下的虚函数、纯虚函数(抽象类)

4.写出BOOL,int,float,指针类型的变量a与零的比较语句。
答案:
BOOL:if(!a)
int:if(a==0)
float:constEXPRESSIONEXP=0.000001
if(a<EXP&&a>-EXP)
pointer:if(a!=NULL)

5.请说出const与#define相比优点
答案:
(1)const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误。
(2)有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试。

6.简述数组与指针的区别
数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。指针可以随时指向任意类型的内存块。
(1)修改内容上的差别
chara[]=“hello”;
a[0]=‘X’;
char*p=“world”;//注意p指向常量字符串
p[0]=‘X’;//编译器不能发现该错误,运行时错误
(2)用运算符sizeof可以计算出数组的容量(字节数)。sizeof(p),p为指针得到的是一个指针变量的字节数,而不是p所指的内存容量。C++/C语言没有办法知道指针所指的内存容量,除非在申请内存时记住它。注意当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。
chara[]="helloworld";
char*p=a;
cout<<sizeof(a)<<endl;//12字节
cout<<sizeof(p)<<endl;//4字节
计算数组和指针的内存容量
voidFunc(chara[100])
{
cout<<sizeof(a)<<endl;//4字节而不是100字节
}

7.类成员函数的重载、覆盖和隐藏区别
答案:
成员函数被重载的特征:
(1)相同的范围(在同一个类中);
(2)函数名字相同;
(3)参数不同;
(4)virtual关键字可有可无。
覆盖是指派生类函数覆盖基类函数,特征是:
(1)不同的范围(分别位于派生类与基类);
(2)函数名字相同;
(3)参数相同;
(4)基类函数必须有virtual关键字。
“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:
(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。
(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)

8.Therearetwointvariables:aandb,don’tuse“if”,“?:”,“switch”
orotherjudgementstatements,findoutthebiggestoneofthetwo
numbers.
答案:((a+b)+abs(a–b))/2

9.如何打印出当前源文件的文件名以及源文件的当前行号?
答案:
cout<<__FILE__;
cout<<__LINE__;
__FILE__和__LINE__是系统预定义宏,这种宏并不是在某个文件中定义的,而是由编译器定义的。

10.main主函数执行完毕后,是否可能会再执行一段代码,给出说明?
答案:可以,可以用_onexit注册一个函数,它会在main之后执行intfn1(void),fn2(void),fn3(void),fn4(void);
voidmain(void)
{
Stringstr("zhanglin");
_onexit(fn1);
_onexit(fn2);
_onexit(fn3);
_onexit(fn4);
printf("Thisisexecutedfirst./n");
}
intfn1()
{
printf("next./n");
return0;
}
intfn2()
{
printf("executed");
return0;
}
intfn3()
{
printf("is");
return0;
}
intfn4()
{
printf("This");
return0;
}
The_onexitfunctionispassedtheaddressofafunction(func)tobecalledwhentheprogramterminatesnormally.Successivecallsto_onexitcreatearegisteroffunctionsthatareexecutedinLIFO(last-in-first-out)order.Thefunctionspassedto_onexitcannottakeparameters.

11.如何判断一段程序是由C编译程序还是由C++编译程序编译的?
答案:
#ifdef__cplusplus
cout<<"c++";
#else
cout<<"c";
#endif

12.文件中有一组整数,要求排序后输出到另一个文件中
答案:
voidOrder(vector<int>&data)//起泡排序
{
intcount=data.size();
inttag=false;
for(inti=0;i<count;i++)
{
for(intj=0;j<count-i-1;j++)
{
if(data[j]>data[j+1])
{
tag=true;
inttemp=data[j];
data[j]=data[j+1];
data[j+1]=temp;
}
}
if(!tag)
break;
}
}
voidmain(void)
{
vector<int>data;
ifstreamin("c://data.txt");
if(!in)
{
cout<<"fileerror!";
exit(1);
}
inttemp;
while(!in.eof())
{
in>>temp;
data.push_back(temp);
}
in.close();
Order(data);
ofstreamout("c://result.txt");
if(!out)
{
cout<<"fileerror!";
exit(1);
}
for(i=0;i<data.size();i++)
out<<data[i]<<"";
out.close();
}

13.排序方法比较(intel)
排序方法平均时间最坏时间辅助存储
直接插入排序
起泡排序
快速排序
简单选择排序
堆排序
归并排序
基数排序

14.一个链表的结点结构
structNode
{
intdata;
Node*next;
};
typedefstructNodeNode;
(1)已知链表的头结点head,写一个函数把这个链表逆序(Intel)
Node*ReverseList(Node*head)//链表逆序
{
if(head==NULL||head->next==NULL)
returnhead;
Node*p1=head;
Node*p2=p1->next;
Node*p3=p2->next;
p1->next=NULL;
while(p3!=NULL)
{
p2->next=p1;
p1=p2;
p2=p3;
p3=p3->next;
}
p2->next=p1;
head=p2;
returnhead;
}
(2)已知两个链表head1和head2各自有序,请把它们合并成一个链表依然有序。
Node*Merge(Node*head1,Node*head2)
{
if(head1==NULL)
returnhead2;
if(head2==NULL)
returnhead1;
Node*head=NULL;
Node*p1=NULL;
Node*p2=NULL;
if(head1->data<head2->data)
{
head=head1;
p1=head1->next;
p2=head2;
}
else
{
head=head2;
p2=head2->next;
p1=head1;
}
Node*pcurrent=head;
while(p1!=NULL&&p2!=NULL)
{
if(p1->data<=p2->data)
{
pcurrent->next=p1;
pcurrent=p1;
p1=p1->next;
}
else
{
pcurrent->next=p2;
pcurrent=p2;
p2=p2->next;
}
}
if(p1!=NULL)
pcurrent->next=p1;
if(p2!=NULL)
pcurrent->next=p2;
returnhead;
}
(2)已知两个链表head1和head2各自有序,请把它们合并成一个链表依然有序,这次要求用递归方法进行。(Autodesk)
答案:
Node*MergeRecursive(Node*head1,Node*head2)
{
if(head1==NULL)
returnhead2;
if(head2==NULL)
returnhead1;
Node*head=NULL;
if(head1->data<head2->data)
{
head=head1;
head->next=MergeRecursive(head1->next,head2);
}
else
{
head=head2;
head->next=MergeRecursive(head1,head2->next);
}
returnhead;
}

15.分析一下这段程序的输出(Autodesk)
classB
{
public:
B()
{
cout<<"defaultconstructor"<<endl;
}
~B()
{
cout<<"destructed"<<endl;
}
B(inti):data(i)
{
cout<<"constructedbyparameter"<<data<<endl;
}
private:
intdata;
};
BPlay(Bb)
{
returnb;
}
intmain(intargc,char*argv[])
{
Btemp=Play(5);
return0;
}
请自己执行一下看看。

16.写一个函数找出一个整数数组中,第二大的数(microsoft)
答案:
constintMINNUMBER=-32767;
intfind_sec_max(intdata[],intcount)//类似于1444这样的序列将认为1是第二大数
{
intmaxnumber=data[0];
intsec_max=MINNUMBER;
for(inti=1;i<count;i++)
{
if(data[i]>maxnumber)
{
sec_max=maxnumber;
maxnumber=data[i];
}
else
{
if(data[i]>sec_max)
sec_max=data[i];
}
}
returnsec_max;
}

17写一个在一个字符串中寻找一个子串第一个位置的函数
这个题目的一般算法比较简单我就不给出了,如果要求高效率的话请参见数据结构中的KMP算法,不过在笔试时间有限情况下,写出那个算法还是挺难的。


英文题目
1.IntroduceyourselfinEnglish
2.Whatisyourgreatadvantageyouthinkofyourself?
3.Whatisyourdrawbackyouthinkofyourself?
MaybeIwillfeelverytenseifImakeaspeechinfrontofalotofpeople.
4.Howdoyoufeelshanghai?


introduceyourself.
yourweakness.
displayaforminc#.
byvalueandbyrefinc#.
估计面试官不想自己的耳朵再受我的折磨,改用中文。
处理xml文档的方式。
改用c++继续轰炸,写构造函数和赋值运算符。
虚函数的一些东东,还有cast。
写一个双链表。
...忘了。
你有什么要问的?
握手。汗~传说中握手就没戏了。

大约一个小时。基本就是c++和简历上的东东。
口语太烂,几题没答好,估计被锯。


btw,感觉这次面试有点奇怪,跟其它地区和去年的不大一样,不知道大家的情况怎么样?
说说看。

2.******************************************************************

收到面试通知有点意外,因为记得上次说的是final,而且自己感觉是希望不大的。
加上以前的电话面试的话,这算是三面了吧。
听说前面面过的同学说,这次面试官和上次一样也是两个,一个是上次的那个,另一个就
是这次招聘的部门的头头。
由于头头是老外,所以全e文,大约一个小时。汗-_-!
又听说这次招聘的是一个新成立的团队,目前没几个人。狂汗-_-!!希望不要像03年那样
不厚道。

自我介绍。
没想到这次还是以技术为主。其实内容和上次差不多,只是以c++为主。
关于成员变量初始化顺序,一开始就中了圈套:(
几个有依赖关系的成员变量要初始化,让写出构造函数。后来面试官说不对,才想起来和
构造函数没关系,而是声明的顺序。
后来一个稍微简单一点,成员变量是一个指针,就是new和delete了。
还有纯虚函数的一些东东,基类的析构函数也该是虚的。
让我写一个双链表,我说上次写的就是这个,换个singleton吧。
写个is-a和has-a。
structvs.class.
称8个小球的那个问题。

问我还有什么问题,我说上次都问了……
好几天了,忘了不少,只记得这些:(
说一个星期通知,握手~再汗-_-!!!

3.******************************************************************


stl里面vector的实现(内部空间的申请与分配)--我晕这个我也不会,没看过
struct/class的区别

为什么要用struct//成员的默认属性不同,用struct的话,主要是作为数据的集合
怎样使一个class不能被实例化//1,构造函数私有化,2,抽象类
私有继承和public继承的区别。//is-ahas-a
void*p的问题//不能++

引用和指针的区别与联系。引用是否可以更改//引用类似于常量指针,一旦初始化,不
能更改。

windows编程基础,线程与进程的区别//我竟然忘了

com+是否熟悉,(没用过)

还问了我几个我都没有听说过的名词

然后就是数据结构/算法的问题

简述一下hash算法

一个32位的数据,怎样找到最左边的一个1

一个4*4的格子,填入1~15然后给个目标状态,怎样去搜索。

给你100万个数据,数据的值在0~65535之间用最快的速度排序

最后一个问题:
如果我们的一个软件产品,用户回复说:运行速度很慢,你怎么处理

c++的就不说了,只说数据结构的吧。可能这个我比较好一些。

1,hash算法,这个我忘得差不多了,他给了我一个提示,我想起来了。ok

2,n位的2进制数据怎样找罪左边的1,如果是在最左位,这个数是负数,否则的话,左移
一位,看是否变成负数,这是O(n)的算法,O(n/2)的算法:二分方式查找

3,广度优先搜索+启发式

4,统计每个数字出现的频率

5,这个我也没经验,乱说了一通。


4.******************************************************************


经过我不懈的努力,竟然真的争取到了2面的机会,虽然是电话面试,也好了,省钱啦!!


一上来面试官就说,根据你的简历,我们会关注与算法方面的问题,

1,八皇后问题,详述解法---轻松搞定

2,kmp快速匹配算法---不算轻松的搞定

3,无向图中两点间最短路问题---伟大的迪杰克斯拉算法

4,空间中任意给两个向量,求角平分线他给了个提示,解决

5,什么是平衡树---光说上概念来了,其他的不会了(昨晚光看b-,b+树了)

6,哈夫曼编码问题---回答的有些混乱

7,求1~10000的素数---筛选法,有点细节没处理好

8,有向图求环---我只会搜索,在他的提示下,还是没有做出来

9,给n个点,求凸包问题---hiahia,牛X一把,用二分作的!

10,堆排序---明确地告诉了他,俺忘了

11,四则运算

(1)给一个前缀表达式,然后求解---勉强做上来了

(2)给一个中缀表达式,求解---更勉强的作上来了

12,正则表达式---一开始不知道什么东西,后来他一解释,原来是正规式,刚考完,轻
松搞定

然后,换人,考智力:

1,3个门,分别叫做:日月星

日:此门通向光明

月:此门非通向光明

星:月非通向光明

至少一个说真话,至少一个说假话,一个通向光明

问:谁通向光明,----答:星,需要假设来做

2,不均匀的绳子测一个小时,答:两头烧,---我和他讨论了一下,是否可能无法解决,
他说,就是两头烧

3,一个长方形,里面随即挖去另一个长方形,一刀把它平分。---中点相连接

4,4个人过河,怎样最快1,2,5,7。答:我以前做过,给我点时间

5,给你三个盒子,其中一个放了东西,你指定一个,然后打开另外两个中的一个,发现是
空的,问:你是否要改变你的选择。答:我觉着不应该改变,但他说要改变,我想了半天
,没想出来,放弃

6,1,2,53中硬币,有无数个,然后给你个n,让你用最少的硬币数组成n---我竟然用
动态规划作,他告诉我,麻烦了,贪心,搞定

7,开放性题目:怎样测一个飞机的重量,---答:问厂商,问:还有呢?答:根据发动机
的推力和耗油量,可以推出一个大体值,但有很多影响因素,放弃。

8,给一个正方体,两个对面上有两个点,沿着体表面,找一条最短路,---答:拆开,
直线最短
期间还问了我 线程和进程的区别,---答:上次问过了。
完毕。
好的,你还有什么问题吗?---什么时候给答复
一个星期以内,email回复你,不论录取与否
bye~
过了一会儿,手机响,请问你的email地址是什么?---答:*********
好的,我们这就给您发email。请注意查收
开mail,没有:(
结束


5.******************************************************************

1.STL中container有哪些?

答:vector,list,set,multiset,map,multimap,deque,bitset

2.map中的数据存储方式是什么?

答:Hashtable

3.map和hashmap有什么区别?

答:不知道。

4.hashmap是标准库中的吗?

答:不是。

5.vector中的erase方法跟algorithm的remove有什么区别?

答:我不怎么清楚,只知道remove_if可以用functionobject。还有可能vector自带的erase在执行过后会有一些优化的方法吧。

6.functionobject是什么?

答:(这个我说了半天,反正就是描述一下)

大概就是这么几道题,他问我的STL不多,欢迎大家讨论:)

其他部分过几天陆续放出,敬请期待!

5.******************************************************************

这部分他问了我特别多,回答也比较麻烦,有些题目我就不说我的回答了

1.C++中如何阻止一个类被实例化?

答:抽象类,或者构造函数被声明成private

2.一般在什么时候构造函数被声明成private呢?

答:比如要阻止编译器生成默认的copyconstructor

3.什么时候编译器会生成默认的copyconstructor呢?

答:只要自己没写,而程序中需要,都会生成

4.如果你已经写了一个构造函数,编译器还会生成copyconstructor吗?

答:会

5.struct和class有什么区别?

答:默认的访问级别不同,struct是public,class是private

6.没有别的不同了吗?

答:好像没有了吧……

7.为什么说如果一个类作为基类,则它的析构函数要声明成virtual的?

答:(EffectiveC++条款14,我当时刚刚复习过,呵呵)

8.inline的函数和#define有什么区别?

答:类型检查

9.inline是什么意思?

答:就是不产生call,直接把函数的代码嵌入程序。但是inline不是强制的,是
编译器根据需要决定函数是否真的被inline

10.那你说说什么时候会真的被inline,什么时候不会呢?

答:(略)

11.如果把一个类的成员函数写在类的声明中是什么意思?

答:inline

12.public继承和private继承有什么架构上的区别?

答:public是is-a的关系,private是has-a的关系

13.在多继承的时候,如果一个类继承同时继承自classA和classB,而classA和
B中都有一个函数叫foo(),如何明确的在子类中指出override哪个父类的foo()?

答:虚拟继承吧……(我想了半天也不记得这个怎么弄了,他也就没有继续难为
我)

14.虚拟继承的语法是什么?

答:classC:publicA,virtualpublicB

15.部分模版特例化(我忘了他当时怎么翻译这个词的了,反正就是partialtemp
latespecialization)和全部模版特例化有什么区别?

答:(想了半天)就是是不是还有一个通用的模版的区别。这个特性在VC中不支
持,所以我不是很熟悉,不好意思……

16.哦?VC不支持?你确定

答:确定!(.net刚出的时候,我特意看过MSDN,上面写着VC7.0中有3个C++的
特性没有支持,其中就有这个,没想到他连这个都考!)

……

剩下的忘了,想起来再添吧


6.******************************************************************
大家讨论啊!希望对我的回答更正一下,谢谢:)
1.编一个函数,使一个单项链表转置。
2.拆解一个整数,比如4,可以拆解成
4=3+1
4=2+2
4=2+1+1
4=1+1+1+1
3.哈希表
4.不用库函数,实现strcpy或者memcpy等函数

C语言教程(原书第4版) 《c语言教程(原书第4版)》是一本优秀的c程序设计语言教材,完整描述了ansi c语言及其语法特性,并对c语言的高级特性和应用作了深入阐述,介绍了从c到c++和java过渡的相关知识。《c语言教程(原书第4版)》的一个鲜明特色就是结合大量示例描述c语言的重要特征,并对很多工作代码给出了逐步的分析,以这种独特的教学方法向读者解释新接触的编程元素及一些惯用法。   《c语言教程(原书第4版)》系统、完整,可作为c语言的参考手册,也非常适合作为学习c语言的入门和高级课程教材。 前言 第0章 从零开始 0.1 为什么要用c 0.2 ansi c标准 0.3 从c到c++ 0.4 从c和c++到java 第1章 c语言概述 1.1 编程和预备知识 1.2 程序输出 1.3 变量、表达式和赋值 1.4 使用#define和#include 1.5 使用printf()和scanf() 1.6 控制流 1.7 函数 1.8 数组、字符串和指针 1.8.1 数组 1.8.2 字符串 1.8.3 指针 1.9 文件 1.10 与操作系统有关的内容 1.10.1 编写和运行c程序 1.10.2 中断程序 1.10.3 输入文件尾标志 1.10.4 输入和输出的重定向 1.11 总结 1.12 练习 第2章 词法元素、操作符和c系统 2.1 字符和词法元素 2.2 语法规则 2.3 注释 2.4 关键字 2.5 标识符 2.6 常量 2.7 字符串常量 2.8 操作符和标点符号 2.9 操作符的优先级和结合性 2.10 增值操作符和减值操作符 2.11 赋值操作符 2.12 例子:计算2的乘方 2.13 c系统 2.13.1 预处理器 2.13.2 标准函数库 2.14 总结 2.15 练习 第3章 基本数据类型 3.1 声明、表达式和赋值 3.2 基本数据类型 3.3 字符和char数据类型 3.4 int数据类型 3.5 整数类型short、long和unsigned 3.6 浮点类型 3.7 typedef的用法 3.8 sizeof操作符 3.9 使用getchar()和putchar() 3.10 数学函数 3.10.1 使用abs()和fabs() 3.10.2 unix和数学函数库 3.11 隐式类型转换和强制类型转换 3.11.1 整型提升 3.11.2 寻常算术转换 3.11.3 强制类型转换 3.12 十六进制和八进制常量 3.13 总结 3.14 练习 第4章 控制流 4.1 关系操作符、相等操作符和逻辑操作符 4.2 关系操作符和表达式 4.3 相等操作符和表达式 4.4 逻辑操作符和表达式 4.5 复合语句 4.6 表达式和空语句 4.7 if和if-else语句 4.8 while语句 4.9 for语句 4.10 例子:布尔变量 4.11 逗号操作符 4.12 do语句 4.13 例子:斐波那契数 4.14 goto语句 4.15 break和continue语句 4.16 switch语句 4.17 条件操作符 4.18 总结 4.19 练习 第5章 函数 5.1 函数定义 5.2 return语句 5.3 函数原型 5.4 例子:创建乘方表 5.5 从编译器的角度观察函数原型 5.6 函数定义顺序的另一种风格 5.7 函数调用和传值调用 5.8 开发大型程序 5.9 使用断言 5.10 作用域规则 5.10.1 平行和嵌套代码块 5.10.2 以调试为目的使用代码块 5.11 存储类型 5.11.1 auto存储类型 5.11.2 extern存储类型 5.11.3 register存储类型 5.11.4 static存储类型 5.12 静态外部变量 5.13 默认初始化 5.14 递归 5.15 例子:汉诺塔 5.16 总结 5.17 练习 第6章 数组、指针和字符串 6.1 一维数组 6.1.1 初始化 6.1.2 下标 6.2 指针 6.3 传引用调用 6.4 数组和指针之间的关系 6.5 指针运算和元素的大小 6.6 数组作为函数的实参 6.7 例子:冒泡排序 6.8 用calloc()和malloc()进行动态内存分配 6.9 例子:归并和归并排序 6.10 字符串 6.11 标准函数库中的字符串处理函数 6.12 多维数组 6.12.1 二维数组 6.12.2 存储映射函数 6.12.3 形式参数声明 6.12.4 三维数组 6.12.5 初始化 6.12.6 使用typedef 6.13 指针数组 6.14 main()函数的参数 6.15 不规则数组 6.16 函数作为参数 6.17 例子:使用二分法寻找函数的根 6.18 函数指针数组 6.19 类型限定符const和volatile 6.20 总结 6.21 练习 第7章 位操作符和枚举类型 7.1 位操作符和表达式 7.1.1 按位求反 7.1.2 补码 7.1.3 位逻辑操作符 7.1.4 左移位和右移位操作符 7.2 掩码 7.3 软件工具:打印int值的二进制形式 7.4 包装和解包 7.5 枚举类型 7.6 例子:“石头、剪刀、布”游戏 7.7 总结 7.8 练习 第8章 预处理器 8.1 #include的使用 8.2 使用#define 8.3 带参数的宏 8.4 stddef.h中的类型定义和宏 8.5 例子:用qsort()进行排序 8.6 例子:带参数的宏 8.7 stdio.h和ctype.h中的宏 8.8 条件编译 8.9 预定义的宏 8.10 “#”和“##”操作符 8.11 assert()宏 8.12 使用#error和#pragma 8.13 行号 8.14 对应的函数 8.15 例子:快速排序 8.16 总结 8.17 练习 第9章 结构和联合 9.1 结构 9.2 访问结构成员 9.3 操作符的优先级和结合性的总结 9.4 在函数中使用结构 9.5 结构的初始化 9.6 例子:玩扑克牌 9.7 联合 9.8 位字段 9.9 例子:访问位和字节 9.10 adt堆栈 9.11 总结 9.12 练习 第10章 结构和列表处理 10.1 自引用的结构 10.2 线性链表 10.3 链表操作 10.4 一些链表处理函数 10.4.1 插入 10.4.2 删除 10.5 堆栈 10.6 例子:波兰记法和堆栈求值 10.7 队列 10.8 二叉树 10.8.1 二叉树的遍历 10.8.2 创建树 10.9 普通的树 10.9.1 遍历 10.9.2 calloc()的用法以及树的创建 10.10 总结 10.11 练习 第11章 输入/输出和操作系统 11.1 输出函数printf() 11.2 输入函数scanf() 11.3 fprintf()、fscanf()、sprintf() 和sscanf()函数 11.4 fopen()和fclose()函数 11.5 例子:对文件进行空间加倍 11.6 使用临时文件和优雅函数 11.7 随机访问文件 11.8 文件描述符输入/输出 11.9 文件访问权限 11.10 在c程序内部执行命令 11.11 在c程序内部使用管道 11.12 环境变量 11.13 c编译器 11.14 使用性能评估程序 11.15 函数库 11.16 对c代码进行计时 11.17 使用make 11.18 使用touch 11.19 其他有用的工具 11.20 总结 11.21 练习 第12章 高级应用 12.1 用fork()创建并发进程 12.2 进程的叠加:exec...()函数族系 12.3 使用pipe()实现进程间的通信 12.4 信号 12.5 例子:哲学家用餐问题 12.6 矩阵的动态分配 12.6.1 为什么二维数组无法满足要求 12.6.2 用指针数组创建矩阵 12.6.3 调整下标范围 12.6.4 一次分配所有内存 12.7 返回状态 12.8 总结 12.9 练习 第13章 从c到c++ 13.1 输出 13.2 输入 13.3 函数 13.4 类和抽象数据类型 13.5 重载 13.6 构造函数和析构函数 13.7 面向对象编程和继承 13.8 多态 13.9 模板 13.10 c++的异常 13.11 面向对象编程的优点 13.12 总结 13.13 练习 第14章 从c到java 14.1 输出 14.2 变量和类型 14.3 类和抽象数据类型 14.4 重载 14.5 类的创建和销毁 14.6 面向对象编程和继承 14.7 多态和重写方法 14.8 applet 14.9 java的异常 14.10 java和oop的优势 14.11 总结 14.12 练习 附录a 标准函数库 附录b c的语法 附录c ansi c与传统c的比较 附录d ascii字符码 附录e 操作符的优先级和结合性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值