1. 程式人生 > >牛客網-c++專項練習簡單版

牛客網-c++專項練習簡單版

1.#include<file.h> 與 #include "file.h"的區別?

答:前者首先從當前工作路徑搜尋並引用file.h,而後者首先從Standard Library的路徑尋找和引用file.h

2.求輸出結果

#include <stdio.h>
main(){
    int i=0;
    i=~i;
    printf("%d\n",i);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

答:-1 
解析: 
0 = 00000000000000000000000000000000 
取反11111111111111111111111111111111就是-1在計算機的儲存形式 
計算機內, 負數已反碼形式儲存, 符號位不變, 原始碼求反加1, 就是反碼 
11111111111111111111111111111111 就是 
10000000000000000000000000000001 求反 11111111111111111111111111111110 
加1 就是 11111111111111111111111111111111

3.下面程式的錯誤

struct Test
 {
     Test( int ) {}
     Test() {}
     void fun() {}
 };
 void main( void )
 {
     Test a(1);
     a.fun();
     Test b();
     b.fun();
 }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

答:b.fun()會出錯。 
解析: 
Test a(1); //新建了一個物件 
a.fun(); //因此可以呼叫函式 
Test b(); //聲明瞭一個函式,並沒有新建物件 
b.fun(); //沒有新建物件,則不能呼叫函式

4.輸出結果是

class Base {
    public
: Base(int j): i(j) {} virtual~Base() {} void func1() { i *= 10; func2(); } int getValue() { return i; } protected: virtual void func2() { i++; } protected: int i; }; class Child: public Base { public: Child(int j): Base
(j) {} void func1() { i *= 100; func2(); } protected: void func2() { i += 2; } }; int main() { Base * pb = new Child(1); pb->func1(); cout << pb->getValue() << endl; delete pb; }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

答:12 
解析: Base * pb = new Child(1), 首先建立子類物件,初始化為1; 
func1()不是虛擬函式,所以pb->func1()執行的是基類的func1函式,i= 10,然後呼叫func2()函式; 
這裡的func2是虛擬函式,要往下派生類尋找,找到後執行派生類中的func2(),此時,i = 12; 
最後執行pb->getValue(),結果為12

5.描述正確的是: 
A.虛擬函式是沒有實現的函式 
B.純虛擬函式的實現是在派生類中 
C.抽象類是沒有純虛擬函式的類 
D.抽象類指標可以指向不同的派生類 
答:BD 
解析: 
關鍵字virtual修飾的成員函式叫做虛擬函式,虛擬函式是為了實現多型而存在的,必須 有函式體 
純虛擬函式的宣告,是在虛擬函式宣告的結尾加=0,沒有函式體。在派生類中沒有重新定義虛擬函式之前是不能呼叫的 
如果一個類中至少含有一個純虛擬函式,此時稱之為抽象類。所以抽象類一定有純虛擬函式 
基類型別的指標可以指向任何基類物件或派生類物件

6:以下為自動變數的是:

A.double k;

B.register int i;

C.static char c;

D.auto long m;

答:AD

解析: 
簡單介紹一下register變數:它是把變數儲存在cpu中的暫存器中,當一個變數需要反覆讀寫時,不需要反覆的訪問記憶體,而直接可以使用它,並且,register是一個建議型的關鍵字,編譯器可能會因為變數不滿足一定條件而放棄使用暫存器變數。一般情況下將區域性自動變數和函式形參作為暫存器變數。 
所以當定義一個靜態變數為暫存器變數,編譯器不會通過,它仍然還是靜態變數 
普通的變數,不管是否宣告為auto,都是自動型變數 
A,普通變數,是auto的 
B,暫存器變數,不是 
C,靜態變數,不是 
D,宣告為auto,是

7:在C++STL中常用的容器和型別,下面哪些支援下標”[]”運算?

vector :T 
list: 
deque:T 
map:T 
set: 
unordered_map:T 
unordered_set: 
stack: 
string:T

解析: 
vector:隨機訪問迭代器,複雜度O(1) 
deque:同上,O(1) 
map:雙向迭代器,不過由於是關聯容器,需要通過key訪問alue的方法,O(h),h為樹的高度 
unordered_map:前向迭代器,同上,平攤複雜度O(1),最差O(n),也與雜湊函式的好壞有關。 
string:同vector 
注意:支援隨機訪問就支援[]; 
8:求k值 
enum { 
a, b=5, c, d=4, e 
} k; 
k =c; 
答:6 
9:下列關於聯合的描述中,錯誤的是?

聯合變數定義時不可初始化:F 
聯合的成員是共址的 
聯合的成員在某一個時刻只有當前的是有效的 
聯合變數佔有的記憶體空間是該聯合變數中佔有最大記憶體空間的成員在記憶體對齊時所需的儲存空間

解析:union型別的變數在定義時是可以被初始化的,定義如下union型別

union Test
{
    int a;
    float b;
};
Test test = {1};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

test變數的定義可以初始化,初始值的型別必須是union中第一個成員的型別。

結構和聯合都是由多個不同的資料型別成員組成, 但在任何同一時刻, 聯合中只存放了一個被選中的成員(所有成員共用一塊地址空間), 而結構的所有成員都存在(不同成員的存放地址不同)。 
對於聯合的不同成員賦值, 將會對其它成員重寫, 原來成員的值就不存在了, 而對於結構的不同成員賦值是互不影響的。

10:以下哪種STL容器中的物件是連續儲存的:()

list 
vector:T 
map 
set 
解析: 
只有dqeue和vector是連續儲存的 
vector的實現是是同個一個連續的陣列存放元素。

11: 下面程式段的輸出結果是

char *p1 = ”123”, *p2 = ”ABC”, str[50] = “xyz”; 
strcpy(str + 2, strcat(p1, p2)); 
printr(“%s\n”, str); 
答:出錯。 
解析: 
char *p1=”123” 聲明瞭個字串指標p1,指向字串“ 123 ”,此時的“ 123 ”存放在常量區,並沒有在拷貝到棧中,所以不能修改,如修改p1[0] = ‘2’就是錯誤的。 
建議改為char p1[10] = “123”,就可以修改p1的值。

原始碼有錯:p1和p2都指向常量字串,在常量區,所以不能對其進行操作;改為陣列即可,但是用字串初始化陣列時要記得將陣列長度加1,因為字串預設的末尾有一個‘\0’;第二點要注意的是,strcat函式的p1要有足夠的空間來容納p1和p2連線後的串長。

修改為以下程式碼將可以: 
char p1[7] = “123”; 
char p2[] = “ABC”; 
char str[50] = “xyz”; 
strcpy(str + 2, strcat(p1, p2)); 
printf(“%s\n”, str);

12:x為整型,請用位運算實現x%8 
答:x&7 
解析: 
當我們求餘的時候,相當於除以2的N次冥,也就是相當於把數本身右移N位,但是右移掉的那些位需要通過位運算進行保留;用以上例子來說,X%8即X%2^3,那麼就需要右移三次,那麼移去的三位需要保留下來,而8=1000,剛好,可以使用0111來保留下來後三位,於是,對於除數都是2的整數次冪的情況,可以使用x & (2^n-1)的方法進行與運算,保留下來的最末尾的n位就是餘數。 
該題中,結果為x&7.


相關推薦

-c++專項練習簡單

1.#include<file.h> 與 #include "file.h"的區別?答:前者首先從當前工作路徑搜尋並引用file.h,而後者首先從Standard Library的路徑尋找和引用file.h2.求輸出結果#include <stdio.h&g

2018-4-14 php專項練習

當連線的時候本函式將先嚐試尋找一個在同一個主機上用同樣的使用者名稱和密碼已經開啟的(持久)連線,如果找到,則返回此連線標識而不開啟新連線。其次,當指令碼執行完畢後到 SQL 伺服器的連線不會被關閉,此連線將保持開啟以備以後使用(mysql_close() 不會關閉由 mysql_pconnect() 建立的連

Javascript專項練習錯題彙總

字串的拼接 console.log(1+ +"2"+"2"); console.log("A"- "B"+"2"); console.log("A"- "B"+2); console.log(1+ +”2”+”2”)中的第一個加號表示的是一元加操作符,+

編程練習之編程馬拉松:發工資

心算 clas c11 width true tab scanner author 算法 簡單的貪心算法 AC代碼:import java.util.Scanner; /** * @author CC11001100 */ public class M

編程練習之編程馬拉松:砌墻

auth coder ann 高度 gpo string img wid urn 思路其實很簡單,無論再少的步驟,至少要能把矮的堆到平均高度,所以只求 sum(avg - (<avg))即可。 AC代碼:import java.util.Array

編程練習之編程馬拉松:數據庫連接池

ranking system left amp ati util bar 題目 question 只需要兩個變量即可,一個維護著連接池的當前連接數,一個維護著連接池的最大連接數。 AC代碼:import java.util.ArrayList; import

編程練習之編程馬拉松:紅與黑

簡單 rgs int 並且 ner http smart == https 題目描述 有一間長方形的房子,地上鋪了紅色、黑色兩種顏色的正方形瓷磚。你站在其中一塊黑色的瓷磚上,只能向相鄰的(上下左右四個方向)黑色瓷磚移動。請寫一個程序,計算你總共能夠到達多少塊黑色的瓷磚。 輸

C++題目總結(一)

準備從今天開始好好在牛客網上練習一些題提高程式碼能力,最近不知道在幹些什麼,所以想現在開始寫總結。一、函式指標的定義:C++指向函式的指標定義方式為:返回型別  (*指標名)  (函式引數列表)  ,例如 void (*p)(int)是指向一個返回值為void 引數為int型

Java基礎之引用(String,char[],Integer)總結於專項練習題

1、String的引用:下列程式碼執行後的結果為:public class Test { public static void main(String[] args) { StringBuffe

C++知識點整理(持續更新)

1.堆疊的使用 棧 在Windows下,棧是向低地址擴充套件的資料結構,是一塊連續的記憶體的區域。這句話的意思是棧頂的地址和棧的最大容量是系統預先規定好的,在WINDOWS下,棧的大小是2M(也有的說是1M,總之是一個編譯時就確定的常數),如果申請的空間

NowCoder 2018年全國多校算法寒假訓練營練習比賽(第四場)A.石油采集(dfs) B.道路建設(最小生成樹prim) C.求交集(暴力) F.Call to your teacher(迪傑斯特拉亂用) H.老子的全排列呢(dfs)

初始 -o 地圖 意義 技術 tle bject ios urn 菜哭了。。。 A.石油采集 時間限制:C/C++ 1秒,其他語言2秒 空間限制:C/C++ 32768K,其他語言65536K 64bit IO Format: %lld 鏈

HTML/CSS專項練習錯題彙總

有關瀏覽器的核心判斷 主要分為四類:-o-/-ms-/-moz-/-webkit- 通過js的dom.style.XxxTransition進行相應的校驗判斷: var div = document.createElement('div');

刷題(計算機基礎+作業系統)專項練習手記

1、 作業系統分類 批 處 理操作系 統 (Batch Processing Operating System ) 它的特點是:多道和成批處理。 分 時 操作系 統 (Time Sharing Operating System, 簡 稱 TSOS)(UNIX作業系統)

專項練習-資料庫

資料庫 資料庫管理系統應該具備的功能: 資料庫定義 資料庫操縱 資料庫查詢 資料庫控制 資料庫管理 資料庫通訊(可選,在分散式和網路環境中必須提供) 正規化 1NF : 屬性是原子性的,即不可拆分的;例

專項練習2

在同一個java原檔案中,可以有多個class類,但是隻有有一個公共的 public class。 HashMap是HashTable的輕量級實現(非線性安全的實現) 二者都實現了Map藉口, 區別於

_2018年全國多校算法寒假訓練營練習比賽(第一場)_部分題解

運行時間 can ear 類型 主動 log box 裝配 lap ~__~花了大半個小時水了點題,將究看看。 比賽首頁 > A 大吉大利,今晚吃雞——槍械篇 > 21035827 在絕地求生(吃雞)遊戲裏,不同的槍支有不同的威力,更是可以搭配不同的

斯特林公式-Stirling公式(取N階乘近似值)-HDU1018-Big Number NowCoder 2018年全國多校算法寒假訓練營練習比賽(第三場)A.不凡的夫夫

subject color content coder -m ria 一點 練習 java 最近一堆題目要補,一直鹹魚,補了一堆水題都沒必要寫題解。備忘一下這個公式。 Stirling公式的意義在於:當n足夠大時,n!計算起來十分困難,雖然有很多關於n!的等式,但並不能很

2018年全國多校算法寒假訓練營練習比賽(第四場)

ios ext ++i onclick 比賽 dag 練習 empty 分享圖片 T1 石油采集 這題可以建一張二分圖跑最大匹配,也可以直接染色然後數數 #include<bits/stdc++.h> using namespace std;

NowCoder 2018年全國多校算法寒假訓練營練習比賽(第五場)A.逆序數 B.Big Water Problem(線段樹-區間查詢求和和單點更新) F.The Biggest Water Problem H.Tree Recovery(線段樹-區間查詢求和和區間更新)

numbers col 如果 -o img 數組 數據 .html log 隨便補了幾道題,可能也就能寫出來這幾道吧。最近被搜索虐爆了,要抓緊去看搜索,隨便寫寫就溜,備忘一下線段樹新的板子(以前的不好用,太垃圾了) A.逆序數 時間限制:C/C+

Nowcoder 練習賽13 A. 幸運數字Ⅰ B.幸運數字Ⅱ(數組或者dfs) C.幸運數字Ⅲ(思維)

tps sum quest 兩個 long 練習 clas tdi return A.幸運數字Ⅰ 鏈接:https://www.nowcoder.com/acm/contest/70/A來源:牛客網 水題。 代碼: 1 #include<iost