程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 幾道C++試題

幾道C++試題

編輯:C++入門知識

看到幾道比較好的考察C++基礎知識的試題,摘錄如下。
1、下面的變量a都代表什麼含義?
   (1)float(**a)[10];
    (2) double*(*a)[10];
    (3) double(*a[10])();
    (4) int*((*a)[10]);
    (5) long(*a)();
    (6) int(*(*a)(int,int))(int);

2、用變量a給出下面各項的定義。
    (1) 一個整型數
    (2) 一個指向整型數的指針
    (3) 一個指向指針的指針,它指向的指針是指向一個整型數
    (4) 一個有10個整型數的數組
    (5) 一個有10個指針的數組,該指針是指向一個整型數的
    (6) 一個指向有10個整型數數組的指針
   (7)一個指向數組的指針,該數組有10個指針,每個指針指向一個整型數
   (8)一個指向函數的指針,該函數有一個整型參數並返回一個整型數
   (9)一個有10個指針的數組,該指針指向一個函數,該函數有一個整型參數並返回一個整型數
   (10)一個指向函數的指針,該函數有一個整形參數並返回一個指向函數的指針,返回的函數指針指向有一個整型參數且返回一個整型數的函數

3、一個射擊運動員打靶,靶一共有10環,連開10槍打中90環的可能性有多少種?請用遞歸算法編程實現。

4、輸入兩個整數n和m,從數列1、2、3、...n中任意取幾個數,使其和等於m,要求將其中所有可能的組合都列出來,請編程求解。

5、下面一段程序的輸出是什麼?
 1  srand(time(NULL));
 2  int nCount = 0;
 3  for (int i = 0; i < LOOP_TIMES; i++)
 4  {
 5   int x = rand();
 6   int y = rand();
 7   if (x*x + y*y < RAND_MAX*RAND_MAX)
 8   {
 9    nCount++;
10   }
11  }
12  printf("%d\n", nCount);

 
6、編程將unsigned short a = 0xABCD的高低字節交換。
 

      這幾道題考察的側重點不一樣,前兩題主要考察對指針的理解,第3題和第4題都用到了遞歸的思想,第5題間接考察建立數學模型的能力,第6題則用到了各種位操作。下面一一進行解答。
1、  (1) a是一個二級指針,該指針指向一個一級指針,這個一級指針指向一個有10個float型元素的數組。
      (2) a是一個指針,該指針指向一個有10個指針元素的數組,每個指針元素指向一個double類型的數據。
      (3) a是一個有10個元素的數組,每個元素都是一個函數指針,該函數指針指向一個沒有參數且返回double的函數。
      (4) a是一個指針,該指針指向一個有10個指針元素的數組,每個指針元素指向一個int類型的數據。
      (5) a是一個指向函數的指針,該函數沒有參數且返回long。
      (6) a是一個指向函數的指針,該函數有兩個整形參數並返回一個指向函數的指針,返回的函數指針指向有一個整型參數且返回一個整型數的函數。

2、 (1) int a;
      (2) int *a;
      (3) int *aa;
      (4) int a[10];
      (5) int *a[10];
      (6) int(*a)[10];
      (7) int *(*a)[10];
      (8) int(*a)(int);
      (9) int(*a[10])(int);
      (10) int(*(*a)(int))(int);

3、這道題關鍵是要給出遞歸過程中的截斷條件,以下代碼可作為參考。
 1 #define SHOT_TIME    10
 2 #define SHOT_SCORE    90
 3 #define MAX_SCORE_PER_TIME   10
 4
 5 static int g_nCount = 0;
 6 static int g_pScore[SHOT_TIME] = {0};
 7
 8 void Shot(int nTime, int nScore)
 9 {
10  if (nScore < 0 || nScore > nTime*MAX_SCORE_PER_TIME)
11  {
12   return;
13  }
14
15  if (nTime == 1)
16  {
17   g_nCount++;
18   g_pScore[nTime-1] = nScore;
19   for (int i = 0; i < sizeof(g_pScore)/sizeof(g_pScore[0]); i++)
20   {
21    cout << g_pScore[i] << " ";
22   }
23   cout << endl;
24   return;
25  }
26
27  for (int i = 0; i <= MAX_SCORE_PER_TIME; i++)
28  {
29   g_pScore[nTime-1] = i;
30   Shot(nTime-1, nScore-i);
31  }
32 }
33
34 int main(int argc, char* argv[])
35 {
36  Shot(SHOT_TIME, SHOT_SCORE);
37  cout << "total count is " << g_n

 
4、這道題是一道典型的0-1背包問題,參考算法如下。
1 static bool *g_pIsSelected = NULL;
2 static int g_nNumber = 0;
3
4 void Select(int nNum, int nSum)
5 {
6  assert(g_pIsSelected != NULL);
7
8  if (nNum < 1 || nSum < 1 || (nNum==1 && nSum != 1))
9  {
10   return;
11  }
12
13  if (nNum == nSum)
14  {
15   g_pIsSelected[nNum-1] = true;
16   for (int i = 1; i <= g_nNumber; i++)
17   {
18    if (g_pIsSelected[i-1])
19    {
20     cout << i << " ";
21    }
22   }
23   g_pIsSelected[nNum-1] = false;
24   cout << endl;
25   return;
26  }
27
28  Select(nNum-1, nSum);
29
30  g_pIsSelected[nNum-1] = true;
31  Select(nNum-1, nSum-nNum);
32  g_pIsSelected[nNum-1] = false;
33 }
34
35 int main(int argc, char* argv[])
36 {
37  cout << "number is: ";
38  cin >> g_nNumber;
39  cout << "sum is: ";
40  int nSum = 0;
41  cin >> nSum;
42
43  g_pIsSelected = new bool[g_nNumber];
44  assert(g_pIsSelected != NULL);
45  memset(g_pIsSelected, 0, sizeof(bool)*g_nNumber);
46  Select(g_nNumber, nSum);
47  delete []g_pIsSelected;
48  g_pIsSelected = NULL;
49
50   cin >> nSum;
51  return 0;
52 }

 
5、如果僅看代碼本身,是很難得到輸出結果的。實際上這是一道概率題,計算的是在一個正方形內部放置一個點,點落在以正方形邊長為半徑的四分之一圓內的概率。由此可得輸出結果為1/4*PI*1000=785(當然,在785附近的值應當都是合理的)。

6、參考代碼如下。
 1 int main(int argc, char* argv[])
 2 {
 3  unsigned short a = 0xABCD;
 4  unsigned short b = a << 8;
 5  unsigned short c = a >> 8;
 6  a = b | c;
 7  cout << hex << a << endl;
 8
 9  getchar();
10  return 0;
11 }


摘自 創世軟件團隊

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved