活动介绍

c/c++笔试题

preview
需积分: 0 13 下载量 150 浏览量 更新于2014-08-27 1 收藏 1.12MB DOC AIGC 举报
【C/C++ 笔试题解析】 在C/C++的面试和笔试中,常见的题目涵盖了数据结构、算法、面向对象编程、内存管理等多个方面。以下将解析提供的几个典型题目: ### 1. 链表反转 单向链表反转是考察链表操作的经典问题。有两种常见解法: **迭代法**: ```cpp struct Linka { int data; Linka* next; }; void reverse(Linka*& head) { if(head == NULL) return; Linka *pre, *cur, *ne; pre = head; cur = head->next; while(cur) { ne = cur->next; cur->next = pre; pre = cur; cur = ne; } head->next = NULL; head = pre; } ``` **递归法**: ```cpp Linka* reverse(Linka* p, Linka*& head) { if(p == NULL || p->next == NULL) { head = p; return p; } else { Linka* tmp = reverse(p->next, head); tmp->next = p; return p; } } ``` 递归法需要注意,反转完成后需要将最后一个节点的`next`设为`NULL`,以避免形成循环。 ### 2. String类的实现 ```cpp class String { public: String(const char *str = NULL) { if (str == NULL) { m_data = new char[1]; m_data[0] = '\0'; } else { m_data = new char[strlen(str) + 1]; strcpy(m_data, str); } } String(const String &another) { m_data = new char[strlen(another.m_data) + 1]; strcpy(m_data, another.m_data); } ~String() { delete []m_data; } String& operator=(const String &rhs) { if (this == &rhs) return *this; delete []m_data; m_data = new char[strlen(rhs.m_data) + 1]; strcpy(m_data, rhs.m_data); return *this; } private: char *m_data; }; ``` 这个String类实现了基本的构造函数、拷贝构造函数、赋值运算符和析构函数,保证了对象的正确创建、复制和销毁。 ### 3. 数学逻辑题 **函数func(x)** 返回的是x的二进制表示中1的个数。对于x=9999(二进制为11111110111),答案是8。 **引用的理解与使用**: - 引用是现有变量的别名,创建引用时必须初始化。 - 引用一旦绑定,就不能再改变引用对象。 - 引用没有自己的存储空间,不占内存。 - 不可对引用数组进行操作,但可以对数组元素建立引用。 **引用作为函数参数**: - 引用传递类似于指针传递,可以修改实参的值。 - 引用参数不占用额外的栈空间,效率高。 - 可以避免指针可能为空的问题,保证安全性。 - 引用参数在函数内部不能重新绑定。 以上是C/C++笔试中常见的题目类型和解答方式,理解和掌握这些基础知识对解决实际编程问题至关重要。在面试或笔试中,除了这些基础题目,还会涉及到模板、异常处理、多线程、STL容器等更高级的主题,需要不断学习和实践来提升技能。
身份认证 购VIP最低享 7 折!
30元优惠券