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 nhc 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 đ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”