Đề thi kĩ thuật lập trình ĐHBK HCM kèm lời giải..........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
Trang 1ề thi môn K Thu t L p Trình, niên khóa 2013-2014
Thời gian : 100 phút Tài liệu mở Thang điểm tối đ là 10
PHẦN I: TRẮC NGHIỆM (4 điểm, sinh viên chỉ cần trả lờ đú g 6 câ )
Sinh viên trả lời các câu hỏi bằng cách khoanh tròn đáp án Ú ẤT
Câu 1 Giả sử ta khai báo: int m[] = {5, 4, 3, 2, 1}, i = 4;
Hãy cho biết câu lệnh nào dưới đây KHÔNG hợp lệ khi truy xuất phần tử của mảng m:
Câu 2 Câu lệnh khai báo nào dưới đây KHÔNG hợp lệ:
A int x[][3] = {{0}, {1}, {1, 2, 3}};
B int x[4][3] = {{1, 2, 3}, {1, 2, 3}, {1, 2, 3}, {1, 2, 3}};
C int x[4][] = {{1, 2, 3}, {1, 2, 3}, {1, 2, 3}, {1, 2, 3}};
D int x[][3] = {1, 2, 3, 4};
Câu 3 Khai báo mảng b như sau: int b[][3] = {{1},{2, 3}, {4, 5, 6}, {2}};
Giá trị của b[2][2] bằng
Câu 4 Cho biết khai báo nào dưới đây không hợp lệ
A.int a[] = {1, 2}; B char *b[3]; C char s[10] = "test"; D int n = 2, a[n]={1,2,3};
Câu 5 Nhận định nào dưới đây đúng:
A Chương trình C++ luôn bắt đầu thực thi từ hàm đầu tiên
B Tất cả lời gọi hàm đều nằm trong hàm main
C Chương trình C++ luôn bắt đầu thực thi từ hàm main
D Trong chương trình C++, hàm main luôn phải đặt trước tất cả các hàm khác
Câu 6 Giả sử ta có lời gọi hàm sau: fun(a + b, 3, max(n – 1, b));
Số lượng tham số thực của hàm fun là
Câu 7 Cho biết kết xuất ra màn hình của đoạn chương trình sau:
1: #include <iostream.h>
2: void func1(int); void func2(int);
3: char st[] = "C++ Programing";
4: void func1(int i) { cout << st[i]; if(i<4) {i+=1; func2(i);} }
5: void func2(int i){ cout << st[i]; if(i<4) {i+=2; func1(i);}}
6: void main(){ func1(0); cout<<endl; }
A C++ Programing B C+Pr C Program D C+ P
Trang 2Câu 8 Giả sử ta khai báo “int *p, str[10];”, cho biết câu lệnh nào dưới đây đúng cú pháp
A p = &str; B p = str; C str++; D str = p;
Câu 9 Khai báo p và q là hai con trỏ: int *p, *q;
Trong số những câu lệnh dưới đây:
iii p = p + (10-3);
iv if(p == q) cout << “=”; else if(p != q) cout << “!”;
A Có đúng 1 câu lệnh hợp lệ
B Có đúng 2 câu lệnh hợp lệ
C Có đúng 3 câu lệnh hợp lệ
D Cả 4 câu lệnh đều hợp lệ
Câu 10 Trong số những khai báo sau đây:
iii struct a, b, c {int x; double y;};
Có bao nhiêu khai báo hợp lệ ?
Câu 11 Từ khóa nào dưới đây KHÔNG được sử dụng khi khai báo biến:
A auto B static C external D register
Câu 12 Cho lớp MyClass được định nghĩa như sau:
class MyClass{ public: MyClass() {cout << 'A';}
MyClass(char C) {cout << C;}
~MyClass() {cout << 'B';}};
Hãy cho biết kết xuất ra màn hình của đoạn chương trình sau:
1: void main() {
Câu 13 Cho lớp MyClass được định nghĩa như sau:
class MyClass{ public: MyClass() {cout << 1;}};
Câu lệnh khai báo sau xuất gì ra màn hình
MyClass a, b[2], *p[2];
A 1 B 111 C 11111 D Không xuất gì ra màn hình
Câu 14 Chọn lựa đáp án đúng nhất về hàm tạo (constructor) trên C++:
A Hàm tạo tự động được gọi khi một đối tượng mới của lớp được tạo ra
Trang 3B Khi khai báo, mỗi lớp bắt buộc phải có một hàm tạo
C Hàm tạo chỉ được gọi khi đối tượng được tạo ra bởi lệnh new
D Nếu nhiều hàm tạp được định nghĩa trong một lớp, thì khi một đối tượng được tạo ra, chương trình sẽ lần lượt gọi các hàm tạo theo một thứ tự ưu tiên
Câu 15 Giả sử trong chương trình có các khai báo hàm với các prototype như sau:
(2) void calcul(double a, int b, int c=0);
(3) void calcul(float a, float b);
Việc gọi hàm thông qua câu lệnh “calcul(1.0,1);” sẽ thực hiện hàm nào?
A (1)
B (2)
C (3)
D Chương trình báo lỗi vì khai báo quá nhiều hàm trùng tên
Câu 16 Định nghĩa hàm nào dưới đây hợp lệ
A int func(void){return 0.0;}
B int func(void a){return 0;}
C int func(int a, int b, float c=3.0) {return 0;}
D int func(int a*b, float c) {return 0;}
Câu 17 Hãy chọn khai báo HỢP LỆ trên C++ cho dãy arr gồm 4 phần tử có kiểu là char và được khởi
tạo các giá trị lần lượt là a, b, c, và d?
A char arr[] = {"a", "b", "c", "d"};
B char arr[] = {'a', 'b', 'c', 'd'};
C char arr[] = "abcd";
D char arr[] = 'abcd';
PHẦ : ỀN CHỖ TRỐNG (3 điểm, sinh viên chỉ cần trả lờ đú g 2 câu)
Câu 18 Hãy cho biết kết xuất ra màn hình của đoạn chương trình sau:
1: #include <iostream.h>
5: d += p; cout << d << ";"; return d; }
6: void main(){
8: cout << func(a + func(d)) << endl; }
Câu 19 Giả sử ta có khai báo như sau:
struct Foo1 {char str[32];
union Foo2 { char str[32];
Cho biết câu lệnh: cout << sizeof(x) << sizeof(y); xuất gì ra màn hình:
Trang 4Câu 20 Hãy cho biết kết quả xuất ra màn hình của đoạn chương trình sau:
Câu 21 Đoạn chương trình sau xuất gì ra màn hình : _
int s = 0, t[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
cout << s << endl;
Câu 22 Hãy cho biết kết xuất của đoạn chương trình sau: _
9: cout << a[0] << ";" << a[1] << ";" << b[0] << ";" << b[1]; }
Câu 23 Cho biết kết quả xuất ra màn hình của đoạn chương trình sau:
char st[20] = "HELLO Viet Nam\0\t\\";
cout << strlen(st) << " " << st << endl;
Câu 24 Định nghĩa hàm func như sau:
void func(int a, int& b) {a++; b++;}
Hãy cho biết sau khi thực hiện đoạn mã sau, giá trị của x, y lần lượt bằng bao nhiêu:
int x = 0, y = 1;
func(x, y);
Câu 25 Định nghĩa hàm fun như sau:
void fun(int *a, int *b){
int w; *a = *a + *a; w = *a; *a = *b; *b = w;
} Hãy cho biết kết xuất của đoạn chương trình sau: int x = 2.0, y = 5.0;
int *px = &x, *py = &y;
fun(px, py);
cout << x << ", " << y << endl;
Câu 26 Hãy cho biết kết xuất của đoạn chương trình sau: _
void main() {
Câu 27 Hãy chỉ ra các dòng bị lỗi trong đoạn chương trình sau: _
Trang 55: private:
Câu 28 Cho biết kết xuất của đoạn chương trình sau:
2: class A{public: A() {cout<<"A";}
Câu 29 Biết rằng chương trình sau xuất 23 ra màn hình, hãy điền vào chỗ trống
Câu 30 Khi cho thực thi đoạn chương trình sau:
Kết quả in ra màn hình là: _
PHẦN III: LẬP TRÌNH (3 điểm)
Câu 31 Viết hàm đệ quy int sumOddDigit(int n) thực hiện chức năng sau:
o Trả về -1 nếu n < 0
o Trả về tổng của các chữ số lẻ của số n nếu n >= 0
Ví dụ: nếu n = 1468952 thì kết quả là : 1 + 9 + 5 = 15
Trang 6
Câu 32 Viết hàm void In(int a[], int n) với n>0 là số phần tử của mảng a, hàm này in ra các phần tử
a[i] (0 ≤ i < n) nếu tồn tại phần tử a[j] sao cho a[i] là bội của a[j]
Ví dụ: nếu mảng a=[9,2,3,4,5,6] với n=6 thì các phần tử được in ra là a[0], a[3] và a[5] bởi vì
a[0] là bội của a[2], a[3] là bội của a[1] và a[5] là bội của a[1] và a[2]
Câu 33 Danh sách sinh viên là một mảng một chiều, dùng để lưu trữ thông tin của 300 sinh viên
Thông tin của sinh viên bao gồm: MSSV (kiểu int), họ tên (kiểu string), danh sách môn học
Và mỗi môn học bao gồm: Mã môn học (kiểu int), Tên môn học (kiểu string), điểm giữa kỳ (kiểu float), điểm cuối kỳ (kiểu float)
Yêu cầu:
a) Viết phần khai báo cấu trúc và biến dùng để lưu trữ thông tin của các sinh viên này
Trang 7
b) Viết hàm cho phép người dùng nhập thông tin về các sinh viên và thông tin của các môn Toán
Rời Rạc 1, Thiết kế hệ thống số và Kỹ Thuật Lập Trình
c) Viết chương trình in ra danh sách sinh viên có điểm trung bình trên 7.0 cho cả ba môn trình
bày trong câu b Biết rằng điểm trung bình = 0.4 x điểm giữa kỳ + 0.6 x điểm cuối kỳ
Trang 8
Họ và tên sinh viên: ………
MSSV:………
Điểm
Chủ nhiệm bộ môn
Chữ ký:
Họ tên:
Giảng viên ra đề Chữ ký:
Họ tên: