软件工程师面试题
- 格式:doc
- 大小:83.76 KB
- 文档页数:8
选择题:在软件开发过程中,哪种模型强调按照时间顺序进行严格的阶段划分,每个阶段都有明确的任务和输出?A. 螺旋模型B. 喷泉模型C. 瀑布模型(正确答案)D. 敏捷模型关于数据结构中的栈(Stack),以下哪种说法是正确的?A. 栈是一种先进先出的数据结构B. 栈是一种后进先出的数据结构(正确答案)C. 栈不允许进行插入和删除操作D. 栈的访问速度比数组慢在面向对象编程中,哪个概念用于描述对象之间的交互方式?A. 继承B. 封装C. 接口(正确答案)D. 多态关于软件测试,以下哪种测试方法主要关注于测试软件的功能是否按照需求规格说明书正确实现?A. 性能测试B. 安全测试C. 功能测试(正确答案)D. 回归测试在数据库设计中,哪种图用于表示实体之间的关系?A. 数据流图B. E-R图(正确答案)C. 状态图D. 类图以下哪种编程语言是一种动态类型语言?A. JavaB. C++C. Python(正确答案)D. C#在软件开发中,版本控制的主要目的是什么?A. 提高软件的执行速度B. 管理软件的多个版本,确保团队成员之间的协作顺畅(正确答案)C. 减少软件中的bug数量D. 自动化软件测试关于算法的时间复杂度,以下哪种说法是正确的?A. 时间复杂度越低,算法的执行速度越慢B. 时间复杂度越高,算法的执行速度越快C. 时间复杂度用于描述算法执行时间与输入规模之间的增长关系(正确答案)D. 时间复杂度与算法的实际执行时间无关在Web开发中,哪种技术用于在客户端和服务器之间异步传输数据?A. HTMLB. CSSC. AJAX(正确答案)D. JavaScript(虽然JavaScript也用于Web开发,但它本身不专门用于异步传输数据)。
软件工程师面试题及答案在当今科技飞速发展的时代,软件工程师成为了备受追捧的职业之一。
而在求职过程中,面试是至关重要的环节。
以下为您呈现一些常见的软件工程师面试题及答案,希望能对您有所帮助。
一、技术类问题1、请简要介绍一下面向对象编程(OOP)的三大特性,以及它们在实际开发中的应用。
答案:面向对象编程的三大特性是封装、继承和多态。
封装是将数据和操作数据的方法封装在一个类中,以实现数据的隐藏和保护,提高代码的安全性和可维护性。
例如,将一个人的个人信息和相关操作封装在一个“Person”类中。
继承允许创建一个新类,从现有类继承属性和方法,实现代码的复用和扩展。
比如,从“Employee”类继承创建“Manager”类。
多态使得同一个方法在不同的对象中有不同的实现方式,增强了程序的灵活性。
比如,在一个图形绘制程序中,不同的图形类(如圆形、方形)都实现了“draw”方法,但具体的绘制方式不同。
2、谈谈你对数据库索引的理解,以及在什么情况下应该使用索引,什么情况下不应该使用?答案:数据库索引是一种用于提高数据检索速度的数据结构。
它类似于书籍的目录,通过索引可以快速定位到所需的数据。
在经常用于查询、连接和排序的列上应该使用索引,比如主键、外键、经常用于搜索的字段等。
然而,在数据量小的表、频繁更新的列、数据分布不均匀的列上不应该使用索引,因为创建和维护索引会带来额外的开销,可能会降低数据插入、更新和删除的性能。
3、解释一下什么是线程安全,以及如何实现线程安全?答案:线程安全是指多个线程同时访问和操作同一共享资源时,程序的执行结果是正确的,不会出现数据不一致或其他异常情况。
实现线程安全的方法有多种,比如使用同步关键字(如 synchronized )来锁定关键代码段,确保同一时刻只有一个线程能够访问共享资源;使用线程安全的集合类(如 ConcurrentHashMap )替代非线程安全的集合类;避免共享可变状态,尽量使用不可变对象等。
软件工程师面试题目及答案在软件工程师的面试过程中,面试官通常会提出一系列问题,以评估申请者的技术能力、专业知识和解决问题的能力。
本文将提供一些典型的软件工程师面试题目及其答案。
一、算法与数据结构1. 解释什么是时间复杂度和空间复杂度?如何分析算法的时间复杂度?时间复杂度是衡量算法执行时间的方法,用大O表示。
空间复杂度是衡量算法所需内存空间的方法,也用大O表示。
要分析算法的时间复杂度,我们可以通过计算算法中基本操作的执行次数来评估。
2. 请描述下常见的数据结构以及它们的特点。
常见的数据结构包括数组、链表、栈、队列、树和图等。
数组具有随机访问的特点,但插入和删除操作效率较低;链表可以高效地进行插入和删除操作,但随机访问的效率较低。
二、编程语言1. 请列举一些你熟悉的编程语言,并简要介绍它们的特点。
例如,Java是一种面向对象的编程语言,具有跨平台特性和丰富的类库;Python是一种简洁优雅的动态语言,以其易读易写的特点而受到广泛欢迎。
2. 你对面向对象编程有何了解?请解释继承、封装和多态的概念。
面向对象编程是一种编程思想,将问题抽象为对象,并通过对象之间的交互来解决问题。
继承是指一个类可以继承另一个类的属性和方法;封装是将数据和函数封装在一个单独的对象中,并对外提供公共接口;多态是指不同的对象对同一方法可以有不同的实现方式。
三、操作系统1. 解释进程和线程的概念,它们之间有何区别?进程是程序的执行实例,具有独立的内存空间和执行状态;线程是进程的一部分,多个线程可以共享进程的资源和上下文,线程之间的切换开销较小。
区别在于进程具有独立的资源和上下文,线程共享资源和上下文。
2. 什么是死锁?请描述一些常见的解决死锁问题的方法。
死锁是指在并发系统中,进程或线程之间因为相互等待资源而无法继续执行的状态。
常见的解决死锁问题的方法包括资源分级策略、避免策略和检测与解除策略。
四、数据库1. 请解释关系型数据库和非关系型数据库的概念,并列举几个常见的数据库产品。
软件工程师岗位面试题及答案1.请介绍一次您在团队中解决复杂技术问题的经历。
答案:在上一家公司,我们遇到了一个性能瓶颈问题,导致应用程序响应变慢。
通过分析代码,我发现了数据库查询优化的机会。
我重新设计了查询,减少了查询时间,从而提升了应用程序的性能。
2.请谈谈您在版本控制系统中的经验,以及您如何处理合并冲突。
答案:我熟悉Git,并且经常使用分支进行开发。
当出现合并冲突时,我会首先理解冲突的本质,然后与团队成员讨论解决方案。
我们会在测试环境中验证修改,确保没有引入新问题。
3.在敏捷开发中,您如何确保团队按时交付功能?答案:我在敏捷开发团队中担任过ScrumMaster角色。
我会协助制定冲刺目标,跟踪任务的进度,及时解决障碍,并确保团队保持高效沟通,以确保按时交付。
4.您如何保证代码质量和可维护性?答案:我重视代码审查和单元测试。
代码审查可以发现潜在问题并提供改进建议,而单元测试可以确保代码的正确性。
我还注重编写清晰的文档,以便将来维护和扩展代码。
5.请描述一个您在项目中使用设计模式解决问题的实例。
答案:在一个电子商务项目中,我们需要实现不同支付方式的接口,以支持多种支付方式。
我采用了策略模式,将每种支付方式封装为一个独立的类,并在运行时动态选择合适的支付策略。
6.如何处理一个需求变更,该变更可能对项目进度产生影响?答案:首先,我会与产品经理和团队讨论变更的紧急性和影响。
如果变更必要且合理,我们将评估其对进度的影响,并相应地进行调整,可能会重新分配资源或者调整冲刺计划。
7.您在持续集成和持续交付方面有何经验?答案:我在多个项目中使用Jenkins进行持续集成和交付。
我设置了自动化构建和测试流程,并确保每次提交都会触发构建和测试,从而及早发现问题并快速修复。
8.请说明您在保障应用程序安全性方面的做法。
答案:我会定期进行安全漏洞扫描和代码审查,确保代码没有潜在的安全隐患。
我还会采用输入验证、身份认证和授权等措施来保护应用程序免受攻击。
软件开发工程师面试题及答案在软件开发领域,面试是选拔优秀人才的关键环节。
以下是一些常见的软件开发工程师面试题及相应的答案参考。
一、基础知识类1、什么是面向对象编程(OOP)?它的主要特点有哪些?答:面向对象编程是一种编程范式,它将数据和对数据的操作封装在对象中。
主要特点包括封装、继承和多态。
封装是将数据和方法包装在一个类中,隐藏内部实现细节;继承允许一个类从另一个类继承属性和方法,实现代码复用;多态则是同一个方法在不同的对象中有不同的实现方式。
2、解释一下进程和线程的区别。
答:进程是程序的一次执行过程,拥有独立的内存空间;线程是进程中的一个执行单元,多个线程共享进程的内存空间。
进程的创建和销毁开销较大,而线程相对较小。
进程间通信相对复杂,线程间通信较为简单。
3、谈谈你对数据库索引的理解。
答:数据库索引是一种用于提高数据库查询效率的数据结构。
它就像是一本书的目录,可以快速定位到所需的数据。
常见的索引类型有B 树索引、哈希索引等。
索引可以加快查询速度,但过多或不恰当的索引会导致数据插入、更新和删除的性能下降。
二、编程语言类1、如果让你用 Python 实现一个冒泡排序算法,你会怎么做?答:```pythondef bubble_sort(arr):n = len(arr)for i in range(n):for j in range(0, n i 1):if arrj > arrj + 1 :arrj, arrj + 1 = arrj + 1, arrj```2、在 Java 中,如何实现线程同步?答:在Java 中,可以使用`synchronized` 关键字来实现线程同步。
可以将方法声明为`synchronized` ,或者使用同步块。
另外,还可以使用`Lock` 接口和相关实现类来实现更灵活的线程同步。
3、谈谈 C++中的指针和引用的区别。
答:指针是一个变量,存储的是另一个变量的内存地址;引用则是一个别名,必须在初始化时绑定到一个对象,并且之后不能再重新绑定。
软件工程师面试问题一、基本面试问题:1. 简单介绍一下你自己。
2. 你对软件工程师这个职位有什么理解?你觉得自己适合这个职位吗?3. 能否谈谈你对软件开发生命周期的了解?4. 你在过去的项目中遇到的最大的挑战是什么?你是如何处理的?5. 你如何处理项目延期或失败的情况?6. 在你的上一份工作中,你是如何与团队合作的?有遇到过与团队成员发生冲突的情况吗?你是如何处理的?7. 你有使用过哪些软件开发工具和技术?8. 能否谈谈你对代码质量的看法以及如何保证代码的质量?9. 你有使用过哪些软件开发模型?你认为哪个模型是最适合软件开发的?10. 你有没有参与到开源项目或者个人的项目中?能谈谈你的经验吗?11. 能否谈谈你对团队沟通和合作的看法?12. 你在哪些方面希望继续学习和提升自己?13. 你最擅长的编程语言是什么?为什么选择这个编程语言?14. 你对数据结构和算法有什么了解?能举例说明在实际项目中的应用吗?15. 你是否持续关注行业的发展和新技术的变化?二、技术面试问题:1. 什么是面向对象编程(OOP)?能否举例说明面向对象编程和面向过程编程的区别?2. 什么是设计模式?能否谈谈你熟悉的设计模式以及它们的应用场景?3. 什么是数据库索引?为什么要使用索引?你是如何优化数据库查询性能的?4. 你在开发过程中如何保证代码的可维护性和可扩展性?5. 什么是HTTP协议?它的工作原理是什么?6. 你对前端开发有了解吗?能谈谈前端开发中常用的技术和工具吗?7. 你对云计算和大数据有了解吗?能谈谈它们对软件开发的影响吗?8. 你有使用过自动化测试工具吗?能谈谈你使用的自动化测试工具以及它们的优缺点?9. 什么是敏捷开发?你认为敏捷开发在软件开发过程中的哪些方面有帮助?10. 你有使用过版本控制工具吗?如果是,请介绍一下你使用的版本控制工具,比如Git。
11. 你在开发过程中遇到过性能问题吗?你是如何进行性能优化的?12. 什么是多线程和并发?你是如何处理多线程编程中的安全问题的?13. 你有使用过数据库管理工具吗?如果是,请介绍一下你使用的数据库管理工具,比如MySQL。
软件工程师面试题在当今数字化的时代,软件工程师的需求日益增长,而面试环节则成为了筛选合适人才的关键。
以下为您呈现一系列常见且重要的软件工程师面试题。
一、编程语言相关1、请简要介绍一下您最熟悉的编程语言,以及它的优势和适用场景。
这个问题旨在考察候选人对所擅长语言的理解深度,以及能否清晰阐述其特点和应用领域。
2、谈谈在 C++中,指针和引用的区别。
此问题检验候选人对 C++这一复杂语言的核心概念的掌握程度。
3、如何在 Java 中实现多线程编程?多线程编程是 Java 中的重要内容,能够反映出候选人的实际编程能力和对并发概念的理解。
二、数据结构与算法1、请描述一下二叉搜索树的特点和操作。
数据结构是软件工程师的基础知识,二叉搜索树是常见的数据结构之一。
2、解释一下冒泡排序和快速排序的原理,并比较它们的时间复杂度和空间复杂度。
排序算法是算法中的基础,通过这个问题可以了解候选人的算法分析能力。
3、如何解决哈希冲突?哈希表在实际编程中广泛应用,处理哈希冲突是关键。
三、数据库相关1、什么是数据库索引?在什么情况下应该使用索引,什么情况下不应该使用?索引是提高数据库查询性能的重要手段,但使用不当也会带来负面影响。
2、讲述一下事务的 ACID 特性。
事务处理是数据库操作的关键概念,对其特性的理解至关重要。
3、如何优化数据库查询性能?这是实际工作中经常面临的问题,能考察候选人的实际经验和解决问题的能力。
四、操作系统相关1、进程和线程的区别是什么?操作系统的核心概念,对系统资源的管理有重要影响。
2、请解释一下虚拟内存的概念和作用。
虚拟内存是操作系统中的重要机制,有助于理解内存管理。
3、死锁产生的条件以及如何避免死锁?死锁是操作系统中的难点问题,能反映候选人对系统资源分配的理解。
五、软件工程相关1、请描述一下软件开发生命周期的各个阶段。
了解候选人对软件开发流程的整体把握。
2、什么是敏捷开发?它与传统开发方法有何不同?敏捷开发在现代软件开发中越来越流行,考察候选人对新开发模式的了解。
软件工程师面试题(含答案)一、MVC设计模式及其优缺点,结合Struts框架讨论其在Web应用中的使用MVC是一种应用观察者模式的框架模式,包括三个主要组成部分:模型、视图和控制器。
模型是业务处理层,独立于表现层;视图通过客户端数据类型显示数据,并回显模型层的执行结果;控制器是视图层和模型层之间的桥梁,控制数据的流向,接受视图层发出的事件,并重绘视图。
MVC的优点是分离了应用程序的关注点,使得应用程序更易于维护和扩展。
缺点是增加了开发复杂度,需要更多的代码和设计时间。
在Web应用中,常用的MVC实现模式是Servlet-centric,即使用JSP、Servlet和JavaBean实现。
其中,JSP负责显示和收集数据,Servlet连接视图和模型,将视图层数据发送给模型层,JavaBean分为业务类和数据实体,业务类处理业务数据,数据实体承载数据。
Struts是一个Web应用程序框架,使用MVC实现模式二,即以控制器为核心。
它提供了一些组件,包括:Model:Struts没有提供model类,开发者需要自行提供商业逻辑的JavaBean或EJB形式。
View:n form创建form bean,用于在控制器和视图之间传输数据。
此外,Struts还提供了自定义JSP标签库,辅助开发者用JSP创建交互式的以表单为基础的应用程序。
应用程序资源文件保留了一些文本常量和错误消息,可转变为其它语言,可用于JSP中。
nServlet,n。
n需要符合Struts规范,并在struts-config.xml中进行配置,n form,n控制器。
n控制器提供了model的逻辑接口。
WebService是基于SOA架构的,不依赖于语言和平台,可实现不同语言间的相互调用,进行基于Http协议的网络应用交互。
WebService遵守WSDL/SOAP规范,实现不同语言间的调用。
Web Service = WSDL + SOAP + UDDI(webservice的注册)。
软件工程师常见面试题在当今竞争激烈的就业市场中,软件工程师的岗位备受青睐。
而面试则是通往这一岗位的关键环节,面试官通常会通过一系列问题来评估候选人的技术能力、解决问题的能力、团队协作能力以及沟通能力等。
以下是一些常见的软件工程师面试题:一、技术基础类1、谈谈你对面向对象编程(OOP)的理解,以及其三大特性(封装、继承、多态)在实际开发中的应用。
面向对象编程是一种编程范式,它将数据和操作数据的方法封装在一起,形成对象。
封装可以隐藏对象的内部实现细节,只暴露必要的接口,提高了代码的安全性和可维护性。
继承允许子类继承父类的属性和方法,实现代码的复用和扩展。
多态则使得同一个方法在不同的对象上有不同的实现方式,增强了程序的灵活性和可扩展性。
比如,在一个图形绘制的程序中,可以定义一个父类“Shape”,然后派生出子类“Circle”、“Rectangle”等,通过多态,可以用统一的接口来绘制不同的图形。
2、解释一下什么是数据库索引,以及它的作用和可能带来的弊端。
数据库索引是一种数据库结构,用于加快数据的查询和检索速度。
它就像一本书的目录,通过索引可以快速定位到所需的数据,而不必全表扫描。
索引的作用显著,能够大大提高查询效率,特别是在处理大型数据表时。
然而,索引也并非完美无缺。
创建和维护索引需要消耗系统资源,过多的索引会增加数据插入、更新和删除的开销。
此外,对于很少用于查询或者数据量较小的表,创建索引可能得不偿失。
3、请简述一下常见的排序算法(如冒泡排序、快速排序、归并排序等)的时间复杂度和空间复杂度,并比较它们的优缺点。
冒泡排序的时间复杂度为 O(n²),空间复杂度为 O(1)。
它的优点是实现简单,易于理解,缺点是效率较低。
快速排序的平均时间复杂度为 O(nlogn),最坏情况为 O(n²),空间复杂度为 O(logn)到 O(n)。
它在大多数情况下效率很高,但在最坏情况下性能不佳。
归并排序的时间复杂度为 O(nlogn),空间复杂度为 O(n)。
软件工程师面试题及答案1.你对软件开发生命周期有哪些了解?答:软件开发生命周期是软件工程中的一个重要概念,通常被划分为五个阶段:需求分析、设计、编码、测试和维护。
每个阶段都有特定的任务和目标,旨在确保软件开发的质量和可靠性。
2.请简述软件测试的类型和重要性。
答:软件测试是确保软件质量和可靠性的关键过程,主要分为功能测试、性能测试、安全测试、压力测试等类型。
测试的目的是发现软件中的错误和缺陷,以确保软件能够正常运行,满足用户的需求和期望。
3.请介绍一下你在软件开发中使用的编程语言及其优势和劣势答:我熟练掌握Java、C++、Python等编程语言。
其中,Java是一种面向对象的语言,具有跨平台、高效、可扩展等优势;C++是一种高效、可靠的系统编程语言,用于开发底层系统和高性能应用;Python是一种简单易学、适用于快速开发的高级编程语言,具有丰富的库和工具支持。
4.你对面向对象编程有哪些了解?答:面向对象编程是一种常见的编程范式,强调将程序设计看作是一组对象的交互。
它主要通过封装、继承、多态等概念来组织代码,以提高代码的可重用性和可维护性。
5.请简述一下你在项目中的代码管理经验?答:我通常使用Git来管理代码,能够熟练运用分支、合并、提交等操作。
我也经常使用GitHub等代码托管平台,以便团队成员协同工作和代码审核。
6.请介绍一下你在团队合作中的角色和经验。
答:作为一个软件工程师,团队合作是非常重要的。
在团队合作中,我通常会扮演不同的角色,如开发工程师、项目经理、技术领导等。
我擅长与团队成员沟通协作,确保项目进展和目标的达成。
我还善于分析和解决问题,协助团队成员克服困难,提高工作效率和质量。
7.你对代码重构有哪些了解?答:代码重构是一种常见的软件工程技术,旨在通过修改代码结构和设计来改善代码质量和可维护性。
重构可以消除代码重复、提高代码可读性、降低维护成本、提高代码的可测试性等。
8.你对敏捷开发有哪些了解?答:敏捷开发是一种灵活的软件开发方法,强调迭代、增量开发、以人为本等原则。
一、英语题:1)、Windows provides a user-friendly graphical(1) including pop-up menus,csrollbars,dialogue boxes,icons and etc.A.displayB.surfaceC.interfaceD.help2)、Bitmap images use a grid of small squars known as (2) to represent images.A.pixelsB.pointsC.elementsD.dots3) 、With(3)you can communicate in real time with people all around the world.A.E-MailB.WWWC.FTPD.webchar4) 、Office(4)is the application of the computer and communications technology to improve the productivity of office workers.A.ToolB.AutomationC.DeviceD.FAX5) 、(5)means the conducting of business communication and transction over network and through computers.A.E-MailB.E-GevemmentC.E-textD.E-Commerce6) 、The line of computing jobs waiting to be run on a computer system might bea (6).The jobs are serviced in the order of their arrival,that is,the first in is the first out.A queueB stackC arrayD record7)、 The (7) is a collection of modules serving as interface between hardware and software to provide a software platform.A computerB processorC applicationD operating system8)、 C++ fully supports (8)programming.A visualB object-orientedC logicD natural language9)、The Internet is an open system,and most information is available to everyone. It is very important to add (9)to existing system for protecting thesecret information.A Web pagesB modemC securityD network10)、 A (10)system placed between the company network and the outside world may limit outside access to the internal networkA firewallB modemC gatewayD key二、程序流程图:1)、阅读以下说明和流程图,填补流程图中的空缺(1)~(5),将解答填入答题纸的对应栏内。
【说明】求连接函数f(x)的根(方程f(x)=0的解)的最简单方法是二分法。
为此,首先需要在若干点上检查函数的符号,如果发现f(a)与f(b)符号相反(a<b),则在区间(a,b)中必然存在f(x)的根。
因为当x从a变到b时,连接函数的值将从正变到负(或从负变到正),必然要经过0。
区间(a,b)就是根的初始范围。
取该区间的中点m,如果f(m)=0,则根就是m。
如果f(a)与 f(m)符号相反,则根一定在区间(a, m)中:如果f(m)与f(b)符号相反,则根一定在区间(m ,b)中,根的范围缩小了一半。
依此类推,将区间一半一半地分下去,当区间的长度很小(达到根的精度要求,例如0.001)时,或者当区间中点处的函数值几乎接近于0(即绝对值小于预先规定的微小量,例如0.001)时,近似计算机就可以结束了。
三、基础题1)、头文件中的 ifndef/define/endif 干什么用?(3分)2)、写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个(3分)3)、1,5,5,5,加减乘除,怎么出24点?(5分)4)、以下为Windows NT下的32位C++程序,请计算sizeof的值(6分)void Func ( char str[100] ){sizeof( str ) = (1);}void *p = malloc( 100 );sizeof ( p ) = (2);5)、请写出下列代码的输出内容(8分)#include <stdio.h>int main(void){int a,b,c,d;a=20;b=a++;c=++a;d=10*a++;printf("a, b,c,d:%d,%d,%d,%d",a, b,c,d);return 0;}6)、分别给出BOOL,int,float,指针变量与“零值”比较的 if 语句(假设变量名为var)(10分)四、编程题(10分)1)编写strcpy函数(10分)已知strcpy函数的原型是char *strcpy(char *strDest, const char *strSrc);其中strDest是目的字符串,strSrc是源字符串。
Ⅰ:不调用C++/C的字符串库函数,请编写函数 strcpychar *strcpy(char *strDest, const char *strSrc)Ⅱ、strcpy能把strSrc的内容复制到strDest,为什么还要char * 类型的返回值?2)单片机模拟开关灯编程(用C语言或者汇编编写)(10分)㈠、要求:如图下图所示,监视开关K1(接在P3.0端口上),用发光二极管L1(接在单片机P1.0端口上)显示开关状态,如果开关合上,L1亮,开关打开,L1熄灭。
㈡、电路原理图:(接口的定义:A T89X51.H)㈢、系统板上硬件连接:①把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块” 区域中的L1端口上;②把“单片机系统”区域中的P3.0端口用导线连接到“四路拨动开关”区域中的K1端口上;㈣、程序设计内容:①开关状态的检测过程单片机对开关状态的检测相对于单片机来说,是从单片机的P3.0端口输入信号,而输入的信号只有高电平和低电平两种,当拨开开关K1拨上去,即输入高电平,相当开关断开,当拨动开关K1拨下去,即输入低电平,相当开关闭合。
单片机可以采用JB BIT,REL或者是JNB BIT,REL指令来完成对开关状态的检测即可。
②输出控制如图3所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。
㈤、程序流程图:Ⅰ、按以上要求编写程序(用C语言或者汇编语言编写):3)用汇编语言编写程序(10分):Ⅰ、写一个程序完成功能:读键盘,并把所按键盘显示出来,在检测到按下SHIFT键后,就结束运行。
要求:调用键盘I/O程序的2号功能取得变换键状态字节,进而判断是否按下了SHIFT键。
在调用0号功能读键盘之前,先调用1号功能判断键盘是否有键可读,否则针导致不能及时检测到用户按下的SHIFT。
请写汇编语言代码:五、逻辑推理题(20分)1)、小明一家过一座桥,过桥时是黑夜,所以必须有灯。
现在小明过桥要1秒,小明的弟弟要3秒,小明的爸爸要6秒,小明的妈妈要8秒,小明的爷爷要12秒。
每次此桥最多可过两人,而过桥的速度依过桥最慢者而定,而且灯在点燃后30秒就会熄灭。
问:小明一家如何过桥?(10分)2)、如果你有无穷多的水,一个3夸脱的和一个5夸脱的提桶,你如何准确称出4夸脱的水?(10分)答案:仅供参考一、英语题(1)C, (2)A, (3)D, (4)A, ( 5)A,(6)A, (7)D, (8)B, (9)C, (10)A.二、程序流程图(1) (a+b)/2(2) f((a+b)/2)或f(x)(3) fabs(y)(4) b(5) a三、基础题1) 防止该头文件被重复引用2) #define MIN(A,B) ((A)<=(B)?(A):(B))3) (5-(1/5))*54) (1) sizeof(str) = 4(2) sizeof(p) = 45) a=23b=20c=22d=2206) BOOL型变量:if(!var)int型变量: if(var==0)float型变量:const float EPSINON = 0.00001;if ((x >= - EPSINON) && (x <= EPSINON)指针变量:if(var==NULL)剖析:考查对0值判断的“内功”,BOOL型变量的0判断完全可以写成if(var==0),而int型变量也可以写成if(!var),指针变量的判断也可以写成if(!var),上述写法虽然程序都能正确运行,但是未能清晰地表达程序的意思。
一般的,如果想让if判断一个变量的“真”、“假”,应直接使用if(var)、if(!var),表明其为“逻辑”判断;如果用if判断一个数值型变量(short、int、long等),应该用if(var==0),表明是与0进行“数值”上的比较;而判断指针则适宜用if(var==NULL),这是一种很好的编程习惯。
浮点型变量并不精确,所以不可将float变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”形式。
如果写成if (x == 0.0),则判为错,得0分四、编程题1):不调用C++/C的字符串库函数,请编写函数 strcpychar *strcpy(char *strDest, const char *strSrc)assert((strDest!=NULL) && (strSrc !=NULL)); // 2分char *address = strDest; // 2分while((*strDest++ = * strSrc++) != '\0' ) // 2分return address ; // 2分}Ⅱ:strcpy能把strSrc的内容复制到strDest,为什么还要char * 类型的返回值?答:为了实现链式表达式。