普天C++筆試題
來源:互聯網
上載者:User
1.實現雙向鏈表刪除一個節點P,在節點P後插入一個節點,寫出這兩個函數;
答:
//假設線性表的雙向鏈表格儲存體結構
typedef struct DulNode{
struct DulNode *prior; //前驅指標
ElemType data; //資料
struct DulNode *next; //後繼指標
}DulNode,*DuLinkList;
//刪除操作
Status ListDelete_DuL(DuLinkList &L,int i,ElemType &e)
{
if(!(p=GetElemP_DuL(L,i))) //此處得到i位置的節點指標,如果有需要也得寫出具體函數實現
return ERROR;
e=p->data;
p->prior->next=p->next;
p->next->prior=p->pror;
free(p);
return OK;
}
//插入操作
Status ListInsert_DuL(DuLinkList &L,int i,ElemType &e)
{
if(!(p=GetElemP_DuL(L,i)))
return ERROR;
if(!(s=(DuLinkList)malloc(sizeof(DuLNode))))
return ERROR;
s->data=e;
s->prior=p->prior;
p->prior->next=s;
s->next=p;
p->prior=s;
return OK;
}
2.寫一個函數,將其中的\t都轉換成4個空格。
答:
該函數命名為convert,參數的意義為:
*strDest目的字串,*strSrc源字串,length源字串的長度
函數實現為:char* convert(char *strDest, const char *strSrc,int length)
{
char * cp = strDest;
int i=0;
while(*strSrc && i<length) // 跳出條件
{
if (*strSrc==\t) //將\t轉換成4個空格
{
for(int j=0;j<4;j++)
*cp++= ;
}
else //否則直接拷貝
*cp++=*strSrc;
strSrc++;
i++;
}
return strDest;
}3.Windows程式的入口是哪裡?寫出Windows訊息機制的流程。
答:
Windows程式的入口是WinMain函數
訊息機制:系統將會維護一個或多個訊息佇列,所有產生的訊息都會被放入或是插入隊列中。系統會在隊列中取出每一條訊息,根據訊息的接收控制代碼而將該訊息發送給擁有該視窗的程式的訊息迴圈。每一個啟動並執行程式都有自己的訊息迴圈,在迴圈中得到屬於自己的訊息並根據接收視窗的控制代碼調用相應的視窗過程。而在沒有訊息時訊息迴圈就將控制權交給系統。
4.如何定義和實現一個類的成員函數為回呼函數?
答:
所謂的回呼函數,就是預先在系統的對函數進行註冊,讓系統知道這個函數的存在,以後,當某個事件發生時,再調用這個函數對事件進行響應。
定義一個類的成員函數時在該函數前加CALLBACK即將其定義為回呼函數,函數的實現和普通成員函數沒有區別 5.C++裡面是不是所有的動作都是main()引起的?如果不是,請舉例。
答:不是,比如中斷引起的中斷處理不是直接由main()引起的,而是由外來事件引起的。
6.C++裡面如何聲明const void f(void)函數為C程式中的庫函數?
答:在該函數前添加extern “C”聲明
7.下列哪兩個是等同的
int b;
A const int* a = &b;
B const* int a = &b;
C const int* const a = &b;
D int const* const a = &b;
答:
各式表示的意思分別為:
A const int* a = &b; //*a是const,但指標a可變
B const* int a = &b; //a是const,但*a可變
C const int* const a = &b; //a和*a都是const,常量和指標的值都不能改變
D int const* const a = &b; //a和*a都是const,常量和指標的值都不能改變
因此C,D兩者是相同的。
總結個技巧:如果const位於星號的左側,則const就是用來修飾指標所指向的變數,即指標指向為常量;如果const位於星號的右側,const就是修飾指標本身,即指標本身是常量。
8. 內嵌函式在編譯時間是否做參數類型檢查?
答:做類型檢查,因為內嵌函式就是在程式編譯時間,編譯器將程式中出現的內嵌函式的調用運算式用內嵌函式的函數體來代替。