




已阅读5页,还剩81页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句 2、如何输出源文件的标题和目前执行行的行数 3、两个数相乘,小数点后位数没有限制,请写一个高精度算法 4、写一个病毒 5、有A、B、C、D四个人,要在夜里过一座桥。他们通过这座桥分别需要耗时1、2、5、10分钟,只有一支手电,并且同时最多只能两个人一起过桥。请问,如何安排,能够在17分钟内这四个人都过桥? 1. 请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句 / 这样转向定义应该不算违规吧!_ #define Cmp(x,y) compare(x,y) int compare(int a,int b) a=(131); b=(131); int i=31; while(i-1) & !(a&(1i)(b&(1i)&1)?1:-1):0; #define COMPARE(a,b) (a)-(b) /0: a0:ab 2. 如何输出源文件的标题和目前执行行的行数 cout Filename _FILE_ Line _LINE_ endl; 3. 两个数相乘,小数点后位数没有限制,请写一个高精度算法 算法提示: 输入 string a, string b; 计算string c=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(郁郁思扬)的答案: 变为整数求就行了.输入的时候记一下,小数点位置.输出再做点文章就行了. 下面的是大整数的运算. #include using namespace std; #define MAX 10000 struct Node int data; Node *next; ; void output(Node *head) if(!head-next&!head-data)return; output(head-next); coutdata; void Mul(char *a,char *b,int pos) char *ap=a,*bp=b; Node *head=0; head=new Node;head-data=0,head-next=0; /头 Node *p,*q=head,*p1; int temp=0,temp1,bbit; while(*bp) /若乘数不为空 ,继续. p=q-next;p1=q; bbit=*bp-48; /把当前位转为整型 while(*ap|temp) /若被乘数不空,继续 if(!p) /若要操作的结点为空,申请之 p=new Node; 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); /显示 coutnext; delete head; head=p; int main() cout请输入两个数endl; char test1MAX,test2MAX; cin.getline(test1,MAX,n); cin.getline(test2,MAX,n); Mul(strrev(test1),strrev(test2); system(PAUSE); return 0; 上面大整数已经写了.你加几个东西就行了. #include using namespace std; #define MAX 10000 struct Node int data; Node *next; ; void output(Node *head,int pos) if(!head-next&!head-data)return; output(head-next,pos-1); coutdata; if(!pos)coutdata=0,head-next=0; /头 Node *p,*q=head,*p1; int temp=0,temp1,bbit; while(*bp) /若乘数不为空 ,继续. p=q-next;p1=q; bbit=*bp-48; /把当前位转为整型 while(*ap|temp) /若被乘数不空,继续 if(!p) /若要操作的结点为空,申请之 p=new Node; 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); /显示 coutnext; delete head; head=p; int main() cout请输入两个数endl; char test1MAX,test2MAX,*p; int pos=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); return 0; 4.写一个病毒 cout一个病毒endl; (开玩笑的,没搞过,_) 5.让你在100000000个浮点数中找出最大的10000个,要求时间复杂度优。 /本算法使用快排,O(n*lg(n) /最低可以找到线性算法,使用预先区域统计划分!类试于构造Quad Trees! 写起来代码会长些! #include #include #define Max 100000000 int aMax+10; int cmp(const void *a, const void *b) int *x = (int *) a; int *y = (int *) b; return *x-*y; int main() int n=0; while(scanf(%d,&an)=1) n+; qsort(a,n,4,cmp); for(int i=0;idata; p-prior-next=p-next; p-next-prior=p-pror; free(p); return OK;/插入操作Status ListInsert_DuL(DuLinkList &L,int i,ElemType &e) if(!(p=GetElemP_DuL(L,i) return ERROR; if(!(s=(DuLinkList)malloc(sizeof(DuLNode) return ERROR; s-data=e; s-prior=p-prior; p-prior-next=s; s-next=p; p-prior=s; return OK;2.写一个函数,将其中的t都转换成4个空格。答:该函数命名为convert,参数的意义为:*strDest目的字符串,*strSrc源字符串,length源字符串的长度函数实现为:char* convert(char *strDest, const char *strSrc,int length) char * cp = strDest; int i=0; while(*strSrc & ilength) / 跳出条件 if (*strSrc=t) /将t转换成4个空格 for(int j=0;jnext; while (p-next!=link) / 链表结尾 if (p-key=key) / 查找到key值相同,删除该节点,并返回 p-prev-next=p-next; p-next-prev=p-prev; free(p); return link; else p=p-next; / 否则查找下一节点 if (p-next = link) return NULL; /没找到,返回NULL 2、请用程序打印下列图型 * * * * * * * * * * * * * *void printTriangle(const unsigned char line);输入行数,打印三角形。答:函数为void printTriangle(const unsigned char line) for(int i=1;i=line;i+) for(int j=0;j=(line-1-i/2*2) & j=(line-2-(i/2-1)*2) & j=(line+(i/2-1)*2) printf(*); else printf( ); printf(n); 3、请用标准C语言实现下列标准库函数,设计中不得使用其他库函数。char *strstr(char *str1,char *str2);在字符串str1中,寻找字串str2,若找到返回找到的位置,否则返回NULL。答:函数为char * strstr ( const char * str1, const char * str2 ) char *cp = (char *) str1; char *s1, *s2; if ( !*str2 ) return(char *)str1); while (*cp) s1 = cp; s2 = (char *) str2; while ( *s1 & *s2 & !(*s1-*s2) ) s1+, s2+; if (!*s2) return(cp); cp+; return(NULL);4、请问这段代码循环多少次?main()char i=0; while(i10) if(i1)continue; if(i=5)break; i+; .答:是个死循环,无限次啊,无限次。5、用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)答: #define MIN (365*24*60*60)6、请问运行main函数会有什么样的结果?main()int x=10,y=3;printf(%dn,y=x/y);答:结果为3,考察强制类型转换7、有以下程序#define P 3int F(int x)return(P*x*x);main()printf(%dn,F(3+5);程序运行结果为:?答:程序运行后的输出结果是192,此题为故意混淆概念,直接用F(8)计算得答案,而非计算3*3+5*3+5;8、若int占2个字节,char占1个字节,float占4个字节,则定义如下:struct stuunion char bj5; int bh2;class;char xm8;float cj;xc;则sizeof(xc)的值为? 答:17,一道边界对齐的题目,很多地方有讲,此处注意下联合的内存大小取决于其中字节数最多的成员就可。9、请问traceroute的工作原理答:主机先发出一个TTL(Time To Live,生存时间)为1的ICMP数据包。这个数据包到达一个路由器后,路由器将TTL减1到0,并将并送回一个ICMP time exceeded消息,以说明这个数据包不能继续向前传送,因为其TTL已经过期了。traceroute 收到这个消息后,便知道这个路由器存在于这个路径上,接着traceroute 再送出另一个TTL是2 的数据包,发现第2 个路由器.这个重复的动作一直持续到某个datagram 抵达目的地。1.打印如下图案,共19行,只能有一个for循环(题目已经提供) * * * * * * * * * * * * * * * * * * * for(i=0;i19;i+)答:#include int main() int maxsize = 19; char ch = *; char *tmp=new char3; char *format = new char30; char *stars = new char30; strcpy(stars,); for(int i=0;imaxsize;+i) if(i0) /前10行每次较前一行多*,输出位置比前一行减1 strcat(stars,*); strcat(format,stars); printf(format,ch); printf(n); else / 后9行每次较前一行少*,输出位置比前一行加1 starsmaxsize-1-(2*(i+1)-maxsize-1)=0; int k=(2*(i+2)-maxsize-1)/2; itoa(k,tmp,10); strcpy(format,%); strcat(format,tmp); strcat(format,c); strcat(format,stars); printf(format,ch); printf(n); delete tmp; delete format; delete stars; tmp=NULL; format=NULL; stars=NULL; return 0;2.void fun(int x) if(x/20)fun(x/2); printf(%d,x);求fun(10)的输出结果答:依次输出fun(1),fun(2),fun(5),fun(10),得到结果125103.#define f1(n) (n)*(n)int i=5;int k=0;k=f1(i+);printf(%d %d,i,k);输出结果:答:7 254.下面那个for循环是无限循环for(int i=010;i=10;i+=0)for(int i=10;(i+-i)=0;i+=0)还有几个忘了答:第一不是,因为010表示8进制,i8;第二是,因为i+-i表示数字9与9进行异或运算,确实为05.Email relay 和Email access分别用了什么协议?(其他还有很多,略)答:SMTP,POP36.stack data (栈)存在于A.rom, B .flash C .eeprom D.ram E .none of the above答:D.ram。这题稍微涉及到一点硬件知识,ROM的全称是Read Only Memory,即只读存储器,flash ,eeprom都是ROM家族的一员,RAM是Random Access Memory的简称,意为随机存取存储器,也就是内存了。不管是堆还是栈都是放在内存里的。7.int i;int x=0x12345678;unsigned char *p=(unsigned char *)&x;for(i=0;isizeof(x);i+)printf(%2x,*(p+i);在80x86pc机器上运行结果? 答:x在PC机上的内存存放顺序为78 56 34 12,高字节在前,低字节在后,因此输出78563412(参见big endian 和little endian)Sun Sparc Unix上运行结果?答:说实话,我不知道8.char a223=1,6,3,5,4,15,3,5,33,23,12,7 ;for(int i=0;i12;i+)printf(%d ,_);在空格处填上合适的语句,顺序打印出a中的数字答:*(*(*(a+i/6)+(i/3%2)+i%3)这题主要是要将输出的序号依次写出一些,如000,001,002,010,011,012,100,101.然后找序号变化规律9.void fun(char *a,char *b) a=b; (*a)+;void main() char s1=A,s2=a; char *p1=&s1; char *p2=&s2; fun(p1,p2); printf(%c%c,s1,s2);输出结果:?答:输出结果为:Ab,因为在fun函数里,指针a指向s2存储区(a=b),接着让s2存储区的值加1得b (*a)+),所以s2等于b,s1不变。10.写一个strstr()函数答:中磊笔试题第三题也是这个,就不多写了,可翻到下篇看解答。(参见C笔试题五)1改错#include #include class CBuffer char * m_pBuffer; int m_size; public: CBuffer() m_pBuffer=NULL; CBuffer() Free(); void Allocte(int size) (3) m_size=size; m_pBuffer= new charsize; private: void Free() if(m_pBuffer!=NULL) delete m_pBuffer; m_pBuffer=NULL; public: void SaveString(const char* pText) const strcpy(m_pBuffer, pText); char* GetBuffer() const return m_pBuffer; ;void main (int argc, char* argv) CBuffer buffer1; buffer1.SaveString(Microsoft); printf(buffer1.GetBuffer();答:改正后主要改正SaveString函数将void SaveString(const char* pText) conststrcpy(m_pBuffer, pText);改为void SaveString(const char* pText) (1)if(m_pBuffer!=NULL)Free();Allocte(strlen(pText)+1); (2)strcpy(m_pBuffer, pText);原因:(1) const成员函数表示不会修改数据成员,而SaveString做不到,去掉const声明(2) m_pBuffer指向NULL,必须用Allocte分配空间才能赋值。(3)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大模型助力工科类专业跨学科融合教学模式研究
- xx园区污水处理及管网配套工程施工方案
- 会记基础试题及答案
- 税法基础试题及答案四
- 高强度铝合金制品生产制造项目经济效益和社会效益分析报告
- 焦化厂循环水系统改造工程实施方案
- 矿山合作协议及承包权转让与执行监督协议
- 食用菌种植加工项目可行性研究报告
- 社会保险停缴期间劳动者权益保障及再就业合同
- 社区绿化带租赁与景观维护管理合同
- GJB9001C质量保证大纲
- SYT 6680-2021 石油天然气钻采设备 钻机和修井机出厂验收规范-PDF解密
- 《遗传学》课程标准
- 蛋白质分离纯化及鉴定
- 2024年化粪池清理合同协议书范本
- 债权债务法律知识讲座
- 南京财经大学《812西方经济学(宏观经济学、微观经济学)》历年考研真题及详解
- 基于教育培训行业的客户关系营销研究
- 肉制品工艺学-香肠类制品-课件
- 超全QC管理流程图
- 2广告实务课程标准
评论
0/150
提交评论