文章目录
- 1、选择题
- 1.1
- 1.2
- 1.3
- 1.4
- 1.5
- 1.6
- 1.7
- 1.8
- 1.9
- 1.10
- 2、填空题
- 2.1
- 2.2
- 2.3
- 2.4
- 2.5
- 3、简答题
- 3.1
- 3.2
- 4、编程题
- 4.1
岗位:软件开发工程师(嵌入式软件方向)
题型:10 道选择题,5 道填空题,2 道简答题,1 道编程题
1、选择题
1.1
【不定项选择题】使用 C 语言编程时,以下对 typedef
和 #define
的使用或理解,正确的有 (BD)
typedef int INTERGER; unsigned INTERGER n;
typedef
在编译阶段生效,有类型检查。#define
在预处理阶段生效,预处理器仅做文本替换,不进行任何检查#define PTR_INT int *
,PTR_INT p1,p2;
#define
没有作用域的限制,在其定义点之后的整个文件中有效,除非它被#undef
指令显式地取消定义,而typedef
有自己的作用域
解答:
typedef
可以用来定义已存在变量类型的别名,但是unsigned
后面应该跟一个完整的类型,选项 A 错误
int* p1,p2;
将定义两个int
类型指针变量P1
和P2
,但是如果#define PTR_INT int *
,然后PTR_INT p1,p2;
将定义一个int*
类型的指针变量P1
和 一个int
类型的普通变量P2
,因此选项 C 可能存在理解上的错误
1.2
【不定项选择题】使用 C 语言编程时,以下叙述错误的 (ACD)
continue
语句的作用是结束整个循环的执行- 只能在循环体内和
switch
语句体内使用break
语句 - 在循环体内使用
break
语句或continue
语句的作用相同 - 从多层循环嵌套中退出时,只能使用
goto
语句
解答:
continue
用于结束当前层循环,break
用于跳出整个循环,选项 A、C 错误
从多层循环嵌套中退出时,可以使用break
、goto
等语句,选项 D 错误
1.3
【不定项选择题】以下对二维数组的定义中正确的是 (C)
int a[4][]={1,2,3,4,5,6};
int a[][3];
int a[][3]={1,2,3,4,5,6};
int a[][]={{1,2,3},{4,5,6}};
解答:
- 缺少第二维大小,无法确定型状,选项 A 错误
- 缺少初始化,选项 B 错误
- 选项 C 正确
- 缺少第一维大小,选项 D 错误
1.4
【不定项选择题】某研究所的员工构成情况是:所有的工程师都是男性,并非所有工程师都是研究生,并非所有研究生都是男性。由此可以推出: (ABCD)
- 有的男性不是工程师
- 有的男研究生是工程师
- 有的研究生是男性
- 有的男性不是研究生
1.5
【不定项选择题】桌上有 20 个硬币,10 个是公面向上,10 个是字面向上。你在桌前被蒙上眼及戴上手套,你无法分辨哪个币是公面向上或字面向上,你只能移动或反转硬币。你的任务是要将 20 个硬币分两组,每组 10 个,而每组硬币里的公面向上的数目要一样。以下哪些可能是正确的答案? (AC)
- 可以完成任务
- 不能完成任务
- 可以,但需要特定的分组方法
- 不行,需要额外感觉硬币的重量
1.6
【不定项选择题】下列程序可以正确执行的是: (B)
- A
#include <stdio.h>char* returnStr() {char p[] = "hello world!";return p;
}int main() {char *str = NULL;str = returnStr();printf("%s\n", str);return 0;
}
- B
#include <stdio.h>char* returnStr() {char *p = "hello world!";return p;
}int main() {char *str = NULL;str = returnStr();printf("%s\n", str);return 0;
}
- C
#include <stdio.h>char* returnStr() {char p[13] = "hello world!";return p;
}int main() {char *str = NULL;str = returnStr();printf("%s\n", str);return 0;
}
- D
#include <stdio.h>
#include <stdlib.h>char* returnStr() {char* p = (char*)malloc(13*sizeof(char));*p = "hello world!";return p;
}int main() {char *str = NULL;str = returnStr();printf("%s\n", str);free(str);return 0;
}
解答:
选项 A、B、C、D 的区别在于 returnStr 函数内变量
p
的定义
选项 A 中p[]
是定义在函数栈上的局部数组,在函数返回时,这个数组的内存会被释放,导致返回的指针p
指向的内存不再有效,选项 A 错误
选项 B 中p
指向的是字符串常量"hello world!"
,它存储在常量区,这部分内存是全局有效且不可修改的,选项 B 正确
选项 C 中p[13]
是局部数组,类似于选项 A,返回局部变量的地址会导致未定义行为,因为该数组在函数返回时会被释放,选项 C 错误
选项 D 中使用malloc
动态分配了内存,返回的指针有效,但是*p = "hello world!";
语法错误,不能将const char*
转换为char
类型,选项 D 错误
1.7
【不定项选择题】进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息,下列选项中可以实现进程间通信的方法有 (ABD)
- 匿名管道
- 有名管道
- 条件变量
- 共享内存
- 互斥量
解答:
进程间通信的方法主要有以下五种:
- 管道
- 共享内存
- 信号量
- 消息队列
- 套接字
选项 A、B、D 正确,条件变量和互斥量是用于共享资源间的同步机制
1.8
【不定项选择题】假设有以下哈希表,使用线性探查处理冲突,其使用的哈希函数是恒等函数 h(x)=x
,若此哈希表从未调整过大小,并且没有元素被删除,则下列选项中,各元素添加到哈希表中顺序正确的有 (D)
- 9,14,4,18,12,3,21
- 12,3,14,18,4,9,21
- 12,14,3,9,4,18,21
- 9,12,14,3,4,21,18
- 12,9,18,3,14,21,4
1.9
【不定项选择题】以下循环执行次数是 1 次的是 (BC)
for (int i = 10, j = 1; i = j = 0; i++, j--) { }
do { } while(0);
int i = 1; while (i--){ }
unsigned char i; for (i = 255; i < 256; i++) { }
解答:
选项 A 中
for
语句的判断条件i = j = 0
为假,因此for
循环体一次也不会执行
选项 D 中i
的范围为 0 ~ 255,当i=255
时,再增加 1 就会变为 0 ,因此这个循环是个死循环
选项 B、C 的循环执行次数均为 1 次
1.10
【不定项选择题】关于 sizeof(float),下列说法不正确的是 (ABC)
- 运行阶段获得结果
- 是一种函数调用
- 是一个浮点表达式
- 是一个整型表达式
解答:
sizeof
是单目操作符,会以字节形式给出其操作数的存储大小,结果是一个无符号整型值,在编译阶段获得结果,选项 D 正确,选项 A、B、C 错误
2、填空题
2.1
【填空题】假设在一个 64 位体系结构的计算机系统中,操作系统需要将一个重要的系统状态码,表示为十六进制 Ox3F2A,存储到一个专用的状态寄存器 SR 中。该系统使用一种特殊的指令SETSR #data
来完成这个操作,其中 #data
是一个立即数。考虑到系统使用小端字节序来存储数据,当 SETSR 指令执行后,状态寄存器 SR 的最低有效字节(LeastSignificantByte,LSB)的二进制表示将是 ()?
解答:
2A
2.2
【填空题】某计算机的主频为 4MHz,各类指令的平均执行时间和使用频度如下表所示,则该机的MIPS 为 () ,CPI 为 ()
指令类别 | 存取 | 加、减、比较、转移 | 乘除 | 其他 |
---|---|---|---|---|
平均指令执行时间 | 1.0us | 0.5us | 10us | 2.5us |
使用频度 | 30% | 40% | 10% | 20% |
解答:
- 0.5
- 8
2.3
【填空题】C++ 类中 private,protect,public 三种访问限制类型,区别为:
- private 是私有类型,只有本类中的成员函数访问;
- protect 是 ()
- publi 是 ()
解答:
保护类型,可以被本类内或派生类的成员函数访问
公共类型,可以被类内或类外的函数访问
2.4
【填空题】请使用选代器遍历 vector<int> ivec
中的所有元素:for ___
解答:
for(std::vector<int>::iterator it=ivec.begin(); it!=ivec.end(); ++it)
2.5
【填空题】请写出以下程序的输出结果。假设变量 a 是整型,b 是浮点型,c 是字符型。
#include <stdio.h>int main() {int a = 10;float b = 3.14159;char c = 'A';printf("%05x\n", a);printf("%.2f\n", b);printf("%c = %d\n", c, c);return 0;
}
解答:
0000a
3.14
A = 65
3、简答题
3.1
下面代码段输出的结果为?
#include <iostream>
#include <queue>
#include <stack>int main() {std::queue<int> q;std::stack<int> s;for (int i = 1; i <= 5; ++i) {q.push(i * 10);}while (!q.empty()) {s.push(q.front());q.pop();}while (!s.empty()) {q.push(s.top());s.pop();}while (!q.empty()) {std::cout << q.front() << " ";q.pop();}std::cout << std::endl;return 0;
}
解答:
50 40 30 20 10
3.2
【简答题】请在答题处写出程序中的几处错误,并改正。每一个填空处作答时请使用下面的方式:原代码中的语句改为改正后的语句。以下程序实现在屏幕上输出如下图形(星号之间没有空格)。
**********
*****
****
***
**
*
解答:
#include <stdio.h>void main()
{ int i, j; i = 0; //1 (原来为:i=1;)while (i < 5) { j = 0; while (j < 4 - i) { printf(" "); j++; } j = 0; while (j <= i) { printf("*"); j++; } printf("\n"); i++; } i = 4; while (i > 0) { j = 0; while (j < i) //2 (原来为:while(j < 4-i)){ printf("*"); j++; } printf("\n"); i--; //3 (原来为:i++;)}
}
4、编程题
4.1
题目:
计算斐波那契第 N 项的值
解答:
#include "stdio.h"unsigned int fibonacci_recursive(int n) { if (n <= 0) { return 0; } else if (n == 1) { return 1; } else { return fibonacci_recursive(n - 1) + fibonacci_recursive(n - 2); }
}