范文一:趣味面试题目
【IBM面试题】
村子中有50个人,每人有一条狗。在这50条狗中有病狗(这种病不会传染)。于是人们就要找出病狗。每个人可以观察其他的49条狗,以判断它们是否生病,只有自己的狗不能看。观察后得到的结果不得交流,也不能通知病狗的主人。主人一旦推算出自己家的是病狗就要 枪毙自己的狗,而且每个人只有权利枪毙自己的狗,没有权利打死其他人的狗。第一天,第二天都没有枪响。到了第三天传来一阵枪声,问有几条病狗,如何推算得出?
一个人买一只鸡花了八块钱,后九块钱卖掉,觉得有点亏,十块钱买回来,又十一块钱卖掉,问他赚没赚钱?赚了多少?
在房里有三盏灯,房外有三个开关,在房外看不见房内的情况,你只能进门一次,你用什么方法来区分那个开关控制那一盏灯?
不均匀分布的香,每根香烧完的时间是一个小时,你能用什么方法来确定一段15分钟的时间?
有两根外形、重量、颜色完全一样的长条物体,有一个是铁条,一个是永磁条。不能借用任何工具,判断出来那个是永磁条那个是铁条?
【Google面试题】
美国西雅图市求职顾问刘易斯·林(Lewis Lin)收集了谷歌向应聘者提出过的140个问题,其中15个问题让许多应聘者自叹弗如。
对那些身处经济衰退大潮中的初级经理和软件开发者而言,谷歌是一个避风港。但其招聘门槛较高,首先,谷歌更青睐长春藤联盟(由美国八所知名大学所组 成)的毕业生;其次,即使应聘者已年过30,谷歌也很在意其GPA(平均成绩点数)分数;第三,谷歌需要的是那些想改变世界的人。
而且,即使应聘者满足了上述要求,也有可能在面试中被谷歌提出的问题所难倒。以下是15个让许多应聘者感到自己很愚笨的谷歌面试题。
问题:一辆校车能装下多少个高尔夫球?
应聘职位:产品经理
问题:如果让你清洗西雅图市所有的窗户,你会对此索价多少? 应聘职位:产品经理
问题:在一个重男轻女的国家里,每家每户都想生男孩。若一户人家生了一个女孩,便会再生一个,直到生下的是男孩为止。请问这个国家的男女比例是多少?
应聘职位:产品经理
问题:全世界共有多少位钢琴调音师?
应聘职位:产品经理
问题:下水道井盖为什么是圆的?
应聘职位:软件工程师
问题:为旧金山市设计一个紧急疏散方案。
应聘职位:产品经理
问题:时钟的指针一天内总共会重合多少次?
应聘职位:产品经理
问题:阐释“死牛肉”的意义所在。
应聘职位:软件工程师
问题:一个人开车来到旅馆,变得一无所有。究竟发生了什么事情? 应聘职位:软件工程师
问题:你想知道好友鲍勃是否有你正确的电话号码,但又不能直接问他。你必须在卡片上留言,让伊芙将卡片较交给鲍勃。除了问题以外,你还应该在卡片上写什么,才能既确保鲍勃能看懂留言,又使伊芙看不出卡片上写有你的电话号码。
应聘职位:软件工程师
问题:你是一艘海盗船的船长,你的船员要投票决定如何平分金条。如果与你意见一致的船员数量少于一半,你将被杀死。你应该如何提议分配金条,才能既分得较多赃物,又能活下来?
应聘职位:工程经理
问题:你有8个大小一样的球,其中7个重量相同,只有一个略重一些。给你一个天平,而且只准称两次,如何找出重量不同的那个球?
应聘职位:产品经理
问题:你在一幢100层高的大楼中,给了你两个鸡蛋。鸡蛋有时非常易碎,有时又异常坚韧。这意味着,如果在第1层扔下鸡蛋,鸡蛋或 许会碎裂,而如果是从第100层扔下鸡蛋,鸡蛋或许安然无恙。这两只鸡蛋一模一样。你需要计算出,最高从哪层楼扔下时,鸡蛋不会碎。问题是,你需要扔多少 次鸡蛋才能算出该楼层。整个过程中,你只允许打碎两个鸡蛋。
应聘职位:产品经理
问题:向你8岁的侄子或外甥解释什么是数据库,只能用三个句子。 应聘职位:产品经理
问题:你缩小到只有一枚五分硬币那么高,你的质量也成比例缩小以保持原有密度不变。随后你被扔到一个空的玻璃搅拌器里,搅拌刀片将在60秒后开始运转,你该怎么办?
应聘职位:产品经理
参见:http://www.cnbeta.com/articles/97168.htm
【微软面试题】
第一组
1.烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有若干条材质相同的绳子,问如何用烧绳的方法来计时一个小时十五分钟呢?
2.你有一桶果冻,其中有黄色、绿色、红色三种,闭上眼睛抓取同种颜色的两个。抓取多少个就可以确定你肯定有两个同一颜色的果冻?
3.如果你有无穷多的水,一个3公升的提捅,一个5公升的提捅,两只提捅形状上下都不均匀,问你如何才能准确称出4公升的水?
4.一个岔路口分别通向诚实国和说谎国。来了两个人,已知一个是诚实国的,另一个是说谎国的。诚实国永远说实话,说谎国永远说谎话。现在你要去说谎国,但不知道应该走哪条路,需要问这两个人。请问应该怎么问?
5.12个球一个天平,现知道只有一个和其它的重量不同,问怎样称才能用三次就找到那个球。13个呢?(注意此题并未说明那个球的重量是轻是重,所以需要仔细考虑)
6.在9个点上画10条直线,要求每条直线上至少有三个点?
7.在一天的24小时之中,时钟的时针、分针和秒针完全重合在一起的时候有几次?都分别是什么时间?你怎样算出来的?
8.怎么样种植4棵树木,使其中任意两棵树的距离相等?
第二组
1.为什么下水道的盖子是圆的?
2.中国有多少辆汽车?
3.将汽车钥匙插入车门,向哪个方向旋转就可以打开车锁?
4.如果你要去掉中国的34个省(含自治区、直辖市和港澳特区及台湾省)中的任何一个,你会去掉哪一个,为什么?
5.多少个加油站才能满足中国的所有汽车?
6.想象你站在镜子前,请问,为什么镜子中的影象可以颠倒左右,却不能颠倒上下?
7.为什么在任何旅馆里,你打开热水,热水都会瞬间倾泻而出?
8.你怎样将Excel的用法解释给你的奶奶听?
9.你怎样重新改进和设计一个ATM银行自动取款机?
10.如果你不得不重新学习一种新的计算机语言,你打算怎样着手来开始?
11.如果你的生涯规划中打算在5年内受到奖励,那获取该项奖励的动机是什么?观众是谁?
12.如果微软告诉你,我们打算投资五百万美元来启动你的投资计划,你将开始什么样商业计划?为什么?
13.如果你能够将全世界的电脑厂商集合在一个办公室里,然后告诉他们将被强迫做一件事,那件事将是什么?
第三组
1.你让工人为你工作7天,回报是一根金条,这个金条平分成相连的7段,你必须在每天结束的时候给他们一段金条。如果只允许你两次把金条弄断,你如何给你的工人付费?
2.有一辆火车以每小时15公里的速度离开北京直奔广州,同时另一辆火车每小时20公里的速度从广州开往北京。如果有一只鸟,以 30公里每小时的速度和两辆火车同时启动,从北京出发,碰到另一辆车后就向相反的方向返回去飞,就这样依次在两辆火车之间来回地飞,直到两辆火车相遇。请 问,这只鸟共飞行了多长的距离?
3.你有四个装药丸的罐子,每个药丸都有一定的重量,被污染的药丸是没被污染的药丸的重量+1。只称量一次,如何判断哪个罐子的药被污染了?
4.门外三个开关分别对应室内三盏灯,线路良好,在门外控制开关时候不能看到室内灯的情况,现在只允许进门一次,确定开关和灯的对应关系?
5.人民币为什么只有1、2、5、10的面值?
6.你有两个罐子以及50个红色弹球和50个蓝色弹球,随机选出一个罐子, 随机选出一个弹球放入罐子,怎么给出红色弹球最大的选中机会?在你的计划里,得到红球的几率是多少?
7.给你两颗6面色子,可以在它们各个面上刻上0-9任意一个数字,要求能够用它们拼出任意一年中的日期数值
第四组
第一题 . 五个海盗抢到了100颗宝石,每一颗都一样大小和价值连城。他们决定这么分:
抽签决定自己的号码(1、2、3、4、5)
首先,由1号提出分配方案,然后大家表决,当且仅当超过半数的人同意时,按照他的方案
进行分配,否则将被扔进大海喂鲨鱼
如果1号死后,再由2号提出分配方案,然后剩下的4人进行表决,当且仅当超过半数的人同
意时,按照他的方案进行分配,否则将被扔入大海喂鲨鱼
依此类推
条件:每个海盗都是很聪明的人,都能很理智地做出判断,从而做出选择。 问题:第一个海盗提出怎样的分配方案才能使自己的收益最大化? 第二题 . 一道关于飞机加油的问题,已知:
每个飞机只有一个油箱,
飞机之间可以相互加油(注意是相互,没有加油机)
一箱油可供一架飞机绕地球飞半圈,
问题:
为使至少一架飞机绕地球一圈回到起飞时的飞机场,至少需要出动几架飞机?(所有飞机从同一机场起飞,而且必须安全返回机场,不允许中途降落,中间没有飞机场)
第三题. 汽车加油问题
一辆载油500升的汽车从A开往1000公里外的B,已知汽车每公里耗油量为1升,A处有无穷多的油,其他任何地点都没有油,但该车可以在任何地点存放油以备中转,问从A到B最少需要多少油
第四题. 掷杯问题
一种杯子,若在第N层被摔破,则在任何比N高的楼层均会破,若在第M层不破,则在任何比M低的楼层均会破,给你两个这样的杯子,让你在100层高的楼层中测试,要求用最少的测试次数找出恰巧会使杯子破碎的楼层。 第五题. 推理游戏
教授选出两个从2到9的数,把它们的和告诉学生甲,把它们的积告诉学生乙,让他们轮流猜这两个数
甲说:“我猜不出”
乙说:“我猜不出”
甲说:“我猜到了”
乙说:“我也猜到了”
问这两个数是多少
第六题. 病狗问题
一个住宅区内有100户人家,每户人家养一条狗,每天傍晚大家都在同一个地方遛狗。已知这些狗中有一部分病狗,由于某种原因,狗的 主人无法判断自己的狗是否是病狗,却能够分辨其他的狗是否有病,现在,上级传来通知,要求住户处决这些病狗,并且不允许指认他人的狗是病狗(就是只能判断 自己的),过了7天之后,所有的病狗都被处决了,问,一共有几只病狗?为什么?
第七题. U2合唱团在17分钟内得赶到演唱会场,途中必需跨过一座桥,四个人从桥的同一端出发,你得帮助他们到达另一端,天色很暗,而他们只有一只手电筒。一次同 时最多可以有两人一起过桥,而过桥的时候必须持有手电筒,所以就得有人把手电筒带来带去,来回桥两端。手电筒是不能用丢的方式来传递的。四个人的步行速度 各不同,若两人同行则以较慢者的速度为准。BONO需花1分钟过桥,EDGE需花2分钟过桥,ADAM需花5分钟过桥,LARRY需花10分钟过桥,他们 要如何在17分钟内过桥呢?
第八题. 监狱里有100个房间,每个房间内有一囚犯。一天,监狱长说,你们狱房外有一电灯,你们在放风时可以控制这个电灯(熄或亮)。每天只能有一个人出来放风, 并且防风是随机的。如果在有限时间内,你们中的某人能对我说:“我敢保证,现在每个人都已经至少放过一次风了。”我就放了你们!问囚犯们要采取什么策略才 能被监狱长放掉?如果采用了这种策略,大致多久他们可以被释放?
第五组
1.某手机厂家由于设计失误,有可能造成电池寿命比原来设计的寿命短一半(不是冲放电时间),解决方案就是免费更换电池或给50元购买该厂家新手机的折换券。请给所有已购买的用户写信告诉解决方案。
2.一高层领导在参观某博物馆时,向博物馆馆员小王要了一块明代的城砖作为纪念,按国家规定,任何人不得将博物馆收藏品变为私有。博物馆馆长需要如何写信给这位领导,将城砖取回。
3.营业员小姐由于工作失误,将2万元的笔记本电脑以1.2万元错卖给李先生,王小姐的经理怎么写信给李先生试图将钱要回来?
4.给你一款新研制的手机,如果你是测试组的组长,你会如何测试?
5.如何为函数int atoi(const char * pstr)编写测试向量?
第六组
1.链表和数组的区别在哪里?
2.编写实现链表排序的一种算法。说明为什么你会选择用这样的方法?
3.编写实现数组排序的一种算法。说明为什么你会选择用这样的方法?
4.请编写能直接实现char * strcpy(char * pstrDest,const char * pstrSource)函数功能的代码。
5.编写反转字符串的程序,要求优化速度、优化空间。
6.在链表里如何发现循环链接?
7.给出洗牌的一个算法,并将洗好的牌存储在一个整形数组里。
8.写一个函数,检查字符是否是整数,如果是,返回其整数值。(或者:怎样只用4行代码
9.给出一个函数来输出一个字符串的所有排列。
10.请编写实现void * malloc(int)内存分配函数功能一样的代码。
11.给出一个函数来复制两个字符串A和B。字符串A的后几个字节和字符串B的前几个字节重叠。
12.怎样编写一个程序,把一个有序整数数组放到二叉树中?
13.怎样从顶部开始逐层打印二叉树结点数据?请编程。
14.怎样把一个链表掉个顺序(也就是反序,注意链表的边界条件并考虑空链表)? --
15.请编写能直接实现int atoi(const char * pstr)函数功能的代码
参见:http://wanglei.javaeye.com/blog/60868
网上参考
世界500强面试题(精彩选载)——http://edu.sina.com.cn/book/questions.html 微软经典面试题(附答案)——http://office.icxo.com/htmlnews/2006/08/08/895802.htm Google 的疯狂面试题——
范文二:面试趣味题目(含答案)!
面试趣味题目(含答案)
第一组
1.烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有若干条材质相同的绳子,问如何用烧绳的方法来计时一个小时十五分钟呢?
2.你有一桶果冻,其中有黄色、绿色、红色三种,闭上眼睛抓取同种颜色的两个。抓取多少个就可以确定你肯定有两个同一颜色的果冻?
3.如果你有无穷多的水,一个3公升的提捅,一个5公升的提捅,两只提捅形状上下都不均匀,问你如何才能准确称出4公升的水?
4.一个岔路口分别通向诚实国和说谎国。来了两个人,已知一个是诚实国的,另一个是说谎国的。诚实国永远说实话,说谎国永远说谎话。现在你要去说谎国,但不知道应该走哪条路,需要问这两个人。请问应该怎么问?
5.12个球一个天平,现知道只有一个和其它的重量不同,问怎样称才能用三次就找到那个球。13个呢?(注意此题并未说明那个球的重量是轻是重,所以需要仔细考虑)
6.在9个点上画10条直线,要求每条直线上至少有三个点?
7.在一天的24小时之中,时钟的时针、分针和秒针完全重合在一起的时候有几次?都分别是什么时间?你怎样算出来的?
8.怎么样种植4棵树木,使其中任意两棵树的距离相等?
第二组
1.为什么下水道的盖子是圆的?
2.中国有多少辆汽车?
3.将汽车钥匙插入车门,向哪个方向旋转就可以打开车锁?
4.如果你要去掉中国的34个省(含自治区、直辖市和港澳特区及台湾省)中的任何一个,你会去掉哪一个,为什么?
5.多少个加油站才能满足中国的所有汽车?
6.想象你站在镜子前,请问,为什么镜子中的影象可以颠倒左右,却不能颠倒上下?
7.为什么在任何旅馆里,你打开热水,热水都会瞬间倾泻而出?
8.你怎样将Excel的用法解释给你的奶奶听?
9.你怎样重新改进和设计一个ATM银行自动取款机?
10.如果你不得不重新学习一种新的计算机语言,你打算怎样着手来开始?
11.如果你的生涯规划中打算在5年内受到奖励,那获取该项奖励的动机是什么?观众是谁?
12.如果微软告诉你,我们打算投资五百万美元来启动你的投资计划,你将开始什么样商业计划?为什么?
13.如果你能够将全世界的电脑厂商集合在一个办公室里,然后告诉他们将被强迫做一件事,那件事将是什么?
第三组
1.你让工人为你工作7天,回报是一根金条,这个金条平分成相连的7段,你必须在每天结束的时候给他们一段金条。如果只允许你两次把金条弄断,你如何给你的工人付费?
2.有一辆火车以每小时15公里的速度离开北京直奔广州,同时另一辆火车每小时20公里的速度从广州开往北京。如果有一只鸟,以30公里每小时的速度和两辆火车同时启动,从北京出发,碰到另一辆车后就向相反的方向返回去飞,就这样依次在两辆火车之间来回地飞,直到两辆火车相遇。请问,这只鸟共飞行了多长的距离?
3.你有四个装药丸的罐子,每个药丸都有一定的重量,被污染的药丸是没被污染的药丸的重量+1。只称量一次,如何判断哪个罐子的药被污染了?
4.门外三个开关分别对应室内三盏灯,线路良好,在门外控制开关时候不能看到室内灯的情况,现在只允许进门一次,确定开关和灯的对应关系?
5.人民币为什么只有1、2、5、10的面值?
6.你有两个罐子以及50个红色弹球和50个蓝色弹球,随机选出一个罐子, 随机选出一个弹球放入罐子,怎么给出红色弹球最大的选中机会?在你的计划里,得到红球的几率是多少?
7.给你两颗6面色子,可以在它们各个面上刻上0-9任意一个数字,要求能够用它们拼出任意一年中的日期数值
第四组
第一题 . 五个海盗抢到了100颗宝石,每一颗都一样大小和价值连城。他们决定这么分:
抽签决定自己的号码(1、2、3、4、5)
首先,由1号提出分配方案,然后大家表决,当且仅当超过半数的人同意时,按照他的方案
进行分配,否则将被扔进大海喂鲨鱼
如果1号死后,再由2号提出分配方案,然后剩下的4人进行表决,当且仅当超过半数的人同
意时,按照他的方案进行分配,否则将被扔入大海喂鲨鱼
依此类推
条件:每个海盗都是很聪明的人,都能很理智地做出判断,从而做出选择。
问题:第一个海盗提出怎样的分配方案才能使自己的收益最大化?
第二题 . 一道关于飞机加油的问题,已知:
每个飞机只有一个油箱,
飞机之间可以相互加油(注意是相互,没有加油机)
一箱油可供一架飞机绕地球飞半圈,
问题:
为使至少一架飞机绕地球一圈回到起飞时的飞机场,至少需要出动几架飞机?(所有飞机从同一机场起飞,而且必须安全返回机场,不允许中途降落,中间没有飞机场)第三题. 汽车加油问题
一辆载油500升的汽车从A开往1000公里外的B,已知汽车每公里耗油量为1升,A处有无穷多的油,其他任何地点都没有油,但该车可以在任何地点存放油以备中转,问从A到B最少需要多少油
第四题. 掷杯问题
一种杯子,若在第N层被摔破,则在任何比N高的楼层均会破,若在第M层不破,则在任何比M低的楼层均会破,给你两个这样的杯子,让你在100层高的楼层中测试,要求用最少的测试次数找出恰巧会使杯子破碎的楼层。
第五题. 推理游戏
教授选出两个从2到9的数,把它们的和告诉学生甲,把它们的积告诉学生乙,让他们轮流猜这两个数
甲说:“我猜不出”
乙说:“我猜不出”
甲说:“我猜到了”
乙说:“我也猜到了”
问这两个数是多少
第六题. 病狗问题
一个住宅区内有100户人家,每户人家养一条狗,每天傍晚大家都在同一个地方遛狗。已知这些狗中有一部分病狗,由于某种原因,狗的主人无法判断自己的狗是否是病狗,却能够分辨其他的狗是否有病,现在,上级传来通知,要求住户处决这些病狗,并且不允许指认他人的狗是病狗(就是只能判断自己的),过了7天之后,所有的病狗都被处决了,问,一共有几只病狗?为什么?
第七题. U2合唱团在17分钟内得赶到演唱会场,途中必需跨过一座桥,四个人从桥的同一端出发,你得帮助他们到达另一端,天色很暗,而他们只有一只手电筒。一次同时最多可以有两人一起过桥,而过桥的时候必须持有手电筒,所以就得有人把手电筒带来带去,来回桥两端。手电筒是不能用丢的方式来传递的。四个人的步行速度各不同,若两人同行则以较慢者的速度为准。BONO需花1分钟过桥,EDGE需花2分钟过桥,ADAM需花5分钟过桥,LARRY需花10分钟过桥,他们要如何在17分钟内过桥呢?
第八题. 监狱里有100个房间,每个房间内有一囚犯。一天,监狱长说,你们狱房外有一电灯,你们在放风时可以控制这个电灯(熄或亮)。每天只能有一个人出来放风,并且防风是随机的。如果在有限时间内,你们中的某人能对我说:“我敢保证,现在每个人都已经至少放过一次风了。”我就放了你们!问囚犯们要采取什么策略才能被监狱长放掉?如果采用了这种策略,大致多久他们可以被释放?
以下是答案:
第一组题答案:
1)三根绳,第一根点燃两端,第二根点燃一端,第三根不点
第一根绳烧完(30分钟)后,点燃第二根绳的另一端,第二根绳烧完(45分钟)后,点燃第三根绳子两端,第三根绳烧完(1小时15分)后,计时完成
2)根据抽屉原理,4个
3)3升装满;3升-〉5升(全注入);3升装满;3升-〉5升(剩1升);5升倒掉;3升-〉5升(注入1升);3升装满;3升-〉5升;完成(另:可用回溯法编程求解)
4)问其中一人:另外一个人会说哪一条路是通往诚实国的?回答者所指的那条路必然是通往说谎国的。
5)12个球:
第一次:4,4 如果平了:
那么剩下的球中取3放左边,取3个好球放右边,称:
如果左边重,那么取两个球称一下,哪个重哪个是次品,平的话第三个重,是次品,轻的话同理
如果平了,那么剩下一个次品,还可根据需要称出次品比正品轻或者重
如果不平:
那么不妨设左边重右边轻,为了便于说明,将左边4颗称为重球,右边4颗称为轻球,剩下4颗称为好球
取重球2颗,轻球2颗放在左侧,右侧放3颗好球和一颗轻球
如果左边重
称那两颗重球,重的一个次品,平的话右边轻球次品
如果右边重
称左边两颗轻球,轻的一个次品
如果平
称剩下两颗重球,重的一个次品,平的话剩下那颗轻球次品
13个球:
第一次:4,4,如果平了
剩5颗球用上面的方法仍旧能找出次品,只是不能知道次品是重是轻
如果不平,同上
6)
o o o
o o o
o o o
7)
23次,因为分针要转24圈,时针才能转1圈,而分针和时针重合两次之间的间隔显然> 1小时,它们有23次重合机会,每次重合中秒针有一次重合机会,所以是23次
重合时间可以对照手表求出,也可列方程求出
8)
在地球表面种树,做一个地球内接的正四面体,内接点即为所求
第二组 无标准答案
第三组
1. 分成1,2,4三段,第一天给1,第二天给2取回1,第3天给1,第4天给4取回1、2,第5天给1,第6天给2取回1,第七天给1
2. 求出火车相遇时间,鸟速乘以时间就是鸟飞行的距离
3. 四个罐子中分别取1,2,3,4颗药丸,称出比正常重多少,即可判断出那个罐子的药被污染
4. 三个开关分别:关,开,开10分钟,然后进屋,暗且凉的为开关1控制的灯,亮的为开关2控制的灯,暗且热的为开关3控制的灯
5. 因为可以用1,2,5,10组合成任何需要的货币值,日常习惯为10进制
6. 题意不理解...*_*
7. 012345 0126(9)78
第四组 都是很难的题目
第一题:97 0 1 2 0 或者 97 0 1 0 2 (提示:可用逆推法求出)
第二题:3架飞机5架次,飞法:
ABC 3架同时起飞,1/8处,C给AB加满油,C返航,1/4处,B给A加满油,B返航,A到达1/2处,C从机场往另一方向起飞,3/4处,C同已经空油箱的A平分剩余油量,同时B从机场起飞,AC到7/8处同B平分剩余油量,刚好3架飞机同时返航。所以是3架飞机5架次。第三题:需要建立数学模型
(提示,严格证明该模型最优比较麻烦,但确实可证,大胆猜想是解题关键)
题目可归结为求数列 an=500/(2n+1) n=0,1,2,3......的和Sn什么时候大于等于1000,解得n> 6
当n=6时,S6=977.57
所以第一个中转点离起始位置距离为1000-977.57=22.43公里
所以第一次中转之前共耗油 22.43*(2*7+1)=336.50升
此后每次中转耗油500升
所以总耗油量为7*500+336.50=3836.50升
第四题:需要建立数学模型
题目可归结为求自然数列的和S什么时候大于等于100,解得n> 13
第一个杯子可能的投掷楼层分别为:14,27,39,50,60,69,77,84,90,95,99,100
第五题:3和4(可严格证明)
设两个数为n1,n2,n1> =n2,甲听到的数为n=n1+n2,乙听到的数为m=n1*n2
证明n1=3,n2=4是唯一解
证明:要证以上命题为真,不妨先证n=7
1)必要性:
i) n> 5 是显然的,因为n
ii) n> 6 因为如果n=6的话,那么甲虽然不知道(不确定2+4还是3+3)但是无论是2,4还是3,3乙都不可能说不知道(m=8或者m=9的话乙说不知道是没有道理的)
iii) n =8的话,就可以将n分解成 n=4+x 和 n=6+(x-2),那么m可以是4x也可以是6(x-2)而4x=6(x-2)的必要条件是x=6即n=10,那样n又可以分解成8+2,所以总之当n> =8时,n至少可以分解成两种不同的合数之和,这样乙说不知道的时候,甲就没有理由马上说知道。
以上证明了必要性
2)充分性
当n=7时,n可以分解成2+5或3+4
显然2+5不符合题意,舍去,容易判断出3+4符合题意,m=12,证毕
于是得到n=7 m=12 n1=3 n2=4是唯一解。第六题:7只(数学归纳法证明)
1)若只有1只病狗,因为病狗主人看不到有其他病狗,必然会知道自己的狗是病狗(前提是一定存在病狗),所以他会在第一天把病狗处决。
2)设有k只病狗的话,会在第k天被处决,那么,如果有k+1只,病狗的主人只会看到k只病狗,而第k天没有人处决病狗,病狗主人就会在第k+1天知道自己的狗是病狗,于是病狗在第k+1天被处决
3)由1)2)得,若有n只病狗,必然在第n天被处决
第七题:(提示:可用图论方法解决)
BONO&EDGE过(2分),BONO将手电带回(1分),ADAM&LARRY过(10分),EDGE将手电带回(2分),BONO&EDGE过(2分) 2+1+10+2+2=17分钟
第八题: 约定好一个人作为报告人(可以是第一个放风的人) 规则如下: 1、报告人放风的时候开灯并数开灯次数 2、其他人第一次遇到开着灯放风时,将灯关闭 3、当报告人第100次开灯的时候,去向监狱长报告,要求监狱长放人...... 按照概率大约30年后(10000天)他们可以被释放
范文三:面试趣味题目(含答案)
面试趣味题目(含答案)
第一组
1. 烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有若干条材质相同的绳子,问如何用烧绳的方法来计时一个小时十五分钟呢?
2. 你有一桶果冻,其中有黄色、绿色、红色三种,闭上眼睛抓取同种颜色的两个。抓取多少个就可以确定你肯定有两个同一颜色的果冻?
3. 如果你有无穷多的水,一个3公升的提捅,一个5公升的提捅,两只提捅形状上下都不均匀,问你如何才能准确称出4公升的水?
4. 一个岔路口分别通向诚实国和说谎国。来了两个人,已知一个是诚实国的,另一个是说谎国的。诚实国永远说实话,说谎国永远说谎话。现在你要去说谎国,但不知道应该走哪条路,需要问这两个人。请问应该怎么问?
5.12个球一个天平,现知道只有一个和其它的重量不同,问怎样称才能用三次就找到那个球。13个呢?(注意此题并未说明那个球的重量是轻是重,所以需要仔细考虑)
6. 在9个点上画10条直线,要求每条直线上至少有三个点?
7. 在一天的24小时之中,时钟的时针、分针和秒针完全重合在一起的时候有几次? 都分别是什么时间? 你怎样算出来的?
8. 怎么样种植4棵树木,使其中任意两棵树的距离相等?
第二组
1. 为什么下水道的盖子是圆的?
2. 中国有多少辆汽车?
3. 将汽车钥匙插入车门,向哪个方向旋转就可以打开车锁?
4. 如果你要去掉中国的34个省(含自治区、直辖市和港澳特区及台湾省) 中的任何一个,你会去掉哪一个,为什么?
5. 多少个加油站才能满足中国的所有汽车?
6. 想象你站在镜子前,请问,为什么镜子中的影象可以颠倒左右,却不能颠倒上下?
7. 为什么在任何旅馆里,你打开热水,热水都会瞬间倾泻而出?
8. 你怎样将Excel 的用法解释给你的奶奶听?
9. 你怎样重新改进和设计一个ATM 银行自动取款机?
10. 如果你不得不重新学习一种新的计算机语言,你打算怎样着手来开始?
11. 如果你的生涯规划中打算在5年内受到奖励,那获取该项奖励的动机是什么? 观众是谁?
12. 如果微软告诉你,我们打算投资五百万美元来启动你的投资计划,你将开始什么样商业计划? 为什么?
13. 如果你能够将全世界的电脑厂商集合在一个办公室里,然后告诉他们将被强迫做一件事,那件事将是什么?
第三组
1. 你让工人为你工作7天,回报是一根金条,这个金条平分成相连的7段,你必须在每天结束的时候给他们一段金条。如果只允许你两次把金条弄断,你如何给你的工人付费?
2. 有一辆火车以每小时15公里的速度离开北京直奔广州,同时另一辆火车每小时20公里的速度从广州开往北京。如果有一只鸟,以30公里每小时的速度和两辆火车同时启动,从北京出发,碰到另一辆车后就向相反的方向返回去飞,就这样依次在两辆火车之间来回地飞,直到两辆火车相遇。请问,这只鸟共飞行了多长的距离?
3. 你有四个装药丸的罐子,每个药丸都有一定的重量,被污染的药丸是没被污染的药丸的重量+1。只称量一次,如何判断哪个罐子的药被污染了?
4. 门外三个开关分别对应室内三盏灯,线路良好,在门外控制开关时候不能看到室内灯的情况,现在只允许进门一次,确定开关和灯的对应关系?
5. 人民币为什么只有1、2、5、10的面值?
6. 你有两个罐子以及50个红色弹球和50个蓝色弹球,随机选出一个罐子, 随机选出一个弹球放入罐子,怎么给出红色弹球最大的选中机会? 在你的计划里,得到红球的几率是多少?
7. 给你两颗6面色子,可以在它们各个面上刻上0-9任意一个数字,要求能够用它们拼出任意一年中的日期数值
第四组
第一题 . 五个海盗抢到了100颗宝石,每一颗都一样大小和价值连城。他们决定这么分:
抽签决定自己的号码(1、2、3、4、5)
首先,由1号提出分配方案,然后大家表决,当且仅当超过半数的人同意时,按照他的方案
进行分配,否则将被扔进大海喂鲨鱼
如果1号死后,再由2号提出分配方案,然后剩下的4人进行表决,当且仅当超过半数的人同
意时,按照他的方案进行分配,否则将被扔入大海喂鲨鱼
依此类推
条件:每个海盗都是很聪明的人,都能很理智地做出判断,从而做出选择。
问题:第一个海盗提出怎样的分配方案才能使自己的收益最大化?
第二题 . 一道关于飞机加油的问题,已知:
每个飞机只有一个油箱,
飞机之间可以相互加油(注意是相互,没有加油机)
一箱油可供一架飞机绕地球飞半圈,
问题:
为使至少一架飞机绕地球一圈回到起飞时的飞机场,至少需要出动几架飞机?(所有飞机从同一机场起飞,而且必须安全返回机场,不允许中途降落,中间没有飞机场) 第三题. 汽车加油问题
一辆载油500升的汽车从A 开往1000公里外的B ,已知汽车每公里耗油量为1升,A 处有无穷多的油,其他任何地点都没有油,但该车可以在任何地点存放油以备中转,问从A 到B 最少需要多少油
第四题. 掷杯问题
一种杯子,若在第N 层被摔破,则在任何比N 高的楼层均会破,若在第M 层不破,则在任何比M 低的楼层均会破,给你两个这样的杯子,让你在100层高的楼层中测试,要求用最少的测试次数找出恰巧会使杯子破碎的楼层。
第五题. 推理游戏
教授选出两个从2到9的数,把它们的和告诉学生甲,把它们的积告诉学生乙,让他们轮流猜这两个数
甲说:“我猜不出”
乙说:“我猜不出”
甲说:“我猜到了”
乙说:“我也猜到了”
问这两个数是多少
第六题. 病狗问题
一个住宅区内有100户人家,每户人家养一条狗,每天傍晚大家都在同一个地方遛狗。已知这些狗中有一部分病狗,由于某种原因,狗的主人无法判断自己的狗是否是病狗,却能够分辨其他的狗是否有病,现在,上级传来通知,要求住户处决这些病狗,并且不允许指认他人的狗是病狗(就是只能判断自己的) ,过了7天之后,所有的病狗都被处决了,问,一共有几只病狗? 为什么?
第七题. U2合唱团在17分钟内得赶到演唱会场,途中必需跨过一座桥,四个人从桥的同一端出发,你得帮助他们到达另一端,天色很暗,而他们只有一只手电筒。一次同时最多可以有两人一起过桥,而过桥的时候必须持有手电筒,所以就得有人把手电筒带来带去,来回桥两端。手电筒是不能用丢的方式来传递的。四个人的步行速度各不同,若两人同行则以较慢者的速度为准。BONO 需花1分钟过桥,EDGE 需花2分钟过桥,ADAM 需花5分钟过桥,LARRY 需花10分钟过桥, 他们要如何在17分钟内过桥呢?
第八题. 监狱里有100个房间,每个房间内有一囚犯。一天,监狱长说,你们狱房外有一电灯,你们在放风时可以控制这个电灯(熄或亮) 。每天只能有一个人出来放风,并且防风是随机的。如果在有限时间内,你们中的某人能对我说:“我敢保证,现在每个人都已经至少放过一次风了。”我就放了你们! 问囚犯们要采取什么策略才能被监狱长放掉? 如果采用了这种策略,大致多久他们可以被释放?
以下是答案:
第一组题答案:
1) 三根绳,第一根点燃两端,第二根点燃一端,第三根不点
第一根绳烧完(30分钟) 后,点燃第二根绳的另一端,第二根绳烧完(45分钟) 后,点燃第三根绳子两端,第三根绳烧完(1小时15分) 后,计时完成
2) 根据抽屉原理,4个
3)3升装满;3升-〉5升(全注入);3升装满;3升-〉5升(剩1升);5升倒掉;3升-〉5升(注入1升);3升装满;3升-〉5升; 完成(另:可用回溯法编程求解)
4) 问其中一人:另外一个人会说哪一条路是通往诚实国的? 回答者所指的那条路必然是通往说谎国的。
5)12个球:
第一次:4,4 如果平了:
那么剩下的球中取3放左边, 取3个好球放右边,称:
如果左边重,那么取两个球称一下,哪个重哪个是次品,平的话第三个重,是次品,轻的话同理
如果平了,那么剩下一个次品,还可根据需要称出次品比正品轻或者重
如果不平:
那么不妨设左边重右边轻,为了便于说明,将左边4颗称为重球,右边4颗称为轻球,剩下4颗称为好球
取重球2颗,轻球2颗放在左侧,右侧放3颗好球和一颗轻球
如果左边重
称那两颗重球,重的一个次品,平的话右边轻球次品
如果右边重
称左边两颗轻球,轻的一个次品
如果平
称剩下两颗重球,重的一个次品,平的话剩下那颗轻球次品
13个球:
第一次:4,4,如果平了
剩5颗球用上面的方法仍旧能找出次品,只是不能知道次品是重是轻
如果不平,同上
6)
o o o
o o o
o o o
7)
23次,因为分针要转24圈,时针才能转1圈,而分针和时针重合两次之间的间隔显然> 1小时,它们有23次重合机会,每次重合中秒针有一次重合机会,所以是23次
重合时间可以对照手表求出,也可列方程求出
8)
在地球表面种树,做一个地球内接的正四面体,内接点即为所求
第二组 无标准答案
第三组
1. 分成1,2,4三段,第一天给1,第二天给2取回1,第3天给1,第4天给4取回1、2,第5天给1,第6天给2取回1,第七天给1
2. 求出火车相遇时间,鸟速乘以时间就是鸟飞行的距离
3. 四个罐子中分别取1,2,3,4颗药丸,称出比正常重多少,即可判断出那个罐子的药被污染
4. 三个开关分别:关,开,开10分钟,然后进屋,暗且凉的为开关1控制的灯,亮的为开关2控制的灯,暗且热的为开关3控制的灯
5. 因为可以用1,2,5,10组合成任何需要的货币值,日常习惯为10进制
6. 题意不理解...*_*
7. 012345 0126(9)78
第四组 都是很难的题目
第一题:97 0 1 2 0 或者 97 0 1 0 2 (提示:可用逆推法求出)
第二题:3架飞机5架次,飞法:
ABC 3架同时起飞,1/8处,C 给AB 加满油,C 返航,1/4处,B 给A 加满油,B 返航,A 到达1/2处,C 从机场往另一方向起飞,3/4处,C 同已经空油箱的A 平分剩余油量,同时B 从机场起飞,AC 到7/8处同B 平分剩余油量,刚好3架飞机同时返航。所以是3架飞机5架次。第三题:需要建立数学模型
(提示,严格证明该模型最优比较麻烦,但确实可证,大胆猜想是解题关键)
题目可归结为求数列 an=500/(2n+1) n=0,1,2,3......的和Sn 什么时候大于等于1000, 解得n> 6
当n=6时,S6=977.57
所以第一个中转点离起始位置距离为1000-977.57=22.43公里
所以第一次中转之前共耗油 22.43*(2*7+1)=336.50升
此后每次中转耗油500升
所以总耗油量为7*500+336.50=3836.50升
第四题:需要建立数学模型
题目可归结为求自然数列的和S 什么时候大于等于100,解得n> 13
第一个杯子可能的投掷楼层分别为:14,27,39,50,60,69,77,84,90,95,99,100
第五题:3和4(可严格证明)
设两个数为n1,n2,n1> =n2,甲听到的数为n=n1+n2,乙听到的数为m=n1*n2
证明n1=3,n2=4是唯一解
证明:要证以上命题为真,不妨先证n=7
1) 必要性:
i) n> 5 是显然的,因为n <>
ii) n> 6 因为如果n=6的话,那么甲虽然不知道(不确定2+4还是3+3)但是无论是2,4还是3,3乙都不可能说不知道(m=8或者m=9的话乙说不知道是没有道理的)
iii) n <8 因为如果n=""> =8的话,就可以将n 分解成 n=4+x 和 n=6+(x-2),那么m 可以是4x 也可以是6(x-2)而4x=6(x-2)的必要条件是x=6即n=10,那样n 又可以分解成8+2,所以总之当n> =8时,n 至少可以分解成两种不同的合数之和,这样乙说不知道的时候,甲就没有理由马上说知道。
以上证明了必要性
2) 充分性
当n=7时,n 可以分解成2+5或3+4
显然2+5不符合题意,舍去,容易判断出3+4符合题意,m=12,证毕
于是得到n=7 m=12 n1=3 n2=4是唯一解。第六题:7只(数学归纳法证明)
1) 若只有1只病狗,因为病狗主人看不到有其他病狗,必然会知道自己的狗是病狗(前提是一定存在病狗) ,所以他会在第一天把病狗处决。
2) 设有k 只病狗的话,会在第k 天被处决,那么,如果有k+1只,病狗的主人只会看到k 只病狗,而第k 天没有人处决病狗,病狗主人就会在第k+1天知道自己的狗是病狗,于是病狗在第k+1天被处决
3) 由1)2) 得,若有n 只病狗,必然在第n 天被处决
第七题:(提示:可用图论方法解决)
BONO&EDGE过(2分) ,BONO 将手电带回(1分) ,ADAM&LARRY过(10分) ,EDGE 将手电带回(2分) ,BONO&EDGE过(2分) 2+1+10+2+2=17分钟
第八题: 约定好一个人作为报告人(可以是第一个放风的人) 规则如下: 1、报告人放风的时候开灯并数开灯次数 2、其他人第一次遇到开着灯放风时,将灯关闭 3、当报告人第100次开灯的时候,去向监狱长报告,要求监狱长放人...... 按照概率大约30年后(10000天) 他们可以被释放
范文四:经典C语言面试题目
一、选择题 ((1)~(10)每小题 2分, (11)~(50)每小题 1分,共 60分 )
下列各题 A) 、 B) 、 C) 、 D) 四个选项中,只有一个选项是正确的,请将正确的选
项涂写在答题卡相应位置上,答在试卷上不得分。
(1)数据的存储结构是指 ____D____。
A) 存储在外存中的数据 B) 数据所占的存储空间量
C) 数据在计算机中的顺序存储方式 D) 数据的逻辑结构在计算机中的表示
答案:D
评析:数据的逻辑结构在计算机存储空间中的存放形式形式称为数据的存储结构 (也称数据 的物理结构 ) 。
(2)下列关于栈的描述中错误的是 ___B_____。
A) 栈是先进后出的线性表
B) 栈只能顺序存储
C) 栈具有记忆作用
D) 对栈的插入与删除操作中,不需要改变栈底指针
答案:B
评析:栈是一种特殊的线性表,又称先进后出表 (FILO—First In Last Out) 。
(3)对于长度为 n 的线性表,在最坏情况下,下列各排序法所对应的比较次数中正确的是 ____D____。
A) 冒泡排序为 n2B) 冒泡排序为 n
C) 快速排序为 n D) 快速排序为 n(n一 1) /2
答案:D
评析:假设线性表的长度为 n ,则在最坏情况下,冒泡排序需要经过 n /2遍的从前往后扫 描和 n /2遍的从后往前扫描,需要比较次数为 n(n-1)/2。快速排序法的最坏情况比较次数 也是 n(n-1)/2。
(4)对长度为 n 的线性表进行顺序查找,在最坏情况下所需要的比较次数为 ____C____。 A)log2n B)n /2C)n D)n+l
答案:C
评析:顺序查找过程中, 如果被查找的元素是线性表中的最后一个元素, 或者元素不在线性 表中, 则需要与线性表中所有的元素进行比较。 对长度为 n 的线性表进行顺序查找, 在最坏 情况下需要比较 n 次。
(5)下列对于线性链表的描述中正确的是 ___A_____。
A) 存储空间不一定是连续,且各元素的存储顺序是任意的
B) 存储空间不一定是连续,且前件元素一定存储在后件元素的前面
C) 存储空间必须连续,且前件元素一定存储在后件元素的前面
D) 存储空间必须连续,且各元素的存储顺序是任意的
答案:A
评析:在链式存储结构中, 存储数据结构的存储空间可以不连续, 各数据结点的存储顺序与 数据元素之间的逻辑关系可以不一致,而数据元素之间的逻辑关系是由指针域来确定的。
(6)下列对于软件测试的描述中正确的是 ___C_____。
A) 软件测试的目的是证明程序是否正确
B) 软件测试的目的是使程序运行结果正确
C) 软件测试的目的是尽可能多地发现程序中的错误
D) 软件测试的目的是使程序符合结构化原则
答案:C
评析:关于软件测试的目的, Grenford J . Myers 再《 The Art of Software Testing 》一书中给 出了深刻的阐述,整体来说,软件测试的目的就是尽可能多地发现程序中的错误。
(7)为了使模块尽可能独立,要求 ___B_____。
A) 模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强
B) 模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱
C) 模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱
D) 模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强
答案:B
评析:模块独立性是指每个模块只完成系统要求的独立的子功能, 并且与其他模块的联系最 少且接口简单。软件设计,应尽量做到高内聚,低耦合,有利于提高模块的独立性。
(8)下列描述中正确的是 ___D_____。
A) 程序就是软件
B) 软件开发不受计算机系统的限制
C) 软件既是逻辑实体,又是物理实体
D) 软件是程序、数据与相关文档的集合
答案:D
评析:计算机软件是计算机系统中与硬件相互依存的另一部分, 是包括程序、 数据及相关文 档的完整集合。
(9)数据独立性是数据库技术的重要特点之一,所谓数据独立性是指 __D______。
A) 数据与程序独立存放
B) 不同的数据被存放在不同的文件中
C) 不同的数据只能被对应的应用程序所使用
D) 以上三种说法都不对
答案:D
评析:数据独立性是数据与程序间的互不依赖性, 即 数据库中数据独立于应用程序而不依赖 于应用程序 。也就是说,数据的逻辑结构、存储结构与存取方式的改变不会影响应用程序。 选项 A 、 B 、 C 三种说法都是错误的。
(10) 用树形结构表示实体之间联系的模型是 __C______。
A) 关系模型 B) 网状模型 C) 层次模型 D) 以上三个都是
答案:C
评析:层次模型是最早发展起来的数据库模型,它的基本结构是树形结构。
(11)算法具有五个特性,以下选项中不属于算法特性的是 ___B_____。
A) 有穷性 B) 简洁性 C) 可行性 D) 确定性
答案:B
评析:有穷性、 确定性、 有零个或多个输入、 有一个或多个输出、 有效性是算法的基本特性。
(12)以下选项中可作为 c 语言合法常量的是 ___A_____。
A)-80. B)-080C)-8e1. 0D)-80. 0e
答案:A
评析:c 语言的常量分为整型常量、实型常量和字符型常量。选项 A 属于实型常量中的十进
制小数形式的表示法,是合法的。
(13)以下叙述中正确的是 ___C_____。
A) 用 C 程序实现的算法必须要有输入和输出操作
B) 用 C 程序实现的算法可以没有输出但必须要输入
C) 用 C 程序实现的算法可以没有输入但必须要有输出
D) 用 C 程序实现的算法可以既没有输入也没有输出
答案:C
评析:算法的特性中包括 “ 有零个或多个输入 ” 及 “ 有一个或多个输出 ” 这两个特性。一个算法 得到的结果就是算法的输出, 没有输出的算法是没有意义的, 所以一个算法必须至少有一个 输出。
(14)以下不能定义为用户标识符的是 ___D_____。
A)Main B)_0C)_intD)sizeof
答案:D
评析:C 语言规定标识符只能由字母、数字和下划线三种符号组成, 而且第一个字符必须是 字母或下划线。注意:大写字母和小写字母被认为是两个不同的字符。 A 中 Main 与主 i 函 数名 main 不同。
(15)以下选项中不能作为合法常量的是 ___B_____。
A)1. 234e04B)1. 234e0. 4C)1. 234e+4D)1. 234e0
答案:B
评析:指数形式的实型常量要求字每 e(或 E) 之前必需有数字,且 e 后面的指数必须为整数, 所以本题中选项 B 非法。
(16)数字字符 0的 ASCII 值为 48,若有以下程序
main()
{chara=”1″,b=”2″ ;
printf(“ %c , ” , b++);
printf(“ %d\n”,b-a) ;
)
程序运行后的输出结果是 ___C_____。
A) 3, 2B)50, 2C)2, 2D)2, 50
答案:C
评析 l 执行语句 “printf(“ %c , ll , b++); ” 后, b 的值变成字符 3,执行 “printf(“ %d\n”,b-a) ; ” , 即 ‘3’-‘1’ 。
(17)有以下程序
main()
{
int m=12,n=34;
printf(“ %d %d” , m++, ++n);
printf(“ %d %d\n” , n++, ++m);
}
程序运行后的输出结果是 ___A_____。 A)12353514B)12353513C)12343514D)12343513
答案:A
评析:执行 “printf(“ %d %d”m++, ++n); ” 后,输出的是 m 和 n+l的值 1235,接着执行 “printf(“ %d %d \n” , n++, ++m); ” 输出 n 和 m+l的值 3514。
(18)有定义语句:int b ; char c[10]; ,则正确的输入语句是 ___B_____。
A) scanf(
C) scanf(
答案:B
评析 :scanf函数中的 “ 格式控制 ” 后面应当是地址,而不是变量名。对于变量,通过地址运算 符 “&” 求出内存中的地址;对于数组 c[10],数组名 c 即为数组在内存中的地址。
(19)有以下程序
main()
{intm , n , p ;
scanf(“m=%dn=%dp=%d” , &m, &n, &p);
printf(“ %d %d %d \n” , m , n , p);
}
若想从键盘上输入数据,使变量 m 中的值为 123, n 中的值为 456, p 中的值为 789, 则正确的输入是 ___A_____。
A) m=123n=456p=789B) m=123n=456p=789
C) m=123, n=456, p=789D) 123456789
答案:A
评析:根据本题的数据输入形式 “scanf(“m=%dn=%dp=%d”&m, &n, &p); ” 说明在输入数 据时,必须输入 “m=” 、 “n=” 、 “p=” 字符,且中间不能含有空格。
(20)有以下程序
main()
{int a,b,d=25;
a=d/10%9;
b=a&&(-1);
printf(” %d ,%d \n” , a , b);
}
程序运行后的输出结果是 ___B_____。
A)6, l B)2, l C)6, 0D)2, 0
答案:B
评析:本题中 “a=d/10%9; ” 的值为 25/10%9=2;“b=a&&(-1); ” 为 2&&(-1)=1(注意:-1表示真,只有 O 才表示假 ) ,所以 a , b 的值分别为 2,1。
(21)有以下程序
main()
{
int i=1,j=2, k=3;
if(i++==1&&(++j==3||k++==3))
printf(“ %d %d %d \n” , i , j , k);
}
程序运行后的输出结果是 ___D_____。
A)l 23B)234C) 223. D)233
答案:D
评析:执行 “i++==1&&(++j==3‖ k++==3)” 时,表达式 “i++==1” 嗨值为真,其值为 1,表达 式 “++j=3” 的值为真,根据短路原理,右边的表达式 “k++==3” 不再进行运算。括号中表达的 值为 l ,作与运算后整个表达式的值也为 l ,输出 i.j , k 时,由于未执行过 k ,所以它们的值 分别为 2,3,3。
(22)若整型变量 a 、 b 、 c 、 d 中的值依次为:1、 4、 3、 2。则条件表达式 a<>
A)l B)2C)3D)4
答案:A
评析:条件表达式的一般形式为:表达式 1?表达式 2:表达式 3
本题先求的是 a<>
main()
{
int p[8]={11,12,13,14,15,16,17,18}, i=0,j=0;p[]从 p[0]开始自动赋值
while(i++<>
{
if (p[i]%2)
j+=p[i];
}
printf(“ %d \n”,j);
}
程序运行后的输出结果是 ___B_____。
A)42B)45C)56D)60
答案:B
评析:本程序的作用是求除 p[0]外的其它奇数的和。
(24)有以下程序
main()
{
char a[7]=“a0\OaO \0”; int i,j;
i=sizeof(a);j=strlen(a);
printf(“ %d %d \n” , i,j);
)
程序运行后的输出结果是 ___B _____。
A)22B)76C)72D)62
答案:C
评析:c 语言中以 ‘ \0’ 作为字符串的结束符,且 strlen()函数计算的是 ‘ \0’ 字符前的所有字 符的个数 。数组定义以后系统就为其分配相应大小的内存空间,而不论其中有没有内容。
(25)以下能正确定义一维数组的选项是 ___B_____。
A)int a[5]={0, 1, 2, 3, 4, 5};B)char a[]={0,1,2,3,4,5};
C)char a={’A’ , ’B’ , ’C’};D)int a[5]=”0123″;
答案:B
评析:选项 A 中定义的是 5个数组元素,但赋值的时候赋的是 6个元素,所以出错;选项 c 不符合数组定义形式, 数组名后应加上 “[]” ; 选项 D 的类型说明符错误, 如果用 char 定义就 对了;选项 B 中的 0,1,2,3,4,5分别表示对应字符的 ASCII 码,所以选项 B 是正确的。
(26)有以下程序
int fl(intx,int y){returnx>y?x:y;}
int f2(intx,int y){returnx>y?y:x;}
main()
{
int a=4, b=3, c=5, d=2, e , f,g;
e=f2(f1(a, b) , f1(c, d)) ; f=fl(f2(a, b) , f2(c, d));
g=a+b+c+d-e-f;
printf(“ %d ,%d ,%d \n” , e,f,g);
)
程序运行后的输出结果是 ____A____。
A)4,3,7B)3,4,7C)5,2,7D)2,5,7
答案:A
评析:函数 n 的功能是返回两个数中比较大的值, f2的功能是返回两个数中比较小的值。
(27)已有定义:char a[]=”xyz”,b[]={’x’ , ’y’ , ’z’};,以下叙述中正确的是 ________。 A) 数组 a 和 b 的长度相同 B)a 数组长度小于 b 数组长度
C)a 数组长度大于 b 数组长 sizeof 度 D) 上述说法都不对
答案:C
评析:c 语言规定 ‘ \0’ 为字符串结束标志 。 所以 “char a[]=“xyz”” 的数组长度为 4, 而 “b[]={‘x’ , ‘y’ , ‘z’}; ” 的数组长度为 3,数组长度与 strlen 函数所求的长度不同,本题是指数组占内存 空间的大小。
(28)有以下程序
Void f(int*x,int *y)
{
int t;
t=*x;*x=*y;’*y=t;
)
main()
{
int a[8]={1, 2, 3, 4, 5, 6, 7, 8}, i , *p, *q;
p=a; q=&a[7];
}
程序运行后的输出结果是 ________。
A)8,2,3,4,5,6,7,1, B)5,6,7,8,1,2,3,4.
C)1,2,3,4,5,6,7,8, D)8,7,6,5,4,3,2,l ,
评析;本程序中函数 f 的作用是交换指针变量 x 和 y 所指向的存储单元的值。
(29)有以下程序
main()
{
im a[3][3], *p, i ;
for(i=0;i<>
for(i=0;i<3;i++)printf(“ %d”="" ,="">3;i++)printf(“>
)
程序运行后的输出结果是 ___D_____。
A)012B)123C)234D)345
答案:D
评析:本题赋值后, a 的数组元素的值分别为 a[01[0]=0, a[0][1]=1, a[0][2]=2, a[1][0]=3, a[1][1]=4, a[1][2]=5, a[2][0]=6, a[2][1]=7, a[2][2]=8,故本题输出的值为 345。
(30)以下叙述中错误的是 ____C____。
A) 对于 double 类型数组,不可以直接用数组名对数组进行整体输入或输出
B) 数组名代表的是数组所占存储区的首地址,其值不可改变
C) 当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出 “ 下标越
界 ” 的出错信息
D) 可以通过赋初值的方式确定数组元素的个数
答案:C
评析:在 c 语言中,如果出现下标越界的情况,系统不管在编译还是执行时都不会给出 “ 下 标越界 ” 的错误提示。
(31)有以下程序
#defineN 20
fun(inta[], int n,int m)
for(i=m;i>=n;i–)a[i+1]=a[i];
}
main()
{
int i , a[N]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
fun(a,2,9);
for(i=O;i<5;i++)printf(“ %d”="" ,="">5;i++)printf(“>
}
程序运行后的输出结果是 ___C_____。
A)10234B)12344C)12334D)12234
答案:C
评析:本题函数 fun 的作用是将指定的数组元素 (从下标 n 到下标 m) 向后移一位。由函数调 用 “fun(a,2,9); ” 可知,函数 fun 用于将 a[2]到 a[9]的各元素依次向后移一位,移完后, a 数 组中各元素的值分别为 1,2,3,3,4,5,6,7,8,9,10,故输出的前 5个数组元素为 12334。
(32)有以下程序
main()
{
int a[3][2]={0}, (*ptr)[2], i,j;
for(i=0;i<2;i++){ptr=a+i;scanf(“ %d”,ptr);="">2;i++){ptr=a+i;scanf(“>
for(i=0;i<>
{for(i=0;j<2;j++)printf(“>2;j++)printf(“>
}
}
若运行时输入:123<回车>,则输出结果是 ___B____。
A) 产生错误信息
B)l0C)l 2D)l 0
2O 3020
000O 30
答案:B
评析:二维数组 a , 通过 a[3][2]={0}将数组中的各个元素初始化为 0,指针变量 ptr ,指向包 含 2个元素的一维数组。 a[0][0]:l , a[1][0]=2,故本题的输出选 B 。
(33)有以下程序
prt(int*m,int n)
{int i;
for(i=0;i<>
)
main()
{
int a[]={1,2,3,4,5},i;
prt(a,5);
for(i=0;i<>
printf(“%d,”,a[i]);
程序运行后的输出结果是 ___B_____。
A)l , 2, 3, 4, 5, B)2,3,4,5,6, C)3,4,5,6,7, D)2,3,4,5,1,
答案:B
评析:用数组名作函数实参时, 不是把数组的值传递给形参, 而是把实参数组的起始地址传 递给形参数组,这样两个数组就共同占用同一段内存单元。
(34)有以下程序
main()
{int a[]={1,2,3,4,5,6,7,8,9,0}, *p;
for(p=a;p
}
程序运行后的输出结果是 ___A_____。
A)l , 2, 3, 4, 5, 6, 7, 8, 9, 0, B)2,3,4,5,6,7,8,9,10,1,
C)0,1,2,3,4,5,6,7,8,9, D)l , l , 1, l , l , l , l , l , l , l ,
答案:A
评析:c 语言规定数组变量名代表数组的首地址,即第 0号元素的地址。本题将 a 数组中的 值全部输出,即为 l , 2, 3, 4, 5, 6, 7, 8, 9, 0, 。
(35)有以下程序
#defineP 3
void F(intx){return(P*x*x);}
main()
{printf(“ %d \n”,F(3+5)); }
程序运行后的输出结果是 ___D_____。
A)192B)29C)25D) 编译出错
答案:D
评析:return 语句用于从被调函数带回一个函数值。 void 关键字表示 “ 无类型 ” ,即不需要从 被调函数中带回函数值,所以不需要 return 语句,故编译时出错。
(36)有以下程序
main()
{intc=35;printf(“ %d \n”,c&c);}
程序运行后的输出结果是 ____C____。
A)0B)70C)35D)1
答案:C
评析:按位 “ 与 ” 时, 1&1=1,其他都等 O 。因为本题中相与的两个值相等,即对应位上的二 进制值相等,所以 “ 与 ” 的结果也即为其值本身。
(37)以下叙述中正确的是 ___D_____。
A) 预处理命令行必须位于源文件的开头
B) 在源文件的一行上可以有多条预处理命令
C) 宏名必须用大写字母表示
D) 宏替换不占用程序的运行时间
答案:D
评析:通常,预处理命令位于源文件的开头,也可以写在函数与函数之间; 不能在一行上写 多条预处理命令:宏名一般习惯用大写字母表示,以便与变量名相区别,但这并非规定,也 可用小写字母。
(38)若有以下说明和定义
union dt
{inta;char b;double c;}data;
以下叙述中错误的是 ___C_____。
A)data 的每个成员起始地址都相同
B) 变量 data 所占的内存字节数与成员 c 所占字节数相等
C) 程序段:data.a=5;pintf(“%f\n” , data.c); 输出结果为 5. 000000
D) data 可以作为函数的实参(√ )
答案:C
评析:union 是表示共用体的关键字,成员 a,b,c 共占用同一个内存空间, data 的每个成员起 始地址都相同;共用体变量所占的内存长度等于最长的成员的长度,故变量 ’data 所占的内 存字节数与成员 c 所占字节数相等;执行 “data . a=5; printf(“ %f\n”,data . C) ; ”printf 函数只 是将内存中的数据以不同的类型输出,而不能将内存中的整型数据自动转换为等值的浮点 数,故 C 是错误的。
(39)以下语句或语句组中,能正确进行字符串赋值的是 ___D_____。
A)char*sp;*sp=”right!”; B)char s[lO];s=”right! “;
C)char s[10];*s=”right! “; D) char*sp=”right! “;
答案:D
评析 :选项 A 定义了字符型的指针变量 sp ,则 *sp存储的是第一个字符,而给它赋的是字符 串,故错;
选项 B 表示代表数组的首地址,而题中给它赋的是字符串,所以错误;
选项 c 定义了一个字符型的数组 s[10],再通过 +s给数组元素赋初值,这时是与选项 A 相同 的错误。
(40)设有如下说明
typedef struct ST
{longa; int b; char c[2];}NEW;
则下面叙述中正确的是 ___C_____。
A) 以上的说明形式非法 B)ST 是一个结构体类型
C)NEW 是一个结构体类型 D)NEW 是一个结构体变量
答案:C
评析:typedef 关键字用于声明一个新的类型名代替已有的类型名。
本题中如果没有用 typedef 进行定义的话,则 struct ST 为结构体类型,现在用 typedef 定义 后,相当于用 NEW 代表了 struct ST 这一结构体类型,故 NEW 为结构体类型。
(41)有以下程序
main()
{int a=1, b;
for(b=l;b<>
{if(a>=8)break;
if(a%2==1){a+=5;continue;}
a-=3;
}
printf(“ %d \n” , b);
}
程序运行后的输出结果是 ____B____。
A) 3B)4C) 5D) 6
答案:B
评析:break 和 continue 的区别是:continue 语句只结束本次循环,而不是终止整个循环的 执行;而 break 语句则是结束整个循环过程, .不再判断执行的条件是否成立。
(42)有以下程序
main()
{char s[]=”l 59″ , *p;
p=s;
printf(“ %c” , *p++);printf(“ %c” , *p++);
}
程序运行后的输出结果是 ___A_____。
A)15B)16C)12D)59
答案:A
评析:本题通过 “p=s” 将指针变量 p 指向字符数组 s ,在第一次输出时, 由于 ++和 *为同一优 先级 , “*p++” 相于 “*(p++)” 。 p 指向 s[1],输出为 s[1]的值。
(43)有以下函数
fun(char*a,char*b)
{while((*a!=’ \0’)&&(*b!=’ \0’)&&(*a==*b))
{a++;b++;}
return(*a-*b);
}
该函数的功能是 ___D_____。
A) 计算 a 和 b 所指字符串的长度之差
B) 将 b 所指字符串连接到 a 所指字符串中
C) 将 b 所指字符串连接到 a 所指字符串后面
D) 比较 a 和 b 所指字符串的大小
答案:D
评析:字符串的比较规则是对两个字符串自左至右逐个字符相比 (按 ASCII 码值大小比较 ) , 直到出现不同的字符或遇到 ‘ \0’ 为止, 相等, 则返回 0, 否则返回第一个不等字符串的 ASCII 码的差值。
(44)有以下程序
main()
{int num[4][4]={{1, 2, 3, 4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16}}, i,j;
for(i=0;i<>
{for(j=0;j<=i. j++)printf(“="" %4c”="" ,="" ’="">=i.>
for(j______;j<4;j++)printf(“>4;j++)printf(“>
printf(“ \n”);
}
}
若要按以下形式输出数组右上半三角
l 234
678
1112
16
则在程序下划线处应填入的是 ____B____
A)i-l B)i C)i+1D)4-i
答案:B
评析:本题程序为二重循环,外循环控制输出数据的行数,内循环控制输出数据的列数。从 本题输出的形式来看,程序要求输出的是 4行 4列。
(45)有以下程序
point(char*p){p+=3; }
main()
{char b[4]={’a’ , ’b’ , ’c’ , ’d . }, *p=b;指针的初始化
poim(p); primf(” %c \n” , *p);
}
程序运行后的输出结果是 ___A_____.
A)a B)b C)c D)d
答案:A
评析:在 c 语言中, 函数的参数传递方式采用按值传递, 因此不能通过调用函数的方式来改 变指针本身的值,只能改变指针所指变量的值。
(46)程序中若有如下说明和定义语句
char fun(char*);
main()
{
char *s=”one”; a[5]={0}, (*f1)()=fun(表达对不对? ),ch;
}
以下选项中对函数 fun 的正确调用语句是 ________.
A)(*f1)(a);B)*f1(*s);C)fun(&a);D)ch=*fl(s);
答案:A
评析:题中将函数 fun 的入口地址赋给了指针变量 f1,这时 f1和 fun 都指向函数的开头, 调用 *fl。就是调用函数 fun .
(47)有以下结构体说明和变量定义,如图所示:
struct node
{intdata ; struct node *next;}*p, *q, *r;
现要将 q 所指结点从链表中删除,同时要保持链表的连续,以下 不能 完成指定操作
的语句是 ___D_____。
A)P->next=q->next;B)p->next=p->next->next;
C)p->next=r;D)p=q->next;
答案:D
评析:要想将 q 所指结点从链表中删除, 同时保持链表的连续, 必需使 p 结点的 next 指向 r , 在四个选项中,只有选项 D 不能做到。
(48)以下对结构体类型变量 td 的定义中,错误的是 ___C_____。
A) typedef struct aa B) struct aa
{int n; {int n;
float m; float m;
}AA;}td;
AA td; struct aa td;
C) struct D) struct
{int n; {int n;
float m; float m;
}aa;}td;
struct aa td;
答案:C
评析:选项 c 中的 aa 本身就为结构体变量名,所以不能再用它来定义结构体变量,故此种 定义方法是错误的:
(49)以下与函数 fseek (f1),0L,SEEK_SET)有相同作用的是 ___D_____。 A)feof(fp)B)ftell(fp)C)fgetc(fp)D)rewind(fp)
答案:D
评析:fseek 函数用于改变文件的位置指针。
本题中 “fseek(fp, 0L,SEEK_SET)” 的作用是将位置指针移到文件头。
feof 的作用是判断文件是否结束,已指到文件的末尾,则返回值为非零,否则为零。 ftell 的作用是得到流式文件中的当前位置,用相对于文件开头的位移量来表示。
fgets 的作用是指定文件读入二个字符串。
(50)有以下程序
#include void WriteStr(char*fn,char *str) {FILE *fp; fp=fopen(fp,”w”);fputs(str,fp);fclose(fp); } main() { WriteStr(“t1.dat”,”start”); WriteStr(“tl.dat”,”end”); } 程序运行后,文件 t1. dat 中的内容是 ___B_____。 A)start B)end C)startend D)endrt 答案:B 评析 :两次使用 “ 写入 ” 的方式打开同一个文件,在第二次打开时,文件指针指向文件头,所 以此次写入的数据覆盖了文件原有的数据,故本题中 t1. dat 的内容为 end 。 二、填空题 (每空 2分,共 40分 ) 请将每空的正确答案写在【 1】至【 20】序号的横线上,答在试卷上不得分。 (1)某二叉树中度为 2的结点有 18个,则该二叉树中有一 ___【 1】 ___一个叶子结点。 答案:【 1】 19 评析:二叉树的性质 3:在任意一棵二叉树中,度为 0的结点 (即叶子结点 ) 总是比度为 2的 结点多一个。本题中度为 2的结点数为 18,故叶子结点数为 18+1=19个。 (2)在面向对象方法中,类的实例称为 ___【 2】 ___. 答案:【 2】对象 评析;将属性、操作相似的对象归为类,也就是说, 类是具有共同属性、共同方法的对象的 集合 。所以,类是对象的抽象,它描述了属于该对象类型的所有对象的性质,而一个对象则 是其对应类的一个实例。 (3)诊断和改正程序中错误的工作通常称为 ___【 3】 ___. 答案:【 3】程序调试 评析:程序调试的任务是诊断和改正程序中的错误。 它与软件测试不同, 软件测试是尽可能 多地发现软件中的错误。 先要发现软件的错误, 然后借助于一定的调试工具去找出软件错误 的具体位置。软件测试贯穿整个软件生命期,调试主要在开发阶段。 (4)在关系数据库中,把数据表示成二维表,每一个二维表称为 ___【 4】 ___。 答案:【 4】关系 评析:在关系数据库中,把数据表示成二维表,而一个二维表就是一个关系。 (5)问题处理方案的正确而完整的描述称为 ___【 5】 ___。 答案:【 5】算法 评析:所谓算法是指解题方案的准确而完整的描述。 (6)以下程序运行时,若从键盘输入:102030<回车>,输出的结果是 ___【 6】 ___. #include main() {int i=0,j=0, k=0; scanf(“ %d %*d%d” , &i, &j, &k); printf(“ %d %d %d \n”i,j,k); } 答案:【 6】 10300(j 没有跳过! ) 评析:在 scanf 格式控制符中,如果在%后有一个 “*” 附加说明符,表示跳过它指定的列数。 本题中 ““ %d %*d%d”” 表示将 10赋给 i , %*d表示读入整数但不赋给任何变量, 然后再读入 整数 30赋给变量 j , 那么变量 k 并没有重新赋值, 仍为初始值 0。 所以输出的结果为 10300。 (7)以下程序运行后的输出结果是 ___【 7】 ___。 #defineS(x)4*x*x+l main() {int i=6,j=8; printf(“ %d \11″ , S(i+j)); } 答案:【 7】 81 评析;带参数的宏定义是按 #define命令行中指定的字符串从左到右进行转换。本题中替换 的式子为:4*i+j*i+j+l,代入 i , j 的值得 81。 (8)以下程序运行后的输出结果是 ___【 8】 ___。 main() {int a=3, b=4, c=5, t=99; if(b if(a<><> printf(“ %d %d %d \n” , a , b , C); } 答案:【 8】 4599 评析:本题需特别注意的是 “ ; ” 的问题, 不能把 “t=a; a=c; c=t; ” 误认为是第一个 if 的语句, 实际上,只有 “t=a; ” 才是第一个 if 的语句。 (9)以下程序运行后的输出结果是 ___【 9】 ___。 main() {int a , b , c ; a=10;b=20;c=(a%b<1)||(a>1); printf(“ %d %d %d\n” , a,b,C) ; } 答案:【 9】 10200 评析:本题中 “(a%b<1)‖ (a/b="">1)” 的运算顺序为先算括号 → 算术运算符 → 关系运算符 → 逻 辑运算符。其中 a %b=10, a /b=0,所以 a %b (10)以下程序运行后的输出结果是 ___【 10】 ___。 main() {charc1,c2; for(c1=’0’ , c2=’9’;c1 printf(“ \n”); } 答案:【 10】 0918273645 评析:本题程序的作用是通过 for 循环将 0-9这 10个数字从前向后, 同时也从后向前依次输 出。 (11)已知字符 A 的 ASCII 代码值为 65,以下程序运行时若从键盘输入:B33<回车>, 则输出结果是 _____。 #include main() {chara , b; a=getchar();scanf(“ %d” , &b); a=a-’a’+’0’;b=b*2; printf(“ %c %c \n” , a , b); } 答案:【 11】 1B 评析:c 语言使字符型数据和整型数据之间可以通用。 题中执行 “a=getchar(); ” 后, a 的值 B , 在内存中的表现形式为 ASCII 码 66;执行 “scanf(“ %d”&b); ” 后, b 在内存中的表现形式为 33,然后经过 “a=a-‘A’+‘0’ ; b=b*2; ” 运算,得出 a 的值为字符 ‘1’ , b 的值为 ASCII 码 66, 最后以字符型输出为 l B 。 (12)以下程序中, fun 函数的功能是求 3行 4列二维数组每行元素中的最大值。请填空。 void fun(int,int, int(*)[4],int*); main() {int a[a][4]={{12,41,36,28},{19,33,15,27},{3,27,19,1}},b[3],i; fun(3,4,a,b); for(i=0;i<3;i++)printf(“%4d”,b>3;i++)printf(“%4d”,b> printf(“\n”); } void fun(intm,int n, int ar[][4],int*br) {int i,j,x; for(i=0;i<> (x=ar[i][0]; for(j=0;j<> ___【 12】 ___=x; } } 答案:【 12】 br[i]或 *(br+i) 评析:二维数组 a 存放 3行 4列的数组元素, 一维数组 b 用于存放每行的最大数。 在函数 fun 中,外层 for 循环用于控制行数,内层 for 循环用于控制列数。 (13)以下程序运行后的输出结果是 ___【 13】 ___。 void swap(intx, int y) {int t; t=x;x=y;y=t;printf(“%d%d“,x,y); } main() {int a=3,b=4; swap(a,b);printf(“%d%d”,a,b); 答案:【 13】 4334 评析:用变量作为函数的实参时,属单向传递,即 “ 值传送 ” 方式,此种函数参数的传递方式 只能由实参传给形参,不能由形参传回来给实参。 (14)以下程序运行后的输出结果是 ___【 14】 ___。 #include void fun(char*s,int p, int k) {int i; for(i=p;i<> } main() {char s[]=”abcdefg”; fun(s,3,strlen(s));puts(s); } 答案:【 14】 abcfg 评析:函数 fun 的作用是将 s 所指的字符串中从第 p 十 3到第 k+1个字符向前移动两个位置。 本题程序是将数组 s 中从第 6个元素开始的值分别向前移动两个位置。在执行 fun 函数时, p 的值是 3, k 的值是 7, 所以,具体执行 “for(i=p; i i=3:判断 i i=4:判断 i i=5:判断 i i=6:判断 i (15)以下程序运行后的输出结果是 ___【 15】 ___。 #include main() {char ch[]=”abc”,x[3][4];int i; for(i=0;i<> for(i=0;i<3;i++)printf(“%s”,>3;i++)printf(“%s”,> printf(“\n”); } 答案:【 15】 abcbcc (bcc 是否多余?) 评析 :字符数组 ch 的值 ‘abc’ 分别复制到了二维数组 x 的每一行, 使得二维数组中每一行的值 均为 ‘abc’ ,再通过第二个 for 循环打印出每一行上所要求输出的字符串。 (16)以下程序运行后的输出结果是 ___【 16】 ___。 fun(inta) int b=0;staticint c=3; b++;c++; return(a+b+c); } main() {inti , a=5; for(i=0;i<3;i++)printf(“ %d="">3;i++)printf(“> printf(“ \n”); } 答案:【 16】 010111212 评析:静态局部变量是在编译时赋初值的 ,在程序运行时它已有初值。 (17)以下程序运行后的输出结果是 ___【 17】 ___。 struct NODE {int k; struct NODE *link; }; main() {struct NODE m[5],*p=m,*q=m+4; int i=0; while(p!=q){ p->k=++i;p++; q->k=i++;q––; } q->k=i; for(i=0;i<> printf(“n”); } 答案:【 17】 13431 评析:程序执行过程如下: p=m, q=m+4, 条件 p!=q成立, 执行 p->k=++i; , 由于是 “ 前加 ” , 所以 m[O]. k=1. 执行 p++后 p=m+l;执行 q->k=i++; ,由于是 “ 后加 ” ,所以 m[4]. k=1,然后使得 i 加上 1,即 i=2, q– 后, q=m+3: p=m+l, q=m+3,条件 p!=q成立,执行 p->k=++i; ,由于是 “ 前加 ” ,所以 i=3, m[0]. k=3, 执行 p++后 p=m+2;执行 q->k=i++; ,由于是 “ 后加 ” ,所以 m[4]. k=3, i=4, q– 后, q=m+2; p=m+2, q=m+2,条件 p!=q不成立,则执行 q->k=i;即 m[2]. k=4;故输出的值为 13431。 (18)以下程序中函数 huiwen 的功能是检查一个字符串是否是回文,当字符串是回文, 时,函数返回字符串:yes! ,否则函数返回字符串:no! ,并在主函数中输出,所谓回 文即正向与反向的拼写都一样,例如:adgda 。请填空。 #include char *huiwen(char*str) {char *pl,*p2;int i,t=0; pl=str;p2=___【 18】 ___; for(i=0;i<=strlen(str)>=strlen(str)> if(*pl++!=*p2--){t=l;break;} if(___【 19】 ___)retum(“yes!”); else return(“no!”); } main() {char str[50]; printf(“Input:”); scanf(“%s”,str); printf(“%s\n”,___【 20】 ___); } 答案:【 18】 pl+(strlen(str)-1)或 str+(strlen(str)-1) 【 19】 t==0或 !(tl=0)或 t!=l或 !t 【 20】 huiwen(str) 评析:本题的要求是判断从键盘输入的字符串是否是回文, 但在主函数中并没有完成此功能 的代码,故第 20空应该填调用函数 huiwen 代码,即 huiwen(str)。 由于回文字符串是指正向与反向拼写都一样, 所以对于一个字符串, 如果正向顺序与反向顺 序对应位置上的字符一样,则此字符串即为回文。在函数 huiwen 中,已用 “pl=str” 使得 pl 指向字符串 str 的第一个字符的地址,则第 18空语句的功能应该是使得 p2指向字符串 str 的最后一个字符串的地址, 故填 pl+(strlen(str)-1), 由于 p1与 str 指向的是同一个地址, 所以, 第 18空也可以填 str+(strlen(str)-1)。 在进行 for 循环时, 如果 pl 所指向的字符与 p2指向的字符不相同, 则说明, 字符串 str 不是 回文,则用 t=l标记,并退出循环,执行下面的 if 语句,由于题中要求如果是回文,则返回 “yes!” ,否则,返回 “no!” 。故当 t=O的时候,说明字符串 str 为回文,所以第 19应填 t==O或 ! (t!=O)或 t!=l或 !t 。 1. 列举出 10个 JAVA 语言的优势 a:免费,开源,跨平台 (平**立性 ) ,简单易用,功能完善,面向对象,健壮性,多线程, 结构中立,企业应用的成熟平台 , 无线应用 2. 列举出 JAVA 中 10个面向对象编程的术语 a:包,类,接口,对象,属性,方法,构造器,继承,封装,多态,抽象,范型 3. 列举出 JAVA 中 6个比较常用的包 Java.lang;java.util;java.io;java.sql;java.awt;java.net;java.applet;javax.swing 4.JAVA 中的标识符有什么作用和特点 作用:标识符用作给变量、类和方法命名 特点:可以以字母、下划线“ _”和” $”符开头 首字符外,可以跟上字母、下划线“ _”和” $”符或数字 Java 是大小写敏感的,标识符也不例外 5.JAVA 中的关键字有什么特点 , 列举出至少 20个关键字 Java 中一些赋以特定的含义、并用做专门用途的单词称为关键字(keyword ) 所有 Java 关键字都是小写的, TURE 、 FALSE 、 NULL 等都不是 Java 关键字 ; goto 和 const 虽然从未被使用,但也作为 Java 关键字保留; ? 中一共有 51个关键字 Java abstract assert boolean break byte continue case catch char class const double default do extends else final float for goto long if implements import native new null instanceof int interface package private protected public return short static strictfp super switch synchronized this while void throw throws transient try volatile 6.JAVA 中数据类型如何分类? 可分为简单数据类型和引用数据类型 : 简单数据类型:数值型 (byte,short,int,long,float double), 字符型 (char), 布尔型 (boolean); 引用数据类型:类,接口,数组 . 7.JAVA 中运算符的分类及举例 ? 分割符:, , ; , [], () ? 算术运算符 : +,―, *, /, %, ++,―― ? 关系运算符 : >, <,>=, <=, =="," !="">=,> ? 布尔逻辑运算符 : !, & , | , ^ , &&, || ? 位运算符 : &, |, ^, ~ , >>, <,>>> ? 赋值运算符 : = 扩展赋值运算符 :+=,― =, *=, /= ? 字符串连接运算符 : + ? 造型操作符:() 8.super,this 关键字的作用及用法 ? 在 Java 类中使用 super 来引用父类的成分 – 可用于访问父类中定义的属性 super – 可用于调用父类中定义的成员方法 super – 可用于在子类构造器中调用父类的构造器 super – 的追溯不仅于直接父类 super ? 中为解决变量的命名冲突和不确定性问题,引入关键字“ this ”代表其所在方 法的当前对象。 Java – 构造器中指该构造器所创建的新对象 – 方法中指调用该方法的对象 ? 关键字的用法 this – 在类本身的方法或构造器中引用该类的实例变量和方法 – 将当前对象作为参数传递给其它方法或构造器 – 用来调用其他的重载的构造器 9. 什么是 JAVA 中的表达式?有什么作用? ? 表达式是运算符和操作数的结合,它是任何一门编程语言的关键组成部分 ? 表达式允许程序员进行数学计算、值的比较、逻辑操作以及在 Java 中进行对 象的操作。 ? 一些表达式的例子: – X – X+10 – Y=x+10 – Arr[10] – student.geName() 10. 做表列出 JAVA 中所有修饰符和他们的适用范围 (能不能修饰构造器,属性,自由块等 ) class 属性 方法 构建器 自由块 内部类 public Y Y Y Y Y protected Y Y Y Y (Default) Y Y Y Y Y Y private Y Y Y Y final Y Y Y Y abstract Y Y Y static Y Y Y 11. 写一个方法,用一个 for 循环打印九九乘法表 /** *一个 for 循环打印九九乘法表 */ publicvoid nineNineMultiTable() { for (int i = 1,j = 1; j <= 9;="" i++)="">=> System.out.print(i+ if(i==j) { i=0; j++; System.out.println(); } } } 12. 给定一个 java.util.Date 对象,如何转化为” 2007-3-22 20:23:22”格式的字符串 /** *将某个日期以固定格式转化成字符串 *@paramdate *@returnstr */ public String dateToStr(java.util.Date date) { SimpleDateFormat sdf = new SimpleDateFormat( return str; } 13. 写一个方法,能够判断任意一个整数是否素数 /** *判断任意一个整数是否素数 *@paramn *@returnboolean */ publicboolean isPrimes(int n) { for (int i = 2; i <= math.sqrt(n);="" i++)="">=> if(n%i==0) { returnfalse; } } returntrue; } 14. 写一个方法,输入任意一个整数,返回它的阶乘 /** *获得任意一个整数的阶乘 *@paramn *@returnn! */ publicint factorial(int n) { //递归 if(n==1) { return 1; } return n*factorial(n-1); //非递归 // int multi = 1; // for (int i = 2; i <= n;="" i++)="">=> // multi*=i; // } // return multi; } 15. 写一个方法,用二分查找法判断任意整数在任意整数数组里面是否存在,若存在就返回 它在数组中的索引位置,不存在返回 -1 /** *二分查找特定整数在整型数组中的位置 (递归 ) *@paramdataset *@paramdata *@parambeginIndex *@paramendIndex *@returnindex */ publicint binarySearch(int[] dataset,int data,int beginIndex,int endIndex) { int midIndex = (beginIndex+endIndex)/2; if(data { return binarySearch(dataset,data,beginIndex,midIndex-1); }elseif(data>dataset[midIndex]) { return binarySearch(dataset,data,midIndex+1,endIndex); }else { return midIndex; } } /** *二分查找特定整数在整型数组中的位置 (非递归 ) *@paramdataset *@paramdata *@returnindex */ publicint binarySearch(int[] dataset ,int data) { int beginIndex = 0; int endIndex = dataset.length - 1; int midIndex = -1; if(data midIndex = (beginIndex+endIndex)/2; if(data endIndex = midIndex-1; } elseif(data>dataset[midIndex]) { beginIndex = midIndex+1; }else { return midIndex; } } return -1; } 16. 做一个饲养员给动物喂食物的例子体现 JAVA 中的面向对象思想 , 接口(抽象类)的用处 package com.softeem.demo; /** *@authorleno *动物的接口 */ interface Animal { publicvoid eat(Food food); } /** *@authorleno *一种动物类 :猫 */ class Cat implements Animal { publicvoid eat(Food food) { System.out.println( } /** *@authorleno *一种动物类 :狗 */ class Dog implements Animal { publicvoid eat(Food food) { System.out.println( } /** *@authorleno *食物抽象类 */ abstractclass Food { protected String name; public String getName() { returnname; } publicvoid setName(String name) { this.name = name; } } /** *@authorleno *一种食物类 :鱼 */ class Fish extends Food { public Fish(String name) { this.name = name; } /** *@authorleno *一种食物类 :骨头 */ class Bone extends Food { public Bone(String name) { this.name = name; } } /** *@authorleno *饲养员类 * */ class Feeder { /** *饲养员给某种动物喂某种食物 *@paramanimal *@paramfood */ publicvoid feed(Animal animal,Food food) { animal.eat(food); } } /** *@authorleno *测试饲养员给动物喂食物 */ publicclass TestFeeder { publicstaticvoid main(String[] args) { Feeder feeder=new Feeder(); Animal animal=new Dog(); Food food=new Bone( feeder.feed(animal,food); //给狗喂肉骨头 animal=new Cat(); food=new Fish( feeder.feed(animal,food); //给猫喂鱼 } } 17. 描述 JAVA 中异常处理的机制 ? 程序的执行过程中如出现异常, 会自动生成一个异常类对象, 该异常对象将被 提交给 Java 运行时系统,这个过程称为抛出 (throw)异常。 Java ? 当 Java 运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当 前异常对象交给其处理,这一过程称为捕获 (catch)异常。 ? 如果 Java 运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相 应的 Java 程序也将退出。 ? 程序员通常只能处理违例 (Exception),而对错误 (Error)无能为力。 18. 做一个单子模式的类,只加载一次属性文件 package com.softeem.demo; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.Properties; /** *@authorleno *单子模式,保证在整个应用期间只加载一次配置属性文件 */ publicclass Singleton { privatestatic Singleton instance; privatestaticfinal String CONFIG_FILE_PATH = private Properties config; private Singleton() { config = new Properties(); InputStream is; try { is = new FileInputStream(CONFIG_FILE_PATH); config.load(is); is.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } publicstatic Singleton getInstance() { if(instance==null) { instance = new Singleton(); } returninstance; } public Properties getConfig() { returnconfig; } publicvoid setConfig(Properties config) { this.config = config; } } l J2SE 19. 拷贝一个目录 (文件 ) 到指定路径 /** *拷贝一个目录或者文件到指定路径下 *@paramsource *@paramtarget */ publicvoid copy(File source,File target) { File tarpath = new File(target,source.getName()); if(source.isDirectory()) { tarpath.mkdir(); File[] dir = source.listFiles(); for (int i = 0; i < dir.length;="" i++)=""> copy(dir[i],tarpath); } }else { try { InputStream is = new FileInputStream(source); OutputStream os = new FileOutputStream(tarpath); byte[] buf = newbyte[1024]; int len = 0; while((len = is.read(buf))!=-1) { os.write(buf,0,len); } is.close(); os.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 20. 用 JAVA 中的多线程示例银行取款问题 packagecom.softeem.demo; /** *@authorleno *账户类 *默认有余额,可以取款 */ class Account { privatefloatbalance = 1000; publicfloat getBalance() { returnbalance; } publicvoid setBalance(float balance) { this.balance = balance; } /** *取款的方法需要同步 *@parammoney */ publicsynchronizedvoid withdrawals(float money) { if(balance>=money) { System.out.println( try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } balance-=money; } else { System.out.println( } } } /** *@authorleno *银行卡 */ class TestAccount1 extends Thread { private Account account; public TestAccount1(Account account) { this.account = account; } @Override publicvoid run() { account.withdrawals(800); System.out.println( } /** *@authorleno *存折 */ class TestAccount2 extends Thread { private Account account; public TestAccount2(Account account) { this.account = account; } @Override publicvoid run() { account.withdrawals(700); System.out.println( } } publicclass Test { publicstaticvoid main(String[] args) { Account account = new Account(); TestAccount1 testAccount1 = new TestAccount1(account); testAccount1.start(); TestAccount2 testAccount2 = new TestAccount2(account); testAccount2.start(); } } 21. 用 JAVA 中的多线程示例火车站售票问题 package com.softeem.demo; /** *@authorleno *售票类 */ class SaleTicket implements Runnable { inttickets = 100; publicvoid run() { while (tickets > 0) { sale(); //或者下面这样实现 // synchronized (this) { // if (tickets > 0) { // System.out.println(Thread.currentThread().getName() + // tickets--; // } // } } } publicsynchronizedvoid sale() { if (tickets > 0) { System.out.println(Thread.currentThread().getName() + tickets--; } } } publicclass TestSaleTicket { publicstaticvoid main(String[] args) { SaleTicket st = new SaleTicket(); new Thread(st, new Thread(st, new Thread(st, new Thread(st, } } 22. 用 JAVA 中的多线程示例生产者和消费者问题 package com.softeem.demo; class Producer implements Runnable { private SyncStack stack; public Producer(SyncStack stack) { this.stack = stack; } publicvoid run() { for (int i = 0; i < stack.getproducts().length;="" i++)=""> String product = stack.push(product); System.out.println( try { Thread.sleep(200); } catch(InterruptedException e) { e.printStackTrace(); } } } } class Consumer implements Runnable { private SyncStack stack; public Consumer(SyncStack stack) { this.stack = stack; } publicvoid run() { for(int i=0;i String product =stack.pop(); System.out.println( { Thread.sleep(1000); } catch(InterruptedException e) { e.printStackTrace(); } } } } class SyncStack { private String[] products = new String[10]; privateintindex; publicsynchronizedvoid push(String product) { if(index==product.length()) { try { wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } notify(); products[index]=product; index++; } publicsynchronized String pop() { if(index==0) { try { wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } notify(); index--; String product = products[index]; return product; } public String[] getProducts() { returnproducts; } } publicclass TestProducerConsumer { publicstaticvoid main(String[] args) { SyncStack stack=new SyncStack(); Producer p=new Producer(stack); Consumer c=new Consumer(stack); new Thread(p).start(); new Thread(c).start(); } } 23. 编程实现序列化的 Student (sno,sname )对象在网络上的传输 package com.softeem.demo; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.net.ServerSocket; import java.net.Socket; class Student implements Serializable { private int sno; private String sname; public Student(int sno, String sname) { this.sno = sno; this.sname = sname; } public int getSno() { return sno; } public void setSno(int sno) { this.sno = sno; } public String getSname() { return sname; } public void setSname(String sname) { this.sname = sname; } @Override public String toString() { return } } class MyClient extends Thread { @Override public void run() { try { Socket s = new Socket( ObjectInputStream ois = new ObjectInputStream(s.getInputStream()); Student stu = (Student) ois.readObject(); System.out.println( ois.close(); s.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } class MyServer extends Thread { @Override public void run() { try { ServerSocket ss = new ServerSocket(9999); Socket s = ss.accept(); ObjectOutputStream ops = new ObjectOutputStream(s.getOutputStream()); Student stu = new Student(1, ops.writeObject(stu); ops.close(); s.close(); ss.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public class TestTransfer { public static void main(String[] args) { new MyServer().start(); new MyClient().start(); } } l JDBC 24. 用 dom4j 组件解析如下 XML 格式的文件: <?xml version= 规则: 要求:按照规则生成三条 SQL 语句! (即做一个方法解析 xml 文件生成一个含有三条 SQL 语 句的字符串 ) /** *解析 XML 文件生成一个含有可执行 SQL 语句的字符串 *@paramxmlFileName *@returnSQL */ public String parseXmltoSQL(String xmlFileName) { StringBuffer sbsql = new StringBuffer(); SAXReader reader = new SAXReader(); try { Document document = reader.read(new File(xmlFileName)); Element element = document.getRootElement(); Iterator it = element.elementIterator( while (it.hasNext()) { element = (Element) it.next(); //获得对表的操作 String oper = element.attributeValue( //获得表名 String tableName = element.attributeValue( if ( sbsql.append( Iterator it2 = element.elementIterator( String columnName1 = null; String columnValue1 = null; String columnName2 = null; String columnValue2 = null; if (it2.hasNext()) { element = (Element) it2.next(); columnName1 = element.attributeValue( } if (it2.hasNext()) { element = (Element) it2.next(); columnName2 = element.attributeValue( } sbsql.append( } elseif ( sbsql.append( Iterator it2 = element.elementIterator( String columnName1 = null; String columnValue1 = null; String columnName2 = null; String columnValue2 = null; String columnName3 = null; String columnValue3 = null; if (it2.hasNext()) { element = (Element) it2.next(); columnName1 = element.attributeValue( } if (it2.hasNext()) { element = (Element) it2.next(); columnName2 = element.attributeValue( } if (it2.hasNext()) { element = (Element) it2.next(); columnName3 = element.attributeValue( columnValue3 = element.getText(); } sbsql.append( }elseif ( sbsql.append( Iterator it2 = element.elementIterator( String columnName1 = null; String columnValue1 = null; if (it2.hasNext()) { element = (Element) it2.next(); columnName1 = element.attributeValue( columnValue1 = element.getText(); } sbsql.append( } } } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } return sbsql.toString(); } l JSP/SERVLET 25.写出 JSP 的内置对象并说明他们的作用 request:request表示 HttpServletRequest 对象。它包含了有关浏览器请求的信息,并且提供 了 几 个 用 于 获 取 cookie, header 数 据 的 有 用 的 方 法 。 response:response表 示 HttpServletResponse 对象,并提供了几个用于设置送回 浏览器的响应的方法(如 cookies, 头信息等) out:out对象是 javax.jsp.JspWriter 的一个实例, 并提供了几个方法使你能用于向 浏览器回送输出结果。 pageContext:pageContext表示一个 javax.servlet.jsp.PageContext 对象。 它是用于方便存取各种范围的名字空间、 servlet 相关的对象的 API , 并且包装了通用的 servlet 相关功能的方法。 session:session表示一个请求的 javax.servlet.http.HttpSession 对象。 Session 可以存贮用户的状态信息 application:applicaton 表示一个 javax.servle.ServletContext 对象。 这 有 助 于 查 找 有 关 servlet 引 擎 和 servlet 环 境 的 信 息 config:config表 示 一 个 javax.servlet.ServletConfig 对象。该对象用于存取 servlet 实例的初始化参数。 page:page表 示从该页面产生的一个 servlet 实例。 exception: exception对象是一个例外对象,当一个页面在运行过程中发生了例外,就产生这 个对象。如果一个 JSP 页面要应用此对象,就必须把 isErrorPage 设为 true ,否则无法编译。 他实际上是 java.lang.Throwable 的对象范文五:JAVA经典面试题目
operation 1表 insert,2表 update , 3表 delete.
,>,>