ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:18.43KB ,
资源ID:29724692      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/29724692.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C面试题库三.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C面试题库三.docx

1、C面试题库三143. 枚举元素本身由系统定义了一个表示序号的数值,从0 开始顺序定义为0,1,2。如在weekday中,sun值为0,mon值为1, ,sat值为6。main()enum weekday sun,mon,tue,wed,thu,fri,sat a,b,c;a=sun;b=mon;c=tue;printf(%d,%d,%d,a,b,c); 只能把枚举值赋予枚举变量,不能把元素的数值直接赋予枚举变量。如:a=sum;b=mon; 是正确的。而:a=0;b=1; 是错误的。如一定要把数值赋予枚举变量,则必须用强制类型转换,如:a=(enum weekday)2;其意义是将顺序号为2的

2、枚举元素赋予枚举变量a,相当于:a=tue; 还应该说明的是枚举元素不是字符常量也不是字符串常量, 使用时不要加单、双引号。main()enum bodya,b,c,d month31,j;int i;j=a;for(i=1;id) j=a;for(i=1;i=30;i+)switch(monthi)case a:printf( %2d %ct,i,a); break;case b:printf( %2d %ct,i,b); break;case c:printf( %2d %ct,i,c); break;case d:printf( %2d %ct,i,d); break;default:b

3、reak;printf(n);144用折半查找法求一个数? 数组a已按从小到大的顺序排列while(!sign) & (bott = top) mid=(bott + top)/2; if(number =amid) local=mid; printf(“the local is %dn”,local); printf(“the number is%dn”, number); sign =true;else if(number amin) top = mid -1;else bott=mid+1;145有一个字符串,将字符串从第m个字符开始全部复制到另一个新字符串?void copystr(

4、char *p1, char *p2, int m) int n=0; while(nm-1) n+; p1+;while(*p1 !=/0) *p2=*p1; p1+; p2+;*p2=/0;146排序问题:问题一:写出冒泡排序void pop_sort(int a,int N) int tmp, i , j; for(j=0; jN-1; j+) for( i=0; iai+1) tmp=ai;ai=ai+1;ai+1=tmp;问题一:写出选择法排序void select_sort(int a,int N) int i , j, k, t; for(i=0; iN; i+) k=i; fo

5、r( j=i+1; jN; j +) if( ajp1-nump1-score; head=null; while(p1-num !=0) n=n+1; if(1=n) head=p1; else p2-next=p1; p2=p1; p1= new student; cinp1-mump1-score; p2-next =NULL; return (head); 180,写一print函数,将链表中的各数据遍历输出 void print(student *head ) student *p; couttherenrecordsendl; p=head; if(head!=NULL) do c

6、outnum scorenext; while(p!=NULL) 181写一del函数,用来删除动态链表中,指定的结点数据 void *del(student *head, long num) student *p1,*p2; if(head=NULL) return (head); p1=head; while(num!=p1-num & p1-next !=NULL) p2=p1; p1=p1-next; if(num = p1-num) if(p1=head) head=p1-next; else p2-next=p1-next; coutdelete:numendl; n=n-1; e

7、lse coutcan not findnext=NULL; else while(p0-num p1-num) & (p1-next!=NULL) ) p2=p1; p1=p1-next; if(p0-num num) if(head =p1) head=p0; else p2-next=p0; p0-next=p1; else p1-next=p0; p0-next=NULL; n=n+1; return(head); 183 链表题:一个链表的结点结构struct Nodeint data ;Node *next ;typedef struct Node Node ;(1)已知链表的头结

8、点head,写一个函数把这个链表逆序 ( Intel)Node * ReverseList(Node *head) /链表逆序if ( head = NULL | head-next = NULL )return head;Node *p1 = head ;Node *p2 = p1-next ;Node *p3 = p2-next ;p1-next = NULL ;while ( p3 != NULL )p2-next = p1 ;p1 = p2 ;p2 = p3 ;p3 = p3-next ;p2-next = p1 ;head = p2 ;return head ;(2)已知两个链表he

9、ad1 和head2 各自有序,请把它们合并成一个链表依然有序。(保留所有结点,即便大小相同)Node * Merge(Node *head1 , Node *head2)if ( head1 = NULL)return head2 ;if ( head2 = NULL)return head1 ;Node *head = NULL ;Node *p1 = NULL;Node *p2 = NULL;if ( head1-data data )head = head1 ;p1 = head1-next;p2 = head2 ;elsehead = head2 ;p2 = head2-next ;

10、p1 = head1 ;Node *pcurrent = head ;while ( p1 != NULL & p2 != NULL)if ( p1-data data )pcurrent-next = p1 ;pcurrent = p1 ;p1 = p1-next ;elsepcurrent-next = p2 ;pcurrent = p2 ;p2 = p2-next ;if ( p1 != NULL )pcurrent-next = p1 ;if ( p2 != NULL )pcurrent-next = p2 ;return head ;(3)已知两个链表head1 和head2 各自有

11、序,请把它们合并成一个链表依然有序,这次要求用递归方法进行。 (Autodesk)答案:Node * MergeRecursive(Node *head1 , Node *head2)if ( head1 = NULL )return head2 ;if ( head2 = NULL)return head1 ;Node *head = NULL ;if ( head1-data data )head = head1 ;head-next = MergeRecursive(head1-next,head2);elsehead = head2 ;head-next = MergeRecursiv

12、e(head1,head2-next);return head ;184.利用链表实现将两个有序队列A和B合并到有序队列H中,不准增加其他空间。请提供全一点的程序以升序为例:while(a != NULL & b!= NULL)if (a-data data)h-data = a-data;a = a-next;else if (a-data = b-data)h-data = a-data;a = a-next;b = b-next;elseh-data = b-data;b = b-nexth = h-next;if (a = NULL)while (b != NULL)h-data =

13、b-data;h = h-next;b = b-next;else while(a != NULL)h-data = a-next;h = h-next;a = a-next;185单向链表的反转是一个经常被问到的一个面试题,也是一个非常基础的问题。比如一个链表是这样的: 1-2-3-4-5 通过反转后成为5-4-3-2-1。最容易想到的方法遍历一遍链表,利用一个辅助指针,存储遍历过程中当前指针指向的下一个元素,然后将当前节点元素的指针反转后,利用已经存储的指针往后面继续遍历。源代码如下:struct linka int data; linka* next;void reverse(linka

14、*& head) if(head =NULL) return; linka*pre, *cur, *ne; pre=head; cur=head-next; while(cur) ne = cur-next; cur-next = pre; pre = cur; cur = ne; head-next = NULL; head = pre;还有一种利用递归的方法。这种方法的基本思想是在反转当前节点之前先调用递归函数反转后续节点。源代码如下。不过这个方法有一个缺点,就是在反转后的最后一个结点会形成一个环,所以必须将函数的返回的节点的next域置为NULL。因为要改变head指针,所以我用了引用。

15、算法的源代码如下:linka* reverse(linka* p,linka*& head) if(p = NULL | p-next = NULL) head=p; return p; else linka* tmp = reverse(p-next,head); tmp-next = p; return p; 186 对如下双链表typedef struct _nodeint iData;struct _node *pPrev;struct _node *pNext;node;a.请写出代码,将node*n插入到node*p后。b.如果多线程同时访问此链表,需要加锁,请说明以下步骤(a)申

16、请内存给n.(b)N数据初始化。(c)插入注意加锁和解锁的时机。node* insert(node* p, node* n)if (p = NULL) | (n = NULL)return NULL;if (p-pNext != NULL)p-pNext-pPrev = n;n-pPrev = p;n-pNext = p-pNext;p-pNext = n;return n;187、试创建二叉数,并写出常见的几种遍历方式 ?#include stdio.h#include string.h#include #define NULL 0typedef struct BiTNode char da

17、ta; struct BiTNode *lchild,*rchild;BiTNode,*BiTree;BiTree Create(BiTree T) char ch; ch=getchar(); if(ch=0)T=NULL; elseif(!(T=(BiTNode *)malloc(sizeof(BiTNode) printf(Error!);T-data=ch;T-lchild=Create(T-lchild);T-rchild=Create(T-rchild); return T;void Preorder(BiTree T) if(T)printf(%c,T-data);Preorder(T-lchild);Preorder(T-rchild);/先序遍历void Inorder(BiTree T) if(T)Inorder(T-lchild);printf(%c,T-data);Inorder(T-rchild);/中序遍历void Postorder(BiTree T) if(T)Postorder(T-lchild);Postorder(T-rchild);printf(%c,T-data);/后序遍历188、 前序遍历输入,如图所示,写出后序遍历输出结果?例如二叉树:输入序列ABD.EH.CF.I.G.输出结果为:?答案:输出结果为:DHEBIFGCA

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1