Đề thi Kỹ thuật lập trình có lời giải

49 8.7K 27
Đề thi Kỹ thuật lập trình có lời giải

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Tổng hợp các đề thi cuối kỳ môn Kỹ thuật lập trình thầy Vũ Đức Vượng Đại học Bách Khoa Hà Nội. Tài liệu có đáp án và giải thích chi tiết giúp cho người đọc nắm vững các kiến thức về kỹ thuật lập trình C

Đề thi số Môn: Kỹ thuật lập trình (IT3040) Thời gian: 90 phút SV phép sử dụng tài liệu, không trao đổi tài liệu, máy tính, điện thoại dđ Câu (0.75đ): Tinh chỉnh đoạn mã sau giải thích: int letter_count(const char *buf, int size){ Câu (1đ): Tối ưu đoạn code sau: int i,m,n,p; int count, i; float c,*a,*b,*c,*d; count = 0; /* Gán giá trị biến cần thiết */ for (i = 0; i < size; i++) { for(int i=0; i= 'A' && buf[i] = 'a' && buf[i] = 'A' && buf[i] = 'a' && buf[i] B[1] = 4+1=5 c=*p ~ c=*p p => c=B[1]=5, p trỏ tới B[0] p+=3 => p trỏ tới B[3] *p+=c => B[3]+=5 => B[3] = 13 Vậy giá trị phần tử mảng sau thực đoạn lệnh B[] = {2,5,7,13,9,15} Câu (0.75đ): Đoạn code thực việc in phần tử chuỗi thành dòng Ở sử dụng vòng lặp do-while Do gặp lỗi xâu s xâu rỗng Sửa lại sau cách đổi sang vòng lặp for: for (i = 0; s[i] != '\0'; i++){ putchar(s[i]); putchar('\n'); } Phát lỗi: 0.5đ, sửa lỗi: 0.25đ Câu (2.5đ): Hàm đệ quy 1.25đ, hàm không đệ quy 1.25đ //HÀM ĐỆ QUY void chuyenCoSo(int base, int number) { char digits[]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}; if(number0) { output[i++] = digits[number%base]; number = number/base; } i ; //Xuất kết for(;i>=0;i ) { printf("%c",output[i]); } } Câu (1đ): Ở đề yêu cầu phải tối giản phân số Do ta cần đưa vào hàm tìm ước chung lớn tử số mẫu số Xét hàm tìm UCLN (sử dụng đệ quy cho nhanh gọn) (0.25đ) //Cách 1: int UCLN(int a, int b) { return b ? UCLN(b, a % b) : a; } //Cách 2: int UCLN( int x, int y) { if(x==y) return x; else if(x>y) return UCLN(x-y,y); else return UCLN(x,y-x); } Xây dựng cấu trúc phân số (0.25đ): typedef struct PhanSo{ int TuSo, MauSo; }PS; Đa hoá toán tử ~ có chức tối giản phân số (0.5đ) PS operator ~ (PS &a){ a.TuSo/=UCLN(a.TuSo, a.MauSo); a.MauSo/=UCLN(a.TuSo, a.MauSo); return a; } Câu (1đ): Tối ưu đoạn code… + Đặt biểu thức bất biến số (0.25đ): float temp1=47-5*sin(c)+3*tan(c); Có thể số bạn đặt thêm: float temp2=17*sin(c); Tuy nhiên biểu thức m = … không phụ thuộc vòng lặp for nên ta không cần dùng biến temp2 mà cần bỏ biểu thức m = … khỏi vòng lặp for xong + Thay đổi phép nhân với 2k phép dịch bit để tăng tốc độ tính toán (0.25đ): 16*n+512*p = n p trỏ tới A[4] *p+=1 => A[4] +=1 => A[4] = Vậy giá trị phần tử mảng sau thực đoạn lệnh A[] = {5,7,19,39,3,6} Câu (2.5đ): Hàm đệ quy 1.25đ, hàm không đệ quy 1.25đ //HÀM ĐỆ QUY void chuyenCoSo(int base, int number) { char digits[]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}; if(number0) { output[i++] = digits[number%base]; number = number/base; } i ; //Xuất kết for(;i>=0;i ) { printf("%c",output[i]); } } Câu (1đ): Xây dựng cấu trúc số phức sau: (0.5đ) typedef struct SoPhuc{ float Thuc, Ao; }SP; Đa hoá toán tử ~ có chức trả số phức liên hợp với số phức ban đầu: (0.5đ) SP operator ~ (SP &a){ a.Ao = - a.Ao; return a; } Câu (1đ): Tối ưu đoạn code… + Đặt biểu thức bất biến số (0.25đ): float temp1=127+6*tan(d)-13*sin(d); Có thể số bạn đặt thêm: float temp2=35*sqrt(d); Tuy nhiên biểu thức y = … không phụ thuộc vòng lặp for nên ta không cần dùng biến temp2 mà cần bỏ biểu thức y = … khỏi vòng lặp for xong + Thay đổi phép nhân với 2k phép dịch bit để tăng tốc độ tính toán (0.25đ): 8*x+128*z = x>= 2) b += ((x & 1) ^ (x & 2)); return b; } Sửa lại hàm cho với yêu cầu đặt Lưuý : sinh viên khôngđư dùng lệnh “if” ợc Câu : (1 đ) Hàm CompareFloats() dùng để so sánh hai số thực x y : Hàm trả giá trị dương x > y, trả giá trị x = y, trả giá trị âm x < y Hãy trường hợp sai sót hàm chỉnh sửa để hàm thực trường hợp cho kết hợp lý int CompareFloats(void *p1, void *p2) { float *fp1 = (float *) p1; float *fp2 = (float *) p2; return (int) ( *fp1 - *fp2) ; } Câu : (0,75 đ) Tính giá trị phần tử mảng A sau thực đoạn lệnh : int A[ ] = {16, 23, 34, 19} ; int *p = A ; *p += ; p += ; *p - - ; *p += ; Đề thi môn Kĩ thuật lập trình – CNTT K52 (thày Vũ Đức Vượng) – Đề số Câu : (1 đ) Hãy tinh chỉnh đoạn mã lệnh sau kỹ thuật tạo vị trí giải thích lý (Biết n > 20, x,y,z số nguyên hàm đoạn lệnh tối ưu) for ( int i = ; i < n ; i++ ) { if ( x == y *16 ) DoOneThing(i); else if ( x == y/8 + z/8 ) DoSomeThingElse(i); else DoAnotherThing(i); } Câu : (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 cách sửa đoạn khai báo : char MaTran [80][60]; thành char MaTran [80][64]; Em cho biết ý nghĩa, tác d ụng việc sửa đổi ? Câu : (0,75 đ) Hãy cải tiến đoạn mã lệnh sau ( b số) : for ( i = 0; i < 10; i ++ ) { printf (“%f\n”, i*2*sin(b)); } Câu : (2,0 đ) Cho a b hai mảng cấp phát động với kích thước số phần tử mảng chứa hai dãy số thực A = [a1, a2, … , an] 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 danh sách B (và tham số khác cần …) Đề thi môn Kĩ thuật lập trình – CNTT K52 (thày Vũ Đức Vượng) – Đề số Đầu : trỏ đến danh sách C; danh sách bao gồm : - Tất số thuộc A không thuộc B - Tất số thuộc B không thuộc A Bên cạnh đó, thông qua tham số truyền, gửi số phần tử mảng kết C Yêu cầu : phong cách lập trình thống nhất, thích đầy đủ, áp dụng kĩ thuật viết mã nguồn hiểu quả, bẫy lỗi lập trình phòng ngừa áp dụng Liệt kê kỹ thuật viết mã nguồn hiểu quả, bẫy lỗi lập trình phòng ngừa áp dụng Câu : (2 đ) Cho danh sách liên kết đơn với nút khai báo sau : struct node { int info; struct node *next; }; Hãy xây dựng hàm (hoặc phương thức) Sort để xếp danh sách theo thứ tự giảm dần info ... m=demSoPtLe(head); int *a=new int [m]; int i=0,min; for(tmp=head;tmp!=NULL;tmp=tmp->next){ if((tmp->data)%2==1) a[i++]=tmp->data; //nếu gặp phần tử lẻ lưu vào mảng a } min=a[0]; for(i=0; inext){ if((tmp->data)%2==0) a[i++]=tmp->data; //nếu gặp phần tử chẵn lưu vào mảng a } max=a[0]; for(i=0; i

Ngày đăng: 08/01/2016, 17:27

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan