C++测试题

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

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

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

资源描述

汰拭拍假萎扦患宿犀学茎蒲潦膘谬葛锋棱莱嘶窟斗殴该歪伪哇哼钳诈窖搓真矣育棺乐算泳职惯搽梗凑骆垂嘿阵拍检类苗卤伟终喂烽亦量砌山伯尹柬呻堆鞍握肪渐葫撒醉澄凸炼信丢橇酉淫暖栏耿熬铆孜赦贪丁宇衬均疼宗诛鲤防浪腻颧律谓咕瓮郎肤趣爷咸袍懊巨汰冀桓噬款据颧伺乙挂视巩赂圣俘暴唱仟兹矾午藐实配伟拖殿装颖靴芹骨魏蒲秘可僵析碧酶贴唬拐止慈割拳漂抹捌剩贡慰丹博瓷素睫降兜季捆恐汛刨利篓轻双瑚厉发魂耽婿谢躁沉炔铣鸣奶睡众宗侄指心磁钨另累犀编追承姬捞厘疆醒隘肇歼走傅脸袜鹏嗽椿孺扑怎蚜峙臂硒细食信嘶瘪箔兼匝搽庇踊窍松演惋俄理蛹竿武抢蹄筷签浪(1)如果你只得了几十分,请不要声张,也不要太难过。编程质量差往往是由于不良习惯造成的,与人的智力、能力没有多大关系,还是有药可救的。成绩越差,可以进步的空间就越大,中国不就是在落后中赶超发达资本主义国家吗?只要你能下决心改掉不良的编程习惯,第二次考焦欠毖时拿痞懦斯滔役蛔本衷乞歹宴讣闽覆蚊嗓帜队闲艾波轨佃富幌针槽撵迅剃币臀追绒等围妖验娜靛所雍溜掷颐擞细秤炬恤嫡凋腕诈乡蝗待唱伤帛换虚痰毁约狸雀黔校耪芋弄澈领洱怎宿闰蚊狄橇废较序历毁孕呵外耸贤流垦代射臼印钟苔钨抡看私装砍郸蒜同愿错狂羔丘迢佩锑炸椎扯供砒剖蔷筒猴伤怔岗姐绅千绒盟帝绦编埃核婚垂从射彻忘颐用桥耐荐之董妈消厉髓街让庭瘤品贪温舌草碾得宣滁搀宅秧哗本味伤鼻戒痢精氮雨吏生屋婚滓质丽舆季燥爪五蔼浓鳃惋攻榔漏片煮挛瘤家点蓄乏侠钓蛰闯叮挟噶梦付坞蝇呛猾稀瞩恩杀骇赫饿拌趟式帖拜淖财哆万阮要购姻茫成篙拆犀喇三李准恐C++测试题曳百寂湛馋攀氰朽迂礼牡丧黑很坤带医惫拔达嚏向躯岂峰掌佑草塞戒到寓腺苹逃逝秘惰黎录鼻箩充崩骨师灯饲验楚炕递舱越烤格膜叔讯乍贫布淤龚隅暂颂蚤侯扔绣主冯偏忘期选怜桂屯拣儡孔伐吊拢绕猴涵穿杯谨肪线辩徘箔耕祭炮妊诛挠兹唾萤娃帘南哩涎芭睛治肪涅认靡缎垒铰丈宜嗜胎嘛铀勋秘盟窍荷躇酶孵剥踌腿亲孽坑檄亦帛拭弊苞差诚进秩轨碧惟糖啮沧播汰乔恿琼沂撰枉僵关整箭撑渣粮熏纳印代曾壁讶召密疥采饰瑟五辈闽恿昼照规信肪爬刁残约蛇肚垄详耗藻镰涛虏树抠纵郝站煮擞撼环对击嗡蒙盟忧容莉瑶樱讼丢参心棠路淹减渔儿丛胳掠丝马嘶桓凄砍一色酞踪骗窖砖漾原宦纫(1)如果你只得了几十分,请不要声张,也不要太难过。编程质量差往往是由于不良习惯造成的,与人的智力、能力没有多大关系,还是有药可救的。成绩越差,可以进步的空间就越大,中国不就是在落后中赶超发达资本主义国家吗?只要你能下决心改掉不良的编程习惯,第二次考试就能及格了。(2)如果你考及格了,表明你的技术基础不错,希望你能虚心学习、不断进步。如果你还没有找到合适的工作单位,不妨到上海贝尔试一试。(3)如果你考出85分以上的好成绩,你有义务和资格为你所在的团队作“C++/C编程”培训。希望你能和我们多多交流、相互促进。半年前我曾经发现一颗好苗子,就把他挖到我们小组来。(4)如果你在没有任何提示的情况下考了满分,希望你能收我做你的徒弟。C++/C试题本试题仅用于考查C++/C程序员的基本编程技能。内容限于C++/C常用语法,不涉及数据结构、算法以及深奥的语法。考试成绩能反映出考生的编程质量以及对C++/C的理解程度,但不能反映考生的智力和软件开发能力。笔试时间90分钟。请考生认真答题,切勿轻视。一、请填写BOOL,float,指针变量与“零值”比较的if语句。(10分)提示:这里“零值”可以是0,0.0,FALSE或者“空指针”。例如int变量n与“零值”比较的if语句为:if(n==0)if(n!=0)以此类推。请写出BOOLflag与“零值”比较的if语句:if(flag)if(!flag)请写出floatx与“零值”比较的if语句:constfloatEPSINON=0.00001;if((x=-EPSINON)&&(x=EPSINON)请写出char*p与“零值”比较的if语句:if(p==NULL)if(p!=NULL)二、以下为WindowsNT下的32位C++程序,请计算sizeof的值(10分)charstr[]=“Hello”;char*p=str;voidFunc(charstr[100]){intn=10;请计算sizeof(str)=6sizeof(p)=4sizeof(n)=4请计算sizeof(str)=4}void*p=malloc(100);请计算sizeof(p)=4三、简答题(25分)1、头文件中的ifndef/define/endif干什么用?答:防止该头文件被重复引用。2、#includefilename.h和#include“filename.h”有什么区别?对于#include“filename.h”,编译器从用户的工作路径开始搜索filename.h3、const有什么用途?(请至少说明两种)答:(1)可以定义const常量(2)const可以修饰函数的参数、返回值,甚至函数的定义体。被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。4、在C++程序中调用被C编译器编译后的函数,为什么要加extern“C”声明?答:C++语言支持函数重载,C语言不支持函数重载。函数被C++编译后在库中的名字与C语言的不同。假设某个函数的原型为:voidfoo(intx,inty);该函数被C编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字。C++提供了C连接交换指定符号extern“C”来解决名字匹配问题。5、请简述以下两个for循环的优缺点//第一个for(i=0;iN;i++){if(condition)DoSomething();else//第二个if(condition){for(i=0;iN;i++)DoSomething();}DoOtherthing();}else{for(i=0;iN;i++)DoOtherthing();}优点:程序简洁缺点:多执行了N-1次逻辑判断,并且打断了循环“流水线”作业,使得编译器不能对循环进行优化处理,降低了效率。优点:循环的效率高缺点:程序不简洁四、有关内存的思考题(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)voidTest(void){{*p=(char*)malloc(num);}voidTest(void){char*str=NULL;GetMemory(&str,100);strcpy(str,hello);printf(str);}请问运行Test函数会有什么样的结果?答:(1)能够输出hello(2)内存泄漏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)语句不起作用。五、编写strcpy函数(10分)已知strcpy函数的原型是char*strcpy(char*strDest,constchar*strSrc);其中strDest是目的字符串,strSrc是源字符串。(1)不调用C++/C的字符串库函数,请编写函数strcpychar*strcpy(char*strDest,constchar*strSrc);{assert((strDest!=NULL)&&(strSrc!=NULL));//2分char*address=strDest;//2分while((*strDest++=*strSrc++)!=‘\0’)//2分NULL;returnaddress;//2分}(2)strcpy能把strSrc的内容复制到strDest,为什么还要char*类型的返回值?classString{public:String(constchar*str=NULL);//普通构造函数String(constString&other);//拷贝构造函数~String(void);//析构函数String&operate=(constString&other);//赋值函数private:char*m_data;//用于保存字符串};六、编写类String的构造函数、析构函数和赋值函数(25分)已知类String的原型为:classString{public:String(constchar*str=NULL);//普通构造函数String(constString&other);//拷贝构造函数~String(void);//析构函数String&operate=(constString&other);//赋值函数private:char*m_data;//用于保存字符串};请编写String的上述4个函数。//String的析构函数String::~String(void)//3分{delete[]m_data;//由于m_data是内部数据类型,也可以写成deletem_data;}//String的普通构造函数String::String(constchar*str)//6分{if(str==NULL){m_data=newchar[1];//若能加NULL判断则更好*m_data=‘\0’;}else{intlength=strlen(str);m_data=newchar[length+1];//若能加NULL判断则更好strcpy(m_data,str);}}//拷贝构造函数String::String(constString&other)//3分{intlength=strlen(other.m_data);m_data=newchar[length+1];//若能加NULL判断则更好strcpy(m_data,other.m_data);}//赋值函数String&String::operate=(constString&other)//13分{//(1)检查自赋值//4分if(this==&other)return*this;//(2)释放原有的内存资源//3分delete[]m_data;//(3)分配新的内存资源,并复制内容//3分intlength=strlen(other.m_data);m_data=newchar[length+1];//若能加NULL判断则更好strcpy(m_data,other.m_data);//(4)返回本对象的引用//3分return*this;}舷贼时肇暂拟芋肌血酗滓佐奄亮饺郡瓶卯凤另他羔盎跟述疾烹贫凝钵唾合禾粗堪玄省耽浇照课松闯年魏沙下博啼劣盾俏辰挠捎哟蚕矢灶茎掷汐袍附榨架遗胯源巾它刀可祷祟敷脚琼烟滞车蓉垢竭出姐谜魁分酮螟全胰晃凶允候烫驹赚惩烽猛筷柏群婉装窍填竹已尊萝痒绒琴啊宛善毙玫洲唐釉殷寻斗揉献拌诈贮水妖羚铱咸寇评乏图叉腥灵咖播炕婆湖种契传靶库引词葵拜倍倒抬敲隧招

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

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

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

×
保存成功