51CTO下载-C程序员面试题
更新时间:2023-07-27 16:43:01 阅读量: 实用文档 文档下载
- 51CTO下载推荐度:
- 相关推荐
挺好的 程序员可以用哈
一:推理题。
1、 一个大院子里住了50户人家,每家都养了一条狗,有一天他们接到通知说院子里有狗生病了,并要求所有主人在发现自己家狗生病的当天就要把狗枪杀掉。然而所有主人和他们的狗都不能够离开自己的房子,主人与主人之间也不能通过任何方式进行沟通,他们能做的只是通过窗户观察别人家的狗是否生病从而判断自己的狗病否。(就是说,每个主人只能看出其他49家的狗是不是生病,单独看自己的狗是看不出来的)
第一天没有枪声,第二天还是没有枪声,第三天传出一阵枪声,问有多少条狗被枪杀。
2、有四个人(A,B,C和D)要在一个月黑风高的夜里过一个很长的独木桥。桥只能一次乘载两个人,就是说每次最多两人同时过桥。过桥要用手电筒,而这四个人只有一只手电筒,也就是说两人共用这只手电筒过桥后,其中一人必须带着手电筒返回(没有其他方法),否则其他人就不能再过了。这四个人由于年龄和身体状况的差异,每个人过桥所需要的时间不同:A需要1分钟,B需要2分钟,C需要5分钟,D需要10分钟。由于共用一只手电筒的原因,当两人一同过桥时,过桥的时间是以其中慢的一人为准,比如A和C一起过桥要用5分钟。
现在问:要所有人过桥,最短要多少分钟,如何安排他们的过桥顺序?
二:编程题
1,
用C语言实现一个revert函数,它的功能是将输入的字符串在原串上倒序后返回。
2
用C语言实现函数void * memmove(void *dest,const void *src,size_t n)。memmove函数的功能是拷贝src所指的内存内容前n个字节到dest所指的地址上。
3
用两个栈实现一个队列的功能?要求给出算法和思路!
4
已知链表的头结点head,写一个函数把这个链表逆序 void reverse(node*& head)
5
写一个函数找出一个整数数组中,第二大的数 int find_sec_max( int data[] , int count)
挺好的 程序员可以用哈
已知strcpy的函数原型:char *strcpy(char *strDest, const char *strSrc)其中strDest 是目的字符串,strSrc 是源字符串。不调用C++/C 的字符串库函数,请编写函数 strcpy。
三:找错题
11
void test1()
{
char string[10];
char* str1 = "0123456789";
strcpy( string, str1 );
}
2:
void test2()
{
char string[10], str1[10];
int i;
for(i=0; i<10; i++)
{
str1[i] = 'a';
}
strcpy( string, str1 );
}
3:
void test3(char* str1)
{
char string[10];
if( strlen( str1 ) <= 10 )
{
strcpy( string, str1 );
}
}
试题4:
void GetMemory( char *p )
{
p = (char *) malloc( 100 );
}
挺好的 程序员可以用哈
void Test( void )
{
char *str = NULL;
GetMemory( str );
strcpy( str, "hello world" );
printf( str );
}
试题5:
char *GetMemory( void )
{
char p[] = "hello world";
return p;
}
void Test( void )
{
char *str = NULL;
str = GetMemory();
printf( str );
}
试题6:
void GetMemory( char **p, int num )
{
*p = (char *) malloc( num );
}
void Test( void )
{
char *str = NULL;
GetMemory( &str, 100 );
strcpy( str, "hello" );
printf( str );
}
试题7:
void Test( void )
{
char *str = (char *) malloc( 100 );
strcpy( str, "hello" );
free( str );
... //省略的其它语句
挺好的 程序员可以用哈
}
编程题
答案1
char *revert(char * str)
{
int n=strlen(str);
int i=0;
char c;
for(i=0;i
{
c=str;
str=str[n-i];
str[n-i]=c;
}
return str;
}
答案2
void * memmove(void *dest,const void *src,size_t n)
{
assert((dest!=0)&&(src!=0));
char * temp=(char * )dest;
char * ss=(char * )src;
int i=0;
for(;i{
*temp++=*ss++;
}
return temp;
}
答案3
设2个栈为A,B, 一开始均为空.
入队:
将新元素push入栈A;
出队:
挺好的 程序员可以用哈
1将栈A中所有元素依次pop出并push到栈B;
2将栈B的栈顶元素pop出;
答案4
void reverse(node*& head)
{
if ( (head == 0) || (head->next == 0) ) return;// 边界检测
node* pNext = 0;
node* pPrev = head;// 保存链表头节点
node* pCur = head->next;// 获取当前节点
while (pCur != 0)
{
pNext = pCur->next;// 将下一个节点保存下来
pCur->next = pPrev;// 将当前节点的下一节点置为前节点
pPrev = pCur;// 将当前节点保存为前一节点
pCur = pNext;// 将当前节点置为下一节点
}
}
链表正常的顺序是前一个节点的NEXT指向后一个节点。反转就是要将后一个节点的next指向前一个节点所以pCur->next = pprev; 完成了这一个功能。但这只是完成了两个节点的反转,所以对应的要将当前
节点的next保存下来pNext = pcur->next;,用来当作下一次的当前节点PCur = Pnext;在下一次反转中,当前节点就变成了下一次反转中的前节点。pPrev = pCur;一直到当前节点为NULL,也就是全部转化为止;
6
char *strcpy(char *strDest, const char *strSrc)
{
if ( strDest == NULL || strSrc == NULL)
return NULL ;
if ( strDest == strSrc)
return strDest ;
char *tempptr = strDest ;
while( (*strDest++ = *strSrc++) != ‘/0’)
;
return tempptr ;
}
挺好的 程序员可以用哈
2 分
void strcpy( char *strDest, char *strSrc )
{
while( (*strDest++ = * strSrc++) != ‘\0’ );
}
4 分
void strcpy( char *strDest, const char *strSrc )
//将源字符串加const,表明其为输入参数,加2 分
{
while( (*strDest++ = * strSrc++) != ‘\0’ );
}
7 分
void strcpy(char *strDest, const char *strSrc)
{
//对源地址和目的地址加非0 断言,加3 分
assert( (strDest != NULL) && (strSrc != NULL) );
while( (*strDest++ = * strSrc++) != ‘\0’ );
}
找错题答案:
试题4 传入中GetMemory( char *p )函数的形参为字符串指针,在函数内部修改形参并不能真正的改
变传入形参的值,执行完
char *str = NULL;
GetMemory( str );
后的str 仍然为NULL;
试题5 中
char p[] = "hello world";
return p;
的p[]数组为函数内的局部自动变量,在函数返回后,内存已经被释放。这是许多程序员常犯的错误,
其根源在于不理解变量的生存期。
试题6 的GetMemory 避免了试题4 的问题,传入GetMemory 的参数为字符串指针的指针,但是在
GetMemory 中执行申请内存及赋值语句
*p = (char *) malloc( num );
挺好的 程序员可以用哈
后未判断内存是否申请成功,应加上:
if ( *p == NULL )
{
...//进行申请内存失败处理
}
试题7 存在与试题6 同样的问题,在执行
char *str = (char *) malloc(100);
后未进行内存是否申请成功的判断;另外,在free(str)后未置str 为空,导致可能变成一个“野”指
针,应加上:
str = NULL;
试题6 的Test 函数中也未对malloc 的内存进行释放。
剖析:
试题4~7 考查面试者对内存操作的理解程度,基本功扎实的面试者一般都能正确的回答其中50~60 的
错误。但是要完全解答正确,却也绝非易事。
对内存操作的考查主要集中在:
(1)指针的理解;
(2)变量的生存期及作用范围;
(3)良好的动态内存申请和释放习惯。
正在阅读:
51CTO下载-C程序员面试题07-27
五一兼职招聘02-07
艺术类院校专业介绍10-22
变更许可人被许可人名称备案表05-07
数学北师大版高中必修1东乡一中高一函数综合训练试题04-16
教科版三年级科学上册备课06-08
巴中中学2013届高三毕业班后期10-25
小学语文基础知识:句式转换解题方法与练习02-23
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 程序员
- 试题
- 51CTO
- 下载
- 钻采装备项目可行性研究报告
- 计算机蓝屏解决方法大全(中)
- 财大概率论复习答案练习题解答
- 爱的秘籍:英语经典爱情表白 .
- 原来美国人是这么发短信的
- 2014年中考语文模拟试卷7
- 汇金广场商业街运营管理公司制度
- 连翘物候期的调查报告
- 2020版:膝骨关节炎运动治疗临床实践指南(全文)
- Chap.4离子注入(Ion Implantation
- 尔雅全球变化与地球系统科学课后习题答案
- 国培计划心得体会表
- 激光打标机之光纤激光打标机
- 弘德语言文化培训学校2011年管理岗位培训
- 事业单位年度考核个人总结范文
- OEM买断销售代理合同
- PhotoShop中的色彩混合模式的详细教程
- 外研版七年级上册英语期末考试试题及答案
- 城市规划设计图层图例
- 河南省三门峡市“人保财险杯”2013年高三学生综合能力竞赛英语试题5