c++
Câu hỏi
3. Đáp án và biểu điểm
Nội dung câu hỏi
Điểm 2đ Câu 1. Cho biết kết quả khi thực hiện chương trình sau: #include <iostream.h> class samp { int a, b; public: samp(int n, int m) { a=n; b=m; } int get_a() {return a; } int get_b() {return b; } }; void main() { samp ob[4]= { samp(1, 2), samp(3, 4), samp(5, 6), samp(7, 8) }; int i; samp *p; p=ob; for(i=0; i<4; i++) { cout <<p->get_a()<< “ ”; cout <<p->get_b()<< “ ”; p++; } cout <<” ”; } Trả lời: 1 2 3 4 5 6 7 8 2đ Câu 2. Cho biết kết quả khi thực hiện chương trình sau: #include <iostream.h> class samp { int a; public: void set_a(int n) { a=n; } int get_a() {return a; } }; void main() { samp ob[4]; int i; for(i=0; i<4; i++) ob[i].set_a(i); for(i=0; i<4; i++) cout<< ob[i].get_a(); cout << “ ”; } Trả lời: 0 1 2 3 2đ Câu 3. Cho biết kết quả khi thực hiện chương trình sau: #include <iostream.h> class samp { int i; public: samp(int n) {i=n; } int get_i() {return i; } }; int sqr_it(samp o) {return o.get_i() * o.get_i(); } void main() { samp a(10), b(2); cout << sqr_it(a) <<” ”; cout << sqr_it(b) << “ ”; } Trả lời: 100 4 2đ Câu 4. Cho biết kết quả khi thực hiện chương trình sau: #include <iostream.h> class samp { int i; public: samp(int n) {i=n; } int get_i() {return i; } }; int sqr_it(samp o){ return o.get_i()*o.get_i(); } void main() { samp a(10), b(4); cout << sqr_it(a) <<” ”; cout << sqr_it(b) << “ ”; } Trả lời: 100 16 2đ Câu 5. Cho biết kết quả khi thực hiện chương trình sau: #include <iostream.h> class myclass { int a, b; public: myclass(int x, int y); void show(); }; myclass::myclass(int x, int y) { cout << “ In constructor ”; a=x; b=y; } void myclass::show() { cout <<a<<b<< “ ”; } void main() { myclass ob(4, 7); ob.show(); } Trả lời: In constructot 47 2đ Câu 6. Cho biết kết quả khi thực hiện chương trình sau: #include <iostream.h> class myclass { int a; public: myclass(); ~myclass(); void show(); }; myclass::myclass() { cout << “ In constructor ”; a=10; } myclass::~myclass() { cout << “ Destructing... ”; } void myclass::show() { cout <<a <<“ ”; } void main() { myclass ob; ob.show(); } Trả lời: In constructor 10 Destructing.... 2đ Câu 7. Cho biết kết quả khi thực hiện chương trình sau: #include <iostream.h> class stack { char s[10]; int top; public: void init(); void push(char ch); char pop(); }; vo id stack::init() { top = 0; } void stack::push(char ch) { if (top ==10) { cout << "Stack is full"; return; } s[top] = ch; top++; } char stack::pop() { if (top ==0) { cout <<"Stack empty"; return 0; } top--; return s[top]; } void main() { stack s1, s2; int i; s1.init(); s1.push('w'); s1.push('o'); s1.push('r'); s1.push('k'); for(i=0; i<=3; i++) cout << "Pop s1: " <<s1.pop() <<" "; } Trả lời: Pop s1: k Pop s1:r Pop s1:o Pop s1 w 2đ Câu 8. Tạo một lớp PS để thực hiện các thao tác số học với phân số trong đó: o Sử dụng các biến nguyên để biểu diễn các thành phần dữ liệu của tử số và mẫu số của lớp. o Xây dựng một constructor để tạo đối tượng, constructor sử dụng các tham số có giá trị ngầm định. o Xây dựng hàm thành phần public để thực hiện in phân số ra màn hình dưới dạng a/b trong đó a là tử số, b là mẫu số; hàm tối giản một phân số. o Thực hiện chồng toán tử operator cho các thao tác: Cộng, trừ, nhân, chia hai phân số. Xây dựng hàm main để kiểm tra lớp đã tạo. Trả lời: #include <stdio.h> #include <conio.h> #include <math.h> #include <iostream.h> using namespace std; class ps{ public: int t,m; ps(int t1=0,int m1=1) { t=t1; m=m1; } void hienthi() { cout<<t<<"/"<<m<<endl; } int ps::ucln(int t, int m) { t=abs(t); m=abs(m); if(t*m==0) return 1; while(t!=m){ if(t>m) t-=m; else m-=t; } return t; } // rut gon ps void ps::rutgon() { int u; u = ucln(t,m); t=t/u; m=m/u; } friend ps operator+(ps a, ps b) { ps q; q.t=a.t*b.m+b.t*a.m; q.m=a.m*b.m; return q; } friend ps operator*(ps a, ps b) { ps q; q.t=a.t*b.t; q.m=a.m*b.m; return q; } friend ps operator-(ps a, ps b) { ps q; q.t=a.t*b.m-b.t*a.m; q.m=a.m*b.m; return q; } friend ps operator/(ps a, ps b) { ps q; q.t=a.t*b.m; q.m=b.t*a.m; return q; } }; main() {int t,m,t1,m1; cout<<"nhap tu so cua phan so a:"; cin>>t>>m; cout<<"nhap tu so cua phan so b:"; cin>>t1>>m1; ps a(t,m),b(t1,m1),c; cout<<"phan so a la:"; a.hienthi(); a.rutgon(); cout<<"phan so a vua duoc toi gian la:"<<endl; a.hienthi(); cout<<"phan so b la:"; b.hienthi(); b.rutgon(); cout<<"phan so b vua duoc toi gian la:"<<endl; b.hienthi(); c=a+b; cout<<"tong 2 phan so la:"<<endl; c.hienthi(); c.rutgon(); cout<<"tong phan so 2 vua duoc toi gian la:"<<endl; c.hienthi(); c=a*b; cout<<"tich 2 phan so la:"<<endl; c.hienthi(); c.rutgon(); cout<<"tich phan so 2 vua duoc toi gian la:"<<endl; c.hienthi(); c=a-b; cout<<"hieu 2 phan so la:"<<endl; c.hienthi(); c.rutgon(); cout<<"hieu phan so 2 vua duoc toi gian la:"<<endl; c.hienthi(); c=a/b; cout<<"thuong 2 phan so la:"<<endl; c.hienthi(); c.rutgon(); cout<<"thuong phan so 2 vua duoc toi gian la:"<<endl; c.hienthi(); } 2đ Câu 9. Lập chương trình thực hiện các công việc sau: - Tạo một lớp Complex để thực hiện các thao tác số học với các số phức trong đó: Số phức có dạng : <Phần thực> + <Phần ảo> *j o Sử dụng các biến thực để biểu diễn các thành phần dữ liệu riêng của lớp. o Xây dựng một constructor để tạo đối tượng, constructor sử dụng các tham số có giá trị ngầm định. o Xây dựng hàm thành phần public để thực hiện in số phức ra màn hình dưới dạng (a, b) trong đó a là phần thực, b là phần ảo. o Thực hiện chồng toán tử operator cho các thao tác : Cộng, trừ, nhân, chia hai số phức. Xây dựng hàm main để kiểm tra lớp đã tạo. Trả lời: #include<iostream.h> #include<math.h> #include<conio.h> #include<stdio.h> class sp{ public: float t,a; sp(float t1=0,float a1=0) { t=t1;a=a1; } void xuat() { cout<<"("<<t<<", "<<a<<")"<<endl; } friend sp operator+(sp a,sp b) { sp c; c.t=a.t+b.t; c.a=a.a+b.a; return c; } friend sp operator-(sp a,sp b) { sp c; c.t=a.t-b.t; c.a=a.a-b.a; return c; } friend sp operator*(sp a,sp b) { sp c; c.t=(a.t*b.t+a.a*b.a)/(b.t*b.t+b.a+b.a); c.a=(a.t*b.a+a.a*b.t)/(b.t*b.t+b.a*b.a); return c; } friend sp operator/(sp a,sp b) { sp c; c.t=(a.t*b.t-a.a*b.a)/(b.t*b.t+b.a+b.a); c.a=(a.t*b.a-a.a*b.t)/(b.t*b.t+b.a*b.a); return c; } }; main() {float t2,a2,t1,a1; cout<<"nhap phan thuc va phan ao so phuc a: "; cin>>t2>>a2; cout<<"nhap phan thuc va phan ao so phuc b: "; cin>>t1>>a1; sp a(t2,a2),b(t1,a1),c; cout<<"so phuc a la: "; a.xuat(); cout<<"so phuc b la: "; b.xuat(); c=a+b; cout<<"tong 2 so phuc: "; c.xuat(); c=a-b; cout<<"hieu 2 so phuc: "; c.xuat(); c=a*b; cout<<"tich 2 so phuc: "; c.xuat(); c=a/b; cout<<"thuong 2 so phuc: "; c.xuat(); } 2đ Câu 10. Cho biết kết quả khi thực hiện chương trình sau: #include <iostream.h> class cs { int x; public: cs() { cout << “Constructing base class ”;} ~cs() { cout << “Destructing base class ”;} }; class dx:private cs { int j; public: dx(int n){cout<<”Constructing derived class ”; j=n;} ~dx() { cout << “Destructing derived class ”; } void showj() {cout << j<<” ”; }}; void main() { dx o(10); o.showj(); } Trả lời: Constructing base class Constructing derived class 10 Destructing derived class Destructing base class 3đ Câu 11. Lập chương trình thực hiện các công việc sau: - Xây dựng lớp cơ sở bệnh nhân gồm: o Thuộc tính: họ tên, quê quán, năm sinh o Phương thức: Nhập, xuất thông tin - Xây dựng lớp bệnh án kế thừa từ lớp bệnh nhân có thêm: o Thuộc tính: tên bệnh án, số tiền viện phí o Phương thức: Nhập, xuất thông tin, tính tuổi hiện tại - Chương trình chính thực hiện: o Nhập danh sách N bệnh án o Sắp xếp danh sách theo tuổi giảm dần của các bệnh nhân o Hiện ra màn hình danh sách các bệnh nhân tuổi<=10. Cho biết thông tin các bệnh nhân có tiền viện phí cao nhất Trả lời: #include<conio.h> #include<iostream.h> #include<stdio.h> class benhnhan{ public: char ht[40]; char que[50]; int ns; void nhap() { cout<<"Ho ten :"; cin.ignore(1); gets(ht); cout<<"Que quan :"; cin.ignore(1)ú gets(que); cout <<"Nam sinh:"; cin>>ns; } void xuat(){ cout<<"Ho ten :";cout<<ht; cout<<"Que quan :";cout<<que; cout <<"Nam sinh:"; cout<<ns;cout<<" "; } }; class benhan: public benhnhan{ public: char tenb[50]; int tien; void nhap(){ benhnhan::nhap(); cout<<"Ten benh an :"; cin.ignore();gets(tenb); cout<<"Tien vien phi:";cin>>tien; } void xuat(){ benhnhan::xuat(); cout<<"Ten benh an :";cout<<tenb; cout<<"Tien vien phi:";cout<<tien; } int tuoi(){ return (2012-ns+1); } }; main() { benhan a[1000]; int i,n; cout<<"Nhap so benh nhan vao:"; cin>>n; for(i=0;i<n;i++) { cout<<"thong tin benh nhan thu "<<i+1; a[i].nhap(); } cout<<"Thong tin benh nhan vua nhap:"; for(i=0;i<n;i++) { cout<<"Benh nhan thu "<<i+1; a[i].xuat(); } for(i=0;i<n;i++) for(int j=i;i<n;j++) if (a[i].tuoi()>a[j].tuoi()) { benhan tg=a[i]; a[i]=a[j]; a[j]=tg; } int max; cout<<"Damh sach benh nhan cos tuoi giam dan la"; for(i=0;i<n;i++) a[i].xuat(); cout<<"Danh sach benh nhan tuoi lon hon 9 la"; for(i=0;i<n;i++) if(a[i].tuoi()>9) a[i].xuat(); max=a[0].tien; for(i=0;i<n;i++) if (a[i].tien>max) max=a[i].tien; cout<<"Danh sach benh nhan co vien phi cao nhat la:"; for(i=0;i<n;i++) if(a[i].tien=max) a[i].xuat(); } 3đ Câu 12. Tìm và sửa lỗi cho chương trình sau: #include <iostream.h> class cs { int x; public: void setx(int n) {x=n; } void showx() {cout << x<<” ”;} }; class dx: private cs { int y; public: void sety(int n) {y=n; } void show_num() { cout << x+y << “ ”; } void showy() {cout << y<<” ”; }; Trả lời: Bài đã sửa: #include <iostream.h> class cs { public: int x; void setx(int n){x=n;} void showx() {cout<<x<<" ";} }; class dx:private cs { int y; public: void sety(int n) {y=n; } void show_num() { cout << x+y << " "; } void showy() {cout << y<<" ";} }; 3đ Câu 13. Tìm và sửa lỗi cho chương trình sau: #include <iostream.h> class cs { int x; public: void setx(int n) {x=n; } void showx() {cout << x<<” ”; }; class dx: private cs { int y; public: void sety(int n) {y=n; } void showy() { cout << y << “ ”; } }; void main() { dx ob; ob.setx(10); ob.sety(20); ob.showx(); ob.showy(); } Trả lời: Bài đã sửa #include <iostream.h> class cs { int x; public: void setx(int n) {x=n;} void showx() {cout << x<<" ";} }; class dx:public cs{ int y; public: void sety(int n) {y=n;} void showy() { cout << y << " ";} }; main() { dx ob; ob.cs::setx(10); ob.sety(20); ob.cs::showx(); ob.showy(); } 3đ Câu 14. Lập chương trình thực hiện các công việc sau: - Xây dựng lớp cơ sở sản phẩm gồm: o Thuộc tính: Tên sản phẩm, năm sản xuất, giá thành o Phương thức: Nhập, xuất thông tin - Xây dựng lớp hoá đơn bán sản phẩm kế thừa từ lớp sản phẩm có thêm: o Thuộc tính: Số lượng bán, giá bán o Phương thức: Nhập, xuất thông tin, tính thành tiền (=số lượng * giá bán), tính thuế (=10% thành tiền), tính lãi (chênh lệch giá * số lượng bán) - Chương trình chính thực hiện: o Nhập danh sách N hoá đơn bán sản phẩm o Sắp xếp danh sách theo tiền lãi giảm dần o Hiện ra màn hình danh sách gồm: số thứ tự, tên sản phẩm, giá thành, số lượng bán, giá bán, thành tiền, thuế và tiền lãi. o Tính tổng tiền của các hoá đơn bán sản phẩm Cho biết thông tin các hoá đơn bán sản phẩm có tiền thuế cao nhất Trả lời: #include<conio.h> #include<iostream.h> #include<stdio.h> class coso{ public: char tensp[40]; int gia; int ns; void nhap() { cout<<" Ten san pham: "; cin.ignore(1); gets(tensp); cout<<"Don gia:"; cin>> gia; cout <<"Nam san xuat: "; cin>>ns; } void xuat(){ cout<<"Ten san pham: "; cout<<tensp; cout<<"Don gia:"; cout<<gia; cout <<"Nam san xuat: "; cout<<ns; } }; class hoadon: public coso{ public: int soluong; int giaban; void nhap(){ coso::nhap(); cout<<"So luong :" ;cin>>soluong; cout<<"Gia ban:";cin>>giaban; } void xuat(){ coso::xuat(); cout<<"So luong "<<soluong; cout<<"Gia ban:"<<giaban<<tien()<<lai()<<thue(); } int tien(){ return (soluong*giaban*1,1); } int lai(){ return((giaban-gia)*soluong); } int thue() { return(soluong*giaban*0.1); } }; main() { hoadon a[1000]; int i,n; cout<<"Nhap so hoa don vao:"; cin>>n; for(i=0;i<n;i++) { cout<<"Hoadon thu "<<i+1; a[i].nhap(); } cout<<"Thong tin hoa vua nhap:"; for(i=0;i<n;i++) { cout<<"hoa don thu "<<i+1; a[i].xuat(); } for(i=0;i<n;i++) for(int j=i+1;j<n-1;j++) if (a[i].lai()>a[j].lai()) { hoadon tg=a[i]; a[i]=a[j]; a[j]=tg; } cout<<"Damh sach lai giam dan" ; for(i=0;i<n;i++) a[i].xuat(); for(i=0;i<n;i++) { cout<<"STT:"<<i+1; cout<<"Ten: "; cout<<a[i].tensp; cout<<"Gia: "; cout<<a[i].gia; cout<<"So luong: "; cout<<a[i].soluong; cout<<"Gia ban: "; cout<<a[i].giaban; cout<<"Thanh tien: "; cout<<a[i].tien(); cout<<"Lai: "; cout<<a[i].lai(); cout<<"Thue: "; cout<<a[i].thue()<<" "; } cout<<"Tong tien hoa don sn pham: "; int Tong =0; for(i=0;i<n;i++) Tong=Tong+ a[i].tien(); cout<< Tong; int max=a[0].tien(); for(i=0;i<n;i++) if (a[i].thue()>max) max=a[i].thue(); cout<<"Danh sach san pham dong thue cao nhat la: "; for(i=0;i<n;i++) if(a[i].thue()== max) a[i].xuat(); } 3đ Câu 15. Xây dựng chương trình minh họa việc quản lý kết quả thi của một lớp không quá 100 sinh viên. Chương trình gồm 4 lớp: o Lớp cơ sở sinh viên (sinhvien) chỉ lưu họ tên và số báo danh, các phương thức nhập, xuất dữ liệu. o Lớp điểm thi (diemthi) kế thừa lớp sinh viên và lưu kết quả môn thi 1 và môn thi 2, các phương thức nhập, xuất dữ liệu. o Lớp ưu tiên (uutien) lưu điểm ưu tiên của sinh viên, phương thức nhập, xuất dữ liệu. o Lớp kết quả (ketqua) lưu tổng số điểm đạt được của sinh viên, phương thức xuất dữ liệu, phương thức hoán vị 2 sinh viên, sắp xếp danh sách sinh viên theo tổng điểm giảm dần. - Xây dựng hàm main để kiểm tra. Trả lời: #include<conio.h> #include<iostream.h> #include<stdio.h> class sinhvien { public: char ht[40]; char SBD[20]; void nhap() { cout<<" Ten sinh vien :"; gets(ht); cout<<"So bao danh :"; gets(SBD); } void xuat() { cout<<" Ten sinh vien :"<<ht; cout<<" So bao danh :"<<SBD; } }; class diemthi:public sinhvien { public: float mon1,mon2; void nhap() { sinhvien::nhap(); cout<<"Mon thi 1 : ";cin>>mon1; cout<<"Mon thi 2 : ";cin>>mon2; } void xuat() { sinhvien::xuat(); cout<<" Mon thi 1 : "<<mon1; cout<<" Mon thi 2 : "<<mon2; } }; class uutien { public: float diemuu; void nhap() { cout<<"Diem uu tien : "; cin>>diemuu; } void xuat() { cout<<" Diem uu tien : "; cout<<diemuu; } }; class ketqua:public diemthi,public uutien { public: int x,t; void nhap() { diemthi::nhap(); uutien::nhap(); } void xuat() { diemthi::xuat(); uutien::xuat(); } float tongdiem() { return(mon1+mon2+diemuu); } }; main() { ketqua a[100]; int i,j,n,t,x; cout<<"Nhap so sinh vien vao: "; cin>>n; for(i=0;i<n;i++) { cout<<" Thong tin sinh vien thu "<<i+1; a[i].nhap(); } cout<<" Thong tin sinh vien vua nhap:"; for(i=0;i<n;i++) { cout<<" Sinh vien thu "<<i+1; a[i].xuat(); } cout<<" Nhap vi tri hai sinh vien can doi cho"; cin>>t;cin>>x; //bat dau doi cho x & t ketqua tg=a[t]; a[t]=a[x]; a[x]=a[t]; // Ket thuc doi cho x & t for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if (a[i].tongdiem()<a[j].tongdiem()) { ketqua tg=a[i]; a[i]=a[j]; a[j]=tg; } cout<<" Danh sach tong diem giam dan "; for(i=0;i<n;i++) a[i].xuat(); cout<<" "; } 3đ Câu 16. Lập chương trình thực hiện các công việc sau: - Tạo một lớp Point với dữ liệu kiểu nguyên để biểu diễn toạ độ của một điểm. o Xây dựng một constructor để tạo đối tượng, constructor sử dụng các tham số có giá trị ngầm định. o Xây dựng hàm thành phần public display() để thực hiện in điểm ra màn hình. o Xây dựng hàm di chuyển điểm đến một toạ độ mới. o Tạo lớp ColorPoint kế thừa lớp Point với dữ liệu kiểu nguyên để chỉ màu của điểm. o Xây dựng hàm thành phần public để thực hiện in điểm có màu ra màn hình o Xây dựng chồng toán tử operator - để lấy điểm đối xứng qua gốc toạ độ. Xây dựng hàm main để kiểm tra lớp đã tạo. Trả lời: #include<iostream.h> class point{ public: int x,y; // dung contractor point( int x1=0,int y1=0) { x=x1; y=y1; } void xuat() { cout <<x<<y; } void dichuyen(){ int a,b; cout << "nhap toa do can di chuyen"; cin>>a>>b; cout<<x+a<<y+b; } }; class colorpoint: public point{ public: int chimau; colorpoint( int x1,int y1,int chimau1): point(x1,y1) { chimau=chimau1; } void xuat(){ point::xuat(); cout <<chimau; } //co the dung friend friend colorpoint operator -(colorpoint a){ colorpoint b(2,3,1); b.x=-a.x; b.y=-a.y; b.chimau=a.chimau; return b; } }; main() { colorpoint d(2,3,1); d.xuat(); d.dichuyen(); /*neu dung friend thi chi can viet */ d=-d; /*d.x=-d.x; d.y=-d.y;*/ d.xuat(); } 3đ Câu 17. Trong một trường Đại học cần quản lý cán bộ và giảng viên. Cán bộ gồm các thông tin: Mã cán bộ, mã đơn vị, năm sinh, hệ số lương, phụ cấp ăn ca, bảo hiểm. Giảng viên cần bổ sung thêm các thông tin: phụ cấp đứng lớp =25% lương cơ bản và phụ cấp độc hại (nếu có) = 10% lương cơ bản. Hãy lập chương trình quản lý cán bộ và giảng viên sao cho kế thừa được các dữ liệu dùng chung thực hiện tính lương cho cán bộ và giảng viên tương ứng, in ra danh sách cán bộ và giảng viên phải đóng thuế thu nhập (lương thực lĩnh>5000000). Trả lời: #include<iostream.h> #include<stdio.h> class canbo{ char mcb[20],madv[20]; int ns; float hsl,bh,pcac; public: void nhap(){ cout<<"nhap ma can bo"; gets(mcb); cout<<"nhap ma don vi"; gets(madv); cout<<" nam sinh"; cin>>ns; cout<<"nhap phu cap ac, bao hiem, he so luong"; cin>>pcac>>bh>>hsl;} void xuat(){ cout<<mcb<<madv<<ns<<hsl<<pcac<<bh<<luong(); } float luong(){ return hsl*830+pcac-bh; } }; class gv:public canbo{ float pcdl,pcdh; public: void nhap(){ canbo::nhap(); cout<<"nhap pcdl,pcdh"; cin>>pcdl>>pcdh; } void xuat(){ canbo::xuat(); cout<<pcdl<<pcdh<<ltl()<<pcdunglop()<<pcdochai(); } float ltl(){ return luong()+pcdh+pcdl; } float pcdunglop(){ return 0.25*luong(); } float pcdochai(){ return 0.1*luong(); } }; main(){ canbo a[100]; gv b[100]; int m,n,i,j; cout<<"nhap so can bo"; cin>>n; for(i=1;i<=n;i++) a[i].nhap(); for(i=1;i<=n;i++) a[i].xuat(); cout<<"nhap so giang vien"; cin>>m; for(j=1;j<=m;j++) b[j].nhap(); for(j=1;j<=m;j++) b[j].xuat(); cout<<"luong thuc linh cua giang vien"; for(j=1; j<=n; j++) if(a[j].luong()>5000000); a[j].xuat(); } 3đ Câu 18. Lập chương trình thực hiện việc nhập vào một dãy điểm, tìm tam giác có diện tích lớn nhất với các đỉnh là giá trị các đỉnh đã nhập. Yêu cầu: - Tạo lớp DIEM gồm các thuộc tính: x, y kiểu số thực là tọa độ của điểm, các phương thức: o Nhập tọa độ một điểm o Hiển thị tọa độ một điểm o Tính độ dài qua 2 điểm - Tạo lớp TAMGIAC gồm các thuộc tính là 3 điểm, các phương thức: o Nhập tọa độ 3 đỉnh o Hiển thị tọa độ 3 đỉnh o Tính diện tích tam giác - Viết chương trình chính để kiểm tra các lớp đã tạo Trả lời: #include<iostream.h> #include<stdio.h> #include<math.h> class diem{ float h,t; public: void nhap(){ cout<<" nhap hoanh do :"; cin>>h; cout<<" nhap tung do:"; cin>>t; } void xuat(){ cout<<h<<t; } float dodai(diem a, diem b) { return sqrt((a.h-b.h)*(a.h-b.h))+((a.t-b.t)*(a.t-b.t)); } }; class tg:public diem{ public: diem a,b,c; void nhap(){ a.nhap(); b.nhap(); c.nhap(); } void xuat(){ a.xuat(); b.xuat(); c.xuat(); cout<<dt(); } float dt(){ float d1=dodai(a,b); float d2=dodai(a,c); float d3=dodai(b,c); float p=(d1+d2+d3)/3; return (sqrt(p*(p-d1)*(p-d2)*(p-d3))); } }; main(){ tg a[100]; int i,n; cout<<" nhap so luong:"; cin>>n; for (i=1;i<=n;i++) a[i].nhap(); for (i=1;i<=n;i++) a[i].xuat(); cout<<" tam giac co dien tich lon nhat:"; float max=a[1].dt(); for (i=1;i<=n;i++) if(max<a[i].dt()) max=a[i].dt(); for (i=1;i<=n;i++) if (a[i].dt()==max) { cout<<" "; a[i].xuat(); } } 3đ Câu 19. Lập chương trình thực hiện các việc sau: - Tạo một lớp nhân viên với các dữ liệu gồm: Tên nhân viên, Đơn vị, Hệ số lương, Lương tối thiểu với các phương thức sau: o Nhập dữ liệu o Tính lương theo công thức: Lương chính = Lương tối thiểu * Hệ số lương. - Hiện tại có nhu cầu tính lương mới theo cách sau: o Kỹ sư: Lương mới = Lương chính + Số năm trong nghề * Phụ cấp chuyên môn o Cán bộ quản lý: Lương mới = Lương chính + Số ngày làm trong tháng * Phụ cấp trách nhiệm o Các nhân viên khác vẫn tính lương theo cách tính như trước Hãy thiết kế chương trình thực hiện việc tính lương mới cho các nhân viên bằng phương pháp kế thừa chương trình đã có trước Trả lời: #include<iostream.h> #include<stdio.h> class nv { public: char tnv[20]; char dv[10]; float hsl,ltt; void nhap(){ cout <<" nhap ten nhan vien"; cin.ignore(1); gets(tnv); cout<<" nhap don vi:"; cin.ignore(1); gets (dv); cout<<" nhap he so luong"; cin>>hsl; cout<<" nhap luong toi thieu:"; cin>>ltt; } float luongchinh(){ return ltt*hsl; } void xuat(){ cout<<tnv<<" "<<dv<<" "<<hsl<<" "<<ltt<<luongchinh(); } }; class ks:public nv{ int sn; public: void nhap(){ nv::nhap(); cout<<" nhap so nam"; cin>>sn; } float lm(){ return ltt*hsl+sn*hsl; } void xuat(){ nv::xuat(); cout<<sn<<lm()<<" "; } }; class cb :public nv{ int sng,pc1; public: void nhap(){ nv::nhap(); cout<<" nhap so ngay lam trong thnag :"; cin>>sng; cout<<" nhap phu cap trach nhiem"; cin>>pc1; } float lm1(){ return ltt*hsl+sng*pc1; } void xuat(){ nv::xuat(); cout<<sng<<pc1<<lm1()<<" "; } }; main(){ ks a[20]; cb b[25]; int m,n,i,j; cout<<" nhap so ky su"; cin>>n; for (i=1;i<=n;i++) a[i].nhap(); for(i=1;i<=n;i++) a[i].xuat(); cout<<" nhap so can bo"; cin>>m; for (j=1;j<=m;j++) b[j].nhap(); for (j=1;j<=m;j++) b[j].xuat(); } 3đ Câu 20. Một nhà xuất bản nhận xuất bản sách. Sách có hai loại: loại có hình ảnh ở trang bìa và loại không có hình ảnh ở trang bìa. Loại có hình ảnh ở trang bìa thì phải thuê họa sĩ vẽ bìa. - Viết chương trình thực hiện các yêu cầu : o Tạo một lớp cơ sở có tên là SACHđể lưu thông tin về tên sách, tác giả, số trang, giá bán và định nghĩa hàm thành phần cho phép nhập dữ liệu, in dữ liệu cho các đối tượng của lớp SACH. o Tạo lớp BIA kế thừa từ lớp SACH để lưu các thông tin : Mã hình ảnh, tiền vẽ và định nghĩa hàm thành phần cho phép nhập, in dữ liệu cho các đối tượng của lớp BIA. o Tạo lớp HOASY để lưu các thông tin họ tên, địa chỉ của họa sỹ và định nghĩa hàm thành phần cho phép nhập, in dữ liệu cho các đối tượng của lớp HOASY. o Tạo lớp SACHVEBIA kế thừa từ lớp BIA và lớp HOASY và định nghĩa hàm thành phần cho phép nhập, in dữ liệu cho các đối tượng của lớp SACHVEBIA. - Viết hàm main() cho phép nhập vào hai danh sách: danh sách các sách có vẽ bìa và danh sách các sách không có vẽ bìa (có thể dùng mảng tĩnh hoặc mảng con trỏ) để thực hiện, xuất dữ liệu ra màn hình. Trả lời: #include<iostream.h> #include<stdio.h> class sinhvien { char ten[30]; char sbd[10]; public: void nhap() { cout<<"nhap ho ten:"; gets(ten); cout<<"nhap so bao danh:"; gets(sbd); } void xuat() { cout<<ten<<sbd; } }; class diemthi:public sinhvien { public: float mt1, mt2; void nhap() { sinhvien::nhap(); cout<<" nhap ket qua mon thi 1,2:"; cin>>mt1>>mt2; } void xuat() { sinhvien::xuat(); cout<<mt1<<mt2; } }; class uutien { public: float ut; void nhap1() { cout<<"nhap diem uu tien:"; cin>>ut; } void xuat1() { cout<<ut; } }; class ketqua:public diemthi, public uutien { public: void nhap() { diemthi::nhap(); uutien::nhap1(); } float tong() { return mt1+mt2+ut; } void xuat() { diemthi::xuat(); uutien::xuat1(); cout<<tong(); } }; main() { ketqua a[100]; int n,i,j; cout<<"so luong:"; cin>>n; for (i=1;i<=n;i++) a[i].nhap(); for (i=1;i<=n;i++) for (j=i+1;j<=n;j++) { ketqua tg=a[i]; a[i]=a[j]; a[j]=tg; } for (i=1;i<=n;i++) for (j=i+1;j<=n;j++) if(a[i].tong()<a[j].tong()) { ketqua tg=a[i]; a[i]=a[j]; a[j]=tg; } for (i=1;i<=n;i++) a[i].xuat(); } 3đ Câu 21. Lập chương trình sử dụng khuôn hình hàm để tìm giá trị nhỏ nhất của dãy số bất kỳ. Trả lời: #include<iostream.h> template <class T> T nn(T a[], int n) { T min=a[1]; for(int i=1; i<=n;i++) if(a[i]<min) min=a[i]; return min; } main() { int c[100]; float b[100]; int m,k,i; cout<<"nhap so phan tu nguyen:"; cin>>k; for(int i=1; i<=k;i++) cin>>c[i]; cout<<"Gia tri nho nhat cua mang nguyen la:"<<nn(c,k); cout<<" nhap so phan tu thuc:"; cin>>m; for(int i=1; i<=m;i++) cin>>b[i]; cout<<"Gia tri nho nhat cua mang thuc la:"<<nn(b,m); } 3đ Câu 22. Lập chương trình sử dụng khuôn hình hàm để tìm giá trị lớn nhất của dãy bất kỳ. Trả lời: #include<iostream.h> template <class T> T ln(T a[], int n) { T max=a[1]; for(int i=1; i<=n;i++) if(a[i]>max) max=a[i]; return max; } main() { int c[100]; float b[100]; int m,k,i; cout<<"nhap so phan tu nguyen:"; cin>>k; for(int i=1; i<=k;i++) cin>>c[i]; cout<<"Gia tri lon nhat cua mang nguyen la:"<<ln(c,k); cout<<" nhap so phan tu thuc:"; cin>>m; for(int i=1; i<=m;i++) cin>>b[i]; cout<<"Gia tri lon nhat cua mang thuc la:"<<ln(b,m); } 3đ Câu 23. Lập chương trình sử dụng khuôn hình hàm để sắp xếp kiểu dữ liệu bất kỳ theo chiều giảm dần. Trả lời: #include<iostream.h> template <class T> T sx(T a[100], int n) { for(int i=1; i<=n-1;i++) for(int j=i+1; j<=n;j++) if(a[i]<a[j]) { T tg=a[i]; a[i]=a[j]; a[j]=tg; } } template <class T> void xuat(T a[100], int n){ for(int i=1;i<=n;i++) cout<<a[i];} main() { int b[100]; float c[100]; int m,k,i; cout<<"nhap so phan tu nguyen:"; cin>>m; for(int i=1;i<=m;i++) cin>>b[i]; cout<<"Day nguyen sau khi sap xep:"; sx(b,m); xuat(b,m); cout<<" nhap so phan tu thuc:"; cin>>k; for(int i=1;i<=k;i++) cin>>c[i]; cout<<"Day thuc sau khi sap xep:"; sx(c,k); xuat(c,k); } 3đ Câu 24. Lập chương trình sử dụng khuôn hình hàm để sắp xếp kiểu dữ liệu bất kỳ theo chiều tăng dần. Trả lời: #include<iostream.h> #include<stdio.h> template<class T> void nhap(T a[100], int n) { for(int i = 1; i <= n; i++) { cout << "nhap phan tu thu " << i << ":"; cin >> a[i]; } } template<class T> void xuat(T a[100],int n) { for(int i = 1; i <= n; i++) cout<<a[i]; } template<class T> void sx(T a[100], int n) { for(int i=1;i<=n-1;i++) for(int j=i+1;j<=n;j++) { if(a[i]>a[j]) { T tg=a[i]; a[i]=a[j]; a[j]=tg; } } } main() { int a[100]; float b[100]; int n,m; cout<<"nhap so luong phan tu mang nguyen:"; cin>>n; nhap(a,n); cout<<"mang da sap xep:"; sx(a,n); xuat(a,n); cout<<"nhap so luong phan tu mang thuc:"; cin>>m; nhap(b,m); cout<<"mang da sap xep:"; sx(b,m); xuat(b,m); } 3đ Câu 25. Lập chương trình sử dụng khuôn hình hàm để trả về giá trị trung bình của một mảng, các tham số hình thức của hàm này là tên mảng, kích thước mảng. Trả lời: #include<iostream.h> template <class t> float tb (t a[100],int n) { t s=0; for(int i=1;i<=n;i++) s=s+a[i]; return (s/n); } main(){ int a[100]; float b[100]; int n,i; cout<<"nhap so luong pt nguyen:";cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++) cout<<a[i]; cout<<"Trung binh mang nguyen la:"<<tb(a,n); cout<<"nhap so luong pt thuc:";cin>>n; for(int i=1;i<=n;i++) cin>>b[i]; for(int i=1;i<=n;i++) cout<<b[i]; cout<<"Trung binh mang thuc la:"<<tb(b,n); } 3đ Câu 26. Lập chương trình xây dựng khuôn hình cho hàm tìm giá trị nhỏ nhất của hai số. Trả lời: #include<iostream.h> template <class t> t min (t a,t b) { if (a>b) return b; else return a; } main(){ int a,b; float c,d; cout<<"nhap so nguyen a:";cin>>a; cout<<"nhap so nguyen b:";cin>>b; cout<<"Min 2 so la:"<<min(a,b); cout<<"nhap so thuc c:";cin>>c; cout<<"nhap so thuc d:";cin>>d; cout<<"Min 2 so la:"<<min(c,d); } 3đ Câu 27. Lập chương trình sử dụng khuôn hình hàm để tìm số lớn nhất của hai số bất kỳ. Trả lời: #include<iostream.h> template <class t> t min (t a,t b) { if (a>b) return a; else return b; } main(){ int a,b; float c,d; cout<<"nhap so nguyen a:";cin>>a; cout<<"nhap so nguyen b:";cin>>b; cout<<"Max 2 so la:"<<min(a,b); cout<<"nhap so thuc c:";cin>>c; cout<<"nhap so thuc d:";cin>>d; cout<<"Max 2 so la:"<<min(c,d); } 3đ Câu 28. Lập chương trình xây dựng khuôn hình lớp cho lớp điểm trong không gian 2 chiều. Yêu cầu xây dựng constructor để tạo đối tượng và phương thức xuất điểm ra màn hình. Trả lời: #include<iostream.h> template <class t> class diem { t x,y; public: diem ( t x1=0 ,t y1=0) { x=x1; y=y1; } void xuat() { cout <<x<<y; } }; main() { diem <int> a(2,1); a.xuat(); diem <float> b(2.3,1.2); b.xuat(); } 3đ Câu 29. Xây dựng khuôn hình lớp tam giác có thuộc tính là độ dài ba cạnh, các phương thức: Constructor tạo đối tượng, hàm xuất dữ liệu. Trả lời: #include<iostream.h> template <class t> class tamgiac { t x,y,z; public: tamgiac( t x1=0 ,t y1=0,t z1=0) { x=x1; y=y1; z=z1 ; } void xuat() { cout <<x<<y<<z; } }; main() { tamgiac <int> a(2,1,5); a.xuat(); tamgiac <float> b(2.3,1.2,7); b.xuat(); } 3đ Câu 30. Lập chương trình sử dụng khuôn hình hàm để nhập vào một dãy số, xuất dãy số và tính trung bình cộng các phần tử của dãy số đó. Trả lời: #include<iostream.h> template <class T> void nhap(T a[100], int n) { for(int i = 1; i <= n; i++) { cout << "nhap phan tu thu " << i << ":"; cin >> a[i]; } } template<class T> void xuat(T a[100],int n) { for(int i = 1; i <= n; i++) cout<<a[i]; } template<class T> float tb(T a[100], int n) { T s; for(int i=1;i<=n;i++) s=s+a[i]; return s/n; } main() { int a[100]; float b[100]; int n; cout<<"nhap so luong pt nguyen:"; cin>>n; nhap(a,n); xuat(a,n); cout<<tb(a,n); cout<<"nhap so luong pt thuc:"; cin>>n; nhap(b,n); xuat(b,n); cout<<tb(b,n); } 2đ Câu 31. LËp ch¬ng tr×nh nhËp danh s¸ch n thÝ sinh tõ bµn phÝm vµ ghi lªn tÖp. Th«ng tin thÝ sinh gåm: Hä tªn, ®Þa chØ, sè b¸o danh, c¸c ®iÓm to¸n, lý, ho¸. Trả lời: 2đ Câu 32. LËp ch¬ng tr×nh ®äc d÷ liÖu thÝ sinh gåm hä tªn, ®iÓm thi, ®Þa chØ tõ tÖp DS.DL ®· cã s½n và in ra mµn h×nh. 2đ Câu 33. LËp ch¬ng tr×nh ®äc d÷ liÖu thÝ sinh tõ tÖp DS1.DL, s¾p xÕp theo chiÒu t¨ng dÇn cña tæng ®iÓm vµ ghi lªn tÖp DS2.DL. Th«ng tin thÝ sinh gåm: Hä tªn, ®Þa chØ, sè b¸o danh, c¸c ®iÓm to¸n lý ho¸. 2đ Câu 34. Lập chương trình thay thế tất cả các chuỗi “XXX” trong 1 file text thành các chỉ số đếm tăng dần theo khuôn dạng 001, 002,… 2đ Câu 35. LËp ch¬ng tr×nh sö dông ph¬ng thøc istream& cin.get ®Ó nhËp vµo mét chuçi ký tù, in ra mµn h×nh chuçi ®· nhËp. Câu 36. Lập chương trình sao chép tệp từ tệp nguồn sang tệp đích. Câu 37. LËp ch−¬ng tr×nh sao tÖp sö dông c¸c ph−¬ng thøc write, read vµ gcount. Câu 38. Lập chương trình đọc dữ liệu thí sinh gồm các thông tin: họ tên, số báo danh, tổng điểm thi từ tệp TS.DL, tìm ra những thí sinh có điểm thi >=16 và ghi vào tệp TT.DL. 2đ Câu 39. Lập chương trình x¸c ®Þnh ®é dµi (sè byte) cña tÖp TC.EXE (dïng kiÓu ®äc nhÞ ph©n). 2đ Câu 40. Lập chương trình đọc dữ liệu điểm sinh viên từ tệp DS1.DL, thông tin sinh viên gồm: họ tên, lớp, điểm thi. Bổ sung thêm một sinh viên vào danh sách và ghi lên tệp DS2.DL.
Bạn đang đọc truyện trên: AzTruyen.Top