Đề thi môn K ĩ thuậ t l ậ p trình – CNTT K52 (thày V ũ Đức Vượ ng) – Đề số 2
Đề thi số 2 Môn : K ĩ thuật lập trình (IT3040) Thờ i gian : 90 phút SV đượ c phép sử dụng tài liệu, nhưng không đượ c dùng máy tính, điện thoại DĐ Câu 1 : (0.75 đ) Cần viết một đoạn lệnh in ra k ết quả so sánh hai số nguyên : nếu hai số bằng nhau nhau thì in ra thông báo “Bang nhau”, ngượ c lại in ra thông báo “Khong bang nhau”. ng hợ p in ra thông Quan sát đoạn lệnh dưới đây và chỉ ra tất cả các trườ ng báo. Sửa lại đoạn lệnh cho đúng vớ i yêu cầu đặt ra.
int i, j; … /* Gán giá trị cho i và j */ … if ( i = j) printf (“Bang nhau \n”); else printf (“Khong bang nhau \n”); Câu 2 : (1,0 đ) Cho một số nguyên đượ c biểu di d iễn dướ i d ạng nhị phân, cần viết một hàm để tính số cặp bit liền k ề (bit chẵn và lẻ) có giá trị khác nhau. Ví dụ: Dạng nhị phân của số 52 là “00 11 01 00” hàm trả về giá trị 1 (chỉ có cặp bit 01 là cặp bit liề n k ề có giá trị khác nhau). Dạng nhị phân của số 102 là “01 10 01 10” hàm trả về giá trị 4 (có 4 cặp bit liền k ề có giá trị khác nhau). Hãy chỉ ra các trườ ng ng hợ p hàm oddeven() được định ngh ĩa dưới dướ i đây trả trả về k ết quả sai ?
1
Đề thi môn K ĩ thuậ t l ậ p trình – CNTT K52 (thày V ũ Đức Vượ ng) – Đề số 2 int oddeven (unsigned int x) { int b; for (b = 0; x! = 0; x >>= 2) b += ((x & 1) ^ (x & 2)); return b; } Sửa lại hàm dùng lệnh “if”
cho đúng vớ i yêu cầu đặt ra. Lưuý : sinh viên khôngđư
ợ c
Câu 3 : (1 đ) Hàm CompareFloats() dưới đây dùng để so sánh hai số thực x và y : Hàm trả về giá trị dương nếu x > y, trả về giá trị 0 nếu x = y, trả về giá trị âm nếu x < y. Hãy chỉ ra các trườ ng hợ p sai sót của hàm và chỉnh s ửa để hàm thực hiện đúng trong mọi trườ ng hợ p và cho k ết quả hợ p lý hơn.
int CompareFloats(void *p1, void *p2) { float *fp1 = (float *) p1; float *fp2 = (float *) p2; return (int) ( *fp1 - *fp2) ; } Câu 4 : (0,75 đ) Tính giá trị của các phần t ử của mả ng A sau khi thực hiện đây :
đoạ n lệnh dướ i
int A[ ] = {16, 23, 34, 19} ; int *p = A ; *p += 2 ; p += 2 ; *p - - ; *p += 2 ;
2
Đề thi môn K ĩ thuậ t l ậ p trình – CNTT K52 (thày V ũ Đức Vượ ng) – Đề số 2 Câu 5 : (1 đ) Hãy tinh chỉnh đoạn mã lệnh sau bằng mọi k ỹ thuật và tạo mọi vị trí có thể và giải thích lý do (Biết rằng n > 20, x,y,z là các số nguyên và các hàm trong đoạn lệnh đã tối ưu). for ( int i = 0 ; i < n ; i++ ) { if ( x == y *16 ) DoOneThing(i); else if ( x == y/8 + z/8 ) DoSomeThingElse(i); else DoAnotherThing(i); } Câu 6 : (0,75 đ) Một lập trình viên chuyên nghi ệp tiến hành tinh chỉnh chương tr ình bằng cách sửa các đoạ n khai báo : char MaTran [80][60]; thành char MaTran [80][64]; Em hãy cho biết ý ngh ĩa, tác d ụng của việc sửa đổi
đó ? Câu 7 : (0,75 đ) Hãy cải tiến đoạn mã lệ nh sau ( b là hằng số) : for ( i = 0; i < 10; i ++ ) { printf (“%f\n”, i*2*sin(b)); } Câu 8 : (2,0 đ) Cho a và b là hai mảng đượ c cấp phát động với kích thướ c bằng đúng số phầ n tử của mảng và chứa hai dãy các số thực A = [a1, a2, … , an] và B = [b1, b2, … , bm] Sử dụng ngôn ngữ lập trình C/C++ để viết hàm … DiffElem(…) vớ i :
Đầu vào : danh sách A và danh sách B (và các tham s ố khác nếu cần …)
3
Đề thi môn K ĩ thuậ t l ậ p trình – CNTT K52 (thày V ũ Đức Vượ ng) – Đề số 2
Đầu ra : con trỏ đến danh sách C; danh sách này bao gồm : - Tất cả các số thuộc A và không thuộc B - Tất cả các số thuộc B và không thuộc A Bên cạnh đó, thông qua tham số truyền, gửi ra số phần tử của mảng k ết quả C Yêu cầu : phong cách lập trình thống nhất, chú thích đầy đủ, áp dụng các ĩ thuật viết mã nguồn hiểu quả, bẫy lỗi và lập trình phòng ngừa đã áp dụng. k Liệt kê các k ỹ thuật viết mã nguồn hiểu quả, bẫy lỗi và lập trình phòng ngừa đã áp dụng. Câu 9 : (2 đ) Cho một danh sách liên k ết đơn với các nút được khai báo như sau : struct node { int info; struct node *next; }; Hãy xây dựng hàm (hoặc tự giảm dầ n của info.
phương thức) Sort để sắp xếp danh sách theo thứ
4