第一篇:C++俄羅斯方塊實(shí)驗(yàn)報(bào)告(附實(shí)驗(yàn)體會(huì))
程序設(shè)計(jì)綜合實(shí)驗(yàn)
設(shè)計(jì)文檔
惠州學(xué)院
HUIZHOU UNIVERSITY
課程名稱: 程序設(shè)計(jì)綜合實(shí)驗(yàn)
姓名:實(shí)驗(yàn)名稱: 俄羅斯方塊 學(xué)號(hào):任課教師:
專業(yè):班級(jí): 計(jì)算機(jī)科學(xué)與技術(shù)1班
實(shí)驗(yàn)時(shí)間:
計(jì)算機(jī)科學(xué)與技術(shù)
綜合實(shí)驗(yàn)項(xiàng)目:俄羅斯方塊游戲
1、問題需求
(1)游戲等級(jí):游戲分為1-10十個(gè)等級(jí),等級(jí)越高,方塊下落速度越快;(2)由方向鍵控制游戲:上鍵控制方塊變形、下鍵控制方塊下移并判斷是否有消行、左鍵控制方塊左移、右鍵控制方塊右移;
(3)游戲積分:一次性消的行數(shù)越多加的分?jǐn)?shù)越多,當(dāng)消行每超過30行自動(dòng)提高一個(gè)游戲等級(jí)。
2、總體設(shè)計(jì):
(1)用數(shù)組存放方塊(2)輸出地圖
(3)在地圖里面輸出方塊(4)開始游戲(5)方塊的旋轉(zhuǎn)(6)方塊是否能下落(7)判斷方塊是否能下落(8)提示下一個(gè)即將下落的方塊(9)控制方塊的下落速度
(10)分成10等級(jí),等級(jí)越高方塊下落得更快(11)消行處理(12)游戲結(jié)束
3、詳細(xì)設(shè)計(jì)設(shè)計(jì)說明:本程序運(yùn)行代碼如下:
#include
#define SQUARE_COLOR FOREGROUND_RED| FOREGROUND_GREEN|FOREGROUND_INTENSITY //方塊的顏色 #define up
#define down
#define left
#define right
#define esc #define MAPW
//地圖的寬度
#define MAPH
//地圖的高度
BOOL isavailable(int a[],int x,int y,int w,int h);//判定是否能放下 void turn(int a[][4],int w,int h,int *x,int y);
//轉(zhuǎn)動(dòng) int * create();
//創(chuàng)建方塊 void init();
//初始化工作
void drawblocks(int a[],int w,int h,int x,int y,WORD wColors[],int nColors);void clearcache();
//清除鍵盤緩沖區(qū) void end();void clearsquare(int *a,int w,int h,int x,int y);void gameover();void deletemap(int m[][MAPW],int row,int w,int h);//消除一行
int dx=30,dy=5;
//屏幕上的偏移量 int score=0,level=0;
int map[MAPH][MAPW];int a1[4][4]={{1},{1,1,1}};int a2[4][4]={{0,1},{1,1,1}};int a3[4][4]={{1,1},{0,1,1}};int a4[4][4]={{0,0,1},{1,1,1}};int a5[4][4]={{0,1,1},{1,1}};int a6[4][4]={{1,1,1,1}};int a7[4][4]={{1,1},{1,1}};int a[4][4];
int main(){
init();int *b=NULL;b=create();
//預(yù)創(chuàng)建方塊 int q=0;int sign,blank,x,y;while(1){
for(int i=0;i<4;i++)
//復(fù)制方塊
for(int j=0;j<4;j++)
if(a[i][j]=*(b+i*4+j))blank=i;
y=1-blank;x=4;clearsquare(&a[0][0],4,4,13,13);b=create();HANDLE handle;handle=initiate();WORD wColors[1]={FOREGROUND_RED| drawblocks(b,4,4,13,13,wColors,1);wColors[0]=SQUARE_COLOR;drawblocks(&a[0][0],4,4,x,y,wColors,1);clearcache();char string[5];wColors[0]=FOREGROUND_RED| textout(handle,26+dx,5+dy,wColors,1,itoa(score,string,10));textout(handle,26+dx,9+dy,wColors,1,itoa(level,string,10));sign=1;while(sign){
int delay=0,max_delay=100-10*level;//延遲量 while(delay if(_kbhit())//用if避免按住鍵使方塊卡住 { switch(key){ case up: clearsquare(&a[0][0],4,4,x,y);turn(a,4,4,&x,y);draw=1;break; int draw=0;int key=_getch();FOREGROUND_GREEN|FOREGROUND_INTENSITY };FOREGROUND_GREEN|FOREGROUND_INTENSITY; case down: } } } delay=max_delay;break; if(isavailable(&a[0][0],x-1,y,4,4)){ } clearsquare(&a[0][0],4,4,x,y);x--;draw=1; case left: break; if(isavailable(&a[0][0],x+1,y,4,4)){ } break;end();break; clearsquare(&a[0][0],4,4,x,y);x++;draw=1; case right: case esc: if(draw){ } HANDLE handle;handle=initiate(); WORD wColors[1]={SQUARE_COLOR};drawblocks(&a[0][0],4,4,x,y,wColors,1);draw=0; _sleep(8);delay++;if(isavailable(&a[0][0],x,y+1,4,4))//判斷是否能下移 { clearsquare(&a[0][0],4,4,x,y);y++; HANDLE handle; } } } } else { } handle=initiate(); WORD wColors[1]={SQUARE_COLOR};drawblocks(&a[0][0],4,4,x,y,wColors,1); sign=0; //標(biāo)記,使跳出 while(sign)循環(huán),產(chǎn)生新方塊 if(y<=1)gameover(); //是否結(jié)束 for(int i=0;i<4;i++) //放下方塊 for(int j=0;j<4;j++) if(a[i][j]&&((i+y) map[i+y][j+x]=a[i][j]; int full,k=0; for(i=y;i } full=1; for(int j=1;j<11;j++){ } deletemap(map,i,MAPW,MAPH);k++; q++; score=score+k;level=min(q/30,9);if(!map[i][j])full=0; if(full) //消掉一行 return EXIT_SUCCESS;BOOL isavailable(int a[],int x,int y,int w,int h){ for(int i=max(y,1);i } return 0;return 1;int * create(){ } void init(){ for(int i=0;i<20;i++){ } for(i=0;i<12;i++){ } map[0][i]=-1;map[19][i]=-1;map[i][0]=-2;map[i][11]=-2; //初始化工作 int * a=NULL;int c=rand()%7;switch(c){ case 0: } return a;a=&a1[0][0];break;a=&a2[0][0];break;a=&a3[0][0];break;a=&a4[0][0];break;a=&a5[0][0];break;a=&a6[0][0];break;a=&a7[0][0];break;case 1: case 2: case 3: case 4: case 5: case 6: } map[0][0]=-3;map[0][11]=-3;map[19][0]=-3;map[19][11]=-3;HANDLE handle;handle=initiate();WORD wColors[1]={ FOREGROUND_GREEN|FOREGROUND_INTENSITY};textout(handle,26+dx,3+dy,wColors,1,“分?jǐn)?shù)”);textout(handle,26+dx,7+dy,wColors,1,“等級(jí)”);textout(handle,26+dx,11+dy,wColors,1,“下一個(gè)方塊提示”);wColors[1]=FOREGROUND_RED|FOREGROUND_INTENSITY;drawblocks(&map[0][0],12,20,0,0,wColors,1);textout(handle,dx,dy,wColors,1,“◇══════════◇”);wColors[0]= FOREGROUND_GREEN|FOREGROUND_INTENSITY;textout(handle,dx-16,dy,wColors,1,“按任意鍵開始”);wColors[0]=FOREGROUND_RED|FOREGROUND_INTENSITY;textout(handle,dx-15,dy+3,wColors,1,“制作者”);wColors[0]=FOREGROUND_BLUE| FOREGROUND_GREEN|FOREGROUND_INTENSITY;textout(handle,dx-15,dy+5,wColors,1,“趙強(qiáng)”);int x=_getch();srand(x);textout(handle,dx-16,dy,wColors,1,“ ”);void drawblocks(int a[],int w,int h,int x,int y,WORD wColors[],int nColors){ HANDLE handle;handle = initiate();int temp; for(int i=0;i for(int j=0;j if((temp=a[i*w+j])&&y+i>0){ if(temp==-3) textout(handle,2*(x+j)+dx,y+i+dy,wColors,nColors,“◆”); } } else if(temp==-2) textout(handle,2*(x+j)+dx,y+i+dy,wColors,nColors,“║”);textout(handle,2*(x+j)+dx,y+i+dy,wColors,nColors,“═”);textout(handle,2*(x+j)+dx,y+i+dy,wColors,nColors,“■”); else if(temp==-1)else if(temp==1)void clearcache(){ } void end(){ } void turn(int a[][4],int w,int h,int *x,int y){ int b[4][4]={{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}};int sign=0,line=0;for(int i=h-1;i>=0;i--){ } for(int j=0;j { } line++;sign=0;if(a[i][j]){ } b[j][line]=a[i][j];sign=1;exit(EXIT_SUCCESS);while(_kbhit()){ } _getch();if(sign) for(i=0;i<4;i++) if(isavailable(&b[0][0],*x-i,y,w,h)) { *x-=i; for(int k=0;k for(int j=0;j a[k][j]=b[k][j]; break;} } void clearsquare(int *a,int w,int h,int x,int y){ HANDLE handle;handle=initiate();WORD wColors[1]={SQUARE_COLOR};for(int i=0;i for(int j=0;j if(a[i*w+j]&&i+y>0) textout(handle,2*(x+j)+dx,y+i+dy,wColors,1,“ } void gameover(){ HANDLE handle;handle=initiate();WORD wColors[1]={FOREGROUND_RED| FOREGROUND_GREEN};textout(handle,7+dx,10+dy,wColors,1,”游戲結(jié)束“);clearcache();_getch();exit(EXIT_SUCCESS);} void deletemap(int m[][MAPW],int row,int w,int h){ HANDLE handle;handle=initiate();WORD wColors[1]={SQUARE_COLOR};textout(handle,2+dx,row+dy,wColors,1,”﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌“); ”); } _sleep(100);for(int i=row;i>1;i--){ } for(i=1;i } BOOL textout(HANDLE hOutput,int x,int y,WORD wColors[],int nColors,LPTSTR lpszString){ DWORD cWritten; BOOL fSuccess; COORD coord; coord.X = x; // start at first cell coord.Y = y; // of first row fSuccess = WriteConsoleOutputCharacter(hOutput,// screen buffer handle lpszString,// pointer to source string lstrlen(lpszString), // length of string coord,// first cell to write to &cWritten); // actual number written if(!fSuccess) cout<<“error:WriteConsoleOutputCharacter”< for(;fSuccess && coord.X < lstrlen(lpszString)+x;coord.X += nColors)HANDLE hOutput; hOutput = GetStdHandle(STD_OUTPUT_HANDLE);return hOutput; { fSuccess = WriteConsoleOutputAttribute(hOutput,// 屏幕緩存處理 wColors,// pointer to source string nColors,// length of string coord,// first cell to write to &cWritten); // actual number written } if(!fSuccess) return 0;} 4、程序運(yùn)行結(jié)果截圖: cout<<“error:WriteConsoleOutputAttribute”< 方塊左移 方塊右移 下一個(gè)方塊開始下落 方塊變形 消一行,增加1分 成功消多行 消多行后分?jǐn)?shù)增加更多 消完30行后,提升一個(gè)等級(jí) 方塊疊到頂端后游戲結(jié)束 5、程序使用說明: (1)按任意鍵開始游戲 (2)控制方塊下落位置進(jìn)行消行處理 (3)成功消行后加分,當(dāng)消30行之后等級(jí)升一級(jí),最高達(dá)到10等級(jí) (4)當(dāng)產(chǎn)生的新方塊不能再下落時(shí),游戲結(jié)束。(5)過程中可以按ESC直接退出游戲 6、本實(shí)驗(yàn)的心得體會(huì) 上個(gè)學(xué)期學(xué)習(xí)C++的時(shí)候,主要是局限于讀課本,記住課本上的一些知識(shí)和概念,但很少自己親自動(dòng)手去編寫代碼,總是眼高手低,當(dāng)真正的去編寫這個(gè)俄羅斯游戲的時(shí)候就體會(huì)到編寫代碼真的好難,尤其是剛開始的想的時(shí)候,根本不知道如何下手。后來通過上網(wǎng)查詢和請(qǐng)教一些編程比較好的同學(xué)后才有了一個(gè)基本的思路,自己又重新翻閱了一下課本,將課本上的知識(shí)又重新細(xì)致的復(fù)習(xí)了一遍,最終借助于網(wǎng)絡(luò)和同學(xué)的幫助完成了這個(gè)實(shí)驗(yàn)。通過這個(gè)實(shí)驗(yàn)發(fā)現(xiàn)自己在編程方面還有很大的欠缺,編程能力很差勁,不過通過這個(gè)實(shí)驗(yàn),也讓我對(duì)上學(xué)期學(xué)習(xí)的C++知識(shí)有了一個(gè)很好很全面的復(fù)習(xí),這是這個(gè)實(shí)驗(yàn)帶給我最大的收獲。必須要親自動(dòng)手多寫,多看代碼才能真正的學(xué)好C++。 姓名:XX 學(xué)院:XXX 班級(jí):XXX 學(xué)號(hào):XXX i++; } while(i<=10);cout<<“sum=”< #include for(i;i<=10,i++) { sum+=i; } cout<<“sum=”< cout<<“不是合法的輸入”< 實(shí)驗(yàn) 三、函數(shù)的應(yīng)用(2學(xué)時(shí)) 1、實(shí)驗(yàn)?zāi)康模?/p> 掌握函數(shù)的定義和調(diào)用方法。練習(xí)重載函數(shù)使用。練習(xí)函數(shù)模板的使用 練習(xí)使用系統(tǒng)函數(shù)。 在main()函數(shù)中提示輸入兩個(gè)整數(shù)x,y,使用cin語句得到x,y的值,調(diào)用pow(x,y)函數(shù)計(jì)算x的y次冪的結(jié)果,再顯示出來。程序名:lab3_4.cpp。 編寫遞歸函數(shù)int fib(int n),在主程序中輸入n的值,調(diào)用fib函數(shù)計(jì)算Fibonacci級(jí)數(shù)。公式為fib(n)=fib(n-1)+fib(n-2),n>2;fib(1)=fib(2)=1。使用if語句判斷函數(shù)的出口,在程序中用cout語句輸出提示信息。程序名:lab3_5.cpp。 7)調(diào)試操作步驟如下: 選擇菜單命令Build|Start Debug |Step In,系統(tǒng)進(jìn)入單步執(zhí)行狀態(tài),程序開始運(yùn)行,并出現(xiàn)一個(gè)DOS窗口,此時(shí)光標(biāo)停在main()函數(shù)的入口處。 把光標(biāo)移到語句answer=fib(n)前,從Debug菜單單擊Run To Cursor,在程序運(yùn)行的DOS窗口中按提示輸入數(shù)字10,這時(shí)回到可視界面中,光標(biāo)停在第11行,觀察一下n的值。 從Debug菜單中單擊Step Into,程序進(jìn)入fib函數(shù),觀察一下n的值,把光標(biāo)移到語句return(fib(n-2)+fib(n-1))前,從Debug菜單單擊Run to Cursor,再單擊Step Into,程序遞歸調(diào)用fib函數(shù),又進(jìn)入fib函數(shù),觀察n的值。 繼續(xù)執(zhí)行程序,參照上述的方法,觀察程序的執(zhí)行順序,加深對(duì)函數(shù)調(diào)用和遞歸調(diào)用的理解。 再試試Debug菜單欄中的別的菜單項(xiàng),熟悉Debug的各種方法。 4、實(shí)驗(yàn)原理 C++中函數(shù)的重載使得同樣的函數(shù)名下,只要參數(shù)類型、數(shù)目不同時(shí),即可根據(jù)輸入的數(shù)據(jù)進(jìn)行相應(yīng)的函數(shù)調(diào)用,使用起來簡單方便。 5、思考與體會(huì) C++中,函數(shù)的運(yùn)用與之前學(xué)過的C語言既有相同之處,也有著不同的地方。相同的地方在于格式、用法等框架上的不變。但是C語言中對(duì)于同樣的函數(shù)名是只能夠申明一種函數(shù)的,倘若有相同的函數(shù)名出現(xiàn)系統(tǒng)即會(huì)報(bào)錯(cuò),所以用起來有時(shí)是極為不便 0 //參數(shù)為兩個(gè)雙精度浮點(diǎn)形的函數(shù) int max1(double a,double b){ a=a>b?a:b;return a;} //參數(shù)為三個(gè)雙精度浮點(diǎn)形的函數(shù) int max1(double a,double b,double c){ a=a>b?a:b;a=a>c?a:c;return a;} void main(void){ int a;double b;a=max1(1,2);cout< Lab3_3: #include int main(){ int i,j,k;cout<<“請(qǐng)輸入要比較的3個(gè)數(shù): ”< 2131415 public: Rank rank;int frequency;float voltage;CPU(Rank r,int f,float v){ //構(gòu)造函數(shù) cout<<“構(gòu)造了一個(gè)CPU”< rank=r; frequency=f; voltage=v;} void run(){ cout<<“CPU開始運(yùn)行”< } void stop(){ cout<<“CPU停止運(yùn)行”< cout<<“RANK=”< cout<<“frequency=”< cout<<“voltage=”< }; int main(){ CPU cpu(p5,500,2000);cpu.run();cpu.show();cpu.stop();return 0;} Lab4_2 #include //析構(gòu)函數(shù)-17 computer(Rank r,int f,float v){ CPU cpu(r,f,v); //定義CPU對(duì)象 RAM ram(1); //定義RAM對(duì)象 CDROM cdrom(1); //定義CDROM對(duì)象 cpu.run(); cpu.show(); cpu.stop();} };int main(){ computer com(p4,300,3000);return 0;} 實(shí)驗(yàn) 七、繼承與派生(一、二)4學(xué)時(shí) 1、實(shí)驗(yàn)?zāi)康模?/p> 學(xué)習(xí)定義和使用類的繼承關(guān)系,定義派生類。熟悉不同繼承方式下對(duì)基類成員的訪問控制。學(xué)習(xí)利用虛基類解決二義性問題 2、實(shí)驗(yàn)任務(wù) a)定義一個(gè)基類Animal,有私有整型成員變量age,構(gòu)造其派生類dog,在其成員函數(shù)SetAge(int n)中直接給age賦值,看看會(huì)有什么問題,把a(bǔ)ge改為公有成員變量,還會(huì)有問題嗎?編程試試看。b)定義一個(gè)基類BaseClass,有整型成員變量Number ,構(gòu)造其派生類DerivedClass,觀察構(gòu)造函數(shù)和析構(gòu)函數(shù)的執(zhí)行情況。c)定義一個(gè)車(vehicle)基類,具有MaxSpeed、Weight等成員變量,Run、Stop等成員函數(shù),由此派生出自行車(bicycle)類、汽車(motorcar)類。自行車類有高度(height)等屬性,汽車類有座位數(shù)(SeatNum)等屬性。從bicycle和motorcar派生出摩托車(motorcycle)類,在繼承過程中,注意把vehicle設(shè)置為虛基類。如果不把vehicle設(shè)置為虛基類,會(huì)有什么問題?編程試試看。 3、實(shí)驗(yàn)步驟 編寫程序定義基類Animal,成員變量age定義為私有的。構(gòu)造派生類dog,在其成員函數(shù)SetAge(int n)中直接對(duì)age賦值時(shí),會(huì)出現(xiàn)類似以下的錯(cuò)誤提示: error C2248:’age’:cannot access private member declared in class ‘Animal’ error C2248:’age’:cannot access private member declared in class ‘Animal’ 把a(bǔ)ge改為公有成員變量后重新編譯就可以了。程序名為:lab7_1.cpp 0 確方便我們編程。 6、部分參考代碼 Lab7_1 #include class Animal{ public: int age;}; class dog:public Animal{ public: int SetAge(int n){ age=n; return age;} }; void main(void){ int age;dog d;age=d.SetAge(3);cout<<“age=”< Lab7_2 #include cout<<“這是父類的構(gòu)造函數(shù)”< cout<<“這是父類的析構(gòu)函數(shù)”< //Motorcycle繼承bicycle和motorcar類 class motorcycle:public bicycle,public motorcar{ public: motorcycle(int seat,double H,double MS,double W){ SeatNum=seat; height=H; MaxSpeed=MS; Weight=W;} void show(){ cout<<“seatnum=”< cout<<“height=”< cout<<“MaxSpeed=”< cout<<“weight=”< int main(){ motorcycle che(3,30.33,90.84,500);che.show();return 0;} 實(shí)驗(yàn) 八、多態(tài)性2學(xué)時(shí) 1、實(shí)驗(yàn)?zāi)康模?/p> 掌握運(yùn)算符重載的方法 習(xí)使用虛函數(shù)實(shí)現(xiàn)動(dòng)態(tài)多態(tài)性。 2、實(shí)驗(yàn)任務(wù) a)定義Point類,有坐標(biāo)x,y兩個(gè)成員變量;對(duì)Point類重載“++”、“--”運(yùn)算符,實(shí)現(xiàn)對(duì)坐標(biāo)值的改變。 定義一個(gè)車(vehicle)基類,有Run、Stop等成員函數(shù),由此派生出自行車(bicycle)類、汽車(motorcar)類,從bicycle和motorcar派生出摩托車(motorcycle)類,它們都有Run、Stop等成員函數(shù)。觀察虛函的作用。 3、實(shí)驗(yàn)步驟 編寫程序定義Point類,在類中定義整型的私有成員變量x,y,定義成員函數(shù)Point& operator++();Point operator++(int);以實(shí)現(xiàn)對(duì)Point類重載“++”運(yùn)算符,定義成函數(shù)Point& operator –();Point operator 也就是函數(shù)的重載。 6、部分參考代碼 Lab8_1 #include class Point{ public: Point(double x=0.0,double y=0.0):xray(x),yray(y){} Point operator++(int);Point operator--(int);void show();private: double xray;double yray;}; Point Point::operator++(int){ return Point(xray++,yray++);} Point Point::operator--(int){ return Point(xray--,yray--);} void Point::show(){ cout<<“x坐標(biāo)為”< int main(){ Point p(4.5,6.5);cout<<“進(jìn)行運(yùn)算前的情況:”< show(&v);return 0;} 信息工程系課程實(shí)驗(yàn)報(bào)告 姓 名 學(xué) 號(hào) 實(shí)驗(yàn)學(xué)時(shí) 2 實(shí)驗(yàn)時(shí)間 2017 年 12 月 1 日 實(shí)驗(yàn)地點(diǎn) 指導(dǎo)教師 課程名稱 C++程序設(shè)計(jì) 專 業(yè)班 級(jí) 成績 實(shí)驗(yàn)項(xiàng)目 類和對(duì)象(構(gòu)造函數(shù)、析構(gòu)函數(shù)、組合類、友元) 實(shí) 驗(yàn) 目 的 1、理解類的概念;2、掌握聲明類的方法; 3、掌握對(duì)象的定義和初始化 4、掌握通過類編寫程序 5、構(gòu)造函數(shù)、析構(gòu)函數(shù) 6、對(duì)象數(shù)組、對(duì)象引用、對(duì)象指針 7、組合類 8、靜態(tài)成員 9、友元 實(shí) 驗(yàn) 內(nèi) 容 和 要 求 1、閱讀“程序 1.txt”,然后回答以下問題: 1)行 A 定義了一個(gè)類 Test 的對(duì)象,它將調(diào)用哪個(gè)構(gòu)造函數(shù)? 2)行 A 能否寫成 Test t1();? 為什么不可以或者可以? 3)行 B 定義了另一個(gè)對(duì)象,它將調(diào)用哪個(gè)構(gòu)造函數(shù)? 4)解釋第二個(gè)構(gòu)造函數(shù)的函數(shù)體中用到 this 指針的原因:? 5)解釋行 C 數(shù)組 p 的含義? 2、閱讀“程序 2.txt”,然后回答以下問題: 1)行 A 中動(dòng)態(tài)申請(qǐng)的數(shù)組為何還要將數(shù)組大小加 1? 2)String 類中是否還存在默認(rèn)的構(gòu)造函數(shù)“String();“? 3)行 B 開始的構(gòu)造函數(shù)稱之為 構(gòu)造函數(shù)。解釋其功能 4)執(zhí)行行 C 時(shí)會(huì)調(diào)用哪個(gè)構(gòu)造函數(shù)? 5)上機(jī)驗(yàn)證該程序。 3、閱讀“程序 3.txt”,然后回答以下問題: 1)執(zhí)行行 A 后,a1.c= a2.c= A::c= 2)執(zhí)行行 B 后,a1.c= a2.c= A::c= 3)行 B 可否改為”A::c=400;” 為什么 4)c 為類 A 的私有成員,但行 D 中為何通過 t 能直接訪問成員 c? 5)執(zhí)行行 E 后,a1.c= a2.c= A::c= 第 1 題、第 2 題和第 3 題不用抄題目,只需寫答案在報(bào)告紙上。 4、定義一個(gè)點(diǎn)類 Point,包括數(shù)據(jù)成員點(diǎn)的 x 坐標(biāo)和 y 坐標(biāo)(int)、構(gòu)造函數(shù)以及設(shè)置點(diǎn) x,y 坐標(biāo)的成員函數(shù)。定義一個(gè) CRect 類,代表一個(gè)矩形,要求 CRect 類中有代表矩形的左上角坐標(biāo)(x1,y1)和右下角坐標(biāo)(x2,y2)點(diǎn)類的對(duì)象(組合類),要求 CRect 類中有三個(gè)成員函數(shù) RectHeight()、RectWidth()以及area(),通過這三個(gè)函數(shù)能得到矩形的高和寬和面積。 要求 CRect 類中有構(gòu)造函數(shù),要求 CRect 類中有成員函數(shù) SetR(),通過這函數(shù)能設(shè)置矩形的左上角坐標(biāo)和右下角坐標(biāo)。 5、建立一個(gè)類 primenum,求指定數(shù)據(jù)范圍內(nèi)的所有質(zhì)數(shù)。具體要求如下: 1)私有數(shù)據(jù)成員 int data[25] 依次存放指定范圍內(nèi)求出的所有質(zhì)數(shù) int low,high 存放指定的數(shù)據(jù)范圍的下限和上限 int num 存放 low 與 high 之間的質(zhì)數(shù)的個(gè)數(shù) 2)公有成員函數(shù) primenum(int low,int high) 構(gòu)造函數(shù),初始化 low 和 high,同時(shí)在函數(shù)體內(nèi)初始化 num 為 0 int isprime(int x) 判斷 x 是否為質(zhì)數(shù)。若是質(zhì)數(shù),返回 1;否則,返回 0.void process() 求指定范圍內(nèi)的所有質(zhì)數(shù),把它們依次存放在數(shù)組 data,并將求出的質(zhì)數(shù)個(gè)數(shù)存放在 num 中 void print() 輸出求出的質(zhì)數(shù)個(gè)數(shù)以及所有質(zhì)數(shù),要求每行輸出 5 個(gè)質(zhì)數(shù)。 3)在主函數(shù)中對(duì)該類進(jìn)行測(cè)試。例如:定義一個(gè) primenum 類的對(duì)象 test,指定查找范圍為 100~200,求出 100~200 之間的所有質(zhì)數(shù)。 實(shí) 驗(yàn) 過 程(算法、源代碼以及注釋) 實(shí) 驗(yàn) 結(jié) 果(記錄程序執(zhí)行的結(jié)果,分析結(jié)果) 實(shí) 驗(yàn) 總 結(jié)(記錄程序在調(diào)試過程中出現(xiàn)的問題以及解決方法、總結(jié)收獲和心得) 上機(jī)實(shí)驗(yàn): 1、回文是指正讀,反讀均相同的字符序列,如“abba”和“abdba”均是回文,但是“good”不是回文,試用STACK類編寫該程序。 #include int top = 1;char *cMyStack =(char *)malloc((iLen/2+1)*sizeof(char));//定位對(duì)原始數(shù)組的檢測(cè)索引初始位置 cMyStack[0] = iLen/2;if(1 == iLen%2){ ++cMyStack[0];} //將原始數(shù)組的一半元素入棧 for(top=1;top<=iLen/2;top++){ cMyStack[top] = *(cScr+top-1);} //從棧頂開始依次匹配 while(*(cScr+cMyStack[0])== cMyStack[--top] && cMyStack[0]++ < iLen){} if(0 == top){//是回文數(shù) free(cMyStack);return 1;} else {//不是回文數(shù) free(cMyStack);return 0;} } 運(yùn)行結(jié)果: 2.利用兩個(gè)棧類S1、S2模擬一個(gè)隊(duì)列時(shí),編寫一程序利用棧的運(yùn)算實(shí)現(xiàn)隊(duì)列的插入、刪除以及判斷隊(duì)列空的運(yùn)算。 #include template assert(!mStack2.empty());mStack2.pop();} template sq.pushBack(1);printQueue(sq);sq.pushBack(2);printQueue(sq);sq.pushBack(3);printQueue(sq);sq.popFront();printQueue(sq);sq.popFront();printQueue(sq);sq.popFront();printQueue(sq);return 0;} 運(yùn)行結(jié)果: 實(shí)驗(yàn)2: 聲明復(fù)數(shù)的類Complex,使用友元函數(shù)add實(shí)現(xiàn)復(fù)數(shù)的加法。 #include < iostream > using namespace std; class Complex { private: double real, image;public : Complex(){} Complex(double a,double b) { real = a;image = b;} void setRI(double a, double b){ real = a;image = b;} double getReal(){ return real;} double getImage(){ return image;} void print(){ if(image>0) cout<<“復(fù)數(shù):”<< real <<“ + ”<< image <<“i”<< endl;if(image<0) cout<<“復(fù)數(shù):”<< real <<“-”<< image <<“i”<< endl;} friend Complex add(Complex ,Complex);//聲明友元函數(shù) }; Complex add(Complex c1, Complex c2)//定義友元函數(shù) { Complex c3; c3.real = c1.real + c2.real;//訪問Complex類中的私有成員 c3.image = c1.image + c2.image;return c3;} void main(){ Complex c1(29, 0.634), c2, c3;c2.setRI(85,106.012);c3 = add(c1, c2); cout<<“復(fù)數(shù)一:”;c1.print();cout<<“復(fù)數(shù)二:”;c2.print();cout<<“相加后:”;c3.print();} 結(jié)果: 實(shí)驗(yàn)三: 7-5 定義一個(gè)基類Shape,在此基礎(chǔ)上派生出一個(gè)Rectangle和Circle,二者都有g(shù)etArea()函數(shù)計(jì)算對(duì)象的面積。使用Rectangle類創(chuàng)建一個(gè)派生類Square.#include public: Shape(){} double GetArea() { return 0.1;} };class Rectangle: public Shape { public: Rectangle(double w,double h) { width=w;height=h;} double GetArea(){ return width*height;} private: double width,height;};class Circle:public Shape { private: double r; public: Circle(double rr){ r=rr;} double GetArea(){ return PI*r*r;} }; int main(){ Rectangle * rec=new Rectangle(5,6); Circle * cir=new Circle(5); cout<<“RecArea:”< cout<<“CirArea:”< return 1; } 運(yùn)行結(jié)果: 7-10.定義一個(gè)Object類,有數(shù)據(jù)成員weight及相應(yīng)的操作函數(shù),由此派生出Box類,增加數(shù)據(jù)成員height和width及相應(yīng)的操作函數(shù),聲明一個(gè)Box對(duì)象,觀察構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用順序。#include object(){ cout<<“構(gòu)造object對(duì)象”< class box:public object { private: int Height,Width;public: box(){ cout<<“構(gòu)造box對(duì)象”< C++課程設(shè)計(jì)報(bào)告 設(shè)計(jì)題目: 學(xué) 院: 專業(yè)班級(jí): 學(xué)生姓名: 學(xué)生學(xué)號(hào): 指導(dǎo)教師: 計(jì)算機(jī)技術(shù)與科學(xué) 3班 樊冠男 40912140 馬軍亮 提交時(shí)間: 2011/1/12 成績: 目錄 C++課程設(shè)計(jì)報(bào)告 第一章 引言 C++課程設(shè)計(jì)報(bào)告 第二章 概要設(shè)計(jì) C++課程設(shè)計(jì)報(bào)告 第三章 軟件實(shí)現(xiàn) C++課程設(shè)計(jì)報(bào)告 第四章 結(jié)果與討論第二篇:C++實(shí)驗(yàn)報(bào)告
第三篇:信息系C++實(shí)驗(yàn)報(bào)告(實(shí)驗(yàn)8)
第四篇:C++實(shí)驗(yàn)
第五篇:C++課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告(范文)