2013届大华股份 软件算法类试题 D卷

简介:

来源:http://blog.csdn.net/mishifangxiangdefeng/article/details/8120474

一、填空题(共17题,每题3分,总共51分)

1.设有int a = 5, *b, **c,执行语句c = &b, b = &a后,**c的值为________

答:5


2.以下程序是否有误,如果无误,请写出执行的次数________

[cpp]  view plain copy
  1. x = -1;  
  2. do  
  3. {  
  4.     x = x * x;  
  5. }while(!x);  

答:1


3.设有如下定义:

[cpp]  view plain copy
  1. struct sk  
  2. {  
  3.     int a;  
  4.     float b;  
  5. }data;  
  6. int *p;  

若要使p指向data中的a域,正确的赋值语句是________

答:p = &data.a;


4.用变量a给出下面的定义,一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型________

答:int (*a)[10](int)


5.若有语句:int array[2][3][4],则数组array的元素个数为________

答:24


6.已知int a[5], *p = a,则(p+1)等价于________

答:a[1]的地址


7.一个C源程序必须包含一个________函数

答:main


8.Intel X86 PC上以下程序运行的输出值是________

[cpp]  view plain copy
  1. int main(int argc, char *argv[])  
  2. {  
  3.     union  
  4.     {  
  5.         struct  
  6.         {  
  7.             unsigned short s1:3;  
  8.             unsigned short s2:3;  
  9.             unsigned short s3:3;  
  10.         }x;  
  11.         char c;  
  12.     }v;  
  13.     v.c = 103;  
  14.     cout<<v.x.s1<<endl;  
  15.     return 0;  
  16. }  
[cpp]  view plain copy
  1. 答:7  
  2. 103转换为8位的二进制为01100111,存储方式如下:  
  3. 01|100|111  
  4. __|___|___  
  5. s3|s2 |s1  


9.请用文字说明p是何种类型变量:int (*p)[n];________

答:p是指针一个二维int型数组的指针。注意,p不是函数指针数组,如果是函数指针数组,应该写成int (*p)[n]()


10.编程实现两个数互换

[cpp]  view plain copy
  1. int main(int argc, char *argv[])  
  2. {  
  3.     int temp, x, y;  
  4.     cin>>x>>y;  
  5.     temp = x;  
  6.     ________  
  7.     ________  
  8.     cout<<x<<','<<y;  
  9. }  

答:x = y; y = temp;


11.32位系统中,size_SA值是________

[cpp]  view plain copy
  1. struct  
  2. {  
  3.     int a1:8;  
  4.     int a2:8;  
  5.     char a3[2];  
  6.     char a4[2];  
  7. }sA;  
  8. int size_SA = sizeof(sA);  
[cpp]  view plain copy
  1. 答:8  
  2. 以最大数据类型为准进行对齐,与位域无关。本例中最大数据类型是int,对齐大小是4B。  
  3. a1和a2共4B,a3和a4共4B。一共8B  


12.以下程序输出结果m是________

[cpp]  view plain copy
  1. int w = 1, x = 2, y = 3, z = 4;  
  2. m = (w < x) ? w : x;  
  3. m = (w < y) ? w : y;  
  4. m = (w < z) ? w : z;  
  5. cout<<"m="<<m;  

答:1


13.函数t()、f()的定义如下所示,若调用函数t时传递给x的值为3,并且调用函数f()时,第一个参数采用传值(call by value)方式,第二个参数采用传引用(call by reference)方式,则函数t的返回值为________

[cpp]  view plain copy
  1. int t(int x)  
  2. {  
  3.     int a;  
  4.     a = 3 * x - 1;  
  5.     f(x, a);  
  6.     return a+x;  
  7. }  
  8. void f(int r, int &s)  
  9. {  
  10.     int x;  
  11.     x = 2 * r + 1;  
  12.     s = s * r;  
  13.     r = s - x;  
  14.     return ;  
  15. }  

答:27


14.下述程序的运行结果是________

[cpp]  view plain copy
  1. int main(int argc, char *argv)  
  2. {  
  3.     short unsigned int a = 5;  
  4.     int b = 7;  
  5.     int c = b + a > 0 ? a + b : a - b;  
  6.     cout<<a+b<<' '<<b+c<<' '<<c+a<<endl;  
  7.     return 0;  
  8. }  

答:-2 5 17


15.下述程序的运行结果是________

[cpp]  view plain copy
  1. int main(int argc, char *argv[])  
  2. {  
  3.     int a, b, c;  
  4.     c = a = 0x30, b = 0x60;  
  5.     a = c | b >> 4;  
  6.     cout<<a<<' '<<b<<' '<<c<<endl;  
  7.     return 0;  
  8. }  
[cpp]  view plain copy
  1. 答:54 96 48  
  2. 移位运算符的优先级较高,先执行移位操作,得a=0x36,即54  


16.下面程序的运行结果是________

[cpp]  view plain copy
  1. char *p = "abcdefgh";  
  2. p += 3;  
  3. cout<<strlen(strcpy(p, "ABCD"))<<endl;  
[cpp]  view plain copy
  1. 答:运行出错  
  2. 因为p的对象存储于文字常量区,不能对其进行修改  


17.下述程序输出结果是________

[cpp]  view plain copy
  1. #define CAL(x, y) (x * x - y * y)  
  2. int main(int argc, char *argv[])  
  3. {  
  4.     int a = CAL(4, 3);  
  5.     int b = CAL(3, 2);  
  6.     cout<<a<<' '<<b<<' '<<CAL(a+1, b-1)<<endl;  
  7.     return 0;  
  8. }  

答:7 5 4


二、编程题(第1题10分,第2题15分,总共25分)

1.已知一图像数组unsigned char Image[m][n],其中m>2000,n>1500;编写函数计算Image数组中所有元素的中间值,并返回计算得到的中间值。
2.已经两个矩阵数组double Src1[x][y]和double Src2[y][z],编写函数计算矩阵Src1和矩阵Src2的乘积值矩阵Dst,假设Src1,Src2和Dst的内存都已经申请好了并且够用

三、专业题(简答题)(嵌入式、windows和算法三个方向请根据申请岗位选择一个方向答题)(每小题8分)


嵌入式平台方向

1.简述多线程和多进程之间各自的优点和缺点
[cpp]  view plain copy
  1. (1)多线程的优点:  
  2. 无需跨进程边界;  
  3. 程序逻辑和控制方式简单;  
  4. 所有线程可以直接共享内存和变量等;  
  5. 线程方式消耗的总资源比进程方式好;  
  6. (2)多线程缺点:  
  7. 每个线程与主程序共用地址空间,受限于2GB地址空间;  
  8. 线程之间的同步和加锁控制比较麻烦;  
  9. 一个线程的崩溃可能影响到整个程序的稳定性;  
  10. 到达一定的线程数程度后,即使再增加CPU也无法提高性能;  
  11. 线程能够提高的总性能有限,而且线程多了之后,线程本身的调度也是一个麻烦事儿,需要消耗较多的CPU  
  12. (3)多进程优点:  
  13. 每个进程互相独立,不影响主程序的稳定性,子进程崩溃没关系;  
  14. 可以尽量减少线程加锁/解锁的影响,极大提高性能,就算是线程运行的模块算法效率低也没关系;  
  15. 通过增加CPU,就可以容易扩充性能;  
  16. 每个子进程都有2GB地址空间和相关资源,总体能够达到的性能上限非常大  
  17. (4)多进程缺点:  
  18. 逻辑控制复杂,需要和主程序交互;  
  19. 多进程调度开销比较大;  
  20. 需要跨进程边界,如果有大数据量传送,就不太好,适合小数据量传送、密集运算  

2.Linux环境编程中线程间通信都有哪几种?
[cpp]  view plain copy
  1. 1.套接字(socket)  
  2. 2.共享内存(share memory)  
  3. 共享内存实现分为两个步骤:  
  4. (1)创建共享内存,使用shmget函数。  
  5. (2)映射共享内存,将这段创建的共享内存映射到具体的进程空间去,使用shmat函数。  
  6. 3.信号(signal)  
  7. (1)信号类型,下面是几种常见的信号:  
  8. SIGHUP:从终端上发出的结束信号  
  9. SIGINT:来自键盘的中断信号(Ctrl-C)  
  10. SIGKILL:该信号结束接收信号的进程  
  11. SIGTERM:kill命令发生的信号  
  12. SIGCHLD:标识了进程停止或结束的信号  
  13. SIGSTOP:来自键盘(Ctrl-Z)或调试程序的停止执行信号  
  14. (2)信号处理:  
  15. 1.忽略此信号  
  16. 2.执行用户希望的动作  
  17. 3.执行系统默认动作  
  18. (3)信号发送:  
  19. 发送信号的主要函数有kill和raise。kill既可以向自身发送信号,也可以向其他进程发送信号。与kill函数不同的是,raise函数是向进程自身发送信号。  
  20. 4.消息队列(message queue)  
  21. (1)定义:unix早期通信机制之一的信号能够传送的信息量有限,管道则只能传送无格式的字节流,这无疑会给应用程序开发带来不便。消息队列(也叫做报文队列)则克服了这些缺点。  
  22. (2)发展:消息队列就是一个消息的链表。可以把消息看作一个记录,具有特定的格式。进程可以向中按照一定的规则添加新消息;另一些进程则可以从消息队列中读走消息。  
  23. (3)持续性:系统V消息队列是随内核持续的,只有在内核重起或者人工删除时,该消息队列才会被删除。  
  24. (4)键值:消息队列的内核持续性要求每个消息队列都在系统范围内对应唯一的键值,所以,要获得一个消息队列的描述字,必须提供该消息队列的键值。  
  25. 5.管道(pipe)和有名管道(FIFO);  
  26. 当一个管道建立时,它会创建两个文件描述符:filedis[0]用于读管道,filedis[1]用于写管道。  
  27. 管道关闭:关闭管道只需将这两个文件描述符关闭即可,可以使用普通的close函数逐个关闭。  
  28. 命名管道和无名管道基本相模同,但也有不同点:无名管道只能由父子进程使用;但是通过命名管道,不相关的进程也能交换数据。  

3.ARM Linux中的Bootloader主要起到什么作用?
[cpp]  view plain copy
  1. Bootloader(引 导加载程序)是系统加点后运行的第一段代码。在嵌入式系统中,通常并没有香BIOS那样的固件程序(有的嵌入式CPU会在芯片内部嵌入一段短小的程序,一 般用来将Bootloader装载进AM中,因此 Bootloader的作用于PC机上的BIOS类似),通过Booloader可以完成对系统板上的 主要部件如CPU,SDRAM,FLASH和串口等进行初始化,也可以下载文件到系统板,对FLASH进行擦出于编程。在一个基于ARM的嵌入式系统中, 系统的在上电或复位时通常都从地址 0x00000000处开始执行,而这个地址安排的通常就是系统Bootloader。通过这段小程序可以初始化硬件 设备,建立内存空间的映射。从而将系统的软硬件环境带到一个合适的状态,一边最终调用操作系统内核准备好正确的环境。  
  2.     Bootloader一般包含一下几个必备功能  
  3.     (1)初始化处理器。这个动作都是用汇编语言完成的,当电源接通就会执行这个动作,通常只有两三个汇编指令,目的是将CPU的控制权转交给硬件初始化的程序。  
  4.     (2)初始化一些必要的硬件,这个动作都是汇编语言完成的。主要是初始化CPU,SDRAM等,其他硬件,例如串口,可以由C语言等比较高级的语言来完成后续动作。  
  5.     (3)设置处理器的寄存器以及内存,关掉所有输入管脚(包括终端管脚),以防突然有信号进入妨碍我们接下来的硬件初始化动作。然后初始化串口,以便后续运行的程序能够同Host端进行通信,便于调试。  
  6.     (4) 从特定的位置把操作系统和文件系统调入内存,并设置一些必要的初始参数。然后把CPU的控制权交给操作系统。有的Bootloader会先从串讲偶或者网 络其他路径得到内核的映象文件。然后把这些文件写入到target系统的Flash或者其他的存储介质,然后把内核载入到RAM执行,同时交出控制 权。  


windows平台方向

1.简述VC中,下面这个错误意思,可能原因和处理方法:
error LINK2005:symbol "xxx" already defined
2.简述SendMessage和PostMessage的差别
3.简述Critical Section、Mutex、Semaphore的功能和差别

算法方向

1.给出水平边和垂直边的边缘检测的soble算子
2.adboost的含义是什么?简单介绍一下定义
3.







本文转自夏雪冬日博客园博客,原文链接:http://www.cnblogs.com/heyonggang/archive/2013/03/28/2986869.html,如需转载请自行联系原作者
目录
相关文章
|
24天前
|
运维 监控 JavaScript
内网网管软件中基于 Node.js 的深度优先搜索算法剖析
内网网管软件在企业网络中不可或缺,涵盖设备管理、流量监控和安全防护。本文基于Node.js实现深度优先搜索(DFS)算法,解析其在网络拓扑遍历中的应用。通过DFS,可高效获取内网设备连接关系,助力故障排查与网络规划。代码示例展示了图结构的构建及DFS的具体实现,为内网管理提供技术支持。
40 11
|
1月前
|
机器学习/深度学习 存储 算法
解锁文件共享软件背后基于 Python 的二叉搜索树算法密码
文件共享软件在数字化时代扮演着连接全球用户、促进知识与数据交流的重要角色。二叉搜索树作为一种高效的数据结构,通过有序存储和快速检索文件,极大提升了文件共享平台的性能。它依据文件名或时间戳等关键属性排序,支持高效插入、删除和查找操作,显著优化用户体验。本文还展示了用Python实现的简单二叉搜索树代码,帮助理解其工作原理,并展望了该算法在分布式计算和机器学习领域的未来应用前景。
|
18天前
|
存储 缓存 监控
企业监控软件中 Go 语言哈希表算法的应用研究与分析
在数字化时代,企业监控软件对企业的稳定运营至关重要。哈希表(散列表)作为高效的数据结构,广泛应用于企业监控中,如设备状态管理、数据分类和缓存机制。Go 语言中的 map 实现了哈希表,能快速处理海量监控数据,确保实时准确反映设备状态,提升系统性能,助力企业实现智能化管理。
29 3
|
25天前
|
缓存 监控 算法
内网监控管理软件:PHP 语言队列算法揭秘
在数字化办公环境中,内网监控管理软件对企业的稳定运行和信息安全至关重要。本文深入介绍PHP中的队列算法及其在内网监控软件中的应用,包括监控数据收集、任务调度和日志记录等场景,通过代码示例展示其实现方法。队列算法可提高性能、保证数据顺序并实现异步处理,为企业提供高效的安全保障。
23 1
|
1月前
|
监控 算法 安全
内网桌面监控软件深度解析:基于 Python 实现的 K-Means 算法研究
内网桌面监控软件通过实时监测员工操作,保障企业信息安全并提升效率。本文深入探讨K-Means聚类算法在该软件中的应用,解析其原理与实现。K-Means通过迭代更新簇中心,将数据划分为K个簇类,适用于行为分析、异常检测、资源优化及安全威胁识别等场景。文中提供了Python代码示例,展示如何实现K-Means算法,并模拟内网监控数据进行聚类分析。
43 10
|
2月前
|
存储 算法 安全
控制局域网上网软件之 Python 字典树算法解析
控制局域网上网软件在现代网络管理中至关重要,用于控制设备的上网行为和访问权限。本文聚焦于字典树(Trie Tree)算法的应用,详细阐述其原理、优势及实现。通过字典树,软件能高效进行关键词匹配和过滤,提升系统性能。文中还提供了Python代码示例,展示了字典树在网址过滤和关键词屏蔽中的具体应用,为局域网的安全和管理提供有力支持。
62 17
|
2月前
|
运维 监控 算法
企业局域网监控软件中 Java 优先队列算法的核心优势
企业局域网监控软件是数字化时代企业网络安全与高效运营的基石,犹如一位洞察秋毫的卫士。通过Java实现的优先队列算法,它能依据事件优先级排序,确保关键网络事件如异常流量、数据泄露等被优先处理,保障系统稳定与安全。代码示例展示了如何定义网络事件类并使用PriorityQueue处理高优先级事件,尤其在面对疑似风险时迅速启动应急措施。这一核心技术助力企业在复杂网络环境中稳健前行,护航业务腾飞。
69 32
|
20天前
|
存储 算法 安全
基于 Go 语言的公司内网管理软件哈希表算法深度解析与研究
在数字化办公中,公司内网管理软件通过哈希表算法保障信息安全与高效管理。哈希表基于键值对存储和查找,如用户登录验证、设备信息管理和文件权限控制等场景,Go语言实现的哈希表能快速验证用户信息,提升管理效率,确保网络稳定运行。
27 0
|
2月前
|
负载均衡 算法 安全
探秘:基于 C++ 的局域网电脑控制软件自适应指令分发算法
在现代企业信息化架构中,局域网电脑控制软件如同“指挥官”,通过自适应指令分发算法动态调整指令发送节奏与数据量,确保不同性能的终端设备高效运行。基于C++语言,利用套接字实现稳定连接和线程同步管理,结合实时状态反馈,优化指令分发策略,提升整体管控效率,保障网络稳定,助力数字化办公。
71 19
|
3月前
|
存储 运维 监控
探索局域网电脑监控软件:Python算法与数据结构的巧妙结合
在数字化时代,局域网电脑监控软件成为企业管理和IT运维的重要工具,确保数据安全和网络稳定。本文探讨其背后的关键技术——Python中的算法与数据结构,如字典用于高效存储设备信息,以及数据收集、异常检测和聚合算法提升监控效率。通过Python代码示例,展示了如何实现基本监控功能,帮助读者理解其工作原理并激发技术兴趣。
87 20

热门文章

最新文章