1. 程式人生 > >c++ 刷題 錯題、程式設計題整理

c++ 刷題 錯題、程式設計題整理

1、

結果:輸出亂碼

2、

    答案選B。

這道題主要考察的知識點是 :全域性變數,靜態區域性變數,區域性變數空間的堆分配和棧分配

其中全域性變數和靜態區域性變數時從 靜態儲存區中劃分的空間,

二者的區別在於作用域的不同,全域性變數作用域大於靜態區域性變數(只用於宣告它的函式中),

而之所以是先釋放 D 在釋放 C的原因是,main()函式結束了,釋放了D,但是C是在整個程式結束的之前才釋放的。

區域性變數A 是通過 new 從系統的堆空間中分配的,程式執行結束之後,系統是不會自動回收分配給它的空間的,需要程式設計師手動呼叫 delete 來釋放。

區域性變數 B 物件的空間來自於系統的棧空間,在該方法執行結束就會由系統自動通過呼叫析構方法將其空間釋放。

之所以是 先 A  後 B 是因為,B 是在函式執行到 結尾 "}" 的時候才呼叫解構函式, 而語句 delete a ; 位於函式結尾 "}" 之前。

3、c++ 查詢一個字串是否是另一個字串的子串

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string a = "abcdefghijklmn";
    string b = "def";
    string c = "123";
    string::size_type idx;

    // find函式返回的是位置值 無符號整形
    idx = a.find(b);  // c語言中有strstr也可以查詢,但是c++中的string效率更高
    if (idx == string::npos)
        cout << "not found!\n";
    else
        cout << "found\n";
    return 0;
}

4、

#include<iostream>
using namespace std;

int main()
{
    int N, M, P, i, data, d[100] = { 0 }, num[100] = {0}, rank = 1;
    char zifu, delay[100];
    cin >> N >> M >> P;
    for (i = 0; i < N; i++)
    {
        cin >> data;
        d[i] = data;
    }
    for (i = 0; i < M; i++)
    {
        cin >> zifu >> data;
        delay[i] = zifu;
        num[i] = data;
    }
    for (i = 0; i < M; i++)
    {
        if (delay[i] == 'A')
            d[num[i] - 1]++;
        if (delay[i] == 'B')
            d[num[i] - 1]--;
    }
    for (i = 0; i < N; i++)
    {
        if (d[P - 1 ] < d[i])
            rank++;
    }
    /*for (i = 0; i < N; i++)
        cout << d[i] << " ";
    cout << endl;*/
    cout << rank << endl;
}

5、// 判斷一個數是否是2的冪


#include<iostream>
#include<list>
using namespace std;

//由於C++中沒有直接將10進位制轉換成2進位制的數
void BinaryVector(int n)
{
    if (n < 0)  // 如果是小於0的話,直接不判斷
    {
        exit(1);
    }

    // 轉換成2進位制
    int temp;
    temp = n;
    list<int> L; // 列表,不能使用隨機索引,只能按照迭代器索引
    while (temp != 0)
    {
        L.push_front(temp % 2);
        temp = temp / 2;
    }

    // 判斷是否是2的冪
    int leiji = 1;
    list<int>::iterator it;
    for (it = L.begin(); it != L.end(); it++)
    {
        if (it == L.begin() && *(it) != 1)
        {
            cout << "false" << endl;
            break;
        }
        else
        {
            if (*it == 0)
                leiji++;
        }
    }
    if (leiji == L.size())
        cout << "true" << endl;
    else
        cout << "false" << endl;
}

void IsTwoPower(int n)
{
}

int main()
{
    int n;
    while (cin >> n)
    {
        BinaryVector(n);
    }
}

6、關於函式裡面變數定義成靜態變數

#include <iostream>
using namespace std;

int f(int);

void main()
{
    int a = 2, i;
    for (i = 0; i < 3; i++)
    {
        cout << f(a) << " ";
    }
    cout << endl;
}

int f(int a)
{
    int b = 0;
    static int c = 3;
    b++;
    c++;
    return (a + b + c);
}

c是靜態變數,只會定義和初始化一次,而b是區域性變數,每次呼叫完了都會釋放,第二次使用的時候需要重新定義和初始化。

相關推薦

c++ 程式設計整理

1、 結果:輸出亂碼 2、     答案選B。 這道題主要考察的知識點是 :全域性變數,靜態區域性變數,區域性變數空間的堆分配和棧分配 其中全域性變數和靜態區域性變數時從 靜態儲存區中劃分的空間, 二者的區別在於作用域的不同,全域性變數作用域大於靜態區

2018京東C++開發工程師實習線上筆試程式設計參考題解

AC了第一題第三題(第一題被個低階錯誤浪費了一大堆時間。。。),第二題dp推錯了,一首涼涼獻給自己。 第一題 大致題意 題意是說,給你一個n(1<=n<=100000),要你找出1~n這麼多個數的最小公倍數。因為結果可能較大,對98

C語言中有關字串的程式設計

(1)字串拷貝strcpy 特點:只能拷貝字串,遇到\0停止拷貝 char* MyStrcpy(char* dst,const char* src) { assert(dst != NU

程式設計入門——C語言 翁愷 期末考試程式設計

題目內容:分數可以表示為“分子/分母”的形式。編寫一個程式,要求使用者輸入一個分數,然後將其約分為最簡分式。最簡分式是指分子和分母不具有可以約分的成分了。如6/12可以被約分為1/2。當分子大於分母時,不需要表達為整數又分數的形式,即11/8還是11/8;而當分子分母相等時,仍然表達為1/1的分數形式。輸入格

OPPO 2019校園招聘C/C++開發工程師(手機方向) 筆試程式設計-2018.09.10

思路: 1. 分割字串,提取數字 2. multimap儲存 3. 遍歷找到相應結果輸出 #include <iostream> #include <map> #

【演算法】網易程式設計:暗黑字串組合數

題目 一個字串僅由’A’,’B’,’C’三個字元組成,若字串中不存在’A’,’B’,’C’三個字元相鄰的子串(比如ABC,BAC等),則該字串稱為暗黑字串,否則稱為單純字串。 求長度為L的此種字串中有多少種是暗黑字串? 例子: 字串 AABBA

c++(21/100)樹的打印矩陣覆蓋和括號生成

生成 一個 ring 第一個 pop 全局 over 矩形 node 題目一:把二叉樹打印成多行 從上到下按層打印二叉樹,同一層結點從左至右輸出。每一層輸出一行。 思路:一開始以為2維的vector可以直接訪問,但是試了是不行,會報錯,vector在有值之前不能直接訪問,所

c/c++程式設計 之 猴子選大王(陣列連結串列兩種方法)

一群猴子要選新猴王。新猴王的選擇方法是:讓N只候選猴子圍成一圈,從某位置起順序編號為1-N號。從第1號開始報數,每輪從1報到3,凡報到3的猴子即退出圈子,接著又從緊鄰的下一隻猴子開始同樣的報數。如此不斷迴圈,最後剩下的一隻猴子就選為猴王。請問是原來第幾號猴子當選猴王?

C/C++程式設計開頭字串資料輸入幾種寫法

1、題設 在IT公司程式設計題中,多數會讓你一併寫上測試資料輸入和結果輸出的Demo,這也是程式設計師基本的功底。想一想如果連自己的測試資料都無法給入,後面的演算法寫的再好,也無法測試它的準確性和效果

C語言經典程式設計--哥德巴赫猜想 完數 猜數字等

  一、  驗證歌德巴赫猜想:任意一個不小於6的偶數都可以表示成兩個素數的和。從鍵盤任意給一個符合條件的數,輸出相應的兩個素數。 素數:指在一個大於1的自然數中,除了1和此整數自身外,沒法被其他自然數整除的數 程式碼如下: #include <stdio.h>

C++經驗

成員 cout 小數位 格式控制 flags point color 小數點 idt cout輸出流------格式控制符 他們在#include <iomanip>頭文件中 setprecision(n)與setiosflags(ios::fixed)合用,可

C記錄-1011

輸出 ++ main can pro clu 公約數 multipl panel 題目描述 輸入兩個正整數m和n,求其最大公約數和最小公倍數。 輸入 兩個整數 輸出 最大公約數,最小公倍數 樣例輸入 5 7 樣例輸出 1 35 1 #includ

C記錄-1014

for lld col 輸出 刷題 stdio.h panel 一個數 輸入 題目描述 求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一個數字(n不超過20)。 輸入 n 輸出 Sn的值 樣例輸入 5 樣例輸出 153

C記錄-1015

code 1.0 輸入 urn printf clas sam 記錄 rec 題目描述 求以下三數的和,保留2位小數 1~a之和 1~b的平方和 1~c的倒數和 輸入 a b c 輸出 1+2+...+a + 1^2+2^2+...+b^2 + 1/1+1/2+.

C記錄-1017

amp math.h data span sample ane == can 刷題記錄 題目描述 一個數如果恰好等於不包含它本身所有因子之和,這個數就稱為"完數"。 例如,6的因子為1、2、3,而6=1+2+3,因此6是"完數"。 編程序找出N之內的所有完數,並按下面格

C記錄-1019

++ pri 每次 三次 n) += for nbsp 高度 題目描述 一球從M米高度自由下落,每次落地後返回原高度的一半,再落下。 它在第N次落地時反彈多高?共經過多少米? 保留兩位小數 輸入 M N 輸出 它在第N次落地時反彈多高?共經過多少米? 保留兩位小數

c++(3/100)數獨,棧和隊列

彈出 iter char col 編寫 實現 滑動窗口 title 表示 stack的基本操作 ? s.size():返回棧中的元素數量 ? s.empty():判斷棧是否為空,返回true或false ? s.push(元素):返回對棧頂部“元素”的可變(可修改)引用 ?

c++(15/100)矩陣轉置,最深子樹

標記 i++ con 結果 最短 網上 矩陣的轉置 alloc tree 題目一:矩陣轉置 給定一個矩陣 A, 返回 A 的轉置矩陣。 矩陣的轉置是指將矩陣的主對角線翻轉,交換矩陣的行索引與列索引。 示例 1: 輸入:[[1,2,3],[4,5,6],[7,8,9]]

10-29C/C++

1、函式呼叫exec((v1,v2),(v3,v4,v5),v6,v7)中,實參的個數是4個。 解析:逗號運算子(百度百科):在C語言中,多個表示式可以用逗號分開,其中用逗號分開的表示式的值分別結算,但整個表示式的值是最後一個表示式的值。 所以exec((v1,v2), (v3,v4,v5)

10-22C/C++

1、有以下程式(strcpy 為字串賦值函式,strcat為字串連線函式) #include <stdio.h> #include <string.h> main() { char a[10]="abc",b[10]="012",c[10]="xyz"