"C++工程师综合练习卷"
C++是一门强大的编程语言,广泛应用于系统软件、应用软件、游戏开发等领域。对于C++工程师来说,掌握扎实的基础知识和实践经验至关重要。这份综合练习卷提供了多道典型题目,旨在帮助学习者巩固和提升C++编程技能。
1. 题目涉及内存管理:
当使用`new`关键字动态分配内存时,如果没有显式初始化,内存中的值是不确定的,可能是随机值。因此,选项A和B错误,因为它们都假设空间已被初始化。选项D同样错误,因为它只对一个指针进行了初始化的假设。正确的答案是C,即`p1`申请的空间里的值是随机值,而`p2`申请的空间里的值已经初始化(通常默认为0,因为使用了`new int[10]()`,这里的`()`表示对数组进行默认初始化)。
2. 题目涉及随机数生成:
要从1到n中随机等概率输出m个不重复的数,`rand() % (n - i)`用来生成0到n-i-1之间的随机数,与`mm--`比较。当`mm > 0`时,表示还需要输出更多的数。因此,要确保每次循环都有相等的概率被选中,应当使用小于号 `<`。所以,正确答案是B,即`rand() % (n - i) < mm--`。
3. 题目涉及递归算法和整数除法:
`prim`函数可能是用于分解质因数的,括号内应填写的代码应该是将当前数`n`除以`m`并更新`n`的值。考虑到这是递归调用,应该使用`n /= m`来完成这个操作。因此,正确答案是A,`m/n; n%=m; prim(m,n); cout<<n<<endl;`。
4. 题目涉及枚举类型:
枚举`string`中的`x1`、`x2`没有赋值,默认从0开始递增。`x3`被赋值为10,接着`x4`和`x5`分别自动增加1,因此`x`的值是12。
5. 题目涉及指针运算:
在C++中,指针加法是基于所指向的数据类型的大小。`p1`是`unsigned char*`,每个元素占1字节,所以`p1+5`增加了5字节,相当于32位机器上的20位地址。`p2`是`unsigned long*`,在32位系统中通常为4字节,因此`p2+5`增加了20字节。
6. 题目涉及内存对齐和数组大小:
在32位机器上,`sizeof(char)`通常是1字节。然而,`acWelcome`是一个字符数组,其大小不仅仅包括元素的数量,还包括字符串结束符`\0`。因此,`printf("%d", sizeof(acWelcome))`会输出字符串的实际长度加上1,即`acWelcome`数组的大小。
这些题目涵盖了C++中的核心概念,如内存管理、随机数生成、递归、枚举、指针运算以及数组和内存对齐等知识点。通过解答这些问题,C++工程师可以检验自己的理解,并进一步提升编程能力。