中体骏彩C++面试题
下面是我憑記憶想到的幾個(gè)題目,有需要的同學(xué)就拿去吧,我也算做了點(diǎn)善事.
中體駿彩C++筆試題
2013-11-18
1.指針的含義是:B
A.名字 B.地址 C.名稱 D.符號
2.給出下面的程序輸出:
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <locale>
using namespace std;
?
int main(int argc,char** argv){
? ? char str[] = "陶";
? ? char str1[] = "ztjcy中體駿彩";
? ? wchar_t str2[] = L"ztjcy中體駿彩";
? ? cout << strlen(str) << "," << sizeof(str) <<endl; ? ? ? ??
? ? cout << strlen(str1) << "," << sizeof(str1) <<endl; ? ?17,18?
? ? wcout << wcslen(str2)<< "," << sizeof(str2) <<endl; ? ?9,40
?
? ? return 0;
} ? ? ?
注意漢字占3個(gè)字節(jié),是utf8編碼時(shí),寬字符大小是2字節(jié), ?
3.重載(overload)和重寫(overwrite)的區(qū)別?
重載overload:是函數(shù)名相同,參數(shù)列表不同 重載只是在類的內(nèi)部存在。但是不能靠返回類型來判斷。
重寫override:也叫做覆蓋。子類重新定義父類中有相同名稱和參數(shù)的虛函數(shù)。函數(shù)特征相同。但是具體實(shí)現(xiàn)不同,主要是在繼承關(guān)系中出現(xiàn)的 。
4.指出下面程序的錯(cuò)誤?
class A{
public:
A(){ p = this; }
? ? ? ? ~A(){ if(p){
delete p;
p = null;
}
}
private:
A* p;
}
5.線程A在無限制地循環(huán)運(yùn)行,線程B采用什么方式能讓線程A安全退出?
有很多種退出線程的方法,這些方法的被稱做線程之間的消息傳遞、同步、共享等。
終止線程,可以向線程發(fā)送消息/信號,或者一個(gè)互斥量,或者改變內(nèi)存中的變量等,來通知線程,當(dāng)線程收到這些消息/信號后,先做一些處理,比如釋放掉線程內(nèi)的資源,保存線程的運(yùn)行結(jié)果等,然后自己退出線程,并返回一個(gè)UINT值。
6.TCP和UDP的區(qū)別?
TCP---傳輸控制協(xié)議,提供的是面向連接、可靠的字節(jié)流服務(wù)。當(dāng)客戶和服務(wù)器彼此交換數(shù)據(jù)前,必須先在雙方之間建立一個(gè)TCP連接,之后才能傳輸數(shù)據(jù)。TCP提供超時(shí)重發(fā),丟棄重復(fù)數(shù)據(jù),檢驗(yàn)數(shù)據(jù),流量控制等功能,保證數(shù)據(jù)能從一端傳到另一端。
UDP---用戶數(shù)據(jù)報(bào)協(xié)議,是一個(gè)簡單的面向數(shù)據(jù)報(bào)的運(yùn)輸層協(xié)議。UDP不提供可靠性,它只是把應(yīng)用程序傳給IP層的數(shù)據(jù)報(bào)發(fā)送出去,但是并不能保證它們能到達(dá)目的地。由于UDP在傳輸數(shù)據(jù)報(bào)前不用在客戶和服務(wù)器之間建立一個(gè)連接,且沒有超時(shí)重發(fā)等機(jī)制,故而傳輸速度很快
7.PeekMessage()和GetMessage()的區(qū)別?
相同點(diǎn):
? ? ? PeekMessage函數(shù)與GetMessage函數(shù)都用于查看應(yīng)用程序消息隊(duì)列,有消息時(shí)將隊(duì)列中的消息派發(fā)出去。
不同點(diǎn):
? ? ? 無論應(yīng)用程序消息隊(duì)列是否有消息,PeekMessage函數(shù)都立即返回,程序得以繼續(xù)執(zhí)行后面的語句(無消息則執(zhí)行其它指令,有消息時(shí)一般要將消息派發(fā)出去,再執(zhí)行其它指令)。GetMessage函數(shù)只有在消息隊(duì)列中有消息時(shí)返回,隊(duì)列中無消息就會一直等,直至下一個(gè)消息出現(xiàn)時(shí)才返回。在等的這段時(shí)間,應(yīng)用程序不能執(zhí)行任何指令。
(從他們的不同點(diǎn)上來看,PeekMessage函數(shù)有點(diǎn)像“乞丐行乞”,有你就施舍點(diǎn),沒有也不搶。GetMessage函數(shù)有點(diǎn)像“強(qiáng)盜打劫”,有你得給,沒有我就等你什么時(shí)候有了再給,這段時(shí)間我什么都不干,我就等你。)
8.輸入一個(gè)整數(shù),將它輸出為以逗號分隔的字符串,比如1234567890,輸出為"1,234,567,890"?
#include <iostream>
#include <string>
using namespace std;
int main()
{
? ? ? ? //此程序用來格式化數(shù)字為“逗號分隔千位”的數(shù)值表示法,如:23,343,434,436
? ? ? ? string str_number;
? ? ? ? int str_length;
? ? ? ? int swap_number;
? ? ? ? cout<<"please enter an integer >= 1000:"<<endl;
? ? ? ? cin>>str_number;
? ? ? ? str_length = str_number.length();
? ? ? ? swap_number = str_length % 3;
? ? ? ? if(swap_number != 0)
? ? ? ? {
? ? ? ? ? ? ? ? cout<<str_number.substr(0,swap_number);
? ? ? ? ? ? ? ? for (int i=swap_number;i<=str_length-3;i=i+3)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? cout<<","<<str_number.substr(i,3);
? ? ? ? ? ? ? ? }
? ? ? ? }
? ? ? ? else
? ? ? ? {
? ? ? ? ? ? ? ? for (int i=0;i<=str_length-3;i=i+3)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? cout<<str_number.substr(i,3);
? ? ? ? ? ? ? ? ? ? ? ? if(i != str_length-3)
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? cout<<",";
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? }
? ? ? ? cout<<endl;
? ? ? ? return 0;
}
9.給定一個(gè)大小為100的整數(shù)數(shù)組,要求隨機(jī)地插入1......100中的數(shù),要求不能插入重復(fù)的數(shù),給出最高效的解法?
這題主要是借助stl中的set數(shù)據(jù)結(jié)構(gòu)和rand()來實(shí)現(xiàn)高效的解法.set數(shù)據(jù)結(jié)構(gòu)的一個(gè)特點(diǎn)是,鍵值合一,自動排序.
這里注意rand()的頭文件是stdlib.h文件.下面是實(shí)現(xiàn)的參考代碼
#include <stdlib.h>
#include <iostream>
#include <set>
using namespace std;
void create_rand(int len){
? ? if(len <= 0){
? ? ? ? cout << "please input a invalid value: " << endl;
? ? ? ? return;
? ? }
? ? set<int> random_set;
? ? do{
? ? ? ? int val = rand()%len;
? ? ? ? if(val == 0)
? ? ? ? ? ? val = len;
? ? ? ? if(!random_set.count(val))
? ? ? ? ? ? random_set.insert(val);
? ? }while(random_set.size()<len);
? ? cout << "random array between 1 and" << len << ": ?" ?<< endl;
? ? set<int>::iterator set_it = random_set.begin();
? ? while(set_it != random_set.end()){
? ? ? ? cout << *set_it << endl;
? ? ? ? ++set_it;
? ? }
}
int main(int argc, char** argv){
? ? create_rand(100);
? ? return 0;
}
這個(gè)是php的實(shí)現(xiàn)版本:
<?php
? ? function create_rand(){
? ? ? ? $arr = array();
? ? ? ? do{
? ? ? ? ? ? $rand = rand(1,100);
? ? ? ? ? ? if(!in_array($rand))
? ? ? ? ? ? ? ?$arr[] = $rand;?
? ? ? ? }while(count($arr)<100);
? ? ? ? return $arr;
? ? }
? ? echo "create random integers between 1 and 100:\n";
? ? var_dump(create_rand());
?>
總結(jié)
以上是生活随笔為你收集整理的中体骏彩C++面试题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 将BST转换为有序的双向链表!
- 下一篇: 永成科技C++笔试题