GIẢI ĐỀ KTLT K52 - ĐỀ Câu (0.75đ): Khi thay đổi khai báo: char MaTran [80][30] thành char MaTran [80][32] Ý nghĩa: thay đổi số cột từ 30 lên 32 để làm tăng tốc độ tính toán địa mảng Lí thay đổi: + Với mảng, tạo số, với kích thước mảng , phép nhân chuyển thành phép dịch bit, tối ưu tốc độ truy cập phần tử mảng + Ở đây, ta nhận thấy 30 ~32 = Do truy cập phần tử MaTran [i, j] trình biên dịch thay phép toán i*32+j phép toán (i *p+=2; //A[1]+=2 -> p+=2; //p=A[3] -> *p+=2; //A[3]+=2 -> A[]={6,13,34,19} A[]={6,15,34,19} A[]={6,15,34,19} A[]={6,15,34,21} Vậy mảng A sau thực đoạn mã lệnh là: A[] = {6,15,34,21} Câu (1.0đ): Tinh chỉnh đoạn mã lệnh sau giải thích lí do: for (int i = ; i < n; i++) { if ( x == y*8 ) { DoOneThing(i); } else if ( x == y/4 + z/4 ) { DoSomeThingElse(i); } else { DoAnotherThing(i); } } + Các cấu trúc rẽ nhánh if-else không phụ thuộc vòng lặp for, ta đưa vòng lặp + Biến đổi biểu thức nhân chia thành phép toán dịch bit để tăng tốc độ Đoạn lệnh sau tinh chỉnh: int i; if (x == y>2) { for(i=0; idata > q->data) { temp = p->data; p->data = q->data; q->data = temp; } cout>1)); return b; } Câu (0.75đ): Tính giá trị phần tử mảng A: int A[]={16,23,34,19}; int *p=A; //p=&A[0] *p+=2; //A[0]+=2 -> A[]={18,23,34,19} p+=2; //p=A[2] -> A[]={18,23,34,19} *p ; //p=A[1] -> A[]={18,23,34,19} *p+=2; //A[1]+=2 -> A[]={18,25,34,19} Vậy mảng A sau thực đoạn mã lệnh là: A[] = {18,25,34,19} Câu (1.0đ): Tinh chỉnh đoạn mã lệnh giải thích lí do: 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ác cấu trúc rẽ nhánh if-else không phụ thuộc vòng lặp for, ta đưa vòng lặp + Biến đổi biểu thức nhân chia thành phép toán dịch bit để tăng tốc độ Đoạn lệnh sau tinh chỉnh: int i; if (x == ydata; p->data = q->data; q->data = temp; } cout ... int temp; for(node *p=head; p!=NULL; p=p->next) for(node *q=p->next; q!=NULL; q=q->next) if (p->data > q->data) { temp = p->data; p->data = q->data; q->data = temp; } cout