[摘 要]C++語言程序設(shè)計(jì)是一門高效實(shí)用的程序設(shè)計(jì)語言,學(xué)習(xí)C++語言程序設(shè)計(jì),并且要實(shí)質(zhì)性地提高編程能力,有兩個(gè)關(guān)鍵因素:一個(gè)是做編程書面練習(xí),一個(gè)是上機(jī)做實(shí)驗(yàn)。
[關(guān)鍵詞]C++語言;編程練習(xí);上機(jī)實(shí)驗(yàn)
doi:10.3969/j.issn.1673-0194.2009.16.044
[中圖分類號]TP311[文獻(xiàn)標(biāo)識碼]A[文章編號]1673-0194(2009)16-0128-02
C++是一門高效實(shí)用的程序設(shè)計(jì)語言,它既可進(jìn)行過程化程序設(shè)計(jì),也可進(jìn)行面向?qū)ο蟪绦蛟O(shè)計(jì)。C++語言強(qiáng)調(diào)對高級抽象的支持。C++實(shí)現(xiàn)了類的封裝、數(shù)據(jù)隱藏、繼承及多態(tài),使得其代碼容易維護(hù)及高度可重用。隨著C++漸漸成為ANSI標(biāo)準(zhǔn),這種新的面向?qū)ο蟪绦蛟O(shè)計(jì)語言迅速成了程序員最廣泛使用的工具。
學(xué)習(xí)C++語言程序設(shè)計(jì),并且要實(shí)質(zhì)性地提高編程能力,有兩個(gè)關(guān)鍵因素:一個(gè)是做編程書面練習(xí),一個(gè)是上機(jī)做實(shí)驗(yàn)。在初級程序設(shè)計(jì)的能力培養(yǎng)中,唯有多練,才能真正找到編程的感覺,才能培養(yǎng)出寶貴的編程經(jīng)驗(yàn)。
一、做編程書面練習(xí)
C++的難學(xué),不僅在它那廣博的語法﹑語法背后的語義﹑語義背后的深層思維﹑深層思維背后的對象模型;C++的難學(xué),還在于它提供了不同的編程思維模型,要想學(xué)好C++,只有經(jīng)常思考、大量做題。通過做題加深對概念的理解,提高程序設(shè)計(jì)和解決問題的能力。
例如下面的問題,我們就可以用不同的方法來解答。
分別輸入圓柱體的半徑和高,求其體積;輸入球半徑,求其表面積;輸入長方體的長、寬、高,求其體積。
[解法一]由于其中的3個(gè)問題是相互獨(dú)立的,所以,解決方法也是依次來解決這3個(gè)問題。先輸入第一個(gè)問題的半徑和高,計(jì)算并輸出圓柱體的體積;然后輸入球半徑,計(jì)算球表面積并輸出;然后輸入長、寬、高,計(jì)算長方體的體積并輸出。
#include <iostream.h>
#include <math.h>
void main()
{
double radius, height ;
cout<<“請輸入圓柱體的半徑和高:\\\”;
cin>>radius>>height;
double volume=radius*height*M-PI;
cout<<“該圓柱體的體積為:”<<volume<<endl;
cout<<“\\\請輸入球半徑:\\\”;
cin>>radius;
double areaOfSphere=4*radius*radius*M-PI;
cout<<“該球面的面積為:”<<areaOfSphere<<endl;
double length, width ;
cout<<“\\\請輸入長方體的長、寬、高:\\\”;
cin>>length>>width>>height;
volume=length*width*height;
cout<<“該長方體的體積為:”<<volume<<endl;
}
運(yùn)行結(jié)果為:
請輸入圓柱體的半徑和高:
3244
該圓柱體的體積為:141 548
請輸入球半徑:
30
該球面的面積為:11 309.7
請輸入長方體的長、寬、高:
32 12 15
該長方體的體積為:5 760
[解法二] 對于一個(gè)復(fù)雜的計(jì)算問題,也可以采用分而治之的方法,即用函數(shù)調(diào)用分別完成預(yù)訂的“小任務(wù)”,返回其計(jì)算結(jié)果。當(dāng)然這些“小任務(wù)”要預(yù)先聲明,若要能運(yùn)行,還必須有其定義:
#include <iostream.h>
#include <math.h>
double Cylinder(double r, double h);
double Sphere(double r);
double Rectangle(double l, ,double w, double h);
void main()
{
double radius, height;
cout<<“請輸入圓柱體的半徑和高:\\\”;
cin>>radius>>height;
double volume= Cylinder( radius, height)
cout<<“該圓柱體的體積為:”<<volume<<endl;
cout<<“請輸入球半徑:\\\”;
cin>>radius;
double areaOf Sphere= Sphere(radius);
cout<<“該球面的面積為:”<<areaOfSphere<<endl;
double length, width ;
cout<<“請輸入長方體的長、寬、高:\\\”;
cin>>length>>width>>height;
volume= Rectangle(length, width, height)
cout<<“該長方體的體積為:”<<volume<<endl;
}
double Cylinder(double r, double h)
{
return r*r*M-PI*h;
}
double Sphere(double r)
{
return 4*r*r*M-PI;
}
double Rectangle(double l, ,double w, double h)
{
return l*w*h;
}
該程序與上一個(gè)程序的功能一樣。但是分別將3個(gè)具體的計(jì)算工作挪到另外的函數(shù)中去做了。
由此可見程序的解答可以各種各樣,越吃透程序結(jié)構(gòu)、吃透語言的內(nèi)在含義和聯(lián)系,就越能準(zhǔn)確表達(dá)解決問題的方法,編制的程序也就越簡練,對日后深入學(xué)習(xí)程序設(shè)計(jì)理論的領(lǐng)悟性也越高。
二、上機(jī)做實(shí)驗(yàn)
C++語言程序設(shè)計(jì)是一門實(shí)踐性很強(qiáng)的課程,僅僅靠看書和聽課是不能掌握的,學(xué)習(xí)C++語言程序設(shè)計(jì)最重要的環(huán)節(jié)就是上機(jī)做實(shí)驗(yàn)。
在上機(jī)實(shí)驗(yàn)方面有以下幾點(diǎn)建議:
1.程序設(shè)計(jì)者在上機(jī)前必須準(zhǔn)備好要調(diào)試的程序,并仔細(xì)檢查, 想想可能出現(xiàn)的情況, 帶著問題上機(jī),以提高上機(jī)效率。
2.上機(jī)調(diào)試運(yùn)行程序??紤]可能出現(xiàn)的各種情況, 分析程序, 調(diào)試程序, 看是否是預(yù)期的結(jié)果。對于初學(xué)者上機(jī)操作大致會遇到如下幾種情況:
(1)輸入的源程序在編譯時(shí)出現(xiàn)錯誤,這時(shí)系統(tǒng)會指出某行有錯以及錯誤的原因,程序設(shè)計(jì)者就可以根據(jù)系統(tǒng)提示的“出錯信息”修改程序中的錯誤,再次運(yùn)行時(shí)會得到正確的結(jié)果。但由于C++語言語法比較自由、靈活,有時(shí)錯誤信息定位不是特別精確。例如,當(dāng)提示第5行發(fā)生錯誤時(shí),可是反復(fù)檢查第5行并沒有發(fā)現(xiàn)錯誤,就需要從第5行開始往前查找錯誤并修改。
(2)一條語句錯誤可能會產(chǎn)生若干條錯誤信息只要修改了這條錯誤,其他錯誤會隨之消失。一般情況下,第一條錯誤信息最能反映錯誤的位置和類型,所以調(diào)試程序時(shí)務(wù)必根據(jù)第一條錯誤信息進(jìn)行修改,修改后,立即運(yùn)行程序,如果還有很多錯誤,要一個(gè)一個(gè)地修改,即,每修改一處錯誤要運(yùn)行一次程序。
(3)程序設(shè)計(jì)者經(jīng)常會遇到輸入到計(jì)算機(jī)中的源程序在通過編譯后,運(yùn)行時(shí)卻得不到正確的結(jié)果,這就要求程序設(shè)計(jì)者從源程序中查找錯誤并進(jìn)行修改,再運(yùn)行直到正確為止。
例如:
if(n>0)
if(a>b)z=a;
elsez=b;
表達(dá)的是還是
if(n>0){if(n>0){
if(a>b)z=a;if(a>b)z=a;
elsez=b;}
}elsez=b;
答案是前者。因?yàn)樵贑++中從遇到的第一個(gè)else開始,else總與離它最近的if 配對。如果程序設(shè)計(jì)者要表達(dá)的是后者的意思就會出現(xiàn)上面說的問題:可以通過編譯,但得不到正確的結(jié)果。程序設(shè)計(jì)者就需要認(rèn)真檢查源程序,做出正確的修改:
程序設(shè)計(jì)者要想表達(dá)的是后者的意思,則一定要用{}。但在if語句的else前嵌套另一個(gè)if語句容易使所表達(dá)的邏輯關(guān)系難于理解,應(yīng)加以避免。改成下面這種方式會更好一些:
把嵌套位置改為else之后,將條件n>0改成n<=0
if(n<=0)
z=b;
else
if(a>b) z=a;
3.整理上機(jī)實(shí)驗(yàn)結(jié)果。上機(jī)調(diào)試程序時(shí)要帶一個(gè)記錄本,記下英文錯誤提示信息和解決該錯誤問題的方法,積累程序調(diào)試經(jīng)驗(yàn),以便以后進(jìn)行程序設(shè)計(jì)時(shí)不再出現(xiàn)類似的錯誤。如果程序沒有通過,必須認(rèn)真分析程序和查找原因,做出正確的判斷或仔細(xì)地修改源程序,之后再重新運(yùn)行源程序直到程序正確為止。
總之,要想真正學(xué)好C++語言唯一的方法就是編寫程序并上機(jī)調(diào)試,在這個(gè)過程中所學(xué)到的知識會比從書本上學(xué)到的多得多。
主要參考文獻(xiàn)
[1] 錢能. C++程序設(shè)計(jì)教程[M].第2版. 北京: 清華大學(xué)出版社, 2006.
[2] 錢能. C++程序設(shè)計(jì)習(xí)題及解答[M]. 北京: 清華大學(xué)出版社, 1999.
[3] 李寧. C++語言程序設(shè)計(jì)[M]. 北京: 中央廣播電視大學(xué)出版社,2000.