Hienthi(z); getch();
}
Ví dụ 1.15: viết chương trình khai báo cấu trúc đa thức bậc n, viết các hàm và hàm toán tử thực hiện các công việc sau:
a. Nhập vào bậc và các hệ số cđa đa thức
b. Hiển thị đa thức ra màn hình
c. Tính giá trị cđa đa thức tại x = a, a là một số thực nhập từ bàn phím
d. Tính tổng hai đa thức
e. Tính hiệu hai đa thức
f. Tính tích hai đa thức
#include<iostream.h>
Có thể bạn quan tâm!
- Lập trình hướng đối tượng - 1
- Lập trình hướng đối tượng - 2
- Truyền Giá Trị Cho Hàm Theo Biến Tham Chiếu
- Lập trình hướng đối tượng - 5
- Lập trình hướng đối tượng - 6
- Lớp Không Có Hàm Tạo Và Hàm Tạo Mặc Định
Xem toàn bộ 256 trang tài liệu này.
#include<conio.h>
#include<math.h>
#define max 100 struct dathuc
{
int bac;
float heso[max];
};
void nhap(dathuc &p)
{
cout<<"Bac cua da thuc:"; cin>>p.bac;
for(int i=0;i<=p.bac;i++)
{
cout<<"he so thu "<<i<<":"; cin>>p.heso[i];
}
}
void hienthi(dathuc p)
{
for(int i=p.bac;i>0;i--)
{
cout<<p.heso[i]<<"x^"<<i;
if(p.heso[i-1]>=0) cout<<"+";
}
cout<<p.heso[0];
}
float giatri(dathuc p,float a)
{
float t=0;
for(int i=0;i<=p.bac;i++) t = t + p.heso[i]*pow(a,i); return t;
}
dathuc operator+(dathuc p, dathuc q)
{
dathuc kq; if(p.bac > q.bac)
{
}
else
{
}
kq.bac = p.bac;
for(int i=0;i<=q.bac;i++) kq.heso[i]= p.heso[i]+q.heso[i]; for(int j=q.bac+1;j<=p.bac;j++) kq.heso[j]=p.heso[j];
kq.bac = q.bac;
for(int i=0;i<=p.bac;i++) kq.heso[i]= q.heso[i]+p.heso[i]; for(int j=p.bac+1;j<=q.bac;j++) kq.heso[j]=q.heso[j];
while((kq.heso[kq.bac]==0) && (kq.bac>=0)) kq.bac=kq.bac-1;
return kq;
}
dathuc operator-(dathuc p, dathuc q)
{
dathuc kq; if(p.bac > q.bac)
{
}
else
{
}
kq.bac = p.bac;
for(int i=0;i<=q.bac;i++) kq.heso[i]= p.heso[i]-q.heso[i]; for(int j=q.bac+1;j<=p.bac;j++) kq.heso[j]=p.heso[j];
kq.bac = q.bac;//xac dinh bac cua kq for(int i=0;i<=p.bac;i++) kq.heso[i]= q.heso[i]-p.heso[i]; for(int j=p.bac+1;j<=q.bac;j++) kq.heso[j]=-q.heso[j];
while((kq.heso[kq.bac]==0) && (kq.bac>=0)) kq.bac=kq.bac-1;
return kq;
}
dathuc operator*(dathuc p,dathuc q)
{
dathuc kq; kq.bac=p.bac+q.bac;
for(int i=0;i<=kq.bac;i++) kq.heso[i]=0; for(i=0;i<=p.bac;i++)
for(int j=0;j<=q.bac;j++) kq.heso[i+j]+=p.heso[i]*q.heso[j];
return kq;
}
void main()
{
dathuc p,q,r;
nhap(p);
cout<<"Da thuc vua nhap:"; hienthi(p);
cout<<"n"; nhap(q);
cout<<"Da thuc vua nhap:"; hienthi(q);
r=p+q;
cout<<"nTong hai da thuc:"; hienthi(r);
r=p-q;
cout<<"nHieu hai da thuc:"; hienthi(r);
r=p*q;
cout<<"nTich hai da thuc:"; hienthi(r);
getch();
}
Các toán tử nhập/xuất (>>/<<) đã được định nghĩa sẵn trong các lớp đối tượng
istream và ostream trong thư viện iostream.h. Tuy nhiên, mặc định chúng được sử dụng để nhập/xuất dữ liệu kiểu chuẩn. C++ cho phép ta định nghĩa chồng các toán tử >> và << trên các kiểu dữ liệu do người lập trình tự định nghĩa. Giả sử ta khai báo kiểu cấu trúc ts- thí sinh gồm 3 trường: sbd- số báo danh, ten- họ và tên cđa thí sinh, diem- tổng điểm thi cđa thí sinh, ta có thể sử dụng toán tử >> để nhập thông tin một thí sinh và toán tử << để hiển thị thông tin về một thí sinh, như trong ví dụ sau:
Ví dụ 1.16:
#include<iostream.h>
#include<conio.h>
#include<string.h> struct ts
{
char sbd[5]; char ten[30];
unsigned int diem;
};
ostream &operator<<(ostream &os, const ts &t)
{
cout<<"nSo bao danh:"<<t.sbd; cout<<"nHo va ten:"<<t.ten; cout<<"nTong diem:"<<t.diem; return os;
}
istream &operator>>(istream &is, ts &t)
{
cout<<"So bao danh:";
is.getline(t.sbd,5);//phương thức dùng để nhập xâu ký tự cout<<"Ho va ten:";
is.getline(t.ten,30); cout<<"Tong diem:"; is>>t.diem; is.ignore();
return is;
}
void main()
{
ts ds[100]; int n,i;
cout<<"Nhap so thi sinh:"; cin>>n;
cin.ignore(1);//xoá bộ nhớ đệm bàn phím for(i=1;i<=n;i++)
{
cout<<"Nhap thong tin ve thi sinh thu "<<i<<":n"; cin>>ds[i];
}
cout<<"nDanh sach thi sinhn"; for(i=1;i<=n;i++) cout<<ds[i]<<"n"; getch();
}
Câu hỏi và Bài tập
1. Trong các khai báo con trỏ sau, những khai báo nào là đúng:
a. int A*;
b. *int A;
c. int* A, B;
d. int* A, *B;
e. int *A, *B;
2. Với khai báo: int a = 12; int *pa;
các phép gán nào sau đây là hợp lệ:
a. pa = &a;
b. pa = a;
c. *pa = &a;
d. *pa = a;
3. Với khai báo:
int A[5] = {10, 20, 30, 40, 50};
int *pa = A+2; khi đó, *pa = ?
a. 10
b. 20
c. 30
d. 40
e. 50
4. Với đoạn chương trình:
int A[5] = {10, 20, 30, 40, 50};
int *pa = A;
*pa += 2; khi đó, *pa = ?
a. 10
b. 12
c. 30
d. 32
5. Với đoạn chương trình:
int A[5] = {10, 20, 30, 40, 50};
int *pa = A; pa += 2;
khi đó, *pa = ?
a. 10
b. 12
c. 30
d. 32
6. Với đoạn chương trình:
int A[5] = {10, 20, 30, 40, 50};
int *pa = A; pa += 2;
khi đó, pa = ? a. &A[0]
b. A[2] c. &A[2]
d. Không xác định
7. Với đoạn chương trình:
int A[5] = {10, 20, 30, 40, 50};
int *pa = A; pa -= 2;
khi đó, pa = ? a. &A[0]
b. &A[2]
c. &A[4]
d. Không xác định
8. Với đoạn chương trình: int A[3][3] = {
{10, 20, 30},
{40, 50, 60},
{70, 80, 90}
};
int *pa;
khi đó, để có được kết quả *pa = 50, các lệnh nào sau đây là đúng?
a. pa = A + 4;