2023年面向?qū)ο蟪绦蛟O(shè)計(jì)C++實(shí)驗(yàn)指導(dǎo)書_第1頁
2023年面向?qū)ο蟪绦蛟O(shè)計(jì)C++實(shí)驗(yàn)指導(dǎo)書_第2頁
2023年面向?qū)ο蟪绦蛟O(shè)計(jì)C++實(shí)驗(yàn)指導(dǎo)書_第3頁
2023年面向?qū)ο蟪绦蛟O(shè)計(jì)C++實(shí)驗(yàn)指導(dǎo)書_第4頁
2023年面向?qū)ο蟪绦蛟O(shè)計(jì)C++實(shí)驗(yàn)指導(dǎo)書_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

《面向?qū)ο蟪绦蛟O(shè)計(jì)(C++)》課程實(shí)驗(yàn)指導(dǎo)書安陽工學(xué)院計(jì)算機(jī)科學(xué)與信息工程學(xué)院軟件工程教研室2023.9編號:課程總學(xué)時:64實(shí)驗(yàn)學(xué)時:32課程總學(xué)分:3.5實(shí)驗(yàn)學(xué)分:先修課程:C語言程序設(shè)計(jì)合用專業(yè):計(jì)算機(jī)科學(xué)與技術(shù),網(wǎng)絡(luò)工程,軟件工程本課程實(shí)驗(yàn)的重要目的與任務(wù)《面向?qū)ο蟪绦蛟O(shè)計(jì)(C++)》是計(jì)算機(jī)專業(yè)學(xué)生的一門專業(yè)基礎(chǔ)課。C++是一種高效而又實(shí)用的程序設(shè)計(jì)語言,它既可以進(jìn)行過程化程序設(shè)計(jì),也可以進(jìn)行面向?qū)ο蟪绦蛟O(shè)計(jì),因此成為了編程人員最廣泛使用的工具。重要任務(wù)是介紹C++語言中的數(shù)據(jù)類型,運(yùn)算,語句結(jié)構(gòu)及其程序設(shè)計(jì)的基本方法。使學(xué)生掌握一門高級程序設(shè)計(jì)語言,了解面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念與方法,進(jìn)而學(xué)會運(yùn)用C++語言學(xué)會解決一般應(yīng)用問題,從而掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的基本知識和基本技能。并為后續(xù)的專業(yè)課程奠定程序設(shè)計(jì)基礎(chǔ)。實(shí)驗(yàn)1C++基礎(chǔ)一、實(shí)驗(yàn)?zāi)康?.加強(qiáng)學(xué)生掌握C++的基本知識點(diǎn);2.加強(qiáng)學(xué)生掌握I/O流;3加強(qiáng)學(xué)生進(jìn)一步理解函數(shù)的用法;4理解引用的概念及應(yīng)用。三、實(shí)驗(yàn)內(nèi)容1.用函數(shù)返回值實(shí)現(xiàn)記錄A類學(xué)生和B類學(xué)生個數(shù),平均分大于等于80的為A類,其余為B類。四.實(shí)驗(yàn)指導(dǎo)1.參考程序:#include<iostream.h>intmain(){cout<<”MynameisJone\n”;cout<<”theIDis”;cout<<2;cout<<endl;}2.參考程序:#include<iostream.h>#include<iomanip.h>//要用到格式控制符voidmain(){doubleamount=22.0/7;cout<<amount<<endl;cout<<setprecision(0)<<amount<<endl<<setprecision(1)<<amount<<endl<<setprecision(2)<<amount<<endl<<setprecision(3)<<amount<<endl<<setprecision(4)<<amount<<endl;cout<<setiosflags(ios::fixed);cout<<setprecision(8)<<amount<<endl;cout<<setiosflags(ios::scientific)<<amount<<endl;cout<<setprecision(6);//重新設(shè)立成原默認(rèn)設(shè)立}3.參考程序:#include<iostream.h>#include<iomanip.h>intmain(){intnumber=1001;cout<<"Decimal:"<<dec<<number<<endl<<"Hexadecimal:"<<hex<<number<<endl<<"Octal:"<<oct<<number<<endl;return0;}4.參考程序:#include<iostream.h>#include<iomanip.h>intmain(){cout<<setfill('*')<<setw(2)<<21<<endl<<setw(3)<<21<<endl<<setw(4)<<21<<endl;cout<<setfill('');//恢復(fù)默認(rèn)設(shè)立return0;}5.參考程序:#include<iostream.h>#include<iomanip.h>voidmain(){cout<<setiosflags(ios::right)<<setw(5)<<1<<setw(5)<<2<<setw(5)<<3<<endl;cout<<setiosflags(ios::left)<<setw(5)<<1<<setw(5)<<2<<setw(5)<<3<<endl;}6.參考程序:#include<iostream.h>voidmain(){ constfloatPI=3.1415926f;?float(yī)r; float(yī)z,s;?cout<<"請輸入圓的半徑r=";?cin>>r;?z=2*PI*r; s=PI*r*r;?cout<<"圓的周長為:"<<z<<endl; cout<<"圓的面積為:"<<s<<endl;}7.參考程序:#include<iostream>usingnamespacestd;intarray[6][4]={{60,80,90,75},{75,85,65,77},{80,88,90,98},{89,100,78,81},{62,68,69,75},{85,85,77,91}};int&level(intgrade[],intsize,int&tA,int&tB);intmain(){inttypeA=0,typeB=0;intstudent=6;intgradesize=4;for(inti=0;i<student;i++)//解決所有的學(xué)生level(array[i],gradesize,typeA,typeB)++;//函數(shù)調(diào)用作為左值cout<<"numberoftypeAis"<<typeA<<endl;cout<<"numberoftypeBis"<<typeB<<endl;//system("PAUSE");return0;}int&level(intgrade[],intsize,int&tA,int&tB){intsum=0;for(inti=0;i<size;i++)//成績總分sum+=grade[i];sum/=size;//平均分if(sum>=80)returntA;//typeAstudentelsereturntB;//typeBstudent}運(yùn)營結(jié)果:實(shí)驗(yàn)2類和對象1、實(shí)驗(yàn)?zāi)康模赫莆疹惖亩x,根據(jù)具體需求設(shè)計(jì)類;進(jìn)一步理解C++中類的封裝性;會根據(jù)類創(chuàng)建各種對象;掌握對象的各種成員的使用方法。2、實(shí)驗(yàn)內(nèi)容定義一個滿足如下規(guī)定的Dat(yī)e類。(1)用下面的格式輸出日期:日/月/年;(2)可運(yùn)營在日前上加一天操作;(3)設(shè)立日期。參考代碼:#include<iostream.h>classDate{public:voidDisplay();voidAddOneDay();voidSetDay(inty,intm,intd);protected:boolLegal(inty,intm,intd);boolIsLeapYear(inty);intyear;intmonth;intday;};voidDate::Display(){cout<<day<<"/"<<month<<"/"<<year<<endl;}voidDate::AddOneDay(){if(Legal(year,month,day+1))day++;elseif(Legal(year,month+1,1))month++,day=1;elseif(Legal(year+1,1,1))day=1,month=1,year++;}voidDate::SetDay(inty,intm,intd){if(Legal(y,m,d))day=d,month=m,year=y;}boolDate::Legal(inty,intm,intd){if(y>9999||y<1||d<1||m<1||m>12)returnfalse;intdayLimit=31;switch(m)case4:case6:case9:case11:dayLimit--;if(m==2)dayLimit=IsLeapYear(y)?29:28;return(d>dayLimit)?false:true;}boolDate::IsLeapYear(inty){return!(y%4)&&(y%100)||!(y%400);}intmain(){Dat(yī)ed;d.SetDay(2023,2,28);d.Display();d.AddOneDay();d.Display();system("PAUSE");}運(yùn)營結(jié)果:實(shí)驗(yàn)3繼承與派生1、實(shí)驗(yàn)?zāi)康模豪斫饫^承的概念,學(xué)習(xí)如何使用基類成員,了解基類成員在派生類中的訪問控制;理解類的派生對代碼復(fù)用的作用。2、實(shí)驗(yàn)內(nèi)容:設(shè)計(jì)一個人員類person和一個日期類date,由人員類派生出學(xué)生類Student和教師類professor,學(xué)生類和教師類的數(shù)據(jù)成員birthday為日期類。參考代碼:#include<string>#include<iostream>usingnamespacestd;classdate{public:date(){cout<<"Birthday:";cin>>year>>month>>day;}voiddisplay(){cout<<year<<"-"<<month<<"-"<<day;}private:intyear;intmonth;intday;};classperson{protected:char*name;public:person();};person::person(){charnamestr[50];cout<<"Name:";cin>>namestr;name=newchar[strlen(namestr)+1];strcpy(name,namestr);}classstudent:publicperson{private:intID;intscore;datebirthday;public:student(){cout<<"studentID:";cin>>ID;cout<<"studentscore:";cin>>score;}voiddisplay(){cout<<"Thebasicinformation:"<<endl;cout<<ID<<"\t"<<name<<"\t"<<score<<"\t";birthday.display();cout<<endl;}};classprofessor:publicperson{public:professor(){cout<<"TeacherID:";cin>>No;cout<<"schoolteachingmajor:";cin>>major;}voiddisplay(){cout<<"Thebasicinformation:"<<endl;cout<<"\t"<<No<<"\t"<<name<<"\t"<<major<<"\t";birthday.display();cout<<endl;}private:intNo;charmajor[10];datebirthday;};intmain(){studentstu;stu.display();professorprof;prof.display();system("PAUSE");return0;}運(yùn)營結(jié)果:實(shí)驗(yàn)4多態(tài)1、實(shí)驗(yàn)?zāi)康?掌握函數(shù)的概念及應(yīng)用方法;理解多態(tài)性的運(yùn)用和作用。2、實(shí)驗(yàn)內(nèi)容:新建一個基類shape類是一個表達(dá)形狀的抽象類,area()為求圖形面積的函數(shù)。請從shape類派出矩形類(rectangle)、三角形類(triangle)、圓類(circles)、并給出具體的求面積函數(shù)。參考代碼:#include<iostream>#include<math.h>usingnamespacestd;classshape{public:virtualdoublearea()=0;virtualvoiddisplay()=0;shape(){}};classrectangle:publicshape{public:rectangle(doublea=1,doubleb=1){x=a;y=b;}doublearea(){returnx*y;}voiddisplay(){cout<<area()<<endl;;}private:doublex;doubley;};classtriangle:publicshape{public:triangle(doublea=1,doubleb=1,doublec=1){x=a;y=b;z=c;}doublearea(){doublel=(x+y+z)/2;return(sqrt((l-x)*(l-y)*(l-z)*l));}voiddisplay(){cout<<area()<<endl;;}private:doublex;doubley;doublez;};classcircles:publicshape{public:circles(doubleR=1){r=R;}doublearea(){return3.14*r*r;}voiddisplay(){cout<<area()<<endl;;}private:doubler;};intmain(){shape*p;p=newrectangle(2,3);p->display();p=newtriangle(3,4,5);p->display();p=newcircles(2);p->display();system("PAUSE");return0;}運(yùn)營結(jié)果:實(shí)驗(yàn)5運(yùn)算符重載1、實(shí)驗(yàn)?zāi)康模赫莆者\(yùn)算符重載的概念及使用方法,掌握特殊運(yùn)算符的重載規(guī)定和方法。2、實(shí)驗(yàn)內(nèi)容:定義整數(shù)集合類intSet,實(shí)現(xiàn)如下功能:定義類的構(gòu)造函數(shù),并根據(jù)需要可以定義多個構(gòu)造函數(shù)。(1)Clear函數(shù):清空整數(shù)集合(2)IsEmpty():整數(shù)集合是否空集;(3)IsMemberOf():判斷某個整數(shù)是否在整數(shù)集合內(nèi)(4)Operat(yī)or+:增長一個整數(shù)到整數(shù)集合中(5)Operator-:從整數(shù)集合中刪除一個整數(shù)元素;(6)Operator==:判斷兩個整數(shù)集合是否相等;(7)Operator*:求兩個整數(shù)結(jié)合的交集;(8)Operator+:求兩個整數(shù)集合的交集;(9)Operator=:整數(shù)集合的對象之間的賦值;(10)Operat(yī)or<<:輸出整數(shù)集合中的元素。提醒:類intSet可以用數(shù)組的方式定義整數(shù)集合。例如:intelement[200]:保存整數(shù)集合數(shù)據(jù);intElementNum:指示整數(shù)集合的最后一個元素位置注意:一個整數(shù)集合中不允許有相同元素存在,二是集合中的元素沒有順序。參考代碼:#include<iostream>usingnamespacestd;classintSet{public:intSet();intSet(inta[],intsize);voidClear();boolIsEmpty();boolIsMemberOf(inta);booloperator+(inta);booloperator-(inta);booloperator==(intSet&set);intSetoperator+(intSet&set);intSetoperator*(intSet&set);voidoperator=(intSet&set);friendostream&operator<<(ostream&,intSet&);protected:?intelement[100]; intElementNum;};//初始化整數(shù)集合元素intSet::intSet(){ for(inti=0;i<100;i++)?element[i]=0; ElementNum=-1;}intSet::intSet(inta[],intsize){?if(size>=100)?ElementNum=99; else?ElementNum=size-1; for(inti=0;i<=ElementNum;i++) element[i]=a[i]; for(inti=size;i<100;i++) element[i]=0;}//清空整數(shù)集合元素voidintSet::Clear(){ for(inti=0;i<100;i++) {? element[i]=0;?}?ElementNum=-1;}//判斷整數(shù)集合是否為空boolintSet::IsEmpty(){ if(ElementNum==-1) ?returnfalse; else??returntrue;}//判斷元素是否在整數(shù)集合中boolintSet::IsMemberOf(inta){?for(inti=0;i<ElementNum;i++)?if(element[i]==a) returntrue; returnfalse;}//往集合中增長一個元素boolintSet::operator+(inta){ if(IsMemberOf(a))?returntrue; else?{ if(ElementNum==99) returnfalse;?else??{ ?ElementNum++; ?element[ElementNum]=a;? returntrue; } }}//從集合中刪除一個元素boolintSet::operator-(inta){ intpos; if(!IsMemberOf(a))?returnfalse; for(inti=0;i<=ElementNum;i++) {? if(element[i]==a) { pos=i;? break; ?}?} for(inti=pos;i<ElementNum;i++) element[i]=element[i+1]; ElementNum--;??returntrue;}//判斷兩個整數(shù)集合是否相等boolintSet::operator==(intSet&set){ boolEqual; if(ElementNum!=set.ElementNum)?returnfalse; for(inti=0;i<=ElementNum;i++) {??Equal=false; for(intj=0;j<set.ElementNum;j++)? { ?if(element[i]==set.element[i])? { ? Equal=true;? break;? ?}??} ?if(!Equal)? returnfalse;?} returntrue;}//求兩個集合的交集intSetintSet::operator+(intSet&set){ inta[100],size=0;?for(inti=0;i<=ElementNum;i++) for(intj=0;j<=set.ElementNum;j++)?{??if(element[i]==set.element[j])? {???a[size]=element[i]; ?size++; ??break; }?} returnintSet(a,size);}//求兩個集合的并集intSetintSet::operator*(intSet&set){?inta[100],size; for(inti=0;i<=ElementNum;i++) a[i]=element[i];?size=ElementNum+1; for(inti=0;i<=set.ElementNum;i++) if(IsMemberOf(set.element[i]))? continue;?else { ?if(size==99) ?break;? a[size]=set.element[i];? size++;? }returnintSet(a,size);}//整數(shù)集合對象間賦值voidintSet::operat(yī)or=(intSet&set){ for(inti=0;i<=set.ElementNum;i++)? element[i]=set.element[i]; ElementNum=set.ElementNum;}//輸出整數(shù)集合中的元素ostream&operat(yī)or<<(ostream&os,intSet&s){?for(inti=0;i<=s.ElementNum;i++) os<<"element["<<i<<"]"<<s.element[i]<<endl;?returnos;}intmain(){?inta[7]={1,2,3,4,5,6,7}; intb[6]={5,6,7,8,9,0};?intSetS1(a,7),S2(b,6),S3;S3=S1+S2;cout<<S3;system("PAUSE");?return0;}運(yùn)營結(jié)果:實(shí)驗(yàn)6輸入輸出流1、實(shí)驗(yàn)?zāi)康模赫莆樟鞯母拍?;掌握文獻(xiàn)的打開與關(guān)閉;掌握文獻(xiàn)的讀寫操作;2、實(shí)驗(yàn)內(nèi)容:定義一個學(xué)生類,包含學(xué)生的學(xué)號、姓名和成績等基本信息,將學(xué)生信息寫入二進(jìn)制文獻(xiàn)student.dat中,實(shí)現(xiàn)對學(xué)生信息的顯示、查詢和刪除等基本功能。參考代碼:#include<iostream>#include<fstream>usingnamespacestd;classStudent{private:longNo;char*Name;intScore;public:Student(longstu_no=0,char*stu_name=NULL,intstu_score=0);longGetNo();char*GetName();intGetScore();voidShowStudent();};Student::Student(longstu_no,char*stu_name,intstu_score){No=stu_no;Name=stu_name;Score=stu_score;}voidStudent::ShowStudent(){cout<<No<<"\t"<<Name<<"\t"<<Score<<endl;}longStudent::GetNo(){returnNo;}char*Student::GetName(){returnName;}intStudent::GetScore(){returnScore;}intmain(){Studentstu[3]={Student(,"Liming",70),Student(,"Hujun",80),Student(,"Wangtian",90)};inti,k,pos;fstreaminfile,outfile;outfile.open("Students.dat",ios::out|ios::binary|ios::trunc);if(!outfile){cerr<<"Fileopenerror!"<<endl;exit(1);}for(i=0;i<3;i++){outfile.write((char*)&stu[i],sizeof(stu[i]));}outfile.close();cout<<"Students.dat:"<<endl;infile.open("Students.dat",ios::in|ios::binary);for(i=0;i<3;i++){infile.read((char*)&stu[i],sizeof(Student));cout<<stu[i].GetNo()<<"\t"<<stu[i].GetName()<<"\t"<<stu[i].GetScore()<<endl;}infile.close();infile.open("Students.dat(yī)",ios::in|ios::binary);cout<<"pleaseinputthenumberofrecord:";cin>>k;pos=(k-1)*sizeof(Student);infile.seekg(pos);infile.read((char*)&stu[i],sizeof(Student));cout<<stu[i].GetNo()<<"\t"<<stu[i].GetName()<<"\t"<<stu[i].GetScore()<<endl;infile.close();cout<<"DeletetheSecondrecord!"<<endl;infile.open("Students.dat",ios::in|ios::binary|ios::trunc);for(i=0;i<3;i++){if(i?。剑?outfile.write((char*)&stu[i],sizeof(stu[i]));}outfile.close();infile.open("Students.dat",ios::in|ios::binary);for(i=0;i<2;i++){infile.read((char*)&stu[

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論