首先,了解一個我們需要嘗試的程序(書店程序),如下:
書店保存每條銷售記錄的檔案,包括3個數據項:ISBN書號、售出冊數、售出單價需要能夠查詢每本書的銷量,銷售額和平均售價我認為,主要需要實現的是: - 檢測相同ISBN書號 - 可重復錄入銷售記錄的輸入功能
書中提出,雖然沒有編寫程序,但是已經可以確定它必須: - 定義變量 - 進行輸入輸出 - 使用數據結構保存數據 - 檢測兩條記錄是否有相同的ISBN書號 - 包含一個循環來處理銷售檔案中的每條記錄
接下來,介紹用C++來解決這些子問題
1.一個函數的定義包含4個部分:返回類型、函數名、形參列表、函數體
2.重要概念:類型(類型不僅定義了數據元素的內容,還定義了這類數據能進行的運算)
1.IDE:集成開發環境(Integrated Developed Environment)
2.程序文件成為源文件(source file),C++文件的后綴名常見為:cc、cxx、cpp、cp、c
3.從命令行==運行編譯器==
在windows或者UNIX系統外殼程序窗口中,用
$ CC PRg1.ccCC編譯器程序的名字,$是系統提示符
4.從命令行中==運行執行文件== 在windows中,有兩種方法
$ prog1 //忽略其擴展名.exe$ ./prog1 //一些系統中,必須擇定文件位置,當前目錄為./而在==UNIX系統==中,必須使用==全文件名==
5.訪問==main返回值==
在windows和UNIX系統中,都可以用==echo==命令獲得返回值,在windows系統中
$ echo %ERROREVEL%運行GNU或微軟編譯器(常用編譯器:GNU、Visual Studio)
其中GNU編譯器,可以如下:
$ g++ -o prog1 prog1.ccg++ 是運行命令-o prog1 是編譯器參數(指定生成的可執行文件名為prog1)不指定此參數則可執行文件:a.exe或者a.out另外,Visual Studio編譯器命令可以如下:
C:/Users/me/programs> c1 /Ehsc prog1.ccC:/Users/me/programs>是系統提示符c1命令:調用編譯器/Ehsc是編譯器選項,用來打開標準異常處理1.查閱編譯器文檔,確定文件命名規則,編譯并運行一個程序
參考CSDN博客 Windows下使用GNU編譯器
2.改寫程序返回值為-1,通常這是程序錯誤的返回,觀察你的系統如何處理錯誤標識
1.標準輸入輸出對象 - 標準輸入:cin - 標準輸出:cout - 標準錯誤:cerr - 輸出運行程序時的一般性信息:clog
2.一個使用IO庫的程序
#include <iostream>int main(){ std::cout<<"Enter two numbers:"<<std::endl; int v1=0,v2=1; std::cin>>v1>>v2; std::cout<<"The sum of"<<v1<<"and"<<v2<<"is"<<v1+v2<<std::endl; return 0;}(1) #include指令必須在所有函數前面
(2) 輸出運算符(<<) - 接受兩個對象:左側的運算對象必須是一個ostream對象,右側的運算對象是要打印的值;
(3) 操縱符(endl) - 寫入endl的效果是:結束當前行,并將與設備關聯的緩沖(buffer)區中的內容刷到設備中 - 緩沖刷新操作:保證到目前為止程序所產生的所有輸出都真正寫入輸出流中,而不是僅停留在內存中等待寫入流
程序員在調試時添加打印語句,應該一直保證刷新流,否則程序崩潰時,輸出可能還留在緩沖區,而推斷崩潰位置錯誤
(4)使用標準庫中的名字 - 前綴std::是指出cout和endl的命名空間,命名空間可以幫助我們避免名字定義沖突 - 另一個更簡便的方法:using聲明(第3章介紹)
(5)輸入運算符(>>) - 其左側是一個istream,右側是一個接受對象
1.編寫程序,打印“Hello World”
#include <iostream>int main(){ std::cout<<"Hello World"<<std::endl; return 0;}2.編寫使用乘法運算打印兩個數乘積的程序
將例子中的加號改為 * 號即可3.重寫程序,將打印對象放在一條獨立語句中
將例子程序中的std::cout切開,記得添加std::endl4.解釋下列語句是否合法
std::cout<<"The sum of"<<v1; <<"and"<<v2; <<"is"<<v1+v2<<std::endl;不合法,第一、二行缺乏std::endl結束輸出,第二、三行缺乏std::cout作為指定輸出的對象
(1)注釋界定符(/* */),可以多行,不可以嵌套
(2)單行和半行(//)
(1)while語句,形式如下
while(condition) statement(2)復合賦值運算符 - (+=)本質上相當于sum=sum+val - (++)前綴:將運算對象加1,等價于val=val+1
1.編寫程序,用while循環50~100整數相加
#include <iostream>int main(){ int sum=0,val=50; while(val<=100){ sum+=val; val++; } std::cout<<"The sum is:"<<sum<<std::endl; return 0;}2.使用–運算實現10~0的運算 - 上程序改成(–)
3.編程:用戶輸入兩個數,打印出這兩個數之間的整數
#include <iostream>int main(){ int left,right; std::cout<<"Please enter two numbers"<<std::endl; std::cin>>left>>right; while(left<=right){ std::cout<<left<<std::endl; left++; } return 0;}(1) for語句,形式如下
for(init-statement;condition;expression) statement(4) if 語句,形式如下
if(conditon) statement統計輸入中每個值連續出現了多少次程序int main(){ int currVal=0,val=0; if(std::cin>>currVal){ int cnt=1; while(std::cin>>val){ if(val==currVal) ++cnt; else{ std::cout<<currVal<<" occurs "<<cnt<<" times"<<std::endl; currVal=val; cnt=1; } } std::cout<<currVal<<" occurs "<<cnt<<" times"<<std::endl; } return 0;}(1)通過定義一個類來定義自己的數據結構
(2)關鍵概念:類定義了行為 - 類的作者決定了類類型對象上可以使用的所有操作
==(3)使用文件重定向== - 當測試程序時,反復敲鍵盤是非常乏味的,可以利用文件重定向
$ addItems <infile>outfile程序已經為編譯為名為addItems的可執行文件,上述命令會從一個名為infile的文件讀取銷售記錄,并將輸出結果寫入到一個名為outfile的文件中新聞熱點
疑難解答
圖片精選