1. 程式人生 > >C++講義——第一節C++基礎

C++講義——第一節C++基礎

第一節        C++程式設計基礎

 

C++在語法結構上和QBASIC有著很大的區別,QBASIC語言適合大多數初學者使用,初學者在學習時不用關心變數的定義,程式的結構等諸多的細節,甚至QBASIC程式設計環境可以幫初學者將程式進行標準化和有一定的改錯能力,讓初學者可以順利的學習程式設計的知識。但是QBASIC畢竟只是一種入門性語言,目前已經基本沒有任何實用價值。對於即將進入中學的學生,將要學習的就是C++程式設計。而C++語言無論從結構要求上,還是語法的嚴格性上和QBASIC都有著巨大的差別。

下面簡單列出C++程式的基本結構和相關語法說明。

一、C++的程式結構

【例1】分析下面的程式的功能:

#include <iostream>     //“包含命令”,向程式提供輸入輸出所需的一些資訊

using namespace std;    //“使用標準的名稱空間”

int main()

{

cout<<"This is a C++ program.";        //輸出This is a C++ program.

  cout<<endl;                        //輸出回車

  system("pause");                    //DOS螢幕處於等待狀態

  return 0;                           //結束主函式並將值返回值

}

【例2】 分析下面的程式的功能:

#include <iostream>

using namespace std;

int main()

{  

int x,y,sum;                                       //宣告(定義)變數x,y,sun為整型數

     cout<<"Input first integer: x=";         //輸出(顯示)提示資訊

     cin>>x;                                             //從鍵盤上輸入一個整數並存儲在變數x中

     cout<<"Input second integer: y=";     //顯示提示資訊

     cin>>y;                                             //從鍵盤上輸入變數y的值

     sum=x+y;                                          //求x,y的和並存儲在變數sum中

     cout<<"Sum is "<<sum<<endl;         //輸出結果

     system("pause");

     return 0;

}

【例3】 輸入兩個整數a和b,輸出其中較大的一個數。

#include <iostream>

using namespace std;

int max(int a,int b)              //自定義函式

If (a>b)

return a;

  else

return b;    

}

int main()

{  

int a,b,m;

    cout<<"Input a,b:";

    cin>>a>>b;

    m=max(a,b);                 //函式呼叫語句

    cout<<"max="<<m<<endl;

    system("pause");

    return 0;

}

通過以上例題,可以看出C++程式的結構有以下特點:

(1)C++程式由一個或多個函式組成(即函式是C++程式的基本構成單位)

其中必須有且只能有一個主函式main(),程式從主函式開始執行,由主函式來呼叫其它函式。被呼叫的其它函式可以是系統提供的庫函式,也可以是使用者自定義的函式。例如,例3的C++程式就是由主函式main()和使用者自定義函式max()組成的。

(2)C++函式組成

① 函式說明部分:函式型別、函式名、函式引數(函式引數型別,函式引數名)

函式型別為函式返回值的型別,函式引數可以沒有,也可以有多個。

② 函式體{}:變數定義和執行語句兩部分。

(3)語句和資料說明以分號結束,分號是C++語句的必要組成部分。例如:int z; 

(4)程式書寫規則

① 同一層語句同列書寫。同一層次的開花括號最好與對應的閉括號在同一列上。

② 內層語句縮排兩個字元的位置。

③ 函式定義第一列書寫。

(5)C++輸入/輸出通過流cin和cout來實現的

例如: cin>>a>>b;    用來輸入變數a和b的值。

又例如: cout<<"max="<<m<<endl;  用來輸出變數m的值。

(6)嚴格區分字母的大小寫

例如:int a,A; 表示定義兩個不同的變數a、A。

(7)註釋

① /* 註釋內容 */         ② // 註釋內容(單行註釋)

它表示從此開始到本行結束為註釋內容。例如://說明變數x,y,sun為整型數

(8)編譯預處理命令

以“#”開頭的行稱為編譯預處理命令。例如:#include <iostream>

 

二、C++的資料型別及變數定義

除了完整的程式結構的要求外,C++對資料型別的要求更加嚴格,不在C++程式中,未定義過的變數,是無法在程式中直接使用的。而C++也對變數的型別進行了嚴格的歸類。下面列出主要的資料型別和其數值範圍。1.7*10-380~1.7*10380

型別

型別標示

位元組

數值範圍

短整型

short int

2

-32768~32767

整型

int

4

-2147483648~2147483647

長整型

long int

4

-2147483648~2147483647

字元型

char

1

-128~127

單精度型

float

8

-3.4*1038~3.4*1038

雙精度型

double

8

-1.7*10380~1.7*10380

在把握了上面這些型別後,就可以定義不同的變數用來滿足程式的使用需求。定義形式如下:

int a;

long int b;

float f;

int shu1,shu2,shu3;

均是可以的。

 

三、C++的輸入/輸出語句

在程式設計中,最最基礎的就是輸入輸出命令。在C++中對輸入輸出語句都相應的做了簡化。如輸入語句cin,就是可以從鍵盤上得到一個值儲存在指定的變數中。它的使用形式如下:

int a;

cin>>a;

int a,b;

cin>>a>>b;

然後可以再利用輸入進來的值,進行相關運算。

而輸出語句cout,就是可以將相應的值或字元等資料輸出到螢幕上,它的使用形式如下:

int a;

a=100;

cout<<a*100;

 

四、C++的算術運算子

C++和其他的語言一樣有幾個極其重要的算術運算子,但是這些運算子有著重要的特點。

符  號

說明

+

加法運算,如3+2

-

減法運算,如3-2

*

乘法運算,如3*2

/

除法運算,如3/2

%

取餘運算,如3%2。因為為取餘運算,所以%左右兩邊的資料必須為整數

這其中需要特殊說明的是,除法運算子,“/”。因為在C++中沒有單獨的整除符號,所有在處理整除時,採取一個特殊的方法,即:兩個整數相除的結果為整數。如5/3的結果值為1,捨去小數部分。但是,如果除數或被除數中有一個為負值,則舍入的方向是不固定的。例如,-5/3在有的C++系統上得到的結果為-1,有的C++系統則給出結果-2。但多數編譯系統採取“向零取整”的方法,即5/3的值等於1,-5/3的值為-1,取整後向零靠攏。

(特別需要說明的是,在DEV-C++中就是採取這種向零靠攏的形式,請各位選手一定注意。)

【例4】

#include <cstdlib>

#include <iostream>

 

using namespace std;

 

int main(int argc, char *argv[])

{

    int n;

    n=5/3;

    cout<<n;

    system("PAUSE");

    return EXIT_SUCCESS;

}

在例4中,我們求的是5/3,因為5和3都是整數,且n的型別也為整數,所有輸出的n值為1。如果採取下面的變化,將n的型別改為float型別(實數)。則因為上面闡述的除法規則,得到的n值仍然為1。如【例5】所示。

【例5】

#include <cstdlib>

#include <iostream>

 

using namespace std;

 

int main(int argc, char *argv[])

{

    float n;

    n=5/3;

    cout<<n<<endl;

    system("PAUSE");

    return EXIT_SUCCESS;

}

但是,如果我們需要除的值為實數時,該如何處理呢?這就需要改變“/”號兩邊的值的型別,達到這樣的變化。如【例6】所示。

【例6】

#include <cstdlib>

#include <iostream>

 

using namespace std;

 

int main(int argc, char *argv[])

{

    float n;

    n=5/3.0;

    cout<<n<<endl;

    system("PAUSE");

    return EXIT_SUCCESS;

}

只是將5/3改為了5/3.0,看起來好像沒什麼變化,但是實質上,資料的型別就改變了。造成的結果也就不同。

上面舉出了C++中的基本運算子,在C++中不但有這些其他語言中有類似的運算子,還有兩個很有C++代表意義的運算子,就是自加運算子(++)和自減運算子(--)。

++和--是C++很有特點的運算子號,一個變數使用自加或自減運算子很類似於對這個變數做一次+1或-1的運算,如i++;很類似於i=i+1;但是有不完全相同,++或--符號可以放在變數之前也可以放在變數之後,但是具體操作起來的效果有著很大的不同。

【例7】

#include <cstdlib>

#include <iostream>

 

using namespace std;

 

int main(int argc, char *argv[])

{

    int x,y;

    int m,n;

    x=1;

    y=1;

    m=x++;

    n=++y;

    cout<<m<<endl<<n<<endl;

    system("PAUSE");

    return EXIT_SUCCESS;

}

輸出的結果是m的值為1,而n的值為2,但是如果我們增加x和y值的顯示會發現x和y的值都變成了2。這就能夠體現出自加(或自減)運算子放在變數前後的區別。放在變數前,代表要先進行自加(或自減),再給左面的變數賦值;而放在變數後面時,則需要先把變數的值提取出來給“=”號左邊的變數賦值,然後再對自加(或自減)變數做加(或減)的操作。

但如果自加或自減運算子作為一個單獨的語句來使用,則其效果是完全一致的。如下:

x=1;

y=1;

x++;

y++;

cout<<x<<endl<<y<<endl;

 

這樣的使用就只相當於最基本的x=x+1;y=y+1;的使用了。

 

五、C++的檔案操作

C++的檔案操作,要比QBASIC方便的多,它的讀取路徑和儲存.cpp檔案的路徑一致。需要說明一下,如果採用新建工程的方法的話,則預設和工程檔案所在目錄一致。所以建議新建工程並儲存.cpp檔案後,關閉整個DEV-C++環境,再開啟.cpp檔案進行操作,這樣就不會因為目錄問題對檔案的讀取操作有任何的影響了。

在C++對檔案的操作要定義檔案操作命令,且需要引用fstream標頭檔案。

【例8】

#include <cstdlib>

#include <fstream>

 

using namespace std;

ifstream fin("file.in");

ofstream fout("file.out");

 

int main(int argc, char *argv[])

{

    int x,y;

    int m,n;

    fin>>x>>y>>m>>n;

    fout<<x+1<<endl<<y+1<<endl<<m+1<<endl<<n+1<<endl;

    return EXIT_SUCCESS;

}

在【例8】中,將預設的iostream呼叫改為了fstream的呼叫,這是因為檔案的讀寫命令是包含在fstream標頭檔案中的,而如果程式中不使用cin或cout就可以不用呼叫iostream了。在例題中通過

ifstream fin("file.in");

ofstream fout("file.out");

兩句語句定義了兩個類似與cin和cout的命令fin和fout,並且把這兩個命令和輸入檔案”file.in”及輸出檔案”file.out”相關聯。輸入檔案應該和例題的.cpp檔案在同一個目錄下,而輸出檔案也會出現在相同目錄中。而關聯後的fin和fout命令的使用幾乎完全和cin及cout類似。

 

作業:

    將2007年北京市小學生程式設計邀請賽的第一題,用C++完成,且要求使用檔案操作。