中興筆試題目總結(一)C 部分

2021-06-09 12:31:45 字數 3085 閱讀 4370

一、程式設計題目

(1)輸入某班級學生的姓名、分數,並對分數進行降冪排列並輸出;

#include using namespace std;

struct node

;void show(node *head)

}int linklen(node *head)

return len;

}void sort(node *head)}}

}int main()

else

scanf("%s %d", name, &score);

}show(head);

sort(head);

show(head);

return 0;

}

(2)隨即產生一字串,每次產生的字串內容、長度都不同;

#include using namespace std;

int main()

printf("%x", num_dec%m);

}int todec(int num, int m)//把乙個m進製的數(這個數是用10進製表示的)轉化成十進位制的數

return dec;

}void showall(int num_dec, int m)

if(m != 8)

if(m != 10)

if(m != 16)

}int main()

(4)輸入數字,以-1為標識結束,結果儲存在a.txt中

#include using namespace std;

int main()

; while(fgets(buffer, 100, stdin))

return 0;

}

(5)給乙個字串,找出其中連續重複出現且最長的子串,例如「ababc「要求返回「ab」。請用c/c++語言寫一函式完成該演算法。

#include using namespace std;

int common(char *str1, char *str2)

return common;

}void comstr(char *str, char *result)}}

}strncpy(result, com, maxlen);

}int main()

; comstr(str, result);

cout<

(6)設x[1..n]和y[1..n]為兩個陣列每個都包含n個已排好序的數。請使用偽**給出乙個求陣列x和y中所有2n個元素的中位數的o(lgn)時間的演算法。

o(lgn)時間肯定是2分了。分析:

陣列x有n個元素,陣列y有n個元素,且都是從小到大排好的。那麼找中位數是找第(2n+1)/2個元素是哪個。

一共有2n的元素,取各自陣列中間的乙個第(n-1)/2個元素,設為xmid和ymid(下標為0到n-1),那麼在

1)n為奇數的時候,對於陣列x和陣列y有(n-1)/2個元素在第xmid和ymid之前,現在假設

a.xmid>ymid 這個時候如果兩個陣列有序的排好後,會有至少(n-1)/2*2+1(這個1為ymid) = n個元素在xmid之前也就是說,這個待尋找的中位數也在xmid之前,也就是說這個中位數不可能在x陣列xmid元素之後,所以可以排除一半x陣列中的元素。而且最多會有(n-1)/2*2 = n-1個元素在ymid之前,所以這個中位數肯定不會比ymid小,所以不會出現在y陣列ymid之前,排除一半y中的元素(同理xmid2)n為偶數的時候,也取xmid =x[(n-1)/2]

a.xmid>ymid,這個時候各自有(n-2)/2個元素在xmid和ymid元素之前,那麼如果這兩個陣列排序,會有至少(n-2)/2*2+1=n-1個元素在xmid之前,如果為偶數那麼中位數為第(2n+1)/2=n個元素,這個時候xmid至少為第n個元素,所以這個中位數也不可能出現在xmid這個元素之後。至多會有n-2個元素在ymid之前,所以中位數肯定在ymid之後。同樣排除了一半的x和y中的元素。

**如下:但是寫的有問題,在n為奇數的時候正確,在偶數的時候就不對了。二分對於邊界的判斷有點煩啊,時間問題,以後修改

#include using namespace std;

int middle(int *a1, int s1, int e1, int *a2, int s2, int e2)

int main()

; int a2 = ;

cout<二、其他部分

(1)winsock建立連線的主要實現步驟?

伺服器端:socker()建立套接字,繫結(bind)並監聽(listen),用accept()等待客戶端連線。

客戶端:socker()建立套接字,連線(connect)伺服器,連線上後使用send()和recv(),在套接字上寫讀資料,直至資料交換完畢,closesocket()關閉套接字。

伺服器端:accept()發現有客戶端連線,建立乙個新的套接字,自身重新開始等待連線。該新產生的套接字使用send()和recv()寫讀資料,直至資料交換完畢,closesocket()關閉套接字。

(2)動態連線庫的兩種方式?

呼叫乙個dll中的函式有兩種方法:

1.載入時動態鏈結(load-time dynamic linking),模組非常明確呼叫某個匯出函式,使得他們就像本地函式一樣。這需要鏈結時鏈結那些函式所在dll的導入庫,導入庫向系統提供了載入dll時所需的資訊及dll函式定位。

2.執行時動態鏈結(run-time dynamic linking),執行時可以先載入dll,dll載入後,模組在獲取dll函式的位址,然後就可以通過返回的函式指標呼叫dll函式了。如此即可避免導入庫檔案了。

(3)曹操南下攻打劉備,劉備派關羽守錦州,關羽派張飛去守城門。劉備又派諸葛亮去向孫權求援。孫權派兵攻打曹操!  請畫出uml圖(這個一開始沒看懂,以為要畫類圖什麼的,看了網上乙個人給的圖才知道,這個最適合話互動圖的順序圖了)參考如下:

朗訊筆試題目 C語言部分 zz

標 題 朗訊筆試題目 c語言部分 跳出main 函式後還能不能執行其他 不使用第三個變數,將兩個變數a,b得值互換 不准用函式 如何判斷乙個檔案是由c編譯環境還是c 編譯環境編譯完成的?不用任何條件語句求兩個整形數的最大值?不准用函式 struct student 所佔空間多大?下面是一些解法,又可...

筆試題目總結1

今天是我的第一篇部落格,有點小激動,以前羨慕大神和大牛級人物,現在我也要堅定信念朝這個行業努力啦 最近有學校的雙選會,參加了乙個公司的筆試,筆試題目很基礎,但是我還有一些做錯了,慚愧 1 考了字串和字元陣列的區別,題目大概如下 char pstr hello cout 在vc 6.0下執行結果如圖1...

微軟筆試題目(一)

1.微軟筆試題 快速求取乙個整數的7倍 乘法相對比較慢,所以快速的方法就是將這個乘法轉換成加減法和移位操作。可以將此整數先左移三位 8 然後再減去原值 x 3 x。int tmain int argc,tchar argv 快速求取乙個整數的7倍 int x 3 x x 3 x x 3 2 cout...