声明:
- 这家公司偏人工智能
- 题目仅代表个人观点,若有错误欢迎指出。
一、单选
瀑布模型把软件生命周期划分为8个主要阶段,其中(C)阶段定义的规划将成为软件测试中的系统测试阶段的目标。
A.问题的定义
B.可行性研究
C.软件需求分析
D.系统总体设计这题一开始我选的B,记住答案就行了,太偏了
有以下程序,执行后的结果是(B)
void main() { char *s[] = {"one", "two", "three"}, *p; p = s[1]; printf("%c, %s\n", *(p + 1), s[0]); }
A. n,two
B. w,one
C. t,one
D. o,two- 这题我写错了,错因在不清楚字符指针数组。
- 这里s是一个字符指针数组,数组中存放的是一个个字符指针,char p = "abc"表示将字符串常量abc的首地址赋值给p,所以p=s[1]即为char p = "two",接下来就柳暗花明了。
二、填空
在32位系统中,写代码向内存0x30008000地址写入一个整形值0x100
- 属实不会,上网查了下“如何往指定内存写数据”但是我测试的时候发现什么都输出不了,望友友们解答下~~
- 参考:int *p = (int )0x30008000;*p = 0x100;或(int *)0x30008000 = 0x100;
三、简答
delete和delete[]的区别:
- delete:回收用 new 分配的单个对象的内存空间
- delete[]:回收用 new[] 分配的一组对象的内存空间
new、delete、malloc、free之间的关系:
- 都可以用来在堆上分配和回收空间。new/delete是操作符,malloc/free是库函数。
- 执行new实际上执行两个过程:a.分配未初始化的内存空间(malloc作用)b.使用对象的构造函数对空间进行初始化;
执行delete也有两个过程:a.使用析构函数对对象进行析构 b.回收内存空间(free作用)
对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现?
C语言中为宏定义,C++中为内联函数
说明静态绑定和动态绑定的特性和用法:
- 静态绑定:绑定的是静态类型,所对应的函数或属性依赖于对象的静态类型,发生在编译期;(静态类型:对象在声明时采用的类型,在编译期既已确定;)
- 动态绑定:绑定的是动态类型,所对应的函数或属性依赖于对象的动态类型,发生在运行期;(动态类型:通常是指一个指针或引用目前所指对象的类型,是在运行期决定的;)
- 区别:静态绑定发生在编译期,动态绑定发生在运行期;对象的动态类型可以更改,但是静态类型无法更改;要想实现动态,必须使用动态绑定;在继承体系中只有虚函数使用的是动态绑定,其他的全部是静态绑定;
四、编程
编程用二分法实现整数快速查找:
int BinarySearch(vector<int> &num, int target) { int left = 0, right = num.size() - 1; while(left <= right) { int mid = left + right / 2; if(mid == target) return mid else if(mid > target) left = mid + 1; else right = mid - 1; } return -1; //查找失败 }
反转数字,如x=123则返回321,若x=-123则返回-321.编程实现,C语言或C++都可:
[源引]()本题注意事项:
- 只反转数字部分,符号位部分不反转
- 反转后整数num超过 32 位的有符号整数的范围\([-2^{31},2^{31}-1]\),返回 0
- 假设本题不允许存储 64 位整数(有符号或无符号,即C++不能使用long long ,Java不能使用long等)
//本题关键点在于如何判断溢出 //法一:最简单法判断溢出-每次计算新的结果时,再用逆运算判断与上一次循环的结果是否相同,不同就溢出 int reverse(int x) { int res = 0; while(x != 0) { //最后一位 int tail = x % 10; int newRes = res * 10 + tail; if ((newRes - tail) / 10 != res) return 0; res = newRes; x /= 10; } return res; } //法二:若题目没限制不可用long long,则用long long类型存储结果,如果结果大于0x7fffffff或者小于0x80000000就溢出
扩展:
1.long int简写long;long long int简写long long。
2.在计算机中,数值一律用补码来表示和存储,原因在于,使用补码,可以将符号位和数值域统一处理。同时,加法和减法也可以统一处理。
- 正数的原码、反码、补码都是相同的.
- 求负整数的补码,将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加1。即负数的反码是对正数逐位取反,符号位保持为1。负数的反码等于原码符号位不变,其余各位逐位取反,补码等于反码加1。
- 0的补码,数0的补码表示是唯一的。
- 32位系统中为啥int范围是\([-2^{31},2^{31}-1]\)解答
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。