- 教孩子學編程:C++入門圖解
- 黨松年 方澤波
- 3392字
- 2023-11-29 20:07:39
2.1 第一個C++程序
2.1.1 C++程序的組成
C++源自C語言,因此,一個完整的C++程序跟C語言程序一樣,通常由預處理指令部分、全局變量和函數聲明部分、主程序部分[main
()
函數]這3個部分組成,如圖2.2所示。所有的C++程序都是從main
()
函數開始執行的。

圖2.2 C++程序的組成
除此之外,為了方便閱讀、理解和使用代碼,可以給代碼添加注釋,注釋部分不會被執行,也不會對程序造成任何影響。與C語言程序不同,C++程序的預處理指令部分多了一個命名空間的指令。
編程案例
案例2.1
編寫程序,輸出一行文本“我的第一個C++程序!”。
程序代碼2.1
01 /*
02 輸出一行文本“我的第一個C++程序!”。
03 */
04 #include <iostream> //預處理指令部分,包含頭文件iostream
05 using namespace std; //使用標準命名空間std
06 int main() //定義main()函數
07 {
08 cout <<"我的第一個C++程序!"<< endl; //輸出并換行
09 return 0;
10 }
以上程序代碼中,第01~第03行是用“/*”和“*/”圍起來的注釋部分;第04行是預處理指令部分,包含了頭文件iostream;第05行使用了標準命名空間std;第06~第10行是主程序部分,它是一個main
()
函數,任何一個C++程序都必須包含一個main
()
函數。
程序運行結果如圖2.3所示。

圖2.3 程序運行結果
2.1.2 預處理指令
預處理指令是出現在C++程序開始位置、以“#”開頭的內容。C++程序中常用的預處理指令有兩種:一種是#define,用于定義常量;另一種是#include,用于導入文件。
#define指令的常用形式如下:
#define 標識符 字符串
例如,下面的代碼用#define指令定義了一個常量PI:
#define PI 3.1415926 //定義一個常量PI,其值為3.1415926
#include指令的常用形式如下:
#include <文件名> //一般用來導入庫文件
#include "文件名" //常用來導入用戶自己編寫的文件
例如,下面的代碼用#include指令在程序中包含頭文件iostream:
#include <iostream> //包含頭文件iostream
C++程序中最常用的文件包含命令為#include <iostream>
。C++在iostream中設置了常用的輸入輸出環境、輸入輸出流對象(cin、cout等)。頭文件iostream把C++標準程序庫中的所有標識符都定義在一個名為std的命名空間里面,所以要使用頭文件iostream,需要在程序中添加命名空間,代碼為“using
namespace
s
td;
”。
2.1.3 std命名空間
命名空間即namespace,也可以稱為名稱空間。它的主要作用是解決名字沖突。命名空間實際上是由程序設計者定義的一個內存區域,其中定義了許多名稱(標識符),分別表示不同的含義和功能,如果要在程序中使用這些名稱,就需要添加該命名空間。
由于C++標準程序庫中所有的標識符都定義在一個名為std的命名空間中,因此C++程序通常都要添加代碼“using
namespace
std;
”,這樣std命名空間中定義的所有標識符在該程序中就都有效。常用的標準輸入輸出流對象cin和cout就被定義在std命名空間中。
2.1.4 main()函數
使用C++編程時,我們可以把執行某個特殊任務的指令和數據從程序的其余部分分離出去,使其單獨成為一個程序塊,為其取一個名字,通常把這種程序塊稱為函數,給它取的名字就是函數名。可以在程序其余部分用函數名多次重復調用對應的函數。
所有的C++程序實際上都是由一個或多個函數構成的。C++程序中最重要的部分就是main
()
函數,在需要的時候可在main
()
函數中調用其他函數。下面的程序代碼展示了在main
()
函數中調用其他函數的過程:
int main() //main()函數(每一個C++程序都必須包含它)
{ //函數體開始符
float pi;
scanf("%f",&pi); //調用scanf()函數
printf("圓周率約等于%.2f\n",pi); //調用printf()函數
pi = round(pi); //調用round()函數
return 0; //函數返回值 0
} //函數體結束符
計算機會從main
()
函數開始運行程序代碼。如果一個C++程序中沒有main
()
函數,程序就無法啟動。
上面的程序代碼中main
()
前面的int
是指main
()
函數返回值的類型是整數。這是什么意思呢?當計算機在運行程序時,它需要一些方法來判斷程序是否運行成功,計算機正是通過檢查main
()
函數的返回值來判斷的。如果main
()
函數返回整數0,就表明程序運行成功;如果返回其他整數值,就表示程序在運行時出了問題。main
()
函數的返回值是由程序中的return語句實現的,通常情況下,一個C++程序的main
()
函數的最后一條語句就是“return
0
;
”。
函數名“main”在返回值類型int之后出現。如果函數在被調用時需要事先提供一些數據(參數),那么可以寫在函數名后面的括號里面。最后是函數體,也就是該函數要執行的各條指令和用到的數據,函數體必須用花括號“{
”和“}
”圍起來。
C++程序中最主要的部分就是main
()
函數,那么main
()
函數內部是什么樣子的呢?
main
()
函數內部其實就是按順序排列的一條條指令和相關數據,在程序設計語言中,這樣的內容稱為語句。C++程序為了區分每一條語句,避免計算機混淆,在每一條語句末尾加上“;”表示結束。當把多條語句組合在一起,用來完成某一項任務時,這些語句被稱為語句塊。語句塊和main
()
函數的函數體一樣,要用花括號“{
”和“}
”圍起來。
2.1.5 cout輸出語句
cout語句是C++的輸出語句,C++的輸出和輸入是用“流”(Stream)的方式實現的。看到“流”我們自然會想到水流,水在一個長長的玻璃管中總是以一種“先進先出”的方式流進流出。C++在處理輸出和輸入內容時,也以“先進先出”的方式按其字節序列的先后順序進行處理,這個過程分別稱為流輸出和流輸入,輸出和輸入內容的字節序列稱為字節流。
如果字節流從設備(如鍵盤、磁盤驅動器等)流向內存,就叫作輸入操作(流輸入)。如果字節流從內存流向設備(如顯示器、打印機、磁盤驅動器等),就叫作輸出操作(流輸出)。
要在程序中使用cout語句,必須在預處理指令部分添加代碼“#include <iostream>
”。cout在頭文件iostream中被定義為標準輸出流,其作用是將字節流輸出到標準輸出設備(通常是顯示器)。cout語句和流插入運算符“<<
”結合使用,如圖2.4所示。

圖2.4 cout語句和流插入運算符
cout語句的一般格式如下:
cout << 項目1 << 項目2 << … <<項目n;
如果“<<
”后面的項目是加引號的,則輸出引號內的內容;如果“<<
”后面是endl,則輸出換行,作用等同于加引號的“\n”。例如:
cout <<"我的第一個C++程序!\n"; //輸出“我的第一個C++程序!”并換行
輸出內容如下:
我的第一個C++程序!
如果“<<
”后面的項目是某種表達式,則輸出該表達式的值。例如:
cout << 10+20 << endl; //輸出“30”并換行
輸出內容如下:
30
2.1.6 注釋
注釋是程序員為代碼標注的解釋或提示,以便自己和其他程序員能夠快速看懂代碼。編程時為代碼添加詳細的注釋可以提高代碼的可讀性。注釋中的所有內容都會被C++編譯器忽略。
C++支持單行注釋和多行注釋。
單行注釋以“//”開始,直到該行結束。例如:
cout <<"我的第一個C++程序!"<< endl; //輸出并換行
多行注釋以“/*”開始,以“*/”結束,它們之間的所有內容都是注釋內容。例如:
/*
輸出一行文本“我的第一個C++程序!”。
曙光工作室 版權所有
2021-11-12
*/
2.1.7 常見錯誤
對初學者來說,由于剛接觸C++編程,寫出的程序代碼難免會出現一些錯誤,并且當錯誤出現時還不知道是怎么回事,也不知道該怎么修改。下面對初學者經常遇到的一些錯誤進行說明。
(1)語句中出現中文符號。
C++程序代碼是用英文編寫的,代碼中的所有命令符號都必須是英文符號(半角),不能是中文符號(全角),中文符號只能作為字符串出現在半角雙引號中。例如:
cout << “HELLO” ; //錯誤代碼
cout << "我的第一個C++程序!" ;
對比上面兩行代碼,可以發現第一行中的引號為中文符號,這在C++程序中是不允許的,編譯器對此無法識別,編譯時會出現圖2.5所示的錯誤提示。

圖2.5 語句中出現中文符號時編譯器出現的錯誤提示
(2)語句末尾缺少分號。
C++語法規定每條語句必須以分號結束,分號是C++語句中不可缺少的一部分。如果語句末尾缺少分號,編譯時就會出錯。例如:
cout << "HELLO" //錯誤代碼
對以上代碼進行編譯,會出現圖2.6所示的錯誤提示。

圖2.6 語句末尾缺少分號時編譯器出現的錯誤提示
(3)程序預處理指令部分缺少某個頭文件。
C++提供了許多功能各異的函數和方法,要使用它們,就必須在程序預處理指令部分包含相應的頭文件。例如:
pi = round(3.1415926); //調用數學函數round()進行四舍五入
上面的代碼中使用了數學函數round
()
,必須用“#include <cmath>
”包含cmath頭文件,如果沒有包含該頭文件,編譯時會出現圖2.7所示的錯誤提示。

圖2.7 程序預處理指令部分缺少頭文件時編譯器出現的錯誤提示
此處提示round
()
函數沒有被聲明,因為round
()
函數聲明在cmath頭文件中,所以程序中必須包含cmath頭文件。另外,此處的錯誤提示和變量沒有被聲明時的錯誤提示是一樣的。本書將在后面的章節詳細講解什么是變量。C++規定程序中所有的變量都要被聲明過才可以使用。
編程案例
案例2.2
編寫程序,輸出由“*”組成的圖 2.8所示的圖案。

圖2.8 輸出由“*”組成的圖案
程序代碼2.2
01 /*
02 輸出由“*”組成的圖案。
03 */
04 #include <iostream>
05 using namespace std;
06 int main()
07 {
08 cout << "*" <<endl;
09 cout << "**" <<endl;
10 cout << "***" <<endl;
11 cout << "****" <<endl;
12 cout << "*****" <<endl;
13 return 0;
14 }
以上程序代碼中,第08~第12行中的每一行都用cout語句輸出一串“*”,并用endl換行。
程序運行結果如圖2.9所示。

圖2.9 程序運行結果
編程訓練
練習2.1
編寫程序,按如下格式輸出古詩《春曉》。
春 曉
[唐]孟浩然
春眠不覺曉,處處聞啼鳥。
夜來風雨聲,花落知多少。