C/C++及資料結構筆試題集錦(校園招聘)之一
嗯,這是我從學校bbs精華區整理的c/c++及資料結構的筆試以及部分面試題集錦,覺得只要搞懂了這些題目,大部分的筆試都不懼了。希望能給需要的人帶來幫助。順便攢rp ^_^
不過大部分題目沒有答案,歡迎補充哦~~~~
一:
已知類String的原型為:
class String
{
public:
String(const char *str = NULL); //普通建構函式
String(const String ©); //拷貝建構函式
~String(void); //
String & operator = (const String ©); //賦值建構函式
private:
char * m_data; //用於儲存字串
};
請編寫String的上述4個函式。
答案:
版本1
// String 的解構函式
String::~String(void) // 3 分
{
delete [] m_data;
// 由於m_data 是內部資料型別,也可以寫成delete m_data;
}
String::String(const char *str)
{
if(str==NULL)
{
m_data = new char[1]; // 若能加NULL 判斷則更好
*m_data = ‘{post.content}’;
}
else
{
int length = strlen(str);
m_data = new char[length+1]; // 若能加NULL 判斷則更好
strcpy(m_data, str);
}
}
// 拷貝建構函式
String::String(const String &other)
{
int length = strlen(other.m_data);
m_data = new char[length+1]; // 若能加
strcpy(m_data, other.m_data);
}
// 賦值函式
String & String:operate =(const String &other)
{
// (1) 檢查自賦值
if(this == &other)
return *this;
// (2) 釋放原有的記憶體資源
delete [] m_data;
// (3)分配新的記憶體資源,並複製內容
int length = strlen(other.m_data);
m_data = new char[length+1]; // 若能加NULL 判斷則更好
strcpy(m_data, other.m_data);
// (4)返回本物件的引用
return *this;
}
版本2
String::String (const char *str)
{
if(str){
memset(m_data,0,strlen(m_data));
strcpy(m_data,str);
}
else *m_data=0;
}
String::String (const String ©)
{
strcpy(m_data,copy.m_data);
}
String& String:operator =(const String ©)
{
if(this==©) retrun *this;
strcpy(m_data,copy.m_data);
return *this;
}
版本3
String::String (const char *str)
{
if ( m_data )
delete[] m_data;
if(str){
m_data = new char[strlen(str)];
memset(m_data,0,strlen(m_data));
strcpy(m_data,str);
}
else *m_data=0;
}
String::String (const String ©)
{
if ( m_data )
delete[] m_data;
m_data = new char[strlen(copy.m_data+1)]
strcpy(m_data,copy.m_data);
}
String& String:operator =(const String ©)
{
if(this==©) retrun *this;
if ( m_data )
delete[] m_data;
m_data = new char[strlen(copy.m_data+1)]
strcpy(m_data,copy.m_data);
return *this;
}
~String::String(void)
{
if ( m_data )
delete[] m_data;
}
二:改錯題,只能在原來的基礎上增加程式碼,不能刪除程式碼
#include
#include
void foo(int age,char *b)
{
b = (char *)malloc(64);
sprintf(b,"Your Age is %d",age);
}
int main()
{
char *f;
foo(23,f);
printf("%s\n",f);
}
答案
版本1
#include
#include
void foo(int age,char **b)
{
*b = (char *)malloc(64);
sprintf(*b,"Your Age is %d",age);
}
int main()
{
char **f;
foo(23,f);
printf("%s\n",**f);
return 0;
}
版本2
#include
#include
void foo(int age,char *&b)
{
b = (char *)malloc(64);
sprintf(b,"Your Age is %d",age);
}
int main()
{
char *f;
foo(23,f);
printf("%s\n",f);
free(f);//不要忘了free;
}
三:有程式片斷如下
int main()
{
int I = 20;
pid_t pid = 5;
if((pid = fork()) > 0)
{
I = 50;
printf("%d\n",I); (1)
}
else if(pid == 0)
{
printf("%d\n",I); (2)
}
}
請問該程式用的是程序方式還是執行緒方式,並說明程序與執行緒的區別:
請問該程式輸出什麼結果?
無參考答案L
四、constant pointer points for String
pointer points for constant string
五、下面等價的是:
A int i=0
if(i)
{
printf("hello,world");
}
B int i=1;
int j=2;
if(i==1 || j==2)
{
printf("hello,world");
}
C Boolean b1=true;
Boolean b2=true;
if(b1==b2)
{
printf("hello,world");
}
D int i=1;
int j=2;
if(i==1 &| j==2)
{
printf("hello,world");
}
六、排序二叉樹插入一個節點或雙向連結串列的實現
四~六為IBM面試題。
七、指標++的含義和用法
八、stack 和heap的分配,rt-os的特點、同步的方式
九、怎樣避免記憶體洩漏的問題
十、程式設計實現十進位制數轉化為十六進位制輸出,不準用任何已經定義的庫函式,比方說String
,Math。int toHex(int )
十一、程式設計實現大於100的兩個數值相乘的結果輸出,同樣不準使用任何已定義函式,Math,st
ring,convert等。比方說12345*32534677
輸入為兩個string int toPlus('12345','32434677')
輸出為一個長型的
十二、int delete(node * head)
{
free(head);
head=head->link;
return(0);
}
指出程式的錯誤,並且寫出正確的程式
十三、寫一個程式可以算出位元組在計算機中的儲存是由大到小還是有小到大。
十四、一段程式,寫出輸出結果
大概是
class A
{
static void virtual print(){cout<<"A::print()"<;
}
class B
{
static void virtual print(){cout<<"B::print()"<;
}
class C
{
static void print(){cout<<"C::print()"<;
}
print (A a)
{
a.print();
}
main()
{
A a,*aa,*ab,*ac;
B b;
C c;
aa=&a;
ab=&b;
ac=&c;
a.print();
b.print();
c.print();
aa.print();
ab.print();
ac.print();
print(a);
print(b);
print(c);
}
十五、給兩個變數,如何找出一個帶環單鏈表中是什麼地方出現環的。(答案參考expert C programming)。
十~十五為MS筆試題。
十六、寫一個帶引數巨集get_struct_addr_from_member_addr(p, stru, m),
能夠根據任意結構實體的某一個成員的地址,算出該結構實體的地址,其中引數p是指向該
成員的指標,stru是該結構體,m是該成員。(SUN試題)
十七、給一個函式
int main(){
int i, n=20;
for(i=0;i
printf("-");
return 0;
}
要求替換、增加或者減少一個字元,使該程式可以打出20個“-”號,並要求寫出三種解法
。(sun試題)
參考:1。i-- 換成 n--
2。i換成 -i
十八、解釋 typedef char (*FUNC)(int, char*)的含義
十九、問#include 和#include "abc.h"的區別,#define MAX_NUM 10 和 const int
MAX_NUM=10區別
二十、問用什麼方法可以避免一些潛在錯誤,比如if( myvar = 3)這一類
程式設計規範的問題,用 if( 3 = myvar)就可以在編譯時報錯
十六~二十為SUN筆試題。