C++上机题.docx
- 文档编号:30712088
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:24
- 大小:27.51KB
C++上机题.docx
《C++上机题.docx》由会员分享,可在线阅读,更多相关《C++上机题.docx(24页珍藏版)》请在冰豆网上搜索。
C++上机题
核心提示:
01.分析以下程序的执行结果#include
Sample(inti){n=i;}friendintadd(Sample&s1,Sample&s2);};intadd(Sample&s1,Sample
01.分析以下程序的执行结果
#include
classSample
{
intn;
public:
Sample(inti){n=i;}
friendintadd(Sample&s1,Sample&s2);
};
intadd(Sample&s1,Sample&s2)
{
returns1.n+s2.n;
}
voidmain()
{
Samples1(10),s2(20);
cout< } 解: 本题说明了友元函数的使用方法。 add()是一个友元函数,它返回两个引用对象的n值之和。 所以输出为: 30 注重: 友元函数不是类的成元函数 ---------------------------------------------------- 02.分析以下程序的执行结果 #include classB; classA { inti; public: intset(B&); intget(){returni;} A(intx){i=x;} }; classB { inti; public: B(intx){i=x;} friendA; }; intA: : set(B&b)//由于使用了类B的定义,故本函数的定义应放在类B定义之后 { returni=b.i; } voidmain() { Aa (1); Bb (2); cout< a.set(b); cout< } 解: 本题说明友元类的使用方法。 这里将类A设置为类B的友元类,因此,类A的所有成员函数均为类B的友元函数。 通过调用a.set(b)将b对象的i值赋给a对象的i值。 所以输出为: 1,2 ------------------------------------------------- 03.有一个学生类student,包括学生姓名、成绩,设计一个友元函数,比较两个学生成绩的高低,并求出最高分和最低分的学生。 解: #include #include classstudent { charname[10]; intdeg; public: student(charna[],intd) { strcpy(name,na); deg=d; } char*getname(){returnname;} friendintcompare(student&s1,student&s2) { if(s1.deg>s2.deg) return1; elseif(s1.deg==s2.deg) return0; elsereturn-1; } }; voidmain() { studentst[]={student("王华",78),student("李明",92),student("张伟",62),student("孙强",88)}; inti,min=0,max=0; for(i=1;i<4;i++) { if(compare(st[max],st[i])==-1) max=i; elseif(compare(st[i],st[min])==1) min=i; } cout<<"输出结果: "< cout<<"最高分: "< cout<<"最低分: "< } 本程序的执行结果如下: 输出结果: 最高分者: 李明 最低分者: 张伟 ------------------------------------------------------------- 04.有一个学生类student,包括学生姓名、成绩,设计一个友元函数,输出成绩对应的等级: 大于等于90: 优;80~90: 良;70~79: 中;60! 69: 及格;小于60: 不及格。 解: #include #include #include classstudent { charname[10]; intdeg; charlevel[7]; public: student(charna[],intd) { strcpy(name,na); deg=d; } char*getname(){returnname;} friendvoidtrans(student&s) { if(s.deg>=90) strcpy(s.level,"优"); elseif(s.deg>=80) strcpy(s.level,"良"); elseif(s.deg>=70) strcpy(s.level,"中"); elseif(s.deg>=60) strcpy(s.level,"及格"); else strcpy(s.level,"不及格"); } voiddisp() { cout< } }; voidmain() { studentst[]={student("王华",78),student("李明",92),student("张伟",62),student("孙强",88)}; cout<<"输出结果: "< cout< for(inti=0;i<4;i++) { trans(st[i]); st[i].disp(); } } 本程序执行结果如下: 输出结果: 姓名成绩等级 王华78中 李明92优 张伟62及格 孙强88良 05.设计一个类Sample,它有两个私有成员A[]和n(A中元素个数),将对A[]中数据进行各种排序的函数放入到一个友元类PRocess中。 解: process类不包含任何数据成员,包含的公共成员函数如下: getdata(Sample&s);用于获取对象s的数据 insertsort(Sample&s);用于进行插入排序 shellsort(Sample&s);用于进行希尔排序 bubblesort(Sample&s);用于进行冒泡排序 quicksort(Sample&s);用于进行快速排序 selectsort(Sample&s);用于进行选择排序 disp(Sample&s);用于输出数据 本题程序如下: #include #defineMax100 classSample { intA[Max]; intn; friendclassprocess; public: Sample(){n=0;} }; classprocess { voidqsort(Sample&s,intl,inth); //私有成员,由quicksort()成员调用 public: voidgetdata(Sample&s); voidinsertsort(Sample&s); voidshellsort(Sample&s); voidbubblesort(Sample&s); voidquicksort(Sample&s); voidselectsort(Sample&s); voiddisp(Sample&s); }; voidprocess: : getdata(Sample&s) { inti; cout<<"元素个数: "; cin>>s.n; for(i=0;i { cout<<"输入第"< "; cin>>s.A[i]; } } voidprocess: : insertsort(Sample&s)//插入排序 { inti,j,temp; for(i=1;i { temp=s.A[i]; j=i-1; while(temp { s.A[j+1]=s.A[j]; j--; } s.A[j+1]=temp; } } voidprocess: : shellsort(Sample&s)//希尔排序 { inti,j,gap,temp; gap=s.n/2; while(gap>0) { for(i=gap;i { j=i-gap; while(j>=gap) if(s.A[j]>s.A[j+gap]) { temp=s.A[j]; s.A[j]=s.A[j+gap]; s.A[j+gap]=temp; j=j-gap; } elsej=0; } gap=gap/2; } } voidprocess: : bubblesort(Sample&s)//冒泡排序 { inti,j,temp; for(i=0;i for(j=s.n-1;j>=i+1;j--) if(s.A[j] { temp=s.A[j]; s.a[j]=s.A[j-1]; s.A[j-1]=temp; } } voidprocess: : quicksort(Sample&s)//快速排序 { qsort(s,0,s.n-1); } voidprocess: : qsort(Sample&s,intl,inth) { inti=l,j=h,temp; if(l {temp=s.A[l]; do { while(j>i&&s.A[j]>=temp) j--; if(i { s.A[i]=s.A[j]; i++; } while(i i++; if(i { s.A[j]=s.A[i]; j--; } }while(i s.A[i]=temp; qsort(s,l,j-1); qsort(s,j+1,h); } } voidprocess: : selectsort(Sample&s)//选择排序 { inti,j,k,temp; for(i=0;i { k=i; for(j=i+1;j<=s.n-1;j++) if(s.A[j] k=j; temp=s.A[i]; s.A[i]=s.A[k]; s.A[k]=temp; } } voidprocess: : disp(Sample&s) { for(inti=0;i cout< cout< } voidmain() { intsel; Samples; processp; p.getdata(s); cout<<"原来序列: "; p.disp(s); cout<<"0: 插入排序1: 希尔排序2: 冒泡排序3: 快速排序4: 选择排序其它退出"< cout<<"选择排序方法: "; cin>>sel; switch(sel) { case0: p.insertsort(s); cout<<"插入排序结果: "; break; case1: p.shellsort(s); cout<<"希尔排序结果: "; break; case2: p.bubblesort(s); cout<<"冒泡排序结果: "; break; case3: p.quicksort(s); cout<<"快速排序结果: "; break; case4: p.selectsort(s); cout<<"选择排序结果: "; break; } p.disp(s); } 本程序的执行结果如下: 元素个数: 8 输入第1个数据: 1 输入第2个数据: 6 输入第3个数据: 5 输入第4个数据: 3 输入第5个数据: 4 输入第6个数据: 8 输入第7个数据: 2 输入第8个数据: 7 原来序列: 16534827 0: 插入排序1: 希尔排序2: 冒泡排序3: 快速排序4: 选择排序其它退出 选择排序方法: 1 希尔排序结果: 12345678 题1.分析以下程序的执行结果 #include classSample { intn; public: Sample(){} Sample(intm){n=m;} friendvoidsquare(Sample&s) { s.n=s.n*s.n; } voiddisp() { cout<<"n="< } }; voidmain() { Samplea(10); square(a); a.disp(); } 解: 本题应用友元函数修改对象的数据成员。 square()是一个友元函数,它将引用对象的n值进行平方计算。 所以输出为: 100 ----------------------------------------------------------- 题2.分析以下程序的执行结果 #include classB; classA { inti; friendB; voiddisp(){cout< }; classB { public: voidset(intn) { Aa; a.i=n;//i是对象a的私有数据成员,在友元类可以使用 a.disp();//disp()是对象a的私有成员函数,在友元类可以使用 } }; voidmain() { Bb; b.set (2); } 解: 本题说明友元类的设计方法。 这里将类B设置为类A的友元类,因此,在设计类B时可以直接使用类A的私有数据成员和成员函数。 所以输出为: 2 ------------------------------------------------------------- 题3.分析以下程序的执行结果 #include classteacher; classstudent { char*name; public: student(char*s){name=s;} friendvoidprint(student&,teacher&); }; classteacher { char*name; public: teacher(char*s){name=s;} friendvoidprint(student&,teacher&); }; voidprint(student&a,teacher&b) { cout<<"thestudentis: "< cout<<"theteacheris: "< } voidmain() { students("LiHu"); teachert("WangPing"); print(s,t); } 解: student和teacher类共用一个友元函数的实现。 所以输出为: thestudentisLiHu theteacherisWanPing -------------------------------------------------------------- 题4.有一个学生类student,包括学生姓名、成绩,设计一个友元类,输出成绩大于等于80分以上者。 解: 学生类student的disp()函数设计成友元函数。 本题程序如下: #include #include #include classstudent { charname[10]; intdeg; public: student(charna[],intd) { strcpy(name,na); deg=d; } char*getname(){returnname;} friendvoiddisp(student&s) { if(s.deg>=80) cout< } }; voidmain() { studentst[]={student("王华",78),student("李明",92),student("张伟",62),student("孙强",88)}; cout<<"输出结果: "< cout< for(inti=0;i<4;i++) disp(st[i]); } 本程序的执行结果如下: 输出结果: 姓名成绩 李明92 孙强88 -------------------------------------------------------------- 题5.有一个向量类Vector,包括一个点的坐标位置x和y,设计两个友元函数,实现两个向量的加法和减法的运算 解: 本题程序如下: #include classVector { intx,y; public: Vector(){} Vector(inti,intj){x=i;y=j;} voiddisp() { cout<<"("< } friendVectoradd(Vector&v1,Vector&v2) { Vectorv; v.x=v1.x+v2.x; v.y=v1.y+v2.y; returnv; } friendVectorsub(Vector&v1,Vector&v2) { Vectorv; v.x=v1.x-v2.x; v.y=v1.y-v2.y; returnv; } }; voidmain() { Vectorv1(10,20),v2(4,5),v3; v3=add(v1,v2); cout<<"输出结果: "< cout<<"";v1.disp();cout<<"+";v2.disp(); cout<<"=";v3.disp();cout< v3=sub(v1,v2); cout<<"";v1.disp();cout<<"-";v2.disp(); cout<<"=";v3.disp();cout< } 本程序的执行结果如下: 输出结果: (10,20)+(4,5)=(14,25) (10,20)-(4,5)=(6,15) 题6.采用友元函数的方法重新设计“引用<题8>”中的类Point,并求两个点之间的距离。 解: 将原来求两个点的距离的普通函数distance()改写为友元函数即可,可以看到采用友元函数方法使得代码更简洁。 本题程序如下: #include #include classPoint { intx,y; public: Point(inti,intj){x=i;y=j;} friendfloatdistance(Point&p1,Point&p2); voiddisp() { cout<<"("< } }; floatdistance(Point&p1,Point&p2)//友元函数的实现 { floatd; d=sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y)); returnd; } voidmain() { Pointp1(2,2),p2(5,5); p1.disp();cout<<"与";p2.disp(); cout<<"之间距离="< } 本程序执行结果如下: (2,2)与(5,5)之间距离=4.24264 ------------------------------------------------------- 题7.设计一个日期类Date,包括日期的年份、月份和日号,编写一个友元函数,求两个日期之间相差的天数。 解: 该类中设计有3个友元函数;count_day()函数,它有两个参数,第2个参数是一个标志,当其值等于1时,计算一年的开始到某日期的天数;否则计算某日期到年尾的天数。 leap()函数用于判定指定的年份是否为闰年。 subs()函数用于计算两个日期之间的天数。 本题程序如下: #include #include classDate { intyear; intmonth; intday; public: Date(inty,intm,intd) { year=y;month=m;day=d; } voiddisp() { printf("%d.%d.%d",year,month,day); } friendintcount_day(Date&d,int); friendintleap(intyear); friendintsubs(Date&d1,Date&d2); }; intcount_day(Date&d,intflag) { staticintday_tab[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31}, {31,29,31,30,31,30,31,31,30,31,30,31}}; //使用二维数组存放各月天数,第一行对应非闰年,第二行对
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 上机