C++试题及答案

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

、请填写BOOL,float,指针变量与“零值”比较的if语句。(10分)请写出BOOLflag与“零值”比较的if语句。(3分)标准答案:if(flag)if(!flag)如下写法均属不良风格,不得分。if(flag==TRUE)if(flag==1)if(flag==FALSE)if(flag==0)请写出floatx与“零值”比较的if语句。(4分)标准答案示例:constfloatEPSINON=0.00001;if((x=-EPSINON)&&(x=EPSINON)不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“=”或“=”此类形式。如下是错误的写法,不得分。if(x==0.0)if(x!=0.0)请写出char*p与“零值”比较的if语句。(3分)标准答案:if(p==NULL)if(p!=NULL)如下写法均属不良风格,不得分。if(p==0)if(p!=0)if(p)if(!)二、以下为WindowsNT下的32位C++程序,请计算sizeof的值(10分)charstr[]=“Hello”;char*p=str;intn=10;请计算sizeof(str)=6(2分)sizeof(p)=4(2分)sizeof(n)=4(2分)voidFunc(charstr[100]){请计算sizeof(str)=4(2分)}void*p=malloc(100);请计算sizeof(p)=4(2分)for(i=0;iN;i++){if(condition)DoSomething();elseDoOtherthing();}if(condition){for(i=0;iN;i++)DoSomething();}else{for(i=0;iN;i++)DoOtherthing();}优点:程序简洁缺点:多执行了N-1次逻辑判断,并且打断了循环“流水线”作业,使得编译器不能对循环进行优化处理,降低了效率。优点:循环的效率高缺点:程序不简洁请简述以下两个for循环的优缺点for(i=0;iN;i++){if(condition)DoSomething();elseDoOtherthing();}if(condition){for(i=0;iN;i++)DoSomething();}else{for(i=0;iN;i++)DoOtherthing();}优点:程序简洁缺点:多执行了N-1次逻辑判断,并且打断了循环“流水线”作业,使得编译器不能对循环进行优化处理,降低了效率。优点:循环的效率高缺点:程序不简洁有关内存的思考题(每小题5分,共20分)voidGetMemory(char*p){p=(char*)malloc(100);}voidTest(void){char*str=NULL;GetMemory(str);strcpy(str,helloworld);printf(str);}请问运行Test函数会有什么样的结果?答:程序崩溃。因为GetMemory并不能传递动态内存,Test函数中的str一直都是NULL。strcpy(str,helloworld);将使程序崩溃。char*GetMemory(void){charp[]=helloworld;returnp;}voidTest(void){char*str=NULL;str=GetMemory();printf(str);}请问运行Test函数会有什么样的结果?答:可能是乱码。因为GetMemory返回的是指向“栈内存”的指针,该指针的地址不是NULL,但其原现的内容已经被清除,新内容不可知。voidGetMemory2(char**p,intnum){*p=(char*)malloc(num);}voidTest(void){char*str=NULL;GetMemory(&str,100);strcpy(str,hello);printf(str);}请问运行Test函数会有什么样的结果?答:(1)能够输出hello(2)内存泄漏voidTest(void){char*str=(char*)malloc(100);strcpy(str,“hello”);free(str);if(str!=NULL){strcpy(str,“world”);printf(str);}}请问运行Test函数会有什么样的结果?答:篡改动态内存区的内容,后果难以预料,非常危险。因为free(str);之后,str成为野指针,if(str!=NULL)语句不起作用。下面的代码输出是什么,为什么?voidfoo(void){unsignedinta=6;intb=-20;(a+b6)?puts(6):puts(=6);}答案:6#definefn(n)printf(%c,%d,%c,%c,++(n),sizeof(++(n)),++(n),(n)+1);intmain(intargc,char**argv){charn='a';fn(++n);return0;}答案:f,1,f,gchar*constp;charconst*pconstchar*p上述三个有什么区别?char*constp;//常量指针,p的值不可以修改charconst*p;//指向常量的指针,指向的常量值不可以改constchar*p;//和charconst*p定义一个宏:交换两个变量的值,不使用第三个变量有两种解法,一种用算术算法,一种用^(异或)a=a+b;b=a-b;a=a-b;ora=a^b;//只能对int,char..b=a^b;a=a^b;ora^=b^=a;如下程序运行有没有错?若有错,错在哪里?structS{inti;int*p;};structSa;int*p=&a.i;p[0]=1;p[1]=2;a.p=p;//这时,a.p的内容为p的地址,也就是指向结构a的起始地址a.p[1]=10;//这句运行后,S-p=10,也就是结构S的指针p指向了10这个地址a.p[0]=12;//地址10+0的这个地址,不合法,程序不能访问unionV{structX{unsignedchars1:2;unsignedchars2:3;unsignedchars3:3;}x;unsignedcharc;}v;v.c=100;printf(%d,v.x.s3);答案:3structA{chart:4;chark:4;unsignedshorti:8;unsignedlongm;}sizeof(A)=?(不考虑边界对齐)答案:7在Win32下,程序输出是多少#pragmapack(8)uniona{inta_int1;doublea_double;inta_int2;};typedefstruct{aa1;chary;}b;classc{doublec_double;bb1;aa2;};输出coutsizeof(c)endl;的结果?答案:32逻辑题:一:0,1,3,7,15,31的下一个数字是多少?63!--[if!supportLists]--1.!--[endif]--某一密码仅使用K、L、M、N、O共5个字母,密码中的单词从左向右排列,密码单词必须遵循如下规则:(1)密码单词的最小长度是两个字母,可以相同,也可以不同(2)K不可能是单词的第一个字母(3)如果L出现,则出现次数不止一次(4)M不能使最后一个也不能是倒数第二个字母(5)K出现,则N就一定出现(6)O如果是最后一个字母,则L一定出现问题一:下列哪一个字母可以放在LO中的O后面,形成一个3个字母的密码单词?A)KB)LC)MD)N答案:L指针和引用有什么分别;如果传引用比传指针安全,为什么?如果我使用常量指针难道不行吗?(1)引用在创建的同时必须初始化,即引用到一个有效的对象;而指针在定义的时候不必初始化,可以在定义后面的任何地方重新赋值.(2)不存在NULL引用,引用必须与合法的存储单元关联;而指针则可以是NULL.(3)引用一旦被初始化为指向一个对象,它就不能被改变为另一个对象的引用;而指针在任何时候都可以改变为指向另一个对象.给引用赋值并不是改变它和原始对象的绑定关系.(4)引用的创建和销毁并不会调用类的拷贝构造函数(5)语言层面,引用的用法和对象一样;在二进制层面,引用一般都是通过指针来实现的,只不过编译器帮我们完成了转换.不存在空引用,并且引用一旦被初始化为指向一个对象,它就不能被改变为另一个对象的引用,显得很安全。const指针仍然存在空指针,并且有可能产生野指针.总的来说:引用既具有指针的效率,又具有变量使用的方便性和直观性.构造函数可否是虚函数,为什么?析构函数呢,可否是纯虚的呢?构造函数不能为虚函数,要构造一个对象,必须清楚地知道要构造什么,否则无法构造一个对象。析构函数可以为纯虚函数。关键字volatile有什么含意?并给出三个不同的例子。一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:1)并行设备的硬件寄存器(如:状态寄存器)2)一个中断服务子程序中会访问到的非自动变量(Non-automaticvariables)3)多线程应用中被几个任务共享的变量static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?答:全局变量(外部变量)的说明之前再冠以static就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。static函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝STL中的vector和list的区别,它们各适用在什么场合?进程和线程的差别。线程是指进程内的一个执行单元,也是进程内的可调度实体.与进程的区别:(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行(3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.(4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。说说测试驱动开发的一般步骤。谈谈你对极限编程的理解列出你常使用的设计模式,并用代码实现一个。1.关键字static的作用是什么?在C语言中,关键字static有三个明显的作用:1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。2)在模块内(但在函数体外),一个被声明

1 / 15
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功