试题和资料(深圳IT行业C语言笔试)

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

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

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

资源描述

1、请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句2、如何输出源文件的标题和目前执行行的行数3、两个数相乘,小数点后位数没有限制,请写一个高精度算法4、写一个病毒5、有A、B、C、D四个人,要在夜里过一座桥。他们通过这座桥分别需要耗时1、2、5、10分钟,只有一支手电,并且同时最多只能两个人一起过桥。请问,如何安排,能够在17分钟内这四个人都过桥?1.请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句//这样转向定义应该不算违规吧!^_^#defineCmp(x,y)compare(x,y)intcompare(inta,intb){a^=(131);b^=(131);inti=31;while((i^-1)&&!((a&(1i))^(b&(1i))))i--;return(i^-1)?(((ai)&1)?1:-1):0;}#defineCOMPARE(a,b)((a)-(b))//0:ab=0:a==b0:ab2.如何输出源文件的标题和目前执行行的行数coutFilename__FILE__Line__LINE__endl;3.两个数相乘,小数点后位数没有限制,请写一个高精度算法算法提示:输入stringa,stringb;计算stringc=a*b;返回c;1,纪录小数点在a,b中的位置l1,l2,则需要小数点后移动位置数为l=length(a)+length(b)-l1-l2-2;2,去掉a,b中的小数点,(a,b小数点后移,使a,b变为整数)3,计算c=a*b;(同整数的大数相乘算法)4,输出c,(注意在输出倒数第l个数时,输出一个小数点。若是输出的数少于l个,就补0)du51(郁郁思扬)的答案:变为整数求就行了.输入的时候记一下,小数点位置..输出再做点文章就行了.下面的是大整数的运算.#includeiostreamusingnamespacestd;#defineMAX10000structNode{intdata;Node*next;};voidoutput(Node*head){if(!head-next&&!head-data)return;output(head-next);couthead-data;}voidMul(char*a,char*b,intpos){char*ap=a,*bp=b;Node*head=0;head=newNode;head-data=0,head-next=0;//头Node*p,*q=head,*p1;inttemp=0,temp1,bbit;while(*bp)//若乘数不为空,继续.{p=q-next;p1=q;bbit=*bp-48;//把当前位转为整型while(*ap||temp)//若被乘数不空,继续{if(!p)//若要操作的结点为空,申请之{p=newNode;p-data=0;p-next=0;p1-next=p;}if(*ap==0)temp1=temp;else{temp1=(p1-data)+(*ap-48)*bbit+temp;ap++;}p1-data=temp1%10;//留当前位temp=temp1/10;//进位以int的形式留下.p1=p;p=p-next;//被乘数到下一位}ap=a;bp++;q=q-next;//q进下一位}p=head;output(p);//显示coutendl;while(head)//释放空间{p=head-next;deletehead;head=p;}}intmain(){cout请输入两个数endl;chartest1[MAX],test2[MAX];cin.getline(test1,MAX,'\n');cin.getline(test2,MAX,'\n');Mul(strrev(test1),strrev(test2));system(PAUSE);return0;}上面大整数已经写了.你加几个东西就行了.#includeiostreamusingnamespacestd;#defineMAX10000structNode{intdata;Node*next;};voidoutput(Node*head,intpos){if(!head-next&&!head-data)return;output(head-next,pos-1);couthead-data;if(!pos)cout.;}voidMul(char*a,char*b,intpos){char*ap=a,*bp=b;Node*head=0;head=newNode;head-data=0,head-next=0;//头Node*p,*q=head,*p1;inttemp=0,temp1,bbit;while(*bp)//若乘数不为空,继续.{p=q-next;p1=q;bbit=*bp-48;//把当前位转为整型while(*ap||temp)//若被乘数不空,继续{if(!p)//若要操作的结点为空,申请之{p=newNode;p-data=0;p-next=0;p1-next=p;}if(*ap==0)temp1=temp;else{temp1=(p1-data)+(*ap-48)*bbit+temp;ap++;}p1-data=temp1%10;//留当前位temp=temp1/10;//进位以int的形式留下.p1=p;p=p-next;//被乘数到下一位}ap=a;bp++;q=q-next;//q进下一位}p=head;output(p,pos);//显示coutendl;while(head)//释放空间{p=head-next;deletehead;head=p;}}intmain(){cout请输入两个数endl;chartest1[MAX],test2[MAX],*p;intpos=0;cin.getline(test1,MAX,'\n');cin.getline(test2,MAX,'\n');if(p=strchr(test1,'.')){pos+=strlen(test1)-(p-test1)-1;do{p++;*(p-1)=*p;}while(*p);}if(p=strchr(test2,'.')){pos+=strlen(test2)-(p-test2)-1;do{p++;*(p-1)=*p;}while(*p);}Mul(strrev(test1),strrev(test2),pos);system(PAUSE);return0;}4.写一个病毒cout一个病毒endl;(开玩笑的,没搞过,^_^)5.让你在100000000个浮点数中找出最大的10000个,要求时间复杂度优。//本算法使用快排,O(n*lg(n))//最低可以找到线性算法,使用预先区域统计划分!类试于构造QuadTrees!写起来代码会长些!#includestdio.h#includestdlib.h#defineMax100000000inta[Max+10];intcmp(constvoid*a,constvoid*b){int*x=(int*)a;int*y=(int*)b;return*x-*y;}intmain(){intn=0;while(scanf(%d,&a[n])==1)n++;qsort(a,n,4,cmp);for(inti=0;i3;i++)printf(%d,a);return1;}5、有A、B、C、D四个人,要在夜里过一座桥。他们通过这座桥分别需要耗时1、2、5、10分钟,只有一支手电,并且同时最多只能两个人一起过桥。请问,如何安排,能够在17分钟内这四个人都过桥?Solution:关键是时间最长的两个人必须同时过桥TheFirstTime:A(1)和B(2)过桥,A(1)返回Cost:1+2TheSecondTime:C(5)和D(10)过桥,B(2)返回Cost:10+2TheThirdTimeA(1)和B(2)过桥Cost:2TotalTimeCost:(1+2)+(10+2)+2=17minutes1.实现双向链表删除一个节点P,在节点P后插入一个节点,写出这两个函数;答://假设线性表的双向链表存储结构typedefstructDulNode{structDulNode*prior;//前驱指针ElemTypedata;//数据structDulNode*next;//后继指针}DulNode,*DuLinkList;//删除操作StatusListDelete_DuL(DuLinkList&L,inti,ElemType&e){if(!(p=GetElemP_DuL(L,i)))//此处得到i位置的节点指针,如果有需要也得写出具体函数实现returnERROR;e=p-data;p-prior-next=p-next;p-next-prior=p-pror;free(p);returnOK;}//插入操作StatusListInsert_DuL(DuLinkList&L,inti,ElemType&e){if(!(p=GetElemP_DuL(L,i)))returnERROR;if(!(s=(DuLinkList)malloc(sizeof(DuLNode))))returnERROR;s-data=e;s-prior=p-prior;p-prior-next=s;s-next=p;p-prior=s;returnOK;}2.写一个函数,将其中的\t都转换成4个空格。答:该函数命名为convert,参数的意义为:*strDest目的字符串,*strSrc源字符串,length源字符串的长度函数实现为:char*convert(char*strDest,constchar*strSrc,intlength){char*cp=strDest;inti=0;while(*strSrc&&ilength)//跳出条件{if(*strSrc=='\t')//将\t转换成4个空格{for(intj=0;j4;j++)*cp++='';}else//否则直接拷贝*cp++=*strSrc;strSrc++;i++;}returnstrDest;}3.Windows程序的入口是哪里?写出Windows消息机制的流程。答:Windows程序的入口是WinMain函数消息机制:系统将会维护一个或多个消息队列,所有产生的消息都会被放入或是插入队列中。系统会在队列中取出每一条消息,根据消息的接收句柄而将该消息发送给拥有该窗口的程序的消息循环。每一个运行的程序都有自己的消息循环,在循环中得到属于自己的消息并根据接收窗口的句柄调用相应的窗口过程。而在没有消息时消息循环就将控制权交给系统。4.如何定义和实现一个类的成员函数为回调函数?答:所谓的回调函数,就是预先在系统的对函数进行注册,让系统知道这个函数的存在,以后,当某个事件发生时,再调用这个函数对事件进行响应。定义一个类的成员函数时在该函数前加CALLBACK即将其定义为回调函数,函数的实现和普通成员函数没有区别5.C++里面是不是所有的动作都是main()引起的?如果不是,请举例。答:不是,比如中断引起的中断处理不是直接由main()引起的,而是由外部事件引起的。6.C++里面如何声明constvoidf(void)函数为C程序中的库函数?答:在该函数前添加extern“C”声明7.下列哪两个是等同的intb;Aconstint*a=&b;Bconst*inta=&b;Cconstint*consta=&b;Dintconst*consta=&b;答:各式表示的意思分别为:Aconstint*a=&b;//*a是co

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

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

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

×
保存成功