Đề thi Cơ sở lập trình lớp TCK2 năm 2009 De_110

Câu 1.
a) Vẽ cây tưng ứng với định nghĩa đệ quy khi n = 5. (0.5đ)
Đề thi Cơ sở lập trình lớp TCK2 năm 2009 F510
b) Tính giá trị F(5). (0.5đ)

Code:

F(5) = F(4) + 2F(3) = F(3) + 2F(2) + 2(F(2) + 2F(1)) = F(2) + 2F(1) + 8 = 11

c) Viết chương trình tính giá trị của F(n). (1.đ)

Code:

#include <conio.h>
#include <stdio.h>
/*Ham tra ve so nguyen tinh gia tri Fibonacci thu n*/
int F(int n) {
   if(n==1 || n==2)
      return 1;
   else
      return F(n-1) + F(n-2);
}
/*Chuong trinh chinh*/
void main(){
   clrscr();
   int n;
   printf("Nhap vao gia tri cua n = ");
   scanf("%d",&n);
   printf("F(%d) = %d",n,F(n));
   getch();
}

Câu 2. Sử dụng thuật toán Bubble Sort sắp xếp danh sách theo thứ tự tăng dần. Danh sách gồm các phần tử sau: (2.đ)

Code:

16   11   -1   6   2   -2   1   3   8   7

Giải: Thể hiện thuật toán Bubble Sort từng bước theo dạng bảng
Đề thi Cơ sở lập trình lớp TCK2 năm 2009 Untitl10
Danh sách được sắp xếp là {-2,-1,1,2,3,6,7,8,11,16}

Câu 3. Cho mảng 1 chiều A gồm n số nguyên thực hiện các yêu cầu sau:

a) Viết thủ tục nhập, xuất mảng 1 chiều A với n phần tử, n cho trước. (1.đ)

Code:

//Thủ tục nhập mảng
void NhapMang(int A[], int n){
   for(int i = 0; i<n ; i++)
   {
      printf("Phan tu %d =",i);
      scanf("%d", &A[i]);
   }
}
// Thủ tục xuất mảng
void XuatMang(int A[], int n){
   printf("\n");
   for(int i = 0; i<n ; i++)
   {
      printf("%d\t",A[i]);
   }
}

b) Viết hàm trả về số nguyên tính tích n phần tử trong mảng A. (0.5đ)

Code:

long int Tich(int A[], int n){
   int temp = 1;
   for(int i = 0; i<n ; i++)
      temp*=A[i];
   return temp;
}


c) Viết hàm trả về số nguyên nhỏ nhất trong mảng A gồm n phần tử. (0.5đ)

Code:

int SoNguyenNhoNhat(int A[], int n){
   int min = A[0];
   for(int i = 1; i<n ; i++)
   if(min>A[i])
      min = A[i];
   return min;
}


d) Viết thủ tục sắp xếp mảng A theo thứ tự giảm dần sử dụng thuật toán Insertion Sort. (1.đ)

Code:

void HoanVi(int &a, int &b)
{
   int temp = a;
   a = b;
   b = temp;
}
void InsertionSort(int A[], int n)
{
   for(int i = 0; i<n-1; i++)
   {
      for(int j = i+1; j>0; j--)
      if(A[j] > A[j-1])
         HoanVi(A[j],A[j-1]);
   }
}

e) Viết hàm tìm kiếm phần tử x trong mảng A gồm n phần tử. Nếu tìm thấy trả về giá trị 1 ngược lại trả về giá trị 0. (1.đ)

Code:

char TimKiem(int A[], int n, int x){
   for(int i = 0; i<n ; i++)
   if(x==A[i])
      return 1;
   return 0;
}


Câu 4. Viết chương trình tính tổng và tích hai ma trận vuông A, B cùng cấp n. (2.đ)

Code:

#include <conio.h>
#include <stdio.h>
#define max 100
//Nhap ma tran vuong A cap n
void NhapMaTran(int A[max][max], int n)
{
   for(int i = 0; i<n ; i++)
   for(int j = 0; j<n ; j++)
   {
      printf("[%d][%d] =",i,j);
      scanf("%d", &A[i][j]);
   }
}
//Xuat ma tran vuong A cap n
void XuatMaTran(int A[max][max], int n)
{
   for(int i = 0; i<n ; i++)
   {
      printf("\n");
      for(int j = 0; j<n ; j++)
         printf("%d\t",A[i][j]);
   }

}
//Tong hai ma tran A va B luu vao trong ma tran C
void Tong(int A[max][max], int B[max][max], int C[max][max], int n){
   for(int i = 0; i<n ; i++)
   for(int j = 0; j<n ; j++)
      C[i][j] = A[i][j]+B[i][j];
}
//Tich hai ma tran A va B luu vao trong ma tran C
void Tich(int A[max][max], int B[max][max], int C[max][max], int n)
{
   for(int i = 0; i<n ; i++)
   for(int k = 0; k<n ; k++)
   {
      C[i][k] = 0;
      for(int j = 0; j<n ; j++)
         C[i][k] = C[i][k] + A[i][j]*B[j][k];
   }
}
void main()
{
   clrscr();
   int A[max][max],B[max][max], C[max][max], n;
   //nhap cap n
   printf("Nhap cap n= ");
   scanf("%d",&n);
   //nhap ma tran A
   printf("Nhap vao ma tran A\n");
   NhapMaTran(A,n);
   //nhap ma tran B
   printf("Nhap vao ma tran B\n");
   NhapMaTran(B,n);
   //In hai ma tran A va B vua nhap
   printf("Ma tran A vua nhap\n");
   XuatMaTran(A,n);
   printf("\nMa tran B vua nhap\n");
   XuatMaTran(B,n);
   //C=A+B
   Tong(A,B,C,n);
   printf("\nMa tran C=A+B\n");
   XuatMaTran(C,n);
   //C=A*B
   printf("\nMa tran C=A*B\n");
   Tich(A,B,C,n);
   XuatMaTran(C,n);
   getch();
}