在C/C++面试中,候选人常常会被问到一些经典的问题。这些问题不仅考察候选人的语言基础,还测试其对算法、数据结构、内存管理等的理解。以下是一些最常见的C/C++面试题及其示例。
1. 数组反转
这一题要求反转一个数组的元素。可以使用双指针的方法。
#include <iostream>
using namespace std;
void reverseArray(int arr[], int n) {
int start = 0;
int end = n - 1;
while (start < end) {
swap(arr[start], arr[end]);
start++;
end--;
}
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr)/sizeof(arr[0]);
reverseArray(arr, n);
for (int i = 0; i < n; i++)
cout << arr[i] << " ";
return 0;
}
2. 判断回文字符串
判断一个字符串是否为回文(正读和反读都相同)。
#include <iostream>
#include <string>
using namespace std;
bool isPalindrome(string str) {
int left = 0;
int right = str.length() - 1;
while (left < right) {
if (str[left] != str[right])
return false;
left++;
right--;
}
return true;
}
int main() {
string str = "madam";
if (isPalindrome(str))
cout << str << " 是回文字符串" << endl;
else
cout << str << " 不是回文字符串" << endl;
return 0;
}
3. Fibonacci 数列
求Fibonacci数列的第n项。
#include <iostream>
using namespace std;
int fibonacci(int n) {
if (n <= 0) return 0;
if (n == 1) return 1;
return fibonacci(n - 1) + fibonacci(n - 2);
}
int main() {
int n = 10;
cout << n << " 的Fibonacci数是: " << fibonacci(n) << endl;
return 0;
}
4. 找出数组中的最大和最小值
遍历数组并找出最大值和最小值。
#include <iostream>
using namespace std;
void findMinMax(int arr[], int n, int &min, int &max) {
min = arr[0];
max = arr[0];
for (int i = 1; i < n; i++) {
if (arr[i] < min) min = arr[i];
if (arr[i] > max) max = arr[i];
}
}
int main() {
int arr[] = {3, 5, 7, 2, 8};
int n = sizeof(arr)/sizeof(arr[0]);
int min, max;
findMinMax(arr, n, min, max);
cout << "最小值: " << min << ", 最大值: " << max << endl;
return 0;
}
5. 合并两个排序数组
将两个有序数组合并成一个新的有序数组。
#include <iostream>
#include <vector>
using namespace std;
vector<int> mergeSortedArrays(vector<int>& arr1, vector<int>& arr2) {
vector<int> merged;
int i = 0, j = 0;
while (i < arr1.size() && j < arr2.size()) {
if (arr1[i] < arr2[j]) {
merged.push_back(arr1[i]);
i++;
} else {
merged.push_back(arr2[j]);
j++;
}
}
while (i < arr1.size()) {
merged.push_back(arr1[i]);
i++;
}
while (j < arr2.size()) {
merged.push_back(arr2[j]);
j++;
}
return merged;
}
int main() {
vector<int> arr1 = {1, 3, 5};
vector<int> arr2 = {2, 4, 6};
vector<int> merged = mergeSortedArrays(arr1, arr2);
cout << "合并后的数组: ";
for (int num : merged) cout << num << " ";
return 0;
}
总结
通过这些问题,面试官可以有效地评估候选人的编程能力和解决问题的思维方式。在准备面试时,理解这些基础概念并掌握相应的编码技巧将大大提高通过面试的机会。同时,注意在面试中沟通自己的思路和解决方案,这也是获得成功的关键因素之一。