Đề kiểm tra giữa kỳ môn Ngôn ngữ lập trình C++ - Đề số 2

Câu 1. Những mệnh đề nào dưới đây là đúng: (1,5 điểm) • Một đối tượng sử dụng lại mã có sẵn của một đối tượng khác được gọi là sự kế thừa • Cùng một tên biến có thể khai báo trong các khối { } khác nhau • Trong kiểu liệt kê enum color { red, green = 2, blue }; blue có giá trị bằng 4 • Toán tử >= cho giá trị 0 hoặc 1 • Toán tử gán (=) chỉ có thể xuất hiện một lần trong một biểu thức • Nếu k bằng 1 thì vòng lặp while (k = 1) k++; không bao giờ dừng lại • Toán tử break đưa con trỏ chương trình về điểm kết thúc hàm • Hàm int hamso(int &a, int &b) không làm thay đổi giá trị của biến truyền cho b • Một đối tượng không thể truy cập vào thành viên trong vùng private của một đối tượng khác • Độ phức tạp trung bình của thuật toán sắp xếp nhanh (QuickSort) là O(nlog2n) Câu 2. Cho các biến sau: (2 điểm) char c; int i; unsigned u; double d; int &ri = i; double *pd = &d; Cho biết giá trị của các biến bị thay đổi sau khi thực hiện lần lượt từng dòng lệnh

pdf2 trang | Chia sẻ: thanhle95 | Lượt xem: 437 | Lượt tải: 1download
Bạn đang xem nội dung tài liệu Đề kiểm tra giữa kỳ môn Ngôn ngữ lập trình C++ - Đề số 2, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
KIỂM TRA GIỮA KỲ NGÔN NGỮ LẬP TRÌNH C++ Thời gian: 90 phút (Được sử dụng tài liệu) Lớp: Mã SV: Họ tên: ĐỀ SỐ 2 Câu 1. Những mệnh đề nào dưới đây là đúng: (1,5 điểm)  Một đối tượng sử dụng lại mã có sẵn của một đối tượng khác được gọi là sự kế thừa  Cùng một tên biến có thể khai báo trong các khối {} khác nhau  Trong kiểu liệt kê enum color { red, green = 2, blue }; blue có giá trị bằng 4  Toán tử >= cho giá trị 0 hoặc 1  Toán tử gán (=) chỉ có thể xuất hiện một lần trong một biểu thức  Nếu k bằng 1 thì vòng lặp while (k = 1) k++; không bao giờ dừng lại  Toán tử break đưa con trỏ chương trình về điểm kết thúc hàm  Hàm int hamso(int &a, int &b) không làm thay đổi giá trị của biến truyền cho b  Một đối tượng không thể truy cập vào thành viên trong vùng private của một đối tượng khác  Độ phức tạp trung bình của thuật toán sắp xếp nhanh (QuickSort) là O(nlog2n) Câu 2. Cho các biến sau: (2 điểm) char c; int i; unsigned u; double d; int &ri = i; double *pd = &d; Cho biết giá trị của các biến bị thay đổi sau khi thực hiện lần lượt từng dòng lệnh Dòng lệnh c i u d c = 'A'; i = 6; u = 1; d = 1.5; ri = 2; *pd = 6; if (++u && ++i && ++c) d /= 4; for (; i > 0; i--) {u += (i << 1); u--;} switch(c){case 'A':d++;case 'B':d+=2;default:d+=5;} Câu 3. Cho đoạn khai báo sau: (1,5 điểm) char s[]="1234567890"; unsigned *p = (unsigned *)&s[2]; a) Mảng s có 10 phần tử:  đúng  sai b) (char)(*(p + 1)) bằng '6':  đúng  sai c) Nếu gán *p=0x3335 thì cout << s cho hiện lên màn hình: Câu 4. Hàm nào dưới đây tính ước số chung lớn nhất của a và b: (1 điểm) int f1(int a, int b) { while (b) { int r = a % b; a = b; b = r;} return (a); } int f2(int a, int b) { if (b == 0) return a; return (f2(b, a / b)); }  Hàm f1  Hàm f2  Cả hai hàm Câu 5. Điền biểu thức vào những chỗ còn thiếu trong các hàm dưới đây (2 điểm) // Hàm tìm độ dài của xâu ký tự int len(char *s) {int k = 0; while (.........) k++; return (k);} // Hàm so sánh hai xâu ký tự int cmp(char *s1, char *s2) { for (int i = 0; ........................; i++) { if (s1[i] < s2[i]) return (-1); ................................................ } return 0; // hai xâu bằng nhau } // Hàm lấy xâu con của một xâu trừ các ký tự trống ở đầu char* trimleft(char* s) { int i = 0, l = len(s); while (s[i] == 32) i++; char *p, *res = new char[..................]; CuuDuongThanCong.com https://fb.com/tailieudientucntt for (p = res; ................; p++, i++) *p = s[i]; return res; } Câu 6. Cho đoạn chương trình dưới đây (2 điểm) struct date { int day, month, year; int compare(int d, int m, int y) { int d1 = (year << 9) + (month << 5) + day; int d2 = (y << 9) + (m << 5) + d; if (d1 < d2) return -1; return (d1 > d2); } void set(int d, int m, int y) { day = d; month = m; year = y; } }; struct student { int id; char name[50]; date dob; // mã, họ tên và ngày sinh student *prev, *next; void Create(int i, char *n, int d, int m, int y) { next = prev = NULL; id = i; memcpy(name, n, len(n)+1); dob.set(d, m, y); } void Print() { cout << id << '\t' << name << '\t' << dob.day << '/' << dob.month << '/' << dob.year << endl; } }; struct list { student *head, *tail; void Init() { head = tail = NULL; } void Insert(int id, char *name, int d, int m, int y); void Print(); }; a) Hoàn thành hàm Insert của struct list để thêm một sinh viên vào đầu danh sách b) Hoàn thành hàm Print của struct list để in ra danh sách những sinh viên có họ tên bằng “Nguyen Van A” CuuDuongThanCong.com https://fb.com/tailieudientucntt