



















Preview text:
lOMoAR cPSD| 61548706
ĐẠI HỌC BÁCH KHOA HÀ NỘI
MÔN: Kỹ thuật lập trinh C/C++
TRƯỜNG ĐIỆN - ĐIỆN TỬ Lần thi: Cuối kỳ --------oOo-------- Ngày thi: 10/07/2024 Mã đề: 422
Thời gian làm bài: 90 phút
(Được sử dụng tài liệu giấy) CBGD phụ trách đề thi: Trưởng NCM:
I. Phần trắc nghiệm (6 điểm)
Câu 1. 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.5 B. Báo lỗi chia cho 0 C. 0 D. a = 0
Câu 2. Chọn kết quả hợp lý nhất khi chạy chương trình: int main() { int a = 256; char c = '\0'; double d = 1e-8; float f = 0.1;
cout << sizeof(a) << sizeof(d) << sizeof(f) << sizeof(c); } A. 8441 B. 4842 C. 4481 D. 4841
Câu 3. 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++"; for (char* p = s; *p;
p++) { if (*p >= 'a' && *p <= 'z') *p -= 32; } cout << s;
A. NGON NGU LAP TRINH C++ B. Không có đáp án đúng
C. ngon ngu lap trinh c++ D. Ngon Ngu Lap Trinh C++
Câu 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 % 14) { case 1: T = 7; break; case 2: T = 14; break; case 4: T = 28; break; } 17 B. 14 C. 28 D. 7
Câu 5. Đoạn chương trình dưới đây cho kết quả nào? lOMoAR cPSD| 61548706 A.
class A { int _v; public: A(int
v = 0) : _v(v) { cout << _v; } ~A() { } }; class B : A { public: B(int v = 0) : A(v * v) {} }; int main() { A a(2); B b(2); } A. 22 B. 44 C. 24 D. 42
Câu 6. Cho biết chỉ số của phần tử cuối cùng cả mảng s nếu khai báo char s[] = "123456789"; A. 9 B. 8 C. 11 D. 10
Câu 7. Cho biết kết quả của đoạn chương trình sau:
double Calc(int n, double* a, double x) {
double y = a[n]; while (n) y = y * x
+ a[--n]; return y; } int main() {
double a[] = { 3, -4, 1 }; cout <<
Calc(2, a, 1) << endl; } D. 0 A. 15 B. 1 C. 16
Câu 8. Cho biết kết quả của đoạn chương trình sau:
void Convert(int &a, int b) { a = ++b; }
void main() { int x = 3, y = 1;
Convert(x, y); cout << x << y; } A. 32 B. 21 C. 31 D. 22
Câu 9. 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; 6 B. 012345 C. 123456 D. 0123456
Câu 10. 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? lOMoAR cPSD| 61548706 A. A. 1104 B. 1102 C. 8 D. 7
Câu 11. Cho biết kết quả của đoạn chương trình sau: int main() { int a = 5, b = ++a; cout << a << b + 5; } A. 511 B. 610 C. 611 D. 510
Câu 12. Cho biết kết quả của chương trình: int main() { int x = 25; while (x) { cout << x % 2; x /= 2; } } A. 110001 B. 00011 C. 001001 D. 10011
Câu 13. Cho biết kết quả của chương trình dưới đây:
template T Count(T v) { return v; } void
main() { cout << sizeof(Count(2.0) + Count(3) + Count('4')); } A. 8 B. 2 C. 4 D. 1
Câu 14. Cho biết kết quả của đoạn chương trình sau:
int Search(const char* s, char a) { int k = -1;
for (int i = 0; char c = s[i]; i++) { if (c == a) { k = i; } } return k; } int main() {
char s[] = "Ha Noi 2023"; cout <<
Search(s, 32) << endl; } A. -1 B. 2 C. 2023 D. 6
Câu 15. Biểu thức khai báo hằng nào là đúng quy cách?
const unsigned char FULL = 256;
B. const int char FULL = 256; C. const int MAX VALUE = 256; D. const unsigned char = 256;
Câu 16. 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:
int *p, n; // n - độ dài của mảng p void
Function() { int *q = new int[/**/];
for (int i = 0; i < n; i++) q[i] = p[i]; delete[] p; p = q; } lOMoAR cPSD| 61548706 A. A. n-- B. n - 1 C. --n D. 1 trong 3 biểu thức
Câu 17. Đoạn chương trình dưới đây cho kết quả nào? class Value { int _v; public: Value(int v = 0) : _v(v) { }
~Value() { cout << _v; } }; void main() { Value a(5), b; } A. 05 B. 55 C. 50 D. 00
Câu 18. Vì sao đoạn chương trình dưới đây sinh ra lỗi? int *p = new int; p = new int[10]; delete[] p; delete p;
A. Xóa con trỏ khi chưa cấp phát
B. Truy cập nội dung con trỏ chưa cấp phát
C. Cấp phát động không dùng cho biến đơn
D. Cấp phát mảng khi chưa xóa
Câu 19. Cho biết kết quả trên màn hình khi chạy đoạn chương trình sau:
int main() { enum { Delete = -1, Update,
Insert, Select }; cout << Insert; } A. 1 B. 2 C. 0 D. -1
Câu 20. Cho biết kết quả của đoạn chương trình sau:
void Write(int value, int length) {
while (length--) { cout <<
(value & 1 ? '1' : '0'); value >>= 1; } lOMoAR cPSD| 61548706 } int main() { Write(71, 4); } A. 0111 B. 1110 C. 11100010 D. 01000111
II. Phần tự luận (4 điểm)
Câu 1. Cho khai báo sau đây:
struct point { int x; int y; }; struct rect { int x;
int y; int width; // chiều rộng int height; // chiều cao };
// cấu trúc hình chữ nhật với x, y là tọa độ của đỉnh dưới bên trái
int distance2(point a, point b); // hàm tính bình phương khoảng cách giữa 2 điểm
double distance(point a, point b); // hàm tính khoảng cách giữa 2 điểm point
get_center(rect sz); // hàm tìm tâm của rect
1. Định nghĩa 3 hàm trên (0.75 điểm)
2. Viết hàm main thực hiện các thao tác sau:
Khai báo hình chữ nhật (R) với đỉnh dưới bên trái ở tọa độ (0, 0) (0.25 điểm);
Khai báo 2 điểm (A, B) nằm trên hai cạnh và tạo thành tam giác với tâm (C) của hình chữ nhật (0.75 điểm);
Nếu tam giác đó cân thì in ra đỉnh cân đó (0.75 điểm).
Câu 2. Thực hiện các yêu cầu sau:
1. Xây dựng lớp Impedance để mô tả trở kháng gồm:
Giá trị phần thực (a) và phần ảo (b) đều thuộc kiểu số thực (0.25 điểm)
Định nghĩa các hàm lấy các thuộc tính thực và ảo (0.5)
Hàm khởi tạo mặc định (0.25 điểm)
Hàm khởi tạo từ phần thực và phần ảo (0.25 điểm)
Toán tử cộng hai trở kháng (0.25 điểm)
Toán tử chia hai trở kháng (0.25 điểm)
Toán tử in trở kháng ra màn hình với định dạng (a, bj) (0.25 điểm)
2. Thực hiện các yêu cầu trong hàm main: int main() { const
double f = 50; // Hz double R = 100; // Ohm double
L = 2.5e-3; // Henry double C = 0.1e-9; // Fara
// Khai báo các trở kháng ZR, ZL và ZC từ các trị số đã cho (0.25 điểm)
// In ra màn hình trở kháng của mạch R, L, C mắc nối tiếp (0.25 điểm) } lOMoAR cPSD| 61548706
ĐẠI HỌC BÁCH KHOA HÀ NỘI
MÔN: Kỹ thuật lập trinh C/C++
TRƯỜNG ĐIỆN - ĐIỆN TỬ Lần thi: Cuối kỳ --------oOo-------- Ngày thi: 10/07/2024 Mã đề: 239
Thời gian làm bài: 90 phút
(Được sử dụng tài liệu giấy) CBGD phụ trách đề thi: Trưởng NCM:
I. Phần trắc nghiệm (6 điểm)
Câu 1. Đoạn chương trình dưới đây cho kết quả nào? class Value { int _v; public:
Value(int v = 0) : _v(v) { cout << _v; } ~Value() {} };
void main() { Value a(5), b; } A. 50 B. 00 C. 55 D. 05
Câu 2. 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:
int *p, n; // n - độ dài của mảng p void
Function() { int *q = new int[/**/];
for (int i = 0; i < n; i++) q[i] = p[i]; delete[] p; p = q; } A. --n B. n - 1 C. n-- D. 1 trong 3 biểu thức
Câu 3. Cho biết kết quả của đoạn chương trình sau:
double Calc(int n, double* a, double x) { double y = a[n]; while (n) y = y * x + a[--n]; return y; } int main() { double a[] = {
3, -4, 1 }; cout << Calc(2, a, 1) << endl; } A. 15 B. 16 C. 0 D. 1
Câu 4. 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. 1102 B. 7 C. 1104 D. 8
Câu 5. Vì sao đoạn chương trình dưới đây sinh ra lỗi? int *p = new int; p = new int[10]; delete[] p; delete p;
A. Xóa con trỏ khi chưa cấp phát
B. Cấp phát mảng khi chưa xóa
C. Cấp phát động không dùng cho biến đơn
D. Truy cập nội dung con trỏ chưa cấp phát lOMoAR cPSD| 61548706
Câu 6. Cho biết kết quả của đoạn chương trình sau:
void Convert(int &a, int b) { a = ++b; }
void main() { int x = 3, y = 1;
Convert(x, y); cout << x << y; } A. 21 B. 31 C. 22 D. 32
Câu 7. Biểu thức khai báo hằng nào là đúng quy cách?
A. const char TAB = '\t'; B. const char* TAB KEY = '\t'; C. const char* TAB = '\t'; D. const char TAB = "\t";
Câu 8. 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. Báo lỗi chia cho 0 B. a = 0 C. 0 D. 0.5
Câu 9. Cho biết kết quả của chương trình: int main() { int x = 36; while (x) { cout << x % 2; x /= 2; } } A. 10011 B. 001001 C. 00011 D. 110001
Câu 10. Cho biết kết quả của đoạn chương trình sau:
int Search(const char* s, char a) {
int k = -1; for (int i = 0; char c = s[i]; i++) { if (c == a) { k = i; } } return k; } int main() { char s[] = "Ha Noi 2023";
cout << Search(s, 32) << endl; } A. -1 B. 2023 C. 2 D. 6
Câu 11. Cho biết chỉ số của phần tử cuối cùng cả mảng s nếu khai báo char s[] = "123456789"; A. 9 B. 8 C. 11 D. 10
Câu 12. 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 = 2; for (int i = 0; i < 2; i++) g *= 3; cout << g; A. 17 B. 7 C. 8 D. 18 lOMoAR cPSD| 61548706
Câu 13. Cho biết kết quả của đoạn chương trình sau: int main() { int a = 6, b = --a;
cout << a << b + 5; } A. 510 B. 511 C. 610 D. 611
Câu 14. Cho biết kết quả trên màn hình khi chạy đoạn chương trình sau: int main() {
enum { Delete = -1, Update, Insert, Select }; cout << Delete; } A. -1 B. 0 C. 1 D. 2
Câu 15. Chọn kết quả hợp lý nhất khi chạy chương trình: int main() { int a = 256; char c = '\0'; double d = 1e-8; float f = 0.1;
cout << sizeof(a) << sizeof(d) << sizeof(f) << sizeof(c); } A. 4841 B. 8441 C. 4481 D. 4842
Câu 16. Những hàm nào được sinh ra trong chương trình dưới đây:
template T Count(T v) { return v; } int main() {
cout << Count(2.0) + Count(3) + Count('4'); } A. double Count(double) B. char Count(char) C. Cả 3 hàm trên D. int Count(int)
Câu 17. 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; } lOMoAR cPSD| 61548706 D. 14 A. 7 B. 28 C. 17
Câu 18. Đoạn chương trình dưới đây cho kết quả nào?
class A { int _v; public: A(int
v = 0) : _v(v) { cout << _v; } ~A() { } }; class B : A { public: B(int v = 0) : A(v * v) {} }; int main() { A a(2); B b(2); } A. 22 B. 42 C. 24 D. 44
Câu 19. Cho biết kết quả của đoạn chương trình sau:
void Write(int value, int length) { while (length) {
cout << (value & (1 << (--length)) ? '1' : '0'); } } int main() { Write(71, 4); } A. 0111 B. 01000111 C. 11100010 D. 1110
Câu 20. 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;
for (int i = 0; char c = s[i]; i++) {
if (c >= 'a' && c <= 'z' && last == 32) s[i] = c - 32;
if (c >= 'A' && c <= 'Z' && last != 32) s[i] = c + 32; last = c; } cout << s;
A. Không có đáp án đúng B. ngon ngu lap trinh c++
C. NGON NGU LAP TRINH C++ D. Ngon Ngu Lap Trinh C++
II. Phần tự luận (4 điểm)
Câu 1. Cho khai báo sau đây:
struct point { int x; int y; }; struct rect { int x;
int y; int width; // chiều rộng int height; // chiều cao };
// cấu trúc hình chữ nhật với x, y là tọa độ của đỉnh dưới bên trái
int distance2(point a, point b); // hàm tính bình phương khoảng cách giữa 2 điểm
double distance(point a, point b); // hàm tính khoảng cách giữa 2 điểm point
get_center(rect sz); // hàm tìm tâm của rect
1. Định nghĩa 3 hàm trên (0.75 điểm)
2. Viết hàm main thực hiện các thao tác sau:
Khai báo hình chữ nhật (R) với đỉnh dưới bên trái ở tọa độ (0, 0) (0.25 điểm);
Khai báo 2 điểm (A, B) nằm trên hai cạnh và tạo thành tam giác với tâm (C) của hình chữ nhật (0.75 điểm);
Nếu tam giác đó vuông thì in ra đỉnh vuông đó (0.75 điểm). lOMoAR cPSD| 61548706
Câu 2. Thực hiện các yêu cầu sau:
1. Xây dựng lớp Impedance để mô tả trở kháng gồm:
Giá trị phần thực (a) và phần ảo (b) đều thuộc kiểu số thực (0.25 điểm)
Định nghĩa các hàm lấy các thuộc tính thực và ảo (0.5)
Hàm khởi tạo mặc định (0.25 điểm)
Hàm khởi tạo từ phần thực và phần ảo (0.25 điểm)
Toán tử trừ hai trở kháng (0.25 điểm)
Toán tử nhân hai trở kháng (0.25 điểm)
Toán tử in trở kháng ra màn hình với định dạng (a, bj) (0.25 điểm)
2. Thực hiện các yêu cầu trong hàm main: int main() { const
double f = 50; // Hz double R = 100; // Ohm double
L = 2.5e-3; // Henry double C = 0.1e-9; // Fara
// Khai báo các trở kháng ZR, ZL và ZC từ các trị số đã cho (0.25 điểm)
// In ra màn hình trở kháng của mạch R mắc song song với L (0.25 điểm) } lOMoAR cPSD| 61548706
ĐẠI HỌC BÁCH KHOA HÀ NỘI
MÔN: Kỹ thuật lập trinh C/C++
TRƯỜNG ĐIỆN - ĐIỆN TỬ Lần thi: Cuối kỳ --------oOo-------- Ngày thi: 10/07/2024 Mã đề: 390
Thời gian làm bài: 90 phút
(Được sử dụng tài liệu giấy) CBGD phụ trách đề thi: Trưởng NCM:
I. Phần trắc nghiệm (6 điểm)
Câu 1. 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. 7 C. 17 D. 28
Câu 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. 1102 B. 8 C. 1104 D. 7
Câu 3. Biểu thức khai báo hằng nào là đúng quy cách?
A. const char* TAB KEY = '\t';
B. const char* TAB = '\t'; C. const char TAB = "\t"; D. const char TAB = '\t';
Câu 4. Đoạn chương trình dưới đây cho kết quả nào? class Value { int _v; public: Value(int v = 0) : _v(v) { }
~Value() { cout << _v; } };
void main() { Value a(5), b; } A. 55 B. 00 C. 05 D. 50
Câu 5. Chọn kết quả hợp lý nhất khi chạy chương trình: int main() { int a = 256; char c = '\0'; double d = 1e-8; float f = 0.1;
cout << sizeof(a) << sizeof(d) << sizeof(f) << sizeof(c); } A. 8441 B. 4842 C. 4481 D. 4841
Câu 6. Cho biết kết quả của chương trình: int main() { int x = 25; while (x) { lOMoAR cPSD| 61548706 cout << x % 2; x /= 2; } } A. 001001 B. 00011 C. 10011 D. 110001
Câu 7. 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. 0.5 C. Báo lỗi chia cho 0 D. a = 0
Câu 8. 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; for (int i = 0; i < 3; i++) g *= 2; cout << g; A. 8 B. 4 C. 27 D. 1
Câu 9. Cho biết kết quả của đoạn chương trình sau:
void Convert(int a, int &b) { a = ++b; } void main() { int x = 3, y = 1; Convert(x, y); cout << x << y; } A. 21 B. 31 C. 11 D. 32
Câu 10. Cho biết kết quả của đoạn chương trình sau:
int Search(const char* s, char a) {
int k = -1; for (int i = 0; char c = s[i]; i++) { if (c == a) { k = i; } } return k; }
int main() { char s[] = "Ha Noi 2023";
cout << Search(s, 32) << endl; } A. -1 B. 6 C. 2 D. 2023
Câu 11. Cho biết kết quả trên màn hình khi chạy đoạn chương trình sau:
int main() { enum { Delete = -1, Update,
Insert, Select }; cout << Select; } lOMoAR cPSD| 61548706 D. 2 A. -1 B. 1 C. 0
Câu 12. Cho biết kết quả của đoạn chương trình sau: int main() { int a = 5, b = ++a; cout << a << b + 5; } D. 510 A. 511 B. 610 C. 611
Câu 13. Đoạn chương trình dưới đây cho kết quả nào?
class A { int _v; public: A(int
v = 0) : _v(v) { cout << _v; } ~A() { } }; class B : A { public: B(int v = 0) : A(v * v) {} }; int main() { A a(2); B b(2); } A. 24 B. 44 C. 22 D. 42
Câu 14. 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:
int *p, n; // n - độ dài của mảng p void
Function() { int *q = new int[/**/];
for (int i = 0; i < n; i++) q[i] = p[i]; delete[] p; p = q; } A. --n B. n - 1 C. n-- D. 1 trong 3 biểu thức
Câu 15. Bao nhiêu hàm Count được sinh ra trong đoạn chương trình sau:
template T Count(T v) { return v; }
void main() { cout << Count(1.0) + Count(0x01) + Count(1); } A. 3 B. 4 C. 1 D. 2
Câu 16. Cho biết kết quả của đoạn chương trình sau:
double Calc(int n, double* a, double x) { lOMoAR cPSD| 61548706 double y = a[n]; while (n) y = y * x + a[--n]; return y; } int main() { double a[] = {
3, -4, 1 }; cout << Calc(2, a, 1) << endl; } A. 0 B. 1 C. 16 D. 15
Câu 17. 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++"; char
*p = s; while (*p) { if (*p >= 'A' &&
*p <= 'Z') *p += 32; p++; } cout << s; A. ngon ngu lap trinh c++
B. Ngon Ngu Lap Trinh C++ C. Không có đáp án đúng D. NGON NGU LAP TRINH C++
Câu 18. Cho biết chỉ số của phần tử cuối cùng cả mảng s nếu khai báo char s[] = "123456789"; A. 11 B. 8 C. 10 D. 9
Câu 19. Cho biết kết quả của đoạn chương trình sau:
void Write(int value, int length) { while (length) {
cout << (value & (1 << (--length)) ? '1' : '0'); } } int main() { Write(71, 8); } A. 11100010 B. 01000111 C. 0111 D. 1110
Câu 20. Vì sao đoạn chương trình dưới đây sinh ra lỗi? int *p = new int; p = new int[10]; delete[] p; delete p;
A. Xóa con trỏ khi chưa cấp phát
B. Cấp phát động không dùng cho biến đơn
C. Cấp phát mảng khi chưa xóa
D. Truy cập nội dung con trỏ chưa cấp phát
II. Phần tự luận (4 điểm)
Câu 1. Cho khai báo sau đây:
struct point { int x; int y; }; struct rect { int x;
int y; int width; // chiều rộng int height; // chiều cao };
// cấu trúc hình chữ nhật với x, y là tọa độ của đỉnh dưới bên trái
int distance2(point a, point b); // hàm tính bình phương khoảng cách giữa 2 điểm
double distance(point a, point b); // hàm tính khoảng cách giữa 2 điểm point
get_center(rect sz); // hàm tìm tâm của rect lOMoAR cPSD| 61548706
1. Định nghĩa 3 hàm trên (0.75 điểm)
2. Viết hàm main thực hiện các thao tác sau:
Khai báo hình chữ nhật (R) với đỉnh dưới bên trái ở tọa độ (0, 0) (0.25 điểm);
Khai báo 2 điểm (A, B) nằm trên hai cạnh và tạo thành tam giác với tâm (C) của hình chữ nhật (0.75 điểm);
Nếu tam giác đó cân thì in ra đỉnh cân đó (0.75 điểm).
Câu 2. Thực hiện các yêu cầu sau:
1. Xây dựng lớp Impedance để mô tả trở kháng gồm:
Giá trị phần thực (a) và phần ảo (b) đều thuộc kiểu số thực (0.25 điểm)
Định nghĩa các hàm lấy các thuộc tính thực và ảo (0.5)
Hàm khởi tạo mặc định (0.25 điểm)
Hàm khởi tạo từ phần thực và phần ảo (0.25 điểm)
Toán tử cộng hai trở kháng (0.25 điểm)
Toán tử chia hai trở kháng (0.25 điểm)
Toán tử in trở kháng ra màn hình với định dạng (a, bj) (0.25 điểm)
2. Thực hiện các yêu cầu trong hàm main: int main() { const
double f = 50; // Hz double R = 100; // Ohm double
L = 2.5e-3; // Henry double C = 0.1e-9; // Fara
// Khai báo các trở kháng ZR, ZL và ZC từ các trị số đã cho (0.25 điểm)
// In ra màn hình trở kháng của mạch R, L, C mắc nối tiếp (0.25 điểm) } lOMoAR cPSD| 61548706
ĐẠI HỌC BÁCH KHOA HÀ NỘI
MÔN: Kỹ thuật lập trinh C/C++
TRƯỜNG ĐIỆN - ĐIỆN TỬ Lần thi: Cuối kỳ --------oOo-------- Ngày thi: 10/07/2024 Mã đề: 901
Thời gian làm bài: 90 phút
(Được sử dụng tài liệu giấy) CBGD phụ trách đề thi: Trưởng NCM:
I. Phần trắc nghiệm (6 điểm)
Câu 1. Cho biết chỉ số của phần tử cuối cùng cả mảng s nếu khai báo char s[] = "123456789"; A. 11 B. 8 C. 10 D. 9
Câu 2. Cho biết kết quả của đoạn chương trình sau:
void Convert(int a, int &b) { a = ++b; } void main() { int x = 3, y = 1; Convert(x, y); cout << x << y; } A. 32 B. 31 C. 21 D. 11
Câu 3. Cho biết kết quả của đoạn chương trình sau: int main() { int a = 5, b = ++a;
cout << a << b + 5; } A. 510 B. 511 C. 611 D. 610
Câu 4. Đoạn chương trình dưới đây cho kết quả nào? class A { int _v; public:
A(int v = 0) : _v(v) { cout << _v; } ~A() { } }; class B : A { public: B(int v = 0) : A(v * v) {} };
int main() { A a(2); B b(2); } A. 24 B. 22 C. 44 D. 42 lOMoAR cPSD| 61548706
Câu 5. 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++"; char *p = s;
while (*p) { if (*p >= 'A' && *p <=
'Z') *p += 32; p++; } cout << s;
A. NGON NGU LAP TRINH C++ B. Ngon Ngu Lap Trinh C++ C. Không có đáp án đúng D. ngon ngu lap trinh c++
Câu 6. 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. 28 B. 17 C. 14 D. 7
Câu 7. Chọn kết quả hợp lý nhất khi chạy chương trình: int main() { int a = 256; char c = 32; double d = 1e-8; float f = 0.1;
cout << sizeof(d) << sizeof(a) << sizeof(f) << sizeof(c); } A. 8441 B. 4481 C. 4841 D. 4842
Câu 8. Đoạn chương trình dưới đây cho kết quả nào? class Value { int _v; public: Value(int v = 0) : _v(v) { }
~Value() { cout << _v; } };
void main() { Value a, b(5); } A. 05 B. 55 C. 50 D. 00
Câu 9. Cho biết kết quả trên màn hình khi chạy đoạn chương trình sau: int main() {
enum { Delete = -1, Update, Insert, Select }; cout << Insert; } A. 1 B. -1 C. 0 D. 2
Câu 10. 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: lOMoAR cPSD| 61548706
int g = 1, n = 1; for (int i = 0; i < 3;
i++, n = n * 3 + 3) g += n; cout << g; A. 6 B. 28 C. 29 D. 16
Câu 11. 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. 1104 B. 1102 C. 8 D. 7
Câu 12. Cho biết kết quả của đoạn chương trình sau:
int Search(const char* s, char a) { int k = -1;
for (int i = 0; char c = s[i]; i++) { if (c == a) { k = i; } } return k; } int main() { char s[] = "Ha Noi 2023";
cout << Search(s, 32) << endl; } A. 6 B. 2023 C. -1 D. 2
Câu 13. Cho biết kết quả của đoạn chương trình sau:
void Write(int value, int length) { while (length) {
cout << (value & (1 << (--length)) ? '1' : '0'); } } int main() { Write(71, 8); } A. 11100010 B. 1110 C. 01000111 D. 0111
Câu 14. Vì sao đoạn chương trình dưới đây sinh ra lỗi? int *p = new int; p = new int[10]; delete[] p; delete p;
A. Cấp phát động không dùng cho biến đơn
B. Cấp phát mảng khi chưa xóa lOMoAR cPSD| 61548706
C. Truy cập nội dung con trỏ chưa cấp phát
D. Xóa con trỏ khi chưa cấp phát
Câu 15. Những hàm nào được sinh ra trong chương trình dưới đây:
template T Count(T v) { return v; } int main() {
cout << Count(2.0) + Count(3) + Count('4'); } A. double Count(double) B. char Count(char) C. int Count(int) D. Cả 3 hàm trên
Câu 16. Biểu thức khai báo hằng nào là đúng quy cách?
A. const unsigned char FULL = 256;
B. const int MAX VALUE = 256; C. const unsigned char = 256; D. const int char FULL = 256;
Câu 17. 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. Báo lỗi chia cho 0 B. a = 0 C. 0.5 D. 0
Câu 18. 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:
int *p, n; // n - độ dài của mảng p void
Function() { int *q = new int[/**/];
for (int i = 0; i < n; i++) q[i] = p[i]; delete[] p; p = q; } A. --n B. n - 1 C. n-- D. 1 trong 3 biểu thức
Câu 19. Cho biết kết quả của chương trình: int main() { int x = 35; while (x) { cout << x % 2; x /= 2; } } A. 110001 B. 001001 C. 10011 D. 00011
Câu 20. Cho biết kết quả của đoạn chương trình sau:
double Calc(int n, double* a, double x) {
double y = a[n]; while (n) y = y * x + a[--n]; return y; } int main() { double a[] = {
4, -4, 1 }; cout << Calc(2, a, 6) << endl; } A. 15 B. 16 C. 0 D. 1 lOMoAR cPSD| 61548706
II. Phần tự luận (4 điểm)
Câu 1. Cho khai báo sau đây:
struct point { int x; int y; }; struct rect { int x;
int y; int width; // chiều rộng int height; // chiều cao };
// cấu trúc hình chữ nhật với x, y là tọa độ của đỉnh dưới bên trái
int distance2(point a, point b); // hàm tính bình phương khoảng cách giữa 2 điểm
double distance(point a, point b); // hàm tính khoảng cách giữa 2 điểm point
get_center(rect sz); // hàm tìm tâm của rect
1. Định nghĩa 3 hàm trên (0.75 điểm)
2. Viết hàm main thực hiện các thao tác sau:
Khai báo hình chữ nhật (R) với đỉnh dưới bên trái ở tọa độ (0, 0) (0.25 điểm);
Khai báo 2 điểm (A, B) nằm trên hai cạnh và tạo thành tam giác với tâm (C) của hình chữ nhật (0.75 điểm);
Nếu tam giác đó vuông thì in ra đỉnh vuông đó (0.75 điểm).
Câu 2. Thực hiện các yêu cầu sau:
1. Xây dựng lớp Impedance để mô tả trở kháng gồm:
Giá trị phần thực (a) và phần ảo (b) đều thuộc kiểu số thực (0.25 điểm)
Định nghĩa các hàm lấy các thuộc tính thực và ảo (0.5)
Hàm khởi tạo mặc định (0.25 điểm)
Hàm khởi tạo từ phần thực và phần ảo (0.25 điểm)
Toán tử trừ hai trở kháng (0.25 điểm)
Toán tử nhân hai trở kháng (0.25 điểm)
Toán tử in trở kháng ra màn hình với định dạng (a, bj) (0.25 điểm)
2. Thực hiện các yêu cầu trong hàm main: int main() { const
double f = 50; // Hz double R = 100; // Ohm double
L = 2.5e-3; // Henry double C = 0.1e-9; // Fara
// Khai báo các trở kháng ZR, ZL và ZC từ các trị số đã cho (0.25 điểm)
// In ra màn hình trở kháng của mạch R mắc song song với L (0.25 điểm) }