Professional Documents
Culture Documents
KTLT
KTLT
A. struct. Đây là một từ khóa trong C++, không thể sử dụng làm tên biến2
B. _flag
C. Count-1. Đây là một biểu thức toán học, không phải là một tên biến hợp lệ. Tên biến không được chứa ký
tự đặc biệt ngoại trừ dấu gạch dưới
D. 5th_Element. Tên biến không được bắt đầu bằng số1.
A. 5th_Element
B. struct
C. _flag
D. Count-1
A. '0x4F'.
B. 049. Đây là một số nguyên bát phân, nhưng số 9 không hợp lệ trong hệ bát phân1.
C. "04F" Đây là một chuỗi ký tự, không phải là một hằng số1.
D. 0x44
A. '0x4F'
B. "04F"
C. 0x44
D. 044
A. '0x49'
B. "049"
C. 0x49
D. 049
6.Cho biết kết quả trên màn hình sau khi thực hiện đoạn code sau:
enum { Delete = -1, Update, Insert, None };
cout << Update;
A. -1
B. 0
C. 1
D. 2
A. (char)(c + 32) Biểu thức c + 32 có kiểu int, nhưng khi ép kiểu về char, kết quả sẽ có kiểu char.
B. c + a Cả hai toán hạng đều có kiểu int, nên kết quả cũng có kiểu int.
C. a + 1.0 Toán hạng 1.0 có kiểu double, nên khi cộng với a, a sẽ được chuyển đổi thành kiểu double, nên kết
quả cũng có kiểu double.
D. c + 1 Toán hạng c có kiểu char, nhưng khi cộng với số nguyên 1, nó sẽ được chuyển đổi thành kiểu int, nên
kết quả cũng có kiểu int.
2. Giá trị của biểu thức nào không phải là kiểu số nguyên nếu khai báo
int a; char c;
A. (char)(c + 32)
B. c + a
C. a + 1.0
D. c + 1
A. z = (x > y) << 2; vì (x > y) trả về giá trị 1, và 1 << 2 là phép dịch trái 2 bit, tương đương với 4.
B. z = x++ - y--;
C. z = (x + y) > 5? x : y; vì (x + y) > 5 trả về giá trị 1, và toán tử ba ngôi ?: sẽ chọn giá trị của x, tức là 4, làm
kết quả. Do đó, z = (x + y) > 5? x : y tương đương với z = 4.
D. Không biểu thức nào
4.Nếu a = 0x76 thì biểu thức ((a & 2) == 0) cho kết quả là bao nhiêu?
A. 0 0 1 1 1 0 1 1 0 (118)
B. 1 & 0 0 0 0 0 0 1 0 (2)
C. 0x77 0 0 0 0 0 0 1 0 (2)
D. 0x74
5.Nếu a = 0x76 thì biểu thức (a ^ 2) cho kết quả là bao nhiêu?
A. 0 0 1 1 1 0 1 1 0 (118)
B. 1 ^ 0 0 0 0 0 0 1 0 (2)
C. 0x77 0 1 1 1 0 1 0 0 (116)
D. 0x74
6.Nếu a = 0x76 thì biểu thức (a | 1) cho kết quả là bao nhiêu?
A. 0 0 1 1 1 0 1 1 0 (118)
B. 1 | 0 0 0 0 0 0 0 1 (1)
C. 0x77 0 1 1 1 0 1 1 1 (119)
D. 0x74
0 1 1 1 0 1 1 1 (119)
7.Cho biểu thức:
int x = 4, y = 2, z;
Những biểu thức nào cho z bằng 4?
A. z = (y % x) << 1; Vì y là 2 và x là 4, khi thực hiện phép chia lấy dư 2 % 4, kết quả là 2. Sau đó,
phép dịch bit sang trái << 1 sẽ tạo ra giá trị là 4. Vì vậy, biểu thức này sẽ cho z bằng 4.
B. z = x++ - y--;
C. z = x > y? x : y;
D. Cả 3 biểu thức
8. Cho biết kết quả kết quả của biểu thức !!5 ?
A. 0
B. 1 !5=0, !!5=1
C. 5
D. -5
9. Để nhân đôi một số nguyên dương a, biểu thức nào có tốc độ nhanh nhất?
2.Cho biết kết quả trên màn hình khi chạy đoạn chương trình sau:
int a = 10, b = 5;
if (a = 0)
cout << "a = 0";
else
cout << b / a;
A. 0
B. a = 0
C. 0.5
D. Báo lỗi chia cho 0 (gán)
3.Cho biết giá trị của T sau khi thực hiện đoạn biểu thức dưới đây:
int T = 17;
switch (T * T % 7) {
case 1: T = 7; break;
case 2: T = 14; break;
case 4: T = 28; break;
}
A. 14
B. 28
C. 7
D. 17
4. Cho biết giá trị của T sau khi thực hiện đoạn biểu thức dưới đây:
int T = 17;
switch (T * T % 5) {
case 1: T = 7; break;
case 2: T = 14; break;
case 4: T = 28; break;
}
A. 14
B. 28
C. 17
D. 7
5. Cho biết giá trị của T sau khi thực hiện đoạn biểu thức dưới đây:
int T = 17;
switch (T * T % 14) {
case 1: T = 7; break;
case 2: T = 14; break;
case 4: T = 28; break;
}
A. 14
B. 17. Dư 9 nên ko có case nào cả T giữ nguyên
C. 28
D. 7
A. 1
B. 4
C. 8
D. 27
2. Cho biết kết quả trên màn hình sau khi thực hiện đoạn chương trình sau:
int g = 1, n = 1;
for (int i = 0; i < 4; i++, n = n * 2 + 1) g += n;
cout << g;
A. 5
B. 12
C. 27
D. 58
3. Cho biết kết quả trên màn hình sau khi thực hiện đoạn chương trình sau:
int g = 1, n = 1;
for (int i = 0; i < 5; i++, n = n * 2 + 1) g += n;
cout << g;
A. 5
B. 12
C. 27
D. 58
4. Cho biết kết quả trên màn hình sau khi thực hiện đoạn chương trình sau:
int i, j, k;
for (i = 0, k = 0; i < 2; i++)
for (j = 0; j < 3; j++, k++)
cout << k;
A. 123456
B. 012345
C. 0123456
D. 6
5. Cho biết kết quả trên màn hình sau khi thực hiện đoạn chương trình sau:
int i, j, k;
for (i = 0, k = 0; i < 2; i++)
for (j = 0; j < 3; j++, k++) ;
cout << k;
A. 123456
B. 012345
C. 0123456
D. 6
6.Cho biết kết quả trên màn hình sau khi thực hiện đoạn chương trình sau:
int i, j, k;
for (i = 0, k = 1; i < 2; i++)
for (j = 0; j < 3; j++, k++)
cout << k;
A. 123456
B. 012345
C. 0123456
D. 6
7. Cho biết kết quả trên màn hình sau khi thực hiện đoạn chương trình sau:
int i, j, k;
for (i = 0, k = 0; i < 2; i++)
for (j = 0; j < 3; j++, k++)
cout << k;
cout << k;
A. 123456
B. 012345
C. 0123456
D. 6
V. Mảng
1.Những biểu thức khai báo nào sau đây là đúng?
A. short s[]; Đây là biểu thức khai báo không hợp lệ vì không có kích thước mảng được chỉ định. Một
mảng phải có kích thước xác định.
B. int n = 3, A[n];
C. int *p = (int *)1000; Đây là biểu thức khai báo đúng. Biến con trỏ p được khởi tạo với giá trị là
con trỏ tới địa chỉ 1000. Tuy nhiên, lưu ý rằng việc sử dụng một giá trị con trỏ cố định như 1000 có
thể không an toàn và không khả thi trên mọi hệ thống.
D. double d = 1e-10; Đây là biểu thức khai báo đúng. Biến d được khởi tạo với giá trị là 1e-10,
tức là 1 nhân 10 mũ âm 10, tương đương với 0.0000000001.
2.Cho mảng int A[]={4,5,0,8,9,2,7,3,1}; nếu &A[2] = 1096 thì (A + 4) là giá trị nào?
A. 8
B. 7
C. 1102
D. 1104
3.Cho mảng short A[] = { 4, 5, 0, 3, 9, 2, 8, 7, 1 } ; nếu &A[2] = 1096 thì (A + 5) là giá trị nào?
A. 8
B. 7
C. 1102
D. 1104
A. int M[] = { 1, 2, 3 }; Mảng M được khai báo là một mảng kiểu int và được khởi tạo với giá trị { 1,
2, 3 }.
B. char s[]; Khi khai báo một mảng kiểu char, bạn cần xác định kích thước của mảng hoặc cung cấp một
chuỗi khởi tạo.
C. double D[2] = { 1, 2, 3 }; Khi khai báo một mảng kiểu double với kích thước là 2, bạn chỉ có thể khởi tạo
mảng với 2 giá trị. Trong trường hợp này, bạn cần chỉ định { 1, 2 } thay vì { 1, 2, 3 }.
D. int n = 10, A[n]; sai vì nó khai báo một mảng A kiểu int có kích thước là n nhưng n là một biến, không
phải là một hằng số. Khi khai báo một mảng, ta phải chỉ rõ số phần tử của mảng bằng một hằng số hoặc
một biểu thức hằng2.
5. Cho mảng int A[] = { 4, 5, 0, 8, 9, 2, 7, 3, 1 }; Tính giá trị của A[A[2] + A[8]] .
A. int M[]; Khi khai báo một mảng kiểu int, bạn cần xác định kích thước của mảng hoặc cung cấp một giá
trị khởi tạo.
B. char s[5]="12345"; sai vì nó khai báo một mảng s kiểu char có 5 phần tử nhưng lại gán cho nó 6 ký tự là
“12345”. Khi gán một chuỗi cho một mảng char, ta phải nhớ rằng chuỗi luôn kết thúc bằng ký tự NULL ('\
0'), nên kích thước của mảng phải lớn hơn hoặc bằng số ký tự trong chuỗi.
C. double D[] = { 1, 2, 3 }; Mảng D được khai báo là một mảng kiểu double và được khởi tạo với giá
trị { 1, 2, 3 }.
D. Cả 3 biểu thức
7. Cho biết chỉ số của phần tử cuối cùng của mảng s nếu khai báo
A. 8
B. 9
C. 10
D. 11
8. Cho biết chỉ số của phần tử cuối cùng cả mảng s nếu khai báo
A. 8
B. 9
C. 10
D. 11
9. Biểu thức nào khai báo mảng A chứa được n phần tử?
A. int A[n];
B. int A = new int[n];
C. int* A = new int[n];
D. Cả 3 biểu thức
10. Những biểu thức nào khai báo mảng A chứa được 10 phần tử?
A. int A[10];
B. int A = new int[10];
C. int* A = new int[10];
D. Cả 3 biểu thức
A. Sai cú pháp
B. Xóa con trỏ khi chưa cấp phát
C. Cấp phát mảng khi chưa xóa
D. Cấp phát động không dùng cho biến đơn
12. Chọn kết quả hiện trên màn hình sau khi thực hiện đoạn chương trình sau:
13. Chọn kết quả hiện trên màn hình sau khi thực hiện đoạn chương trình sau:
char s[] = "NgON ngu LAP trinh C++", last = 32, ch;
for (int i = 0; ch = s[i]; i++) {
if (ch >= 'a' && ch <= 'z' && last == 32) s[i] -= 32;
if (ch >= 'A' && ch <= 'Z' && last != 32) s[i] += 32;
last = ch;
}
cout << s;
15. Chọn kết quả hiện trên màn hình sau khi thực hiện đoạn chương trình sau:
A. int A[10];
B. int A = new int[10];
C. int* A = new int[10];
D. Cả 3 biểu thức
A. Sai cú pháp
B. Xóa con trỏ khi chưa cấp phát
C. Cấp phát mảng khi chưa xóa
D. Cấp phát động không dùng cho biến đơn
3. Chọn biểu thức thay cho /**/ trong đoạn biểu thức sau để khi gọi Function(), độ dài của mảng p giảm
đi 1:
A. --n
B. n - 1
C. n--
D. 1 trong 3 biểu thức
4. Chọn biểu thức thay cho /**/ trong đoạn biểu thức sau để khi gọi Function(), độ dài của mảng p tăng
lên 1:
A. n - 1
B. n
C. n + 1
D. Biểu thức khác
5.Chọn biểu thức thay cho /**/ trong đoạn biểu thức sau để khi gọi Function(int), độ dài của
mảng p bằng len:
int *p, n; // n - độ dài của mảng p
void Function(int len) {
int L = /**/, *q = new int[n = len];
for (int i = 0; i < L; i++) q[i] = p[i];
delete[] p;
p = q;
}
A. 124
B. 126
C. 137
D. 135
VII. Hàm
1.Lập trình hàm có những ưu điểm nào?
3. Bao nhiêu hàm Count được sinh ra trong đoạn chương trình sau:
A. 1
B. 2
C. 3
D. 4
4. Cho biết kiểu của biểu thức Count(2.0) + Count(3) + Count('4') nếu khai báo hàm sau:
5. Biểu thức Count(2.0) + Count(3) + Count('4') sinh ra những hàm nào nếu khai báo:
template<class T> T Count(T);
A. double Count(double)
B. int Count(int)
C. char Count(char)
D. Cả 3 hàm trên
A. 1
B. 2
C. 4
D. 8
A. Analyze(A, p)
B. Analyze(*A, *p)
C. cout << Analyze(A, &N)
D. Analyze(A, &r)
A. Analyze(*A, *p)
B. Analyze(A, &r)
C. Analyze(A, p)
D. cout << Analyze(A, &N)
9. Những biểu thức gọi hàm nào sau đây là sai nếu khai báo các hàm:
A. ToScreen((int)5.25);
B. Power(5.0, 3.0);
C. ToScreen(5, 3);
D. Cả 3 biểu thức
11. Giá trị của biểu thức Calculate(9) là bao nhiêu nếu định nghĩa:
int Calculate(int v) {
if (v == 1) return v;
return 1 + (v & 1? Calculate(v - 1): Calculate(v / 2));
}
A. 7
B. 5
C. 8
D. 4
Bước 1: Calculate(9) = 1 + (9 & 1? Calculate(9 - 1): Calculate(9 / 2)). Vì 9 là số lẻ, nên 9 & 1 bằng 1, và hàm
sẽ gọi lại chính nó với tham số là 9 - 1, tức là 8.
Bước 2: Calculate(8) = 1 + (8 & 1? Calculate(8 - 1): Calculate(8 / 2)). Vì 8 là số chẵn, nên 8 & 1 bằng 0, và
hàm sẽ gọi lại chính nó với tham số là 8 / 2, tức là 4.
Bước 3: Calculate(4) = 1 + (4 & 1? Calculate(4 - 1): Calculate(4 / 2)). Vì 4 là số chẵn, nên 4 & 1 bằng 0, và
hàm sẽ gọi lại chính nó với tham số là 4 / 2, tức là 2.
Bước 4: Calculate(2) = 1 + (2 & 1? Calculate(2 - 1): Calculate(2 / 2)). Vì 2 là số chẵn, nên 2 & 1 bằng 0, và
hàm sẽ gọi lại chính nó với tham số là 2 / 2, tức là 1.
Bước 5: Calculate(1) = 1. Đây là điểm dừng của hàm đệ quy, nên ta không cần gọi lại hàm nữa.
Bước 6: Quay ngược lại các bước trước, ta được:
Calculate(2) = 1 + Calculate(1) = 1 + 1 = 2
Calculate(4) = 1 + Calculate(2) = 1 + 2 = 3
Calculate(8) = 1 + Calculate(4) = 1 + 3 = 4
Calculate(9) = 1 + Calculate(8) = 1 + 4 = 5
12.Giá trị của biểu thức Calculate(6) là bao nhiêu nếu định nghĩa:
int Calculate(int v) {
if (v == 1) return v;
return 1 + (v & 1? Calculate(v - 1): Calculate(v / 2));
}
A. 7
B. 8
C. 4
D. 5
Bước 1: Calculate(6) = 1 + (6 & 1? Calculate(6 - 1): Calculate(6 / 2)). Vì 6 là số chẵn, nên 6 & 1 bằng 0, và
hàm sẽ gọi lại chính nó với tham số là 6 / 2, tức là 3.
Bước 2: Calculate(3) = 1 + (3 & 1? Calculate(3 - 1): Calculate(3 / 2)). Vì 3 là số lẻ, nên 3 & 1 bằng 1, và hàm
sẽ gọi lại chính nó với tham số là 3 - 1, tức là 2.
Bước 3: Calculate(2) = 1 + (2 & 1? Calculate(2 - 1): Calculate(2 / 2)). Vì 2 là số chẵn, nên 2 & 1 bằng 0, và
hàm sẽ gọi lại chính nó với tham số là 2 / 2, tức là 1.
Bước 4: Calculate(1) = 1. Đây là điểm dừng của hàm đệ quy, nên ta không cần gọi lại hàm nữa.
Bước 5: Quay ngược lại các bước trước, ta được:
Calculate(2) = 1 + Calculate(1) = 1 + 1 = 2
Calculate(3) = 1 + Calculate(2) = 1 + 2 = 3
Calculate(6) = 1 + Calculate(3) = 1 + 3 = 4
13. Giá trị của biểu thức Calculate(22) là bao nhiêu nếu định nghĩa:
int Calculate(int v) {
if (v == 1 || v == 2) return v;
return 1 + (v & 1? Calculate(v - 1): Calculate(v / 2));
}
A. 4
B. 8
C. 5
D. 7
14. Giá trị của biểu thức Calculate(28) là bao nhiêu nếu định nghĩa:
int Calculate(int v) {
if (v == 1) return v;
return 1 + (v & 1? Calculate(v - 1): Calculate(v / 2));
}
A. 4
B. 7
C. 8
D. 5
15. Cho biết kết quả của đoạn chương trình sau:
A. 31
B. 32
C. 21
D. 22
Trong câu hỏi của bạn, bạn đã định nghĩa một hàm Convert như sau:
Hàm này nhận hai tham số: a là tham chiếu đến một biến kiểu int, b là một biến kiểu int. Hàm này không
trả về giá trị, nhưng nó sẽ thay đổi giá trị của biến mà a tham chiếu đến. Hàm này sẽ gán cho a giá trị của
b sau khi tăng lên một đơn vị bằng toán tử tiền tố.
void main() {
int x = 3, y = 1;
Convert(x, y);
cout << x << y;
}
Hàm này khai báo hai biến kiểu int: x và y, với giá trị ban đầu là 3 và 1. Sau đó, hàm này gọi hàm Convert
với tham số là x và y. Khi đó, hàm Convert sẽ thực hiện như sau:
Tham chiếu a sẽ tham chiếu đến biến x, nên bất kỳ thay đổi nào đối với a sẽ ảnh hưởng đến x.
Biến b sẽ nhận giá trị của y, tức là 1.
Lệnh a = ++b; sẽ tăng giá trị của b lên một đơn vị, tức là 2, rồi gán cho a. Do đó, giá trị của x cũng sẽ bị
thay đổi thành 2.
Sau khi gọi hàm Convert, hàm main sẽ in ra giá trị của x và y bằng lệnh cout << x << y;. Lúc này, giá trị
của x là 2, giá trị của y là 1, nên kết quả in ra màn hình là 21.
16. Cho biết kết quả của đoạn chương trình sau:
A. 31
B. 32
C. 21
D. 22
17. Cho biết kết quả của đoạn chương trình sau:
A. 31
B. 32
C. 11
D. 12
void main() {
int x = 3, y = 1;
Convert(x, y);
cout << x << y;
}
Hàm này khai báo hai biến kiểu int: x và y, với giá trị ban đầu là 3 và 1. Sau đó, hàm này gọi
hàm Convert với tham số là x và y. Khi đó, hàm Convert sẽ thực hiện như sau:
Tham chiếu a sẽ tham chiếu đến biến x, nên bất kỳ thay đổi nào đối với a sẽ ảnh hưởng đến x.
Biến b sẽ nhận giá trị của y, tức là 1.
Lệnh a = b++; sẽ gán cho a giá trị của b trước khi tăng lên một đơn vị, tức là 1, rồi mới tăng giá trị
của b lên một đơn vị, tức là 2. Do đó, giá trị của x cũng sẽ bị thay đổi thành 1.
Sau khi gọi hàm Convert, hàm main sẽ in ra giá trị của x và y bằng lệnh cout << x << y;. Lúc này, giá
trị của x là 1, giá trị của y là 1, nên kết quả in ra màn hình là 11.
18. Cho biết kết quả của đoạn chương trình sau:
A. 31
B. 32
C. 11
D. 12
A. 31
B. 32
C. 21
D. 22
20. Cho biết kết quả của chương trình sau:
A. 28
B. 29
C. 30
D. 31
A. 2-1
B. 2-2
C. 1-1
D. -2-1
A. 55
B. 00
C. 50
D. 05
A. Value(int)
B. Value operator+(Value)
C. Value operator=(Value)
D. Báo lỗi vì không có toán tử cộng với tham số kiểu int
A. //1
B. //2
C. //3
D. //4
A. 05
B. 00
C. 50
D. 55
A. 50
B. 00
C. 55
D. 05
A. Complex()
B. Complex(double)
C. Complex(double, double)
D. Sai cú pháp
A. String a;
B. String b('0', 8);
C. String::Copy(s1, s2);
D. Cả 3 biểu thức trên
8. Những dòng nào sinh ra lỗi khi dịch đoạn chương trình dưới đây?
A. // 1
B. // 2
C. // 3
D. Cả 3 phương án trên
A. String a;
B. String b('0', 8);
C. String::Copy(s1, s2);
D. Cả 3 biểu thức trên
10. Cho Đoạn chương trình dưới đây gọi những hàm nào?
12. Cho biết kết quả của đoạn chương trình dưới đây?
A. 41
B. 12
C. 21
D. 14
13.Cho biết kết quả của đoạn chương trình dưới đây?
A. 14
B. 21
C. 41
D. 12
Chương 5
1. ViếtmộtlớpString đểđónggóikiểuchuỗichar* vàcácphươngthứccầnthiết:
khởitạoString, khởitạosaochépString, thayđổinộidung đốitượngString
hiệntạibằngnộidung củamộtđốitượngString khác, ghépnộidung mộtđốitượngString
khácvàosauđốitượngString hiệntại.
2. ViếtlớpFraction (phânsố) vớinhữngphươngthức: khởitạo, khởitạosaochép,
cácphươngthứcthựchiệnphépcộng/ trừ/ nhân/ chia với1 phânsốkhác.
3. ViếtlớpSquare vàlớpRectangular (làlớpbạncủalớpSquare).
Viếtphươngthứckhởitạo, khởitạosaochép, phươngthứctínhdiệntích, tínhchuvi của2
lớp.
4. ViếtlớpVector 3 thànhphầnvớinhữngphươngthứccầnthiết: khởitạo,
khởitạosaochép, cộng/trừvector, nhânvới1 hằngsố, nhânvôhướng2 vector,
đếmsốVector hiệncó.
Câu 1:
#include <cstring>
class String {
private:
char* content;
int length;
public:
Câu 2
class Fraction {
private:
int numerator;
int denominator;
public:
Fraction(int num = 0, int den = 1) : numerator(num), denominator(den) {}
Câu 3:
#include <iostream>
class Square {
private:
double side;
public:
Square(double s) : side(s) {}
class Rectangular {
private:
double width;
double height;
public:
Rectangular(double w, double h) : width(w), height(h) {}
int main() {
Square square(5);
std::cout << "Area of square: " << square.getArea() << std::endl;
std::cout << "Perimeter of square: " << square.getPerimeter() << std::endl;
return 0;
}
Câu 4:
#include <iostream>
class Vector3 {
private:
double x;
double y;
double z;
public:
Vector3(double xVal = 0.0, double yVal = 0.0, double zVal = 0.0) : x(xVal),
y(yVal), z(zVal) {}
int main() {
Vector3 v1(1.0, 2.0, 3.0);
Vector3 v2(4.0, 5.0, 6.0);
Vector3 v3 = v1.add(v2);
std::cout << "Result of addition: (" << v3.getX() << ", " << v3.getY() << ",
" << v3.getZ() << ")" << std::endl;
Vector3 v4 = v2.subtract(v1);
std::cout << "Result of subtraction: (" << v4.getX() << ", " << v4.getY() <<
", " << v4.getZ() << ")" << std::endl;
Vector3 v5 = v1.multiply(2.5);
std::cout << "Result of scalar multiplication: (" << v5.getX() << ", " <<
v5.getY() << ", " << v5.getZ() << ")" << std::endl;
return 0;
}
Chương 6
1.ViếtcáclớpShape (lớptrừutượng) vàcáclớpcon Circle, Square, Rectangle, Ellipse, Sphere.
Hãythiếtkếviệckếthừasaochohợplý. Viếtcáchàmảotínhdiệntíchhình.
2. MộtCompany cónhânviêngồmDirector, Manager, vàWorker. Mỗinhânviêncótên,
mứclươngkhácnhau. Viếtchươngtrìnhthựchiệnviệcthêmnhânviên, in thôngtin nhânviên,
xóatoànbộnhânviên.
#include <iostream>
class Shape {
public:
virtual double getArea() const = 0;
};
public:
Circle(double r) : radius(r) {}
public:
Square(double s) : side(s) {}
public:
Ellipse(double major, double minor) : majorAxis(major), minorAxis(minor) {}
public:
Sphere(double r) : radius(r) {}
int main() {
Circle circle(5);
std::cout << "Area of circle: " << circle.getArea() << std::endl;
Square square(4);
std::cout << "Area of square: " << square.getArea() << std::endl;
return 0;
}
Câu 2:
#include <iostream>
#include <vector>
class Employee {
protected:
std::string name;
double salary;
public:
Employee(const std::string& n, double s) : name(n), salary(s) {}
virtual ~Employee() {}
};
class Company {
private:
std::vector<Employee*> employees;
public:
void addEmployee(Employee* employee) {
employees.push_back(employee);
}
void removeAllEmployees() {
for (auto& employee : employees) {
delete employee;
}
employees.clear();
}
~Company() {
removeAllEmployees();
}
};
int main() {
Company company;
company.removeAllEmployees();
return 0;
}
Đề 2022-1
int find_first(char* s, char c) {
for (int i = 0; char cur = s[i]; i++)
if (cur == c) return i;
return -1;
}
int find_last(char* s, char c) {
int pos = -1;
for (int i = 0; char cur = s[i]; i++)
if (cur == c) pos = i;
return pos;
}
char* to_lower(char* s) {
for (int i = 0; char c = s[i]; i++)
if (c >= 'A' && 'Z' >= c) s[i] = c + 32;
return s;
}
char* to_upper(char* s) {
for (int i = 0; char c = s[i]; i++)
if (c >= 'a' && 'z' >= c) s[i] = c - 32;
return s;
}
char* replace(char* s, char old_char, char new_char) {
for (int i = 0; char c = s[i]; i++)
if (c == old_char) s[i] = new_char;
return s;
}
char* remove(char* s, char c) {
char* p = s;
for (int i = 0; char cur = s[i]; i++)
if (cur != c) *p++ = cur;
*p = 0;
return s;
}
class Pixel {
public:
int R, G, B;
public:
Pixel(int r = 0, int g = 0, int b = 0) : R(r), G(g), B(b) {}
class Image {
public:
Pixel Data[32][32];
public:
void Range(int& minScale, int& maxScale) {
maxScale = 0;
minScale = 255;
Image& ToGray() {
for (int i = 0; i < 32; i++) {
for (int j = 0; j < 32; j++) {
int g = Data[i][j].get_gray_scale();
Data[i][j] = Pixel(g, g, g);
}
}
return *this;
}
};
class Point {
public:
double X, Y;
public:
Point(double x = 0, double y = 0) : X(x), Y(y) { }
class Move {
public:
Point Data[100];
public:
void Bound(double& minX, double& minY, double& maxX, double& maxY) {
minX = maxX = Data[0].X;
minY = maxY = Data[0].Y;
LEDDEMO
// LedDemo.cpp : This file contains the 'main' function. Program execution begins and ends
there.
//
#include "../OOP/Screen.h"
#include "../OOP/Array.h"
Screen screen;
class Process {
protected:
static int value;
static int length;
virtual void init() = 0;
virtual void next() = 0;
virtual bool eop() = 0;
virtual void show_one(bool on) {
screen.SetColor(on ? 10 : 8) << char(254) << ' ';
}
public:
void Play();
};
void Process::Play() {
init();
while (!eop()) {
screen.SetCursor(1, 1);
for (int i = 0; i < length; i++) {
show_one(value & (1 << i));
}
Sleep(200); // hàm tạm dừng trong Windows.h
next();
}
}
int Process::value = 0; // bắt buộc phải khai báo lại biến static
int Process::length = 8; // 8 LED
class SingleL2R : public Process {
protected:
void init() override { value = 1; }
void next() override { value <<= 1; }
bool eop() override { return value >= (1 << length); }
};
class SingleR2L : public Process {
protected:
void init() override { value = 1 << (length - 1); }
void next() override { value >>= 1; }
bool eop() override { return value == 0; }
};
class TurnOnL2R : public SingleL2R {
protected:
void next() override {
SingleL2R::next();
value |= 1;
}
};
class TurnOffR2L : public SingleR2L {
protected:
void init() override { value = (1 << length) - 1; }
};
OOP
Bài 1:OOP về quản lý sinh viên, yêu cầu gồm 2 class, 1 class sv chưa tên, lớp, id sv, hàm gồm
nhập tên, lớ, id dv. 1 class về lớp, chứa tên lớp, hàm gồm thêm sửa xoá và hiển thị mọi thông tin
sinh viên đã nhập của lớp
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class SV
{
private:
string id;
string name;
string inClass;
public:
SV(){}
SV(string msv, string ten, string lop) : id(msv), name(ten), inClass(lop) {}
void addStudent();
void delStudent(string msv);
void editStudent(string msv);
void showStudent();
void setName(string ten)
{
name = ten;
}
};
vector<SV> listSV;
int main()
{
int input;
string id;
SV st;
while (true)
{
cout << "CHUONG TRINH QUAN LY SINH VIEN\n";
cout << "CHUC NANG : \n";
cout << "1. Them thong tin sinh vien.\n";
cout << "2. Sua thong tin sinh vien.\n";
cout << "3. Xoa thong tinh sinh vien.\n";
cout << "4. Dua ra thong tin sinh vien.\n";
cout << "0. Thoat.\n";
cout << "Ban chon : " ;
cin >> input;
switch (input)
{
case 1:
cout << "Ban da chon them thong tin sinh vien!\n";
st.addStudent();
break;
case 2:
cin.ignore(); // ignore roi xuong duoi khong ignore nua
cout << "Ban da chon sua thong tin sinh vien!\n";
cout << "Nhap id sinh vien : "; getline(cin, id);
st.editStudent(id);
break;
case 3:
cout << "Ban da chon xoa thong tin sinh vien!\n";
cout << "Nhap id sinh vien : "; cin >> id;
st.delStudent(id);
break;
case 4:
cout << "Ban da chon dua ra thong tin sinh vien!\n";
st.showStudent();
break;
case 0:
return 0;
}
}
}
void SV::addStudent()
{
string msv, hoTen, lop;
cin.ignore(32767, '\n');
cout << "Nhap ma sinh vien: " ; getline(cin, msv);
cout << "Nhap ten sinh vien: "; getline(cin, hoTen);
cout << "Nhap lop : "; getline(cin, lop);
listSV.push_back(SV(msv, hoTen, lop));
void SV::showStudent()
{
for (int i=0; i<listSV.size(); i++)
{
cout << "MSV : " << listSV[i].id << " ";
cout << "Ten SV: " << listSV[i].name << " ";
cout << "Lop : " << listSV[i].inClass << endl;
}
}
#include <bits/stdc++.h>
using namespace std;
class sinhvien
{
private:
string ten, masinhvien;
int tuoi;
public:
void set()
{
cin.ignore();
cout << "Nhap Ma Sinh Vien"; getline(cin, this-
>masinhvien);
cout << "Nhap Ten: "; getline(cin, this->ten);
cout << "Nhap Tuoi: "; cin >> this->tuoi;
}
void get()
{
cout << "Ma Sinh Vien: " << this->masinhvien << endl;
cout << "Ten: " << this->ten << endl;
cout << "Tuoi: " << this->tuoi << endl;
}
};
int main()
{
sinhvien obj;
obj.set();
obj.get();
}
Trong phần này, thay vì tạo class chỉ có 2 phương thức nhập xuất là set và get. Mình
sẽ tạo class sinhvien với hàm khởi tạo không tham số, hàm huỷ, và phương thức nhập
xuất
#include <bits/stdc++.h>
using namespace std;
class sinhvien
{
private:
string ten, masinhvien;
int tuoi;
public:
sinhvien()
{
this->masinhvien = "";
this->ten = "";
this->tuoi = 0;
}
~sinhvien()
{
this->masinhvien = "";
this->ten = "";
this->tuoi = 0;
}
void set()
{
cout << "Nhap Ma Sinh Vien"; getline(cin, this-
>masinhvien);
cout << "Nhap Ten: "; getline(cin, this->ten);
cout << "Nhap Tuoi: "; cin >> this->tuoi;
}
void get()
{
cout << "Ma Sinh Vien: " << this->masinhvien << endl;
cout << "Ten: " << this->ten << endl;
cout << "Tuoi: " << this->tuoi << endl;
}
};
int main()
{
sinhvien obj;
#include <bits/stdc++.h>
using namespace std;
class sinhvien
{
private:
string ten, masinhvien;
int tuoi;
float diemtoan, diemvan, diemanh;
public:
sinhvien()
{
this->masinhvien = "";
this->ten = "";
this->tuoi = 0;
this->diemtoan = this->diemvan = this->diemanh = 0;
}
~sinhvien()
{
this->masinhvien = "";
this->ten = "";
this->tuoi = 0;
this->diemtoan = this->diemvan = this->diemanh = 0;
}
void set()
{
cout << "Nhap Ma Sinh Vien"; getline(cin, this-
>masinhvien);
cout << "Nhap Ten: "; getline(cin, this->ten);
cout << "Nhap Tuoi: "; cin >> this->tuoi;
cout << "Nhap Diem Toan - Van - Anh"; cin >> this-
>diemtoan >> this->diemvan >> this->diemanh;
}
void get()
{
cout << "Ma Sinh Vien: " << this->masinhvien << endl;
cout << "Ten: " << this->ten << endl;
cout << "Tuoi: " << this->tuoi << endl;
cout << "Diem Trung Bình: " << TB() << endl;
}
float TB()
{
return (this->diemtoan + this->diemvan +
this->diemanh)/3;
}
};
int main()
{
sinhvien obj;
obj.set();
obj.get();
}
Viết chương trình C++ để hiển thị chi tiết bảng lương của nhân viên. Chương
trình của bạn sẽ nhắc người dùng nhập số thứ tự nhân viên, id, tên, chức danh,
lương cơ bản, phụ cấp thu hút, phụ cấp chức vụ, phụ cấp trách nhiệm, sau đó
tính tổng lương và hiển thị kết quả.
#include<iostream>
#include<conio.h>
using namespace std;
class nhanvien
{
public:
int idnhanvien;
char tennhanvien[20],chucdanh[20];
void get()
{
cout<<"Nhap id cua nhan vien: ";
cin>>idnhanvien;
cout<<"Nhap ten nhan vien: ";
cin>>tennhanvien;
cout<<"Nhap chuc danh cua nhan vien: ";
cin>>chucdanh;
}
};
class luong:public nhanvien
{
float lcoban,pthuhut,pchucvu,ptrachnhiem,lrong;
public:
void get1()
{
cout<<"Nhap luong co ban: ";
cin>>lcoban;
cout<<"Nhap phu cap thu hut: ";
cin>>pthuhut;
cout<<"Nhap phu cap chuc vu: ";
cin>>pchucvu;
cout<<"Nhap phu cap trach nhiem: ";
cin>>ptrachnhiem;
}
void calculate()
{
lrong=lcoban+pthuhut+pchucvu+ptrachnhiem;
}
void display()
{
cout<<idnhanvien<<"\t"<<tennhanvien<<"\t"<<chucdanh<<"\t"<<lcoban<<"\
t"<<pthuhut<<"\t"<<pchucvu<<"\t"<<ptrachnhiem<<"\t"<<lrong<<"\n";
}
};
int main()
{
int i,n;
char ch;
luong s[10];
cout<<"Nhap so nhan vien: ";
cin>>n;
for(i=0;i<n;i++)
{
s[i].get();
s[i].get1();
s[i].calculate();
}
cout<<"\nid \tten \tchucdanh \tlcoban \tpthhut \tpchvu \tptnhiem \tlrong \n";
for(i=0;i<n;i++)
{
s[i].display();
}
return 0;
}