大华股份2013届校园招聘软件算法类试题D卷

本文提供了一系列C++编程练习题及其解答,包括指针、数组、结构体、位运算等内容,帮助读者掌握C++语言的基础知识。


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

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

答:5


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

  1. x = -1;  
  2. do  
  3. {  
  4.     x = x * x;  
  5. }while(!x);  

答:1


3.设有如下定义:

  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上以下程序运行的输出值是________

  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. }  
  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.编程实现两个数互换

  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值是________

  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);  
  1. 答:8  
  2. 以最大数据类型为准进行对齐,与位域无关。本例中最大数据类型是int,对齐大小是4B。  
  3. a1和a2共4B,a3和a4共4B。一共8B  

12.以下程序输出结果m是________
  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的返回值为________

  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.下述程序的运行结果是________

  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.下述程序的运行结果是________

  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. }  
  1. 答:54 96 48  
  2. 移位运算符的优先级较高,先执行移位操作,得a=0x36,即54  

16.下面程序的运行结果是________
  1. char *p = "abcdefgh";  
  2. p += 3;  
  3. cout<<strlen(strcpy(p, "ABCD"))<<endl;  
  1. 答:运行出错  
  2. 因为p的对象存储于文字常量区,不能对其进行修改  

17.下述程序输出结果是________
  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.简述多线程和多进程之间各自的优点和缺点
  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环境编程中线程间通信都有哪几种?
  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主要起到什么作用?
  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.
<think>好的,用户是一名应毕业生,想知道如何根据之前提到的嵌入式软硬件工程师的学习路径进行学习,以及应该去哪些城市找工作机会更大。我需要结合之前的回答,给出具体的建议。 首先,学习规划方面,用户是应生,可能需要从基础开始,逐步深入。之前的回答分成了四个阶段,但应生可能间有限,需要更紧凑的计划。应该建议分阶段学习,强调基础的重要性,比如电子电路、编程语言,然后逐步进入MCU开发、RTOS等。还要提到项目实践,因为实际经验对应生找工作很重要。 关于学习资源,可能需要推荐一些书籍、在线课程和开发板。比如《C Primer Plus》、MOOC的课程,以及STM32开发板。同,建议参与开源项目,比如参与Zephyr或FreeRTOS,这能提升实战能力。 求职策略方面,需要提醒准备技术文档和作品集,利用校园招聘和实习机会。可能还要提到如何准备面试,比如刷LeetCode和关注嵌入式相关的面试题。 城市选择是关键部分。需要分析哪些城市有更多的嵌入式相关企业。一线城市如深圳、上海、北京、杭州有很多科技公司,尤其是深圳的硬件环境很好。苏州和南京在汽车电子和半导体方面有优势。成都、武汉、西安这些新一线城市有政策支持,生活成本低,适合应生。此外,海外机会如慕尼黑、东京等,但可能用户暂不考虑,可以简单提及。 还要考虑行业趋势,比如汽车电子、物联网、工业控制,这些领域发展快,机会多。建议用户在学习中有所侧重,比如学习AUTOSAR或嵌入式Linux,增加竞争力。 用户可能没有明确说出来的需求是,如何在有限的间内高效学习,平衡理论与实践,以及如何在竞争激烈的就业市场中脱颖而出。需要强调项目经验和持续学习的重要性,建议制定学习计划,参加竞赛和开源项目,积累经验。 最后,职业发展建议部分,可以提到认证和深耕方向,帮助用户规划长期发展。同,城市选择不仅要看机会多少,还要考虑生活成本和个人适应能力,建议根据自身情况选择。</think>以下是针对应毕业生的嵌入式领域学习规划与就业城市选择的详细指南: --- ### **一、应生学习路径优化方案** #### 1. **快速通道学习计划(12-18个月)** **阶段目标**:构建可应对校招的技术栈 ```mermaid gantt title 嵌入式学习甘特图 dateFormat YYYY-MM section 基础强化 电子基础 :2023-09, 2m C语言精修 :2023-10, 3m STM32实战 :2024-01, 4m section 能力突破 RTOS应用 :2024-03, 3m Linux基础 :2024-05, 2m 项目冲刺 :2024-06, 3m ``` #### 2. **重点突破领域** - **硬件方向**:优先掌握Altium Designer多层板设计(4层板以上)、信号完整性仿真(HyperLynx) - **软件方向**:深入FreeRTOS内存管理机制、嵌入式Linux字符设备驱动开发 - **复合能力**:掌握基于STM32+Qt的嵌入式GUI开发(如工业HMI界面设计) #### 3. **低成本学习方案** | 资源型 | 推荐内容 | |----------------|--------------------------------------------------------------------------| | **书籍** | 《C与指针》《ARM Cortex-M3权威指南》《嵌入式Linux应用开发详解》 | | **MOOC** | 华清远见嵌入式课程、哈工大《微机原理》、电子科大《数字信号处理》 | | **开发板** | 正点原子STM32F4系列、野火i.MX6UL Linux开发板、ESP32-CAM物联网套件 | | **开源项目** | Zephyr RTOS贡献、LVGL图形库二次开发、RT-Thread软件包开发 | --- ### **二、求职策略与准备要点** #### 1. **求职黄金间线** ```mermaid flowchart TD A[9月-次年3月] --> B(秋招提前批) A --> C(秋招正式批) D[3月-5月] --> E(春招补录) F[全年] --> G(实习转正机会) ``` #### 2. **简历优化重点** - **技术文档化**:将毕业设计/课设转化为标准技术文档(含需求分析、电路图、代码仓库链接) - **作品视频化**:制作3分钟项目演示视频(展示硬件操作+软件逻辑) - **证书聚焦**:突出电赛/智能车竞赛经历、ARM/华为认证证书 #### 3. **面试准备清单** - **笔试重点**:指针运算题、状态机设计题、UART协议序分析 - **机考平台**:LeetCode嵌入式专项、牛客网硬件题库 - **高频问题**: - 如何设计低功耗物联网终端? - 阐述从需求到产品的完整开发流程 - 解释I2C总线仲裁机制 --- ### **三、城市机会矩阵分析** #### 1. **一线城市集群** | 城市 | 优势领域 | 代表企业 | 薪资范围(应) | |--------|-------------------------|------------------------------------------|------------------| | 深圳 | 消费电子/通信设备 | 华为/大疆/中兴 | 15-25k | | 上海 | 汽车电子/工业控制 | 特斯拉/联影医疗/泛亚汽车 | 14-22k | | 北京 | 航空航天/军工电子 | 航天科工/北汽新能源/兆易创新 | 13-20k | | 杭州 | 物联网/AIoT | 海康威视/大华/宇视科技 | 12-18k | #### 2. **新一线潜力城市** | 城市 | 产业特色 | 政策红利 | 生活成本比 | |--------|-------------------------|--------------------------------------|------------------| | 苏州 | 汽车电子/半导体 | 苏州工业园区税收优惠 | 深圳的60% | | 成都 | 军工电子/航空航天 | 天府软件园人才补贴 | 上海的55% | | 武汉 | 光电子/智能网联汽车 | 光谷3551人才计划 | 北京的50% | | 西安 | 航空航天/军工 | 硬科技之都政策支持 | 杭州的65% | #### 3. **海外机会窗口** - **德国慕尼黑**:汽车电子(博世/大陆集团) - **美国硅谷**:IoT芯片设计(TI/Qualcomm) - **日本东京**:工业机器人(发那科/安川电机) --- ### **四、行业趋势与方向选择** #### 1. **朝阳领域建议** - **汽车电子**:智能座舱开发(QNX Hypervisor技术) - **工业4.0**:预测性维护系统开发(振动分析算法) - **边缘AI**:TinyML模型部署(TensorFlow Lite Micro) #### 2. **技术组合策略** - **硬件+软件**:FPGA加速+嵌入式Linux(如Xilinx Zynq平台) - **垂直+通用**:医疗电子标准(IEC 60601)+ 通用嵌入式开发 - **传统+新兴**:Modbus协议+5G工业网关开发 --- ### **五、实操建议** 1. **建立技术博客**:定期更新GitHub技术笔记(建议每周2篇) 2. **参与标准认证**: - 汽车电子:AUTOSAR基础认证 - 功能安全:ISO 26262 Awareness Level 3. **构建人脉网络**: - 参加ARM Tech Symposia - 加入中国电子学会嵌入式专委会 --- ### **六、避坑指南** 1. **慎选领域**:避免过度投入已衰退技术(如8051单片机开发) 2. **合同注意**:警惕"全栈工程师"岗位中的软件外包陷阱 3. **城市选择**:优先考虑产业链完整度(配套企业数量>单个大厂) --- 应生应把握校招窗口期,建议采用"3+2"策略:3个月密集技术提升+2个月定向求职冲刺。城市选择可遵循"先发优势区域优先"原则,初期建议选择长三角/珠三角产业聚集区积累经验,3-5年后可根据专长领域进行二次城市定位。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值