日韩欧美另类久久久精品_亚洲大色堂人在线无码_国产三级aⅴ在线播放_在线无码aⅴ精品动漫_国产精品精品国产专区

中國(guó)最大的IT社區(qū)的一些 C艸筆試題

  從CSDN看的一些 C艸筆試題 ,希望能幫助愛(ài)IT行業(yè)的你!

  1:

  32 位機(jī)上根據(jù)下面的代碼,問(wèn)哪些說(shuō)法是正確的? ( )

  signed char a = 0xe0;

  unsigned int b = a;

  unsigned char c = a;

  A. a>0 && c>0 為真

  B. a == c 為真

  C. b 的十六進(jìn)制表示是:0xffffffe0

  D. 上面都不對(duì)

  解釋?zhuān)?xe0 十進(jìn)制為 224 二進(jìn)制為11100000

  char a 為有符號(hào)類(lèi)型,第一位是符號(hào)位,0代表正數(shù),1代表負(fù)數(shù),所以char a = -32;

  而 char c 為 無(wú)符號(hào)類(lèi)型,所以a與c肯定不相等, 所以A、B錯(cuò)誤;

  再看C a為char類(lèi)型占一個(gè)字節(jié),b是int類(lèi)型,占4個(gè)字節(jié),把一個(gè)字節(jié)賦給4個(gè)字節(jié)

  缺的應(yīng)該補(bǔ)符號(hào)位,a為 1110000 所以b就是 1111 1111 1111 1111 1111 1111 1110 0000 也就是0xffffffe0;所以選C;

  2:

  下面哪些選項(xiàng)能編譯通過(guò)? ( )

  int i;

  char a[10];

  string f();

  string g(string & str);

  A. if(!!i){f();}

  B. g(f());

  C. a=a+1;

  D. g("abc");

  解釋?zhuān)?/p>

  首先排除C,數(shù)組名不能這樣使用,a不能作為左值,因?yàn)閍是一個(gè)常量指針;

  再看D,"abc"是 const char * 類(lèi)型,類(lèi)型不匹配,所以D錯(cuò);

  最關(guān)鍵的看B選項(xiàng),string f()返回的是一個(gè)臨時(shí)變量的對(duì)象,而string g(string& str)的參數(shù)是非const引用,C++中有個(gè)語(yǔ)法規(guī)則,非const引用不能用臨時(shí)變量初始化,C++中這樣使用是為了限制潛在的錯(cuò)誤。至于原因,網(wǎng)上很多說(shuō)法沒(méi)有一個(gè)統(tǒng)一的,但是C++中這樣明確規(guī)定的,我自己感覺(jué)g(f());f()返回的這個(gè)臨時(shí)對(duì)象,如果傳給非const引用,有可能被修改,所以不安全,可能引發(fā)很多錯(cuò)誤。

  再看A其實(shí)很簡(jiǎn)單,是對(duì)的

  3. int a[10]; 問(wèn)下面哪些不可以表示 a[1] 的地址? ( )

  A. a+sizeof(int)

  B. &a[0]+1

  C. (int*)&a+1

  D. (int*)((char*)&a+sizeof(int))

  解釋?zhuān)?/p>

  Type* a;

  a+ n 的計(jì)算規(guī)則

  (unsigned int)a + n*sizeof(int)

  所以 &a[1]的地址為: (unsigned int)a + 1* sizeof(int);

  首先看A,帶入公式為: (unsigned int)a + 4*sizeof(int);錯(cuò)誤;

  再看B,&a[0]就是第一個(gè)元素的地址, 帶入公式就是 (unsigned int)a + 1* sizeof(int);正確

  再看C,首先這里&a前面為什么加int*,因?yàn)?amp;a是數(shù)組的首地址 它的類(lèi)型是 int(*)[10];而a是數(shù)組首元素的地址,它的類(lèi)型為int(*); 所以C也正確

  再看D 先把&a轉(zhuǎn)化為char* 類(lèi)型 所以這里相當(dāng)于: (unsigned int)a + sizeof(int)*sizeof(char);也是正確的;

  5:

  下面哪些函數(shù)調(diào)用必須進(jìn)入內(nèi)核才能完成? ( )

  A. fopen

  B. exit

  C. memcpy

  D. strlen

  解釋?zhuān)?/p>

  選AB,fopen打開(kāi)一個(gè)文件,要調(diào)用線(xiàn)程內(nèi)核,exit操作系統(tǒng)才有這個(gè)退出的權(quán)限,所以也調(diào)用內(nèi)核

  CD只是簡(jiǎn)單的字符串處理,不需要進(jìn)入內(nèi)核;

  6:

  死鎖發(fā)生的必要條件? ( )

  A. 互斥條件

  B. 請(qǐng)求和保持

  C. 不可剝奪

  D. 循環(huán)等待

  解釋?zhuān)?/p>

  選ABCD 不解釋

  7:

  有兩個(gè)線(xiàn)程,最初 n=0,一個(gè)線(xiàn)程執(zhí)行 n++; n++; 另一個(gè)執(zhí)行 n+=2; 問(wèn),最后可能的 n 值? ( )

  A. 1

  B. 2

  C. 3

  D. 4

  解釋?zhuān)簄++ 與 n+=2 在匯編中有三個(gè)過(guò)程 第一:讀物n的值;第二:n的值加1或者加2;第三:把n的值寫(xiě)入內(nèi)存

  這三個(gè)過(guò)程可能被打斷,結(jié)果就是 BCD都有可能。

  8. 下面哪些說(shuō)法正確? ( )

  A. 數(shù)組和鏈表都可以隨機(jī)訪(fǎng)問(wèn)

  B. 數(shù)組的插入和刪除可以達(dá)到 O(1)

  C. 哈希表無(wú)法法進(jìn)行范圍檢查

  D. 二叉樹(shù)無(wú)法進(jìn)行線(xiàn)性訪(fǎng)問(wèn)

  解釋?zhuān)?/p>

  A數(shù)組可以隨機(jī)訪(fǎng)問(wèn),鏈表不可以

  B數(shù)組插入要移動(dòng)很多,不是O(1);

  D二叉樹(shù)可以先線(xiàn)性化,再進(jìn)行線(xiàn)性訪(fǎng)問(wèn),(這個(gè)我也不懂,數(shù)據(jù)結(jié)構(gòu)學(xué)的不好)【估計(jì)是先遍歷出成數(shù)組,便成了線(xiàn)性訪(fǎng)問(wèn)?】

  C正確

  9. 基于比較的排序的時(shí)間復(fù)雜度下限是多少? ( )

  A. O(n)

  B. O(n^2)

  C. O(nlogn)

  D. O(logn)

  解釋?zhuān)?選C 死記硬背

  10. 對(duì)于下列程序,在一個(gè) big endian 的 32 位的計(jì)算機(jī)上,b 的結(jié)果是? ( )

  unsigned int a = 0x1234;

  char b = *((char*)&a);

  A. 0x12

  B. 0x34

  C. 0x00

  D. 程序崩潰

  解釋?zhuān)?/p>

  大端模式:高位存在于低地址。小端模式是高位存在于高地址。

  unsigne int a = 0x1234

  0x00 0x00 0x12 0x34

  低----------------------高

  b取低地址第一個(gè)地址,所以是 0x00;

  11. 編寫(xiě)函數(shù)求兩個(gè)整數(shù) a 和 b 之間的較大值。要求不能使用 if, while, switch, for, ?: 以及任何的比較語(yǔ)句。

  int max(int a , int b)

  {

  int d = a - b;

  int flag = (unsigned int )d >> 31; //把符號(hào)位移到最低位,欲讓flag為0或1,所以不能補(bǔ)符號(hào)位!所以為 unsigned int

  int array[] = {a,b};

  return array[flag];

  }

  1. 考慮函數(shù)原型 void hello(int a, int b=7, char* pszC="*"),下面的函數(shù)調(diào)用中屬于不合法調(diào)用的是( )

  A. hello(5)

  B. hello(5, 8)

  C. hello(6, "#")

  D. hello(0, 0, "#")

  解釋?zhuān)嚎糃++中參數(shù)的默認(rèn)變量 選C

  2. 一個(gè)有 800 個(gè)結(jié)點(diǎn)的完全二叉樹(shù),問(wèn)有多少個(gè)葉子結(jié)點(diǎn)? ( )

  A. 100

  B. 200

  C. 400

  D. 無(wú)法確定

  解釋?zhuān)合惹笸耆鏄?shù)的深度 h = log2(800) + 1= 9 + 1 = 10;

  那么前面9層的節(jié)點(diǎn)數(shù)為 2的9次冪 - 1 為 511;

  最后一層節(jié)點(diǎn)數(shù)為 800 - 511 = 289;

  289 = 288 + 1 ; 288 所以第九層當(dāng)中有144個(gè)節(jié)點(diǎn)有子節(jié)點(diǎn);

  完全二叉樹(shù)第9行也有葉子節(jié)點(diǎn);

  所以第九層有 144+1 = 145個(gè)節(jié)點(diǎn)不是葉子節(jié)點(diǎn);

  256- 144 -1 = 111個(gè)葉子節(jié)點(diǎn);

  所以有111+289 = 400個(gè)葉子節(jié)點(diǎn);

  完全二叉樹(shù)特點(diǎn):

  葉子結(jié)點(diǎn)只可能在最大的兩層上出現(xiàn),對(duì)任意結(jié)點(diǎn),若其右分支下的子孫最大層次為L(zhǎng),則其左分支下的子孫的最大層次必為L(zhǎng) 或 L+1;

  如果一棵具有n個(gè)結(jié)點(diǎn)的深度為k的二叉樹(shù),它的每一個(gè)結(jié)點(diǎn)都與深度為k的滿(mǎn)二叉樹(shù)中編號(hào)為1~n的結(jié)點(diǎn)一一對(duì)應(yīng),這棵二叉樹(shù)稱(chēng)為完全二叉樹(shù)。 可以根據(jù)公式進(jìn)行推導(dǎo),假設(shè)n0是度為0的結(jié)點(diǎn)總數(shù)(即葉子結(jié)點(diǎn)數(shù)),n1是度為1的結(jié)點(diǎn)總數(shù),n2是度為2的結(jié)點(diǎn)總數(shù),由二叉樹(shù)的性質(zhì)可知:n0=n2+1,則n= n0+n1+n2(其中n為完全二叉樹(shù)的結(jié)點(diǎn)總數(shù)),由上述公式把n2消去得:n= 2n0+n1-1,由于完全二叉樹(shù)中度為1的結(jié)點(diǎn)數(shù)只有兩種可能0或1,由此得到n0=(n+1)/2或n0=n/2。 總結(jié)起來(lái),就是 n0=[n/2],其中[]表示上取整?筛鶕(jù)完全二叉樹(shù)的結(jié)點(diǎn)總數(shù)計(jì)算出葉子結(jié)點(diǎn)數(shù)。

  采用公式 800/2 = 400,選C。

  4. 排序算法的穩(wěn)定是指,關(guān)鍵碼相同的記錄排序前后相對(duì)位置不發(fā)生改變,下面哪種排序算法是不穩(wěn)定的( )

  A. 插入排序

  B. 冒泡排序

  C. 快速排序

  D. 歸并排序

  解釋?zhuān)?不穩(wěn)定的:快速排序 希爾排序 堆排序 選擇排序

  5. 如下關(guān)于進(jìn)程的描述不正確的是( )

  A. 進(jìn)程在退出時(shí)會(huì)自動(dòng)關(guān)閉自己打開(kāi)的所有文件

  B. 進(jìn)程在退出時(shí)會(huì)自動(dòng)關(guān)閉自己打開(kāi)的網(wǎng)絡(luò)鏈接

  C. 進(jìn)程在退出時(shí)會(huì)自動(dòng)銷(xiāo)毀自己創(chuàng)建的所有線(xiàn)程

  D. 進(jìn)程在退出時(shí)會(huì)自動(dòng)銷(xiāo)毀自己打開(kāi)的共享內(nèi)存

  解釋?zhuān)汗蚕韮?nèi)存既然是共享的,則可能被幾個(gè)進(jìn)程共同占有,一個(gè)進(jìn)程結(jié)束,如果銷(xiāo)毀了這段共享的內(nèi)存那么其他進(jìn)程就會(huì)招到毀滅;選D

  6. 在一個(gè) cpp 文件里面,定義了一個(gè) static 類(lèi)型的全局變量,下面一個(gè)正確的描述是( )

  A. 只能在該 cpp 所在的編譯模塊中使用該變量

  B. 該變量的值是不可改變的

  C. 該變量不能在類(lèi)的成員函數(shù)中引用

  D. 該變量只能是基本類(lèi)型(如 int, char)不能是 C++類(lèi)型

  解釋?zhuān)篈正確,static具有限制作用域的作用,防止被別的文件引用!D,static可以是類(lèi)類(lèi)型;BC明顯錯(cuò)誤;

  7. 下面有關(guān)重載函數(shù)的說(shuō)法中正確的是( )

  A. 重載函數(shù)必須具有不同的返回值類(lèi)型

  B. 重載函數(shù)形參個(gè)數(shù)必須不同

  C. 重載函數(shù)必須有不同的形參列表

  D. 重載函數(shù)名可以不同

  解釋?zhuān)篊很簡(jiǎn)單

  9. 下面哪種情況下,B 不能隱式轉(zhuǎn)換為 A ? ( )

  A. class B:public A{ };

  B. class A:public B{ };

  C. class B{ operator A(); };

  D. class A{ A(const B&); };

  解釋?zhuān)焊鶕?jù)賦值兼容性原則,子類(lèi)可以轉(zhuǎn)換為父類(lèi)賦值給父類(lèi)對(duì)象;但是反過(guò)來(lái)不正確,所以B錯(cuò)誤

  C中為 類(lèi)型轉(zhuǎn)換函數(shù),D中為 采用構(gòu)造函數(shù)的方式轉(zhuǎn)換,C和D都可以轉(zhuǎn)換成功!

  10. 分析下面程序的運(yùn)行結(jié)果: ( )

  #include

  class CBase

  {

  public:

  CBase(){ cout<<"constructing CBase class"<

  ~CBase(){ cout<<"destructing CBase class"<

  };

  class CSub : public CBase

  {

  public:

  CSub(){cout<<"constructing CSub class"<

  ~CSub(){cout<<"destructing CSub class"<

  };

  void main()

  {

  CSub obj;

  }

  A. constructing CSub class

  constructing CBase class

  destructing CSub class

  destructing CBase class

  B. constructing CBase class

  constructing CSub class

  destructing CBase class

  destructing CSub class

  C. constructing CBase class

  constructing CSub class

  destructing CSub class

  destructing CBase class

  D. constructing CSub class

  constructing CBase class

  destructing CBase class

  destructing CSub class

  解釋?zhuān)汉芎?jiǎn)單  選C

  11. 兩個(gè)字符串 char* a, char* b,輸出 b 在 a 中的位置次序。

  void output_postion(const char* a, const char* b);

  如:a = "abdbcc" b = "abc"

  b 在 a 中的位置次序?yàn)?/p>

  014

  015

  034

  035

  解釋?zhuān)?/p>

  #include

  #include

  #include

  using namespace std;

  void findCore(string a, int aIndex, string b, int bIndex, list& ans)

  {

  if(bIndex == b.length())

  {

  for(list::iterator iter = ans.begin(); iter != ans.end(); iter++)

  {

  cout<<*iter;

  }

  cout<

  }

  else

  {

  for(int i = aIndex; i < a.length(); i++)

  {

  if(a[i] == b[bIndex])

  {

  ans.push_back(i);//如果相等,把序號(hào)加入到鏈表l

  findCore(a, i + 1 , b , bIndex + 1 , ans);//遞歸

  ans.pop_back();//回溯

  }

  }

  }

  }

  void find(const char* a, const char* b)

  {

  string as = a;

  string bs = b;

  list ans;//用來(lái)保存 相等的序號(hào)

  findCore(as , 0 , bs , 0 , ans);

  }

  int main(int argc, char** argv) {

  char* a = "abdbcc";

  char* b = "abc";

  find(a, b);

  return 0;

  }

本文已影響6827
上一篇:2014年廣州小升初數(shù)學(xué)模擬試卷 下一篇:2015廣發(fā)銀行平頂山分行招聘真題二

相關(guān)文章推薦

|||||