Đề kiểm tra học kỳ môn Ngôn ngữ lập trình C giúp cho các bạn sinh viên nắm bắt được cấu trúc đề thi, dạng đề thi chính để có kế hoạch ôn thi một cách tốt hơn. Tài liệu hữu ích cho các các bạn sinh viên đang theo học chuyên ngành Điện – Điện tử và những ai quan tâm đến môn học này dùng làm tài liệu tham khảo.
Trang 1KIỂ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 ệ
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)
Trang 2while (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”