C&ampamp;C++笔试汇总

上传人:缘*** 文档编号:333172763 上传时间:2022-09-01 格式:PDF 页数:33 大小:4.40MB
返回 下载 相关 举报
C&ampamp;C++笔试汇总_第1页
第1页 / 共33页
C&ampamp;C++笔试汇总_第2页
第2页 / 共33页
C&ampamp;C++笔试汇总_第3页
第3页 / 共33页
C&ampamp;C++笔试汇总_第4页
第4页 / 共33页
C&ampamp;C++笔试汇总_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《C&ampamp;C++笔试汇总》由会员分享,可在线阅读,更多相关《C&ampamp;C++笔试汇总(33页珍藏版)》请在金锄头文库上搜索。

1、C&C+笔试题汇总 编程题1编写一个函数,作用是把一个char组成的字符串循环右移n个。比如原来是“abcdefghi”如果n=2,移位后应该是hiabcdefg。函数头是这样的:/pStr是指向以0结尾的字符串的指针/steps是要求移动的nvoid LoopMove(char*pStr,int steps)(请填充)解答:正确解答1:void LoopMove(char*pStr,int steps)(int n=strlen(pStr)-steps;char tmpMAX_LEN;strcpy(tmp,pStr+n);strcpy(tmp+steps,pStr);*(tmp+strlen

2、(pStr)=0;strcpy(pStr,tmp);)正确解答2:void LoopMove(char*pStr,int steps)(int n=strlen(pStr)-steps;char tmpMAX_LEN;memcpy(tmp,pStr+n,steps);memcpy(pStr+steps,pStr,n);memcpy(pStr,tmp,steps);)剖析:这个试题主要考查面试者对标准库函数的熟练程度,在需要的时候引用库函数可以很大程度上简化程序编写的工作量。最频繁被使用的库函数包括:(1)strcpy(2)memcpy(3)memset2 已知WAV文件格式如下表,打开一个WA

3、V文件,以适当的数据结构组织WAV文件头并解析WAV格式的各项信息。WAVE文件格式说明表偏移地址 字节数 数据类型 内 容文件头00H4Char RIFF标志04H4int32文件长度解答:将WAV文件格式定义为结构体WAVEFORMAT:typedef struct tagWaveFormat08H4CharWAVE标志OCH4Charfm t标志10H4过渡字节(不定)14H2int16格式类别16H2int16通道数18H2int16采样率(每秒样本数),表示每个通道的播放速度1CH4int32波形音频数据传送速率20H2int16数据块的调整数(按字节算的)22H2每样本的数据位数2

4、4H4Char数据标记符data 28H4int32语音数据的长度char cRiffFlag4;UIN32 nHleLen;char cWaveFlag4;char cFmtRag4;char cTransition4;UI N16 n Form at lag;UIN16 nChannels;UI N16 nSamplesPerSec;UI N32 nAvgBytesperSec;UI N16 nBlockAlign;UI N16 nBitNumPerSample;char cDataFlag4;UI N32 nAudioLength;WAVEFORMAT;假 设WAV文件内容读出后存放在指

5、针buffer开始的内存单元内,则分析文件格式的代码很简单,为:WAVEFORMAT waveFormat;memcpy(&waveFormat,buffer,sizeof(WAVEFORMAT);直接通过访问waveFormat的成员,就可以获得特定WAV文件的各项格式信息。剖析:本题考查面试者组织数据结构的能力,有经验的程序设计者将属于一个整体的数据成员组织为一个结构体,利用指针类型转换,可以将memcpy、memset等函数直接用于结构体地址,进行结构体的整体操作。透过这个题可以看出面试者的程序设计经验是否丰富。3 请写一个C函数,若处理器是Big_endian则返回0;若是Little

6、_endian则返回1解答:int checkCPU()union wint a;char b;c;c.a=1;return(c.b=1);)剖析:嵌入式系统开发者应该对Little-endian和Big-endian模式非常了解。采用Little-endian模式的CPU对操作数的存放方式是从低字节到高字节,而Big-endian模式对操作数的存放方式是从高字节到低字节。例如,16bit宽的数0 x1 234在Little-endian模式CPU内存中的存放方式(假设从地址0 x4000开始存放)为:32bit宽的数0 x12345678在Little-endian模式CPU内存中的存放方式

7、(假设从地址0 x4000开始存放)为:内存地址存放内容0 x40000 x340 x40010 x12而在Big-endian模式CPU内存中的存放方式则为:内存地址存放内容0 x40000 x120 x40010 x34内存地址存放内容0 x40000 x780 x40010 x560 x40020 x340 x40030 x12联合体union的存放顺序是所有成员都从低地址开始存放,面试者的解答利用该特性,轻松地获得了 CPU对内存采用Little-endian还是Big-endian模式读写。如果谁能当场给出这个解答,那简直就是一个天才的程序员。而在Big-endian模式CPU内存中

8、的存放方式则为:内存地址存放内容0 x40000 x120 x40010 x340 x40020 x560 x40030 x784 写一个函数返回1 +2+3+.+n的 值(假定结果不会超过长整型变量的范围)解答:int Sum(int n)return(long)1+n)*n/2;或 return(11+n)*n/2;剖析:对于这个题,只能说,也许最简单的答案就是最好的答案。下面的解答,或者基于下面的解答思路去优化,不管怎么“折腾”,其效率也不可能与直接return(1 I+n)*n/2相比!int Sum(int n)(long sum=0;for(int i=1;i=,0&c=,9,)(

9、i=i*10+(c-0,);)else return-1;)return i;7 完成下列程序#includeusing namespace std;const int n=8;main()(int i;int j;int k;for(i=n;i=1;i-)(for(j=0;j n-i+1;j+)(COUtvv*”;for(k=1;k n-i+1;k+)(cout)cout endl;)systemCpause*);8 完成程序,实现对数组的降序排序#include using namespace std;void sort(int*arr,int n);int main()int array

10、=45,56,76,234,1,34,23,2,3;sort(array,9);for(int i=0;iv=8;i+)曾经在这儿出界coutarrayin H;coutendl;system(pause);)void sort(int*arr,int n)int temp;for(int i=1 ;i9;i+)(for(int k=0;k9-i;k+)曾经在这儿出界if(arrkarrk+1)(temp=arrk;arrk=arrk+1 ;arrk+1 =temp;)9 费波那其数列,1,1,2,3,5.编写程序求第十项。可以用递归,也可以用其他方法,但要说明你选择的理由非递归#includ

11、e using namespace std;int Pheponatch(int n);main()(int Ph=Pheponatch(IO);cout Ph endl;system(npausen);)int Pheponatch(int n)(int elem;int n1=1;int n2=1;if(n=11 1 n=2)return 1;elsefor(int i=3;iv=n;i+)elem=n1+n2;n1=n2;n2=elem;)return elem;)递归#include using namespace std;int Pheponatch(int n);main()(in

12、t n;cin n;int ph=Pheponatch(n);cout ph endl;system(pausen);)int Pheponatch(int n)(if(n=0)exit(-1);elseif(n=11 1 n=2)return 1;elsereturn Pheponatch(n-1)+Pheponatch(n-2);)10 已知 strcpy 函数的原型是 char*strcpy(char*strDest,const char*strSrc);其中strDest是目的字符串,strSrc是源字符串。(1)不调用C+/C的字符串库函数,请编写函数strcpychar*strcp

13、y(char*strDest,const char*strSrc)(int n=0;while(strSrcn!=NULL)n+;*srtDest=new charn;for(int i=0;i0)(*psTo+=*psFrom+;)return pvTo;)1 2 编写my_strcpy函数,实现与库函数strcpy类似的功能,不能使用任何库函数;char*my_strcpy(char*strdest,const char*strsrc)(assert(strdest!=NULL)&(strsrc!=NULL);char*address=strdest;while(*strdest+=*st

14、rsrc+)!=NULL)return address;二问答题1 找出下列各个程序的错误(1)void testl()(char string 1 0;char*str1=0123456789;strcpy(string,str1);)(2)void test2()(char string10,str1 1 0;int i;for(i=0;i 10;i+)(str1i=5;)strcpy(string,str1);)(3)void test3(char*str1)(char string 1 0;if(strlen(str1)=1 0)(strcpy(string,str1);)解答:试题(

15、1),字符串str1 需要11个字节才能存放下(包括末尾的 0),而 string只有10个字节的空间,strcpy会导致数组越界;试题(2),如果面试者指出字符数组str1 不能在数组内结束可以给3 分;如果面试者指出strcpy(string,str1)调用使得从s tr1 内存起笑制到string内存起所复制的字节数具有不确定性可以给7 分,在此基础上指出库函数strcpy工作方式的给1 0 分;试题(3),if(strlen(str1)=1 0)应改为 if(strlen(str1)=-EPSI NON)&(x =”或“=形式。如果写成if(x=0.0),则判为错,得0分。4 以下为W

16、indows NT下的32位C+程序,请计算sizeof的值void Func(char str1 00)(sizeof(str)=?)void*p=malloc(100);sizeof(p)=?解答:sizeof(str)=4sizeof(p)=4剖析:Func(char str100)函数中数组名作为函数形参时,在函数体内,数组名失去了本身的内涵,仅仅只是一个指针;在失去其内涵的同时,它还失去了其常量特性,可以作自增、自减等操作,可以被修改。(1)数组名的本质如下:数组名指代一种数据结构,这种数据结构就是数组:例如:char str 1 0;cout sizeof(str)endl;输出结果为10,str指代数据结构char10.(2)数组名可以转换为指向其指代实体的指针,而且是一个指针常量,不能作自增、自减等操作,不能被修改;char str 1 0;str+;编译出错,提示str不是左值(3)数组名作为函数形参时,沦为普通指针。Windows NT 32位平台下,指针的长度(占用内存的大小)为4字节,故sizeof(str)、sizeof(p)都为 4。5 写一个“标准”宏M

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 营销创新

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号