5
KIM TRA GIA KNGÔN NGỮ LẬP TRÌNH C++ Thời gian: 90 phút (Được sdụng tài liệu) Lp: ……………………………………… Mã SV: …………………………………… Htên: …………………………………… ĐỀ SỐ 1 Câu 1. Nhng mệnh đề nào dưới đây là đúng: (1,5 điểm) Ngôn ngữ C++ có thể sdụng các hàm của C như memcpy, strlen, … Cùng một tên biến có thể khai báo trong cácđoạn khác nhau ca mt khi {} Tlong không thể dùng làm tên biến Toán tử & cho giá trị 0 hoc 1 Nếu khai báo int *p = (int *)1090 thì cout << (p + 1) đưa ra màn hình giá trị 0x0000044A Toán tử return ((char *)p) trgiá trị p vcho hàm kiểu char * Tham smặc định của hàm phải đặt cuối danh sách tham số Định nghĩa struct So{double a}; không có ý nghĩa thực tin Độ phc tp trung bình của thuật toán sắp xếp ni bt (BubbleSort) là O(n 2 ) Một hàm đệ quy không bao giờ dẫn đến lỗi tràn stack 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 bthay đổi sau khi thc hin lần lượt từng dòng lệnh Dòng lệnh c i u d c = 'A'; i = 5; u = 1; d = 1.5; ri = 2; *pd = 5; 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) Mng s 10 phn t: đúng sai b) (char)(*(p + 1)) bng '5': đúng sai c) Nếu gán *p=0x4163 thì cout << s cho hiện lên màn hình: Câu 4. Hàm nào dưới đây tính x n : (1 điểm) double f1(double x, int n) { double res = 1.0; while (n) {res *= x; --n;} return (res); } double f2(double x, int n) { if (n < 1) return 1.0; return (x * f2(x, n 1)); } Hàm f1 Hàm f2 Chai hàm Câu 5. Điền biu thức vào nhng chcò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 nối hai xâu ký tự char* concat(char* s1, char* s2) { int l1 = len(s1), l2 = len(s2); char* s = new char[ .................. ], *p = s, *q; for (q = s1; *q; q++, p++) *p = *q; ........................................................................ *p = 0;

[123doc.vn] - de-thi-ngon-ngu-lap-trinh-c.pdf

Embed Size (px)

Citation preview

Page 1: [123doc.vn] - de-thi-ngon-ngu-lap-trinh-c.pdf

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Ố

1

Câu 1. Những mệnh đề nào dưới đây là đúng: (1,5 điểm)

Ngôn ngữ C++ có thể sử dụng các hàm của C như memcpy, strlen, …

Cùng một tên biến có thể khai báo trong cácđoạn khác nhau của một khối {…}

Từ long không thể dùng làm tên biến

Toán tử & cho giá trị 0 hoặc 1

Nếu khai báo int *p = (int *)1090 thì cout << (p + 1) đưa ra màn hình giá trị 0x0000044A

Toán tử return ((char *)p) trả giá trị p về cho hàm kiểu char *

Tham số mặc định của hàm phải đặt ở cuối danh sách tham số

Định nghĩa struct So{double a}; không có ý nghĩa thực tiễn

Độ phức tạp trung bình của thuật toán sắp xếp nổi bọt (BubbleSort) là O(n2)

Một hàm đệ quy không bao giờ dẫn đến lỗi tràn stack

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 = 5; u = 1; d = 1.5; ri = 2; *pd = 5;

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 '5': đúng sai

c) Nếu gán *p=0x4163 thì cout << s cho hiện lên màn hình:

Câu 4. Hàm nào dưới đây tính xn: (1 điểm)

double f1(double x, int n)

{

double res = 1.0;

while (n) {res *= x; --n;}

return (res);

}

double f2(double x, int n)

{

if (n < 1)

return 1.0;

return (x * f2(x, n – 1));

}

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 nối hai xâu ký tự

char* concat(char* s1, char* s2) {

int l1 = len(s1), l2 = len(s2);

char* s = new char[..................], *p = s, *q;

for (q = s1; *q; q++, p++) *p = *q;

........................................................................

*p = 0;

Page 2: [123doc.vn] - de-thi-ngon-ngu-lap-trinh-c.pdf

return (s);

}

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 sinh sau ngày 01/01/1980

Page 3: [123doc.vn] - de-thi-ngon-ngu-lap-trinh-c.pdf

ĐỀ THI LẦN 1 Môn Lập trình

Thời gian 60 phút (Được sử dụng tài liệu) Đề số 1

Câu 1. Giá trị lớn nhất của biễn kiểu unsigned char là:

a) 255 b) 127 c) ‘z’

Câu 2. Dòng nào không đúng trong C:

a) class aClass{public:int x;}; b) /* A comment */ c) char x=12;

Câu 3. Dòng lệnh: int c = 0; cout << c++ << c; cho in ra màn hình:

a) 00 b) 01 c) 10

Câu 4. Biểu thức trong vòng lặp for(x = 0; x = 3; x++) được thực hiện bao nhiêu lần:

a) 0 b) 3 c) vô cùng

Câu 5. Cho hàm int fn(int x) { if (x == 0 || x == 1) return 1;

if (x % 2 == 0) return (fn(x / 2) + 2);

return (fn(x – 1) + 3); }

fn(7) trả về giá trị:

a) 7 b) 8 c) 11

Câu 6. Cho đoạn khai báo: int A[10], *p = A + 4; Khi sử dụng biến p trong biểu thức thì *(p + 1) là:

a) Giá trị của p b) Giá trị của A[5] c) Địa chỉ của A[5]

Câu 7. Cho đoạn chương trình: struct stack {struct node { char c; node *next; } *top;};

void Push(char c, stack *s){

stack::node *p = new stack::node;

p->c = c;. . .}

Đoạn lệnh ở . . . là:

a) p->next = top; top = p;

b) p->next = s->top; s->top = p;

c) p = s; top = p;

Câu 8. Nếu char s[] = “0123456789”; thì chỉ số cuối cùng của mảng s là:

a) 11 b) 10 c) 9

Câu 9. Hàm nào là hàm tạo mặc định của lớp Aclass:

a) Aclass(Aclass& a) b) Aclass() c) ~Aclass()

Câu 10. Đâu là lệnh cấp phát mảng:

a) char *p=new char[20]; b) char p=new char[20]; c) char p=new char(20);

Câu 11. Trường hợp nào lớp D có thể truy cập vào vùng protected của lớp B:

a) class B {…}; b) class D {… c) class B {…};

a) class D {…}; b) class B {…}}; c) class D: public B {…};

Câu 12. Để tìm vị trí của giá trị 7 trong mảng 1 2 3 4 5 6 7 8 bằng thuật toán chia đôi, cần tìm chỉ số trung bình

bao nhiêu lần:

a) 2 b) 3 c) 4

Câu 13. Đâu là lệnh giải phóng mảng p đã cấp phát:

a) delete p; b) delete p[]; c) delete []p;

Câu 14. Biểu thức 1/9*9 cho giá trị:

a) 1 b) 0.0862 c) 0

Câu 15. Thuật toán sắp xếp nào là tối ưu đối với mảng: 1 2 3 5 4

a) Insert sort b) Bubble sort c) Quick sort

Câu 16. Cây nhị phân chứa các chữ cái được biểu diễn bằng mảng (0 – nút rỗng): A B C D E F G 0 0 H. Khi

duyệt cây theo thứ tự trước sẽ cho:

a) A B C D E F G H b) A B D E C F G H c) A B D E H C F G

Page 4: [123doc.vn] - de-thi-ngon-ngu-lap-trinh-c.pdf

Câu 17. Toán tử [] của class có mấy tham số:

a) 2 b) 1 c) 0

Câu 18. Biểu thức 1 & 4 cho giá trị:

a) 0 b) 1 c) 4

Câu 19. strcat(aString, “abc”) thực hiện:

a) copy “abc” vào aString b) Thêm “abc” vào sau aString c) so sánh “abc” và aString

Câu 20. Cho char A[10] = {1, 2, 3, 4, 5, 6}; short *p = (short *)&A[2]; *p = 256; Bốn phần tử đầu tiên của A sẽ

là:

a) 1, 2, 0, 1 b) 1, 2, 1, 0 c) 1, 2, 0, 4

Câu 21. Cho chương trình sau:

1

2

3

4

5

6

7

8

9

class Vect

{

protected:

int size;

double *data;

public:

Vect(): size(0), data(NULL) {}

Vect(int sz): size(sz) { data = new double[size]; }

Vect(double *v, int sz): size(sz), data(*v) {}

Vect(int sz, const double *v)

{

size = sz;

data = new double[size];

for (int i = 0; i < size; i++)

data[i] = v[i];

}

~Vect() { if (data) delete[] data; }

public:

int GetSize() { return size; }

double& operator[](int index) { return data[index]; }

};

class Sort: public Vect

{

public:

Sort(int sz, const double *v): Vect(sz, v) {}

protected:

void Swap(int i, int j) { double t = data[i]; data[i] = data[j];

data[j] = t; }

virtual Sort& DoSort() = 0;

void Print(ostream& out)

{

for (int i = 0; i < size; i++)

out << ' ' << data[i];

}

friend ostream& operator<<(ostream& out, Sort & v)

{

out << "original:";

v.Print(out);

out << "\nsorted:";

v.DoSort().Print(out);

return (out);

}

};

class SelectionSort: public Sort

{

public:

SelectionSort(int sz, const double *v): Sort(sz, v)

private:

Sort& DoSort()

{

Page 5: [123doc.vn] - de-thi-ngon-ngu-lap-trinh-c.pdf

10

11

return (*this);

}

};

void main()

{

double a[] = {1, 3, 5, 2, 4};

cout << new SelectionSort(4, A) << endl;

}

a) Những dòng lệnh nào sai? Sửa lại cho đúng.

b) Thứ tự thực hiện các lệnh.

c) Viết lại hàm DoSort của lớp SelectionSort để sắp xếp mảng theo thứ tự giảm dần.

d) Cho biết kết quả hiện trên màn hình.

Hướng dẫn: 1. Từ câu 1 đến câu 20: Kẻ bảng theo mẫu dưới đây:

Câu A B C Câu A B C

1 11

… …

10 20

Với mỗi câu, chọn 1 câu trả lời đúng bằng cách đánh dấu √ vào ô A, B hoặc C ở dòng tương ứng.

2. Câu 21, thực hiện như đã hướng dẫn ôn tập.