2016級電腦C++助教工作(2)基本文法與資料尋找方法__C++

來源:互聯網
上載者:User
注意以下範例只是一個範例,還可以有很多別的實現方法 基本文法: 輸入輸出: 正常篇-輸入問題: 作為一個freshman,更多的你們可能第一次接觸編程。那麼輸入輸出作為互動的一種方式,自然是非常重要的。          那麼我們學習的第一中輸入輸出的方法就是cin,cout這兩個函數啦。         首先我們有第一種姿勢:
int a;    cin>>a;
先定義個變數,然後輸入。這個變數可以使double,float,int,char,bool等等類型。 在我們上機題中,如果輸入告訴你要輸入多少組case,每個case有多少輸入了,那採用這個方法是自然沒有問題的,因為我們可以用一個迴圈解決。 如第一次練習的C(題號,2076 The Drunk Jailer),

Sample Input

25100

Sample Output

210
我們可以用以下代碼解決輸入問題。

    int n,u;    cin>>n;    for(int i = 0;i < n; i++){        cin>>u;    }

但是換一種情況,告訴輸入某個數的時候輸入結束,例如中文練習題C(4144 Simple String Transformation)

輸入範例

3abc4AAbc0
輸出範例
defaaef
我們可以採用如下代碼解決

    int n;    while(cin>>n){        if(n == 0)            break;        ... //other code    }

這樣不停輸入數字,直到輸入為0結束,跳出迴圈即可。


不過以上都是通過輸入判斷是否結束了,如果遇到輸入為EOF(end of file)就是檔案結束才結束輸入怎麼辦呢。

例如 第一次練習A (2015 Keep on Truckin')

Sample Input:

180 160 170

Sample Output:

CRASH 160

那我們的解決方案如下:

    int a,b,c;    while(cin>>a>>b>>c){        ... //other code     }


以上解決的問題都是一個變數對應於一個輸入的,對於一行是一個句子(字元數組)還有空格時該如何是好呢。

例如第一次練習 D(1153 Word Reversal)

方法1:我們利用string數組來儲存輸入

    string a;    int n;    cin>>n;    getchar(); //由於第一個整數輸入後接了一個分行符號'\n',這個字元我們要讀入才能正常讀取下一行    while(n--)    {        getline(cin,a);        ... //other code     }

有了這個就可以了嗎。其實我們還有很多別的方法。

我們可以用char 數組(似乎還沒學到,但是很快就學了,提前告訴你們)
方法2:

    char a[100];    int n;    cin>>n;    getchar(); //理由同上   你需要使用到 cstdio 這個標頭檔   #include<cstdio>    while(n--){        gets(a);        ... //other code    }

如果想擷取數組a的長度,代碼如下

int length = strlen(a)

so,到這裡感覺自己會數組了,也是不錯的,但是這樣真的就完了麼。

如何體現更高水平呢,秀一秀黑科技呢(哈哈,也就只能跟大一的說是黑科技了)

方法3:採用getchar()讀入字元

    char a[100];    int n;    cin>>n;    getchar(); //理由同上    while(n--){        int length = 0;        while(true){            a[length] = getchar();  //getchar()函數就是擷取一個字元輸入            if(a[length] == '\n')  // '\n' 表示分行符號                break;            length++;        }        a[length] = '\0'; // '\0'表示字元數組的終止字元        //cout<<a<<endl;        ... //other code    }
所以到這裡,感覺到一點點的梯度上升嗎。

在方法三種,額外的知識是,你要知道一些編碼知識,這裡特指ASCII,'\0'對應Null 字元,也是表示字元數組結尾的標誌,'\n'是換行字元

參考資料:http://baike.baidu.com/link?url=tSj0V1ALtbxUCo27_IozDqqT2MNrUk7zqxAbIlTrr3yt_m-eEzp24QskmKQFvHQoKsWEWOBC2ElPGLZfXOdN4q 

如果明白了這個,那麼任何的輸入都不會難倒你的。


接下來是輸出的問題:

正常篇-輸出問題: 輸出的格式有很多,我們用acm.hdu.edu.cn上幾道簡單題來作為例子,有興趣的可以去做做 1. 1089 A+B for Input-Output Practice (I)  Sample Input

 1 5 10 20   

Sample Output
 6 30 這事最簡單的,一行輸入,一行輸出 

2.1096A+B for Input-Output Practice (VIII)
Sample Input

 3 4 1 2 3 4 5 1 2 3 4 5 3 1 2 3   

Sample Output
 10 15 6 這個輸出要求每兩個輸出之間有一個換行,那我們該怎麼做呢。 ------------------  在這裡 告訴你們一個非常裝B的話   ( 
talk is cheap , show me the code)   
    int n;    cin>>n;    int flag = 0; // 這是一個非常常用的標記方法    while(n--){        if(flag == 1)            cout<<endl;        flag = 1;        ... //other code    }

這裡我們可以看到新定義了一個flag標記的變數,如果flag==1,那麼輸出換行,因為此時,我們知道之前一定有一行輸出的,進入這次迴圈的時候,一定會產生一次新的輸出,那麼我們有理由確定,這個時候需要輸出一個空白行。 PS:1089-1096都是簡單的a+b問題,就是輸入輸出控制的聯絡,非常建議大家去做一做。 3.5918 sequence I  這題別做啦,就是為了告訴你們還有別的要求的 Sample Input
 2 6 3 1 1 2 3 1 2 3 1 2 3 6 3 2 1 3 2 2 3 1 1 2 3   

Sample Output
 Case #1: 2 Case #2: 1 

通常還有一種格式就是輸出 Case # 資料群組號: 答案 或者換個姿勢: Sample Input
 2 3 2 1 2 3 1 3 2 3 3 2 3 3 3 1 1 2 2   

Sample Output
 Case #1: 3 1 Case #2: 2 3 

無論哪種格式,實際按要求來即可,只是步驟麻煩了些罷。 輸入輸出到此結束。

迴圈: 對於D(1153 Word Reversal),我們可以用迴圈的姿勢有以下幾種

Sample Input

25100

Sample Output

210
    第一種:    int n;    cin>>n;    for(int i = 0;i < n; i++){        ... //other code    }        第二種:    int n;    cin>>n;    while(n--){        ... //other code    }        第三種:    int n;    cin>>n;    do{                    }while(n--);

特別的:

例如中文練習題C(4144 Simple String Transformation)

輸入範例

3abc4AAbc0
輸出範例
defaaef

我們還可以有第四種姿勢寫迴圈

    int n;    while(cin>>n,n!=0){        ... //other code    }
是不是很神奇,判斷條件寫到while的括弧中即可。 所以以上四種方式你們都可以嘗試一下哈。


有了以上知識,做練習是沒啥問題了吧,剩下的就是思考了。 但是這樣夠嗎。


no~no~no~ 我們知道大學的學習已經和高中不一樣了,我們需要掌握的一個基本技能就是如何自學,如何尋找資料,如何在學習的道路上漸行漸遠~ 如果你想成為一個ACM大神,如何超越高高在上的學長學姐,如何超越競爭的同年級同學,一年銅、兩年銀、三年金的步伐你能實現嗎,或者你滿足嗎。 如果你想成為一個駭客,電腦網路,組成原理,密碼學,體繫結構,資料庫,作業系統,linux指令........堆積如山的書。 如果你想成為一名科研人員,機器學習,資料採礦,圖形映像,神經網路.....(此處原諒我知之甚少) ............. 嗯好,以上內容都是嚇嚇你們的。我們這裡要講的是查資料。
百度搜尋: 首先百度是大家都會的,那麼我們要多多利用百度了搜尋。有句話是這麼說的:當你知道的越來越多,那你就會覺得自己越來越無知。你做的題目多了,你就會發現自己懂的太少了,於是你要從網上找題解( 此處我強烈不建議從網上找練習題的答案,這麼簡單的題目,你們一定要獨立思考),但是你會發現TOJ上的題,題解還是不那麼好找的。 所以我建議大家想刷題就用杭州電子科技大學的HDU(acm.hdu.edu.cn),北京大學的POJ(poj.org),CF(http://codeforces.com/gyms/)
如果英語是個大問題(熱愛ACM,你遲早得面對),那麼退而求其次,看中文題目吧,福州大學FZU(http://acm.fzu.edu.cn/)sjtu(http://acm.sjtu.edu.cn/OnlineJudge/problems) 其實你有很多平台可以去的,但是注意一點,選擇一個平台不停的刷就行,不要經常換平台,因為簡單題很多,但是它們確不能讓你進步,你要嘗試挑戰自己。 HDU,POJ,CF網上有很多解題報告,當你不會的時候就看看別人怎麼做的。 可以放一些例子(不好意思,又給自己打廣告了)。多看幾個不同的部落格,你們就能懂更多了。







或者查詢strlen函數的用法。




第二個:C++手冊查詢 http://www.cplusplus.com/reference/ (這個網站還是挺慢的)

那這裡我們看看 手冊上可以查到什麼 聽說你對於string類不是很瞭解 在搜尋方塊中輸入string進行搜尋

於是我們會得到string這個標頭檔的一些資訊,往下拉,我們可以看到更多的介紹

有很多方法和操作,但是實際我們需要用到的很少。我們選擇 length 進入查看


我們可以查看更多的說明,可以看到更多的例子。
最後以strlen函數的查詢收尾

第二篇到此結束~~~~~~~










當然最好的成長的方式是找比你們厲害的人學習,你們的學長學姐就是非常不錯的選擇。

孤獨是一個人的狂歡,狂歡是一群人的寂寞。祝你們在學習的不歸路上,越走越深。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.