CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự do – Hạnh phúc ĐÁP ÁN ĐỀ THI TỐT NGHIỆP CAO ĐẲNG NGHỀ KHOÁ 2 (2008 - 2011) NGHỀ: LẬP TRÌNH MÁY TÍNH MÔN THI: LÝ THUYẾT CHUYÊN MÔN NGHỀ Mã đề thi: DA LTMT - LT23
1/7
Điểm Câu Nội dung
I. Phần bắt buộc
2.5 điểm 1 Cơ sở dữ liệu
1.5 điểm A. Ngôn ngữ SQL
0.5 điểm 1. Select thisinh.masv,thisinh.hoten,thisinh.ngaysinh,lop.tenlop From thisinh,lop,khoa Where thisinh.malop=lop.malop and lop.makhoa=khoa.makhoa
and khoa.tenkhoa=”Công nghệ thông tin”;
2. Select thisinh.masv,thisinh.hoten,thisinh.ngaysinh,monthi.tenmonthi,ket qua.diemthi From thisinh,monthi,ketqua,lop 0.5 điểm Where thisinh.masv=ketqua.masv and monthi.mamt=ketqua.mamt
and thisinh.malop=lop.malop and lop.makhoa=”CNTT” and
year(thisinh.ngaysinh) Between 1989 And 1992;
3. Select thisinh.masv,thisinnh.hoten,monthi.tenmonthi,ketqua.diemthi
From thisinh,monthi,ketqua 0.5 điểm
Where thisinh.masv=ketqua.masv and monthi.mamt=ketqua.mamt
and ketqua.diemthi>=8;
1 điểm B. Ngôn ngữ đại số
T )1(
2
tenkhoa
Cong "
nghe
thong
tin
")
1. T1=thisinh*lop*khoa
T )2(
T
3
(
masv
,
hoten
,
ngay
sinh,
tenlop
)
T (
2. T1=thisinh*monthi*ketqua*lop
2
T )1(
makhoa
CNTT "
^"
year
(
ngay
sinh)
Between
1989
And
1992
)
0.3 điểm
0.3 điểm
T
3
T )2(
(
masv
,
hoten
,
ngay
sinh,
tenmonthi
,
diemthi
)
T (
3. T1=thisinh*monthi*ketqua
T2=
diemthi
T )1()8
0.4 điểm
T )2(
(
masv
,
hoten
,
tenmonthi
,
diemthi )
( T3=
2/7
2.5 điểm 2 Cấu trúc dữ liệu và giải thuật
1. Trình bày ý tưởng và giải thuật của thuật toán sắp xếp nổi bọt 1 điểm (bubble-sort)
*) Ý tưởng:
- Ban đầu có một dãy khóa k1,k2,k3….kn chưa được sắp
xếp
0.5 điểm
- Duyệt toàn bộ dãy khóa, tại mỗi bước quét dãy khóa từ cuối dãy, nếu gặp hai phần tử ien tiếp nghịch thế thì tiến hành đổi chỗ.
- Trong quá trình sắp xếp phần tử nhẹ hơn sẽ nổi lên trên,
phần tử nặng hơn sẽ chìm xuống dưới.
*) Giải thuật: void bubble-sort (mang a, int n) {
int i,j,m,tg;
for (i=0; i
0.5 điểm
for (j=n-1; j>=i+1; j--)
if (a[j]
1.5 điểm
}
2. Viết chương trình tạo một danh sách liên kết n nút trong đó
mỗi nút là nhân viên gồm các thông tin: họ tên, tuổi, thâm niên.
Duyệt danh sách trên và đưa ra danh sách và số lượng các nhân
viên có thâm niên >10 và tuổi < 40.
typedef struct NV
{ char ten[10];
int tuoi, tn;
0.3 điểm
};
typedef struct tagNode
{ HS infor;
struct tagNode *link;
}
Node;
Node *head, *p, *moi;
int n;
3/7
void nhap( )
{
HS tg ;
int i ;
head = NULL;
for ( i=0; i
moi = (Node *) malloc (sizeof(Node));
printf ( “ Nhap thong tin cho nut moi:”);
printf ( “ Nhap thong tin ten cua nhan vien:”); fflush(stdin);
gets ( tg.ten); fflush(stdin);
printf ( “ Nhap thong tin tuoi va tham nien cua nhan vien
moi:”); scanf(“%d%d”, &tg.tuoi, &tg.tn);
0.3 điểm
moi -> infor =tg;
if (head ==NULL)
{
head = moi;
p=moi;
p -> link =NULL;
}
else
{
p -> link = moi;
p= moi;
p -> link =NULL;
}
}
}
void duyet()
{
0.3 điểm
Node *p;
p=head;
printf ( “ danh sach nhan vien vua nhap la:”);
while ( p !=NULL)
{
printf(" \n \t %s \t%d \t%d ”, p->infor.ten, p->infor.tuoi, p-
>infor.tn) ;
p=p-> link ;
}
}
4/7
void duyet2()
{
Node *p;
p=head;
printf ( “ danh sach nhan vien co tham nien >10 va co tuoi < 40
la:”);
0.3 điểm
while ( p !=NULL)
{
if ((p -> infor.tuoi >10)&&( p -> infor.tn >10))
printf(" \n \t %s \t%d \t%d ”, p->infor.ten, p->infor.tuoi,
p->infor.tn) ;
p=p-> link ;
}
}
void main()
{
0.3 điểm
clrscr() ;
printf ( ” nhap so nut ”) ;scanf (“ %d”, &n);
nhap();
duyet();
duyet2();
getch();
}
3 Lập trình hướng đối tượng 2 điểm
1 điểm
- Phương pháp khai báo xây dựng hàm bạn cho nhiều lớp:
class B; /* Khai báo dẫn hướng lớp B*/
class A
{
private:
< Khai báo các thành phần riêng lớp A>;
public:
…
friend (< Tham số
hàm>);
};
class B
{
private:
< Khai báo các thành phần riêng lớp B>;
public:
…
5/7
friend (< Tham số
hàm>);
};
/*------- xây dựng hàm bạn-------*/
()
{
< Thân hàm bạn>;
}
6/7
1 điểm
class rectangle;
class cicrle
{
private:
int x,y;
float r;
public:
…
float getarea()
{
return 3.14*r*r;
}
friend float totalarea(rectangle o1,circle o2);
};
class circle
{
private:
int x,y;
float a,b;
public:
…
float getarea()
{
return a*b;
}
friend float totalarea(rectangle o1,circle o2);
};
float totalarea(rectangle o1,circle o2)
{
return (o1.getarea()+o2.getarea());
}
Cộng I
7 điểm
II. Phần tự chọn, do trường biên soạn
1
Cộng II
Tổng cộng (I+II)
………, ngày ………. tháng ……. năm ……
7/7
0.5 điểm
for (j=n-1; j>=i+1; j--)
if (a[j]
1.5 điểm
}
2. Viết chương trình tạo một danh sách liên kết n nút trong đó
mỗi nút là nhân viên gồm các thông tin: họ tên, tuổi, thâm niên.
Duyệt danh sách trên và đưa ra danh sách và số lượng các nhân
viên có thâm niên >10 và tuổi < 40.
typedef struct NV
{ char ten[10];
int tuoi, tn;
0.3 điểm
};
typedef struct tagNode
{ HS infor;
struct tagNode *link;
}
Node;
Node *head, *p, *moi;
int n;
3/7
void nhap( )
{
HS tg ;
int i ;
head = NULL;
for ( i=0; i
moi = (Node *) malloc (sizeof(Node));
printf ( “ Nhap thong tin cho nut moi:”);
printf ( “ Nhap thong tin ten cua nhan vien:”); fflush(stdin);
gets ( tg.ten); fflush(stdin);
printf ( “ Nhap thong tin tuoi va tham nien cua nhan vien
moi:”); scanf(“%d%d”, &tg.tuoi, &tg.tn);
0.3 điểm
moi -> infor =tg;
if (head ==NULL)
{
head = moi;
p=moi;
p -> link =NULL;
}
else
{
p -> link = moi;
p= moi;
p -> link =NULL;
}
}
}
void duyet()
{
0.3 điểm
Node *p;
p=head;
printf ( “ danh sach nhan vien vua nhap la:”);
while ( p !=NULL)
{
printf(" \n \t %s \t%d \t%d ”, p->infor.ten, p->infor.tuoi, p-
>infor.tn) ;
p=p-> link ;
}
}
4/7
void duyet2()
{
Node *p;
p=head;
printf ( “ danh sach nhan vien co tham nien >10 va co tuoi < 40
la:”);
0.3 điểm
while ( p !=NULL)
{
if ((p -> infor.tuoi >10)&&( p -> infor.tn >10))
printf(" \n \t %s \t%d \t%d ”, p->infor.ten, p->infor.tuoi,
p->infor.tn) ;
p=p-> link ;
}
}
void main()
{
0.3 điểm
clrscr() ;
printf ( ” nhap so nut ”) ;scanf (“ %d”, &n);
nhap();
duyet();
duyet2();
getch();
}
3 Lập trình hướng đối tượng 2 điểm
1 điểm
- Phương pháp khai báo xây dựng hàm bạn cho nhiều lớp:
class B; /* Khai báo dẫn hướng lớp B*/
class A
{
private:
< Khai báo các thành phần riêng lớp A>;
public:
…
friend (< Tham số
hàm>);
};
class B
{
private:
< Khai báo các thành phần riêng lớp B>;
public:
…
5/7
friend (< Tham số
hàm>);
};
/*------- xây dựng hàm bạn-------*/
()
{
< Thân hàm bạn>;
}
6/7
1 điểm
class rectangle;
class cicrle
{
private:
int x,y;
float r;
public:
…
float getarea()
{
return 3.14*r*r;
}
friend float totalarea(rectangle o1,circle o2);
};
class circle
{
private:
int x,y;
float a,b;
public:
…
float getarea()
{
return a*b;
}
friend float totalarea(rectangle o1,circle o2);
};
float totalarea(rectangle o1,circle o2)
{
return (o1.getarea()+o2.getarea());
}
Cộng I
7 điểm
II. Phần tự chọn, do trường biên soạn
1
Cộng II
Tổng cộng (I+II)
………, ngày ………. tháng ……. năm ……
7/7
moi = (Node *) malloc (sizeof(Node)); printf ( “ Nhap thong tin cho nut moi:”); printf ( “ Nhap thong tin ten cua nhan vien:”); fflush(stdin);
gets ( tg.ten); fflush(stdin);
printf ( “ Nhap thong tin tuoi va tham nien cua nhan vien
moi:”); scanf(“%d%d”, &tg.tuoi, &tg.tn);
0.3 điểm
moi -> infor =tg; if (head ==NULL) {
head = moi; p=moi; p -> link =NULL;
} else {
p -> link = moi; p= moi; p -> link =NULL;
}
}
} void duyet() {
0.3 điểm
Node *p; p=head; printf ( “ danh sach nhan vien vua nhap la:”); while ( p !=NULL) {
printf(" \n \t %s \t%d \t%d ”, p->infor.ten, p->infor.tuoi, p-
>infor.tn) ;
p=p-> link ;
}
}
4/7
void duyet2() {
Node *p; p=head; printf ( “ danh sach nhan vien co tham nien >10 va co tuoi < 40
la:”);
0.3 điểm
while ( p !=NULL) {
if ((p -> infor.tuoi >10)&&( p -> infor.tn >10))
printf(" \n \t %s \t%d \t%d ”, p->infor.ten, p->infor.tuoi,
p->infor.tn) ;
p=p-> link ;
}
} void main() {
0.3 điểm
clrscr() ; printf ( ” nhap so nut ”) ;scanf (“ %d”, &n); nhap(); duyet(); duyet2(); getch();
}
3 Lập trình hướng đối tượng 2 điểm
1 điểm
- Phương pháp khai báo xây dựng hàm bạn cho nhiều lớp:
class B; /* Khai báo dẫn hướng lớp B*/
class A
{
private:
< Khai báo các thành phần riêng lớp A>;
public:
…
friend
5/7
friend
6/7
1 điểm
class rectangle; class cicrle { private: int x,y; float r; public: … float getarea() { return 3.14*r*r; } friend float totalarea(rectangle o1,circle o2); }; class circle { private: int x,y; float a,b; public: … float getarea() { return a*b; } friend float totalarea(rectangle o1,circle o2); }; float totalarea(rectangle o1,circle o2) { return (o1.getarea()+o2.getarea()); }