
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Ề Ố
4
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[..................];
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 cu i 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”

