printf(\
printf(\return 0; }
NetFetch [2006-07-07 09:22 AM] c/c++面试题集锦 2006-7-7更新
21.有双向循环链表结点: typedef struct node {
int date;
struct node *front,*next; }_Node;
有两个双向循环链表A,B,知道其头指针为:pHeadA,pHeadB,请写一函数将两上链表中
date值相同的结点删除 22.
char * GetStr() {
char *tmp; tmp = \return tmp; }
void main() {
printf(\}
会输出123吗?123创建在堆上还是栈上呢?123的空间是什么时候释放的? 23.
字符指针、浮点数指针、以及函数指针这三种类型的变量哪个占用的内存最大?为什么?
类ClassB从ClassA派生,那么ClassA *a = new ClassB(?); 试问该表达是否合法?为什 么 ?
如果ClassA中定义并实现虚函数int func(void),ClassB中也实现该函数,那么上述变量
a->func()将调用哪个类里面的函数?如果int func(void)不是虚函数,情况又如何?为什 么?
char **p, a[16][8]; 问:p=a是否会导致程序在以后出现问题?为什么?
如下所述的if else和switch语句哪个的效率高?为什么?
在同一个进程中,一个模块是否可以通过指针操作破坏其它模块的内存,为什么? 应用程序在运行时的内存包括代码区和数据区,其中数据区又包括哪些部分? NetFetch [2006-07-06 09:20 AM] c/c++面试题集锦 2006-7-6更新
18.Consider the following code:
#include
int main(int argc, char *argv[]) { int i = 1; char buf[4];
strcpy(buf, \printf(\return 0; }
a) When compiled and executed on x86, why does this program usually not output what the programmer intended?
b) Name several ways in which the security problem that causes this program not to output what the programmer intended can be prevented WITHOUT changing the code.
19.int w=1,x=2,y=3,z=4; m=(w printf(\ 说出结果 20.说出结果 #include FILE *fp; int i,a[4]={1,2,3,4},b; fp=fopen(\这里帮忙解释一下 for(i=0;i<4;i++) fwrite(&a[i],sizeof(int),1,fp);//这里也帮忙看一下 fclose(fp); fp=fopen(\ fseek(fp,-2L*sizeof(int),SEEK_END);//还有这里 fread(&b,sizeof(int),1,fp);//这里还有也看一下 fclose(fp); printf(\} NetFetch [2006-07-06 09:19 AM] c/c++面试题集锦 2006-7-6更新 12.请完成以下题目。注意,请勿直接调用 ANSI C 函数库中的函数实现。 a)请编写一个 C 函数,该函数给出一个字节中被置 1 的位的个数,并请 给出该题的至少一个不同解法。 b)请编写一个 C 函数,该函数将给定的一个字符串转换成整数。 c)请编写一个 C 函数,该函数将给定的一个整数转换成字符串。 d)请编写一个 C 函数,该函数将一个字符串逆序。 e)请编写一个 C 函数,该函数在给定的内存区域搜索给定的字符,并返回 该字符所在位置索引值。 f)请编写一个 C 函数,该函数在一个字符串中找到可能的最长的子字符串, 该字符串是由同一字符组成的。 给出演示上述函数功能的一个简单程序,并请编写对应的 Makefile 文件 13.我们需要编写一个图形相关的应用程序,需要处理大量图形(Shape)信息, 图形有矩形(Rectangle),正方形(Square),圆形 (Circle)等种类,应用 需要计算这些图形的面积,并且可能需要在某个设备上进行显示(使用在标准 输出上打印信息的方式做为示意)。 a)请用面向对象的方法对以上应用进行设计,编写可能需要的类 b)请给出实现以上应用功能的示例性代码,从某处获取图形信息, 并且进行计算和绘制 c)如果你的Square继承自Rectangle,请给出理由,如果不是, 请给出理由,并且请比较两种方式的优劣 d)请问你所编写的类,在如下代码中会有何表现,请解释 void test_rectangle_area(Rectangle& r) { r.set_width(10); r.set_height(15); assert(r.area() == 150); } 14.假设现有一个单向的链表,但是只知道只有一个指向该节点的指针p,并且假设这个节 点 不是尾节点,试编程实现删除此节点 15.写一个程序,把一个100以内的自然数分解因数。(自然数分解因数就是将一个自然数 分 解为几个素数的乘积,提示,由于该数不是很大,所以可以将质数保存在数组中,以加快计算 速度) 16.编写一个Identify的分配、释放的函数,为1-10000之间的自然数。 17.分别实现itoa和atoi. NetFetch [2006-07-06 09:18 AM] c/c++面试题集锦 2006-7-6更新 1.多态类中的虚函数表是Compile-Time,还是Run-Time时建立的? 2.将一个 1M -10M 的文件,逆序存储到另一个文件,就是前一个文件的最后一个 字符存到新文件的第一个字符,以此类推。 3.main主函数执行完毕后,是否可能会再执行一段代码? 4.一个父类写了一个virtual 函数,如果子类覆盖它的函数不加virtual ,也能实现多态? 在子类的空间里,有没有父类的这个函数,或者父类的私有变量? 5.给一个字符串、例如 “ababc”要求返回“ab”. 因为“ab”连续重复出现且最长。 用C/C++语言写一函数完成该算法,给出复杂度 6.对序列1、1、2、3、5、8、13。。。。 是Fab..数列 2、3、5、13...是Fab..质数数列,因为他们与自己前面的Fab...数列都互质 给出k,返回第k小的Fab..质数 7.101个硬币100真、1假,真假区别在于重量。请用无砝码天平称两次给出真币重还是假币 重的结论。 8.完成字符串拷贝可以使用 sprintf、strcpy 及 memcpy 函数,请问这些函数有什么区别 ,你喜欢使用哪个,为什么? 9.变量的声明和定义有什么区别? 10.请写出下面代码在 32 位平台上的运行结果,并说明 sizeof 的性质: #include int main(void) { char a[30]; char *b = (char *)malloc(20 * sizeof(char)); printf(\ printf(\ printf(\ printf(\ printf(\ return 0 ; } NetFetch [2006-06-20 11:18 AM] 4. #i nclude \ #define SQR(X) X*X int main(int argc, char* argv[]) { int a = 10; int k = 2; int m = 1; a /= SQR(k+m)/SQR(k+m); printf(\ return 0; } 这道题目的结果是什么啊? define 只是定义而已,在编择时只是简单代换X*X而已,并不经过算术法则的 a /= (k+m)*(k+m)/(k+m)*(k+m); =>a /= (k+m)*1*(k+m); =>a = a/9; =>a = 1; NetFetch [2006-06-20 11:17 AM] 3.请简单描述Windows内存管理的方法。 内存管理是操作系统中的重要部分,两三句话恐怕谁也说不清楚吧~~ 我先说个大概,希望能够抛砖引玉吧 当程序运行时需要从内存中读出这段程序的代码。代码的位置必须在物理内存中才能被运 行 ,由于现在的操作系统中有非常多的程序运行着,内存中不能够完全放下,所以引出了虚 拟 内存的概念。把哪些不常用的程序片断就放入虚拟内存,当需要用到它的时候在load入主 存 (物理内存)中。这个就是内存管理所要做的事。内存管理还有另外一件事需要做:计算 程 序片段在主存中的物理位置,以便CPU调度。 内存管理有块式管理,页式管理,段式和段页式管理。现在常用段页式管理 块式管理:把主存分为一大块、一大块的,当所需的程序片断不在主存时就分配一块主存 空 间,把程 序片断load入主存,就算所需的程序片度只有几个字节也只能把这一块分配给它 。这样会造成很大的浪费,平均浪费了50%的内存空间,但时易于管理。 页式管理:把主存分为一页一页的,每一页的空间要比一块一块的空间小很多,显然这种 方 法的空间利用率要比块式管理高很多。 段式管理:把主存分为一段一段的,每一段的空间又要比一页一页的空间小很多,这种方 法 在空间利用率上又比页式管理高很多,但是也有另外一个缺点。一个程序片断可能会被分 为 几十段,这样很多时间就会被浪费在计算每一段的物理地址上(计算机最耗时间的大家都 知 道是I/O吧)。 段页式管理:结合了段式管理和页式管理的优点。把主存分为若干页,每一页又分为若干 段 。好处就很明显,不用我多说了吧。 各种内存管理都有它自己的方法来计算出程序片断在主存中的物理地址,其实都很相似。 Linux是为那些知其然又想知其所以然的人准备的