Bài thực hành môn Kỹ thuật lập trình | Trường Đại học Bách Khoa Hà Nội

Thứ tự thực hiện các phép toán trong C: 1.1 Viết chương trình nhập các tham số tương ứng và tính giá trị các biểu thức sau :
int a,b,c,d; a=b=c++=d=10; in ra a,b,c,d; a=b=++c=d=10;
in ra a,b,c,d. Giữ nguyên đoạn code trên, sửa dòng khai báo thành int a,c,d,b; chạy chương trình và xem kết quả và đưa ra nhận xét

Experiment and Exercise Scenario
CN CNTT
1/9
Autor : Vũ ũc Vượng
Course Title: Programming Technique
Semester : 04
Product Code: IT3540
Experiment and Exercise Scenario
CN CNTT
2/9
Semester: 4 Course Title: Programming Technique
Week: 5+ 6
st
Theme: Basics of C,C++
No.
Lý thuyết
Thc hành
1
Th t thc hin các phép
toán trong C
1.1 Viết chương trình nhập các tham s tươngng và tính giá tr các biu thc sau :
int a,b,c,d;
a=b=c++=d=10;
in ra a,b,c,d
a=b=++c=d=10;
in ra a,b,c,d
Gi nguyên đoạn code trên, sa dòng khai báo thành int a,c,d,b; chy chương
trình và xem kết qu và đưa ra nhận xét
1.2 Viết chương trình nhập các tham s tươngng và tính giá tr các biu thc sau :
Int a,b
Nhp a
b= a++ + 2 * a;
in ra a,b
b= ++a + 2 * a;
in ra a,b
b= (2*a)+ ++a;
in ra a,b
b= (2*a)+ a++;
in ra a,b
b= ++a + (2*a);
in ra a,b
b= a++ + (2*a);
a=10;
printf(" \n a++,a = %d, %d",a++,a);
a=10;
printf(" \n ++a,a = %d, %d",++a,a);
a=10;
printf(" \n a,a++ = %d, %d",a,a++);
Experiment and Exercise Scenario
CN CNTT
3/9
a=10;
printf(" \n a,++a = %d, %d",a,++a);
Chạy chương trình trên TURBO C++, VC++ và GCC, xem kết qu và đưa ra nhận xét
v th t thc hin các phép toán, cùng cơ chế truyn tham s cho hàm ca C
2
Array
2.1 Viết CT nhp vào 1 xâu t va in ra s ln xut hin ca mi t trong xâu.
Nhp vào 2 t ri in ra xâu vi t th nht ( nếu có) trong xâu được thay thế
bng ký t th 2.Trình bày gii pháp
2.2 Viết chương trình tính tổng 2 ma trn
2.3 Viết chương trình tính tích 2 ma trận
3
Pointer
3.1 Chép chương trình sau, chạy, xem kết qu ri tìm và chnh sa li :
#include <stdio.h>
#include <conio.h>
void main(){
int a,b,c;
int *p=&c;
c = 3;
/* divide c by itself */
a = c/*p;
b = c /* set b to 3 */ ;
printf("a=%d, b=%d, c=%d\n", a,b,c);
getch();
}
4
Functions
XD hàm tính căn bc ba ca 1 s thc, ri nhp dãy các s thc x1, x2, ..., xn
tính tng :
Biết rng :
Experiment and Exercise Scenario
CN CNTT
4/9
5
Pointer và cp phát b nh
động
4.1 Viết lại chương trình 2.2,2.3 dùng cấp phát b nh động ( s dng mng 1 chiu,
và 2 chiu)
Semester: 4 Course Title: Programming Technique
Week: 7+ 8+ 9+10
nd
Theme: Advanced C,C+ +
No.
Lý thuyết
Thc hành
6
Overloading Operator
6.1 Xây dng cu trúc phân s , hàm tin ích xác lp phân s ( setpPS(int,int), hàm ti gin phân s,
và đa năng hóa các toán t +,-,*,/, ++,--
6.2 áp dng cu trúc phân s cung các hàm va toán t trên, viết chương trình nhp các phân s
p1,p2,p3 và s nguyên a,b ri tính và in ra giá tr các biu thc sau :
b= a++ + 2 * a;
b= ++a + 2 * a;
b= (2*a)+ ++a;
b= (2*a)+ a++;
b= ++a + (2*a);
p2= p1++ + (2*p1);
p2= p1++ + 2 * p1;
p2= ++p1 + 2 * p1;
p2= (2*p1)+ ++p1;
Experiment and Exercise Scenario
CN CNTT
5/9
p2= (2*p1)+ p1++;
p2= ++p1 + (2*p1);
p2= p1++ + (2*p1);
Chạy chương trình trên TURBO C++, xem kết qu đưa ra nhn xét cách thc hin phép toán ++,
-- ca trình dch, so sánh vi cách thc thc hin ca toán t ++,-- do ta định nghĩa ! ( De de
dang so sanh ket qua, hay nhap a=1 va p1=(1/1) . Sv can lien he voi bang thu tu thuc hien cac phep
toan, va dua ra nhan xet ve cach thuc cai dat bieu thuc cua trinh dich tuong ung !!!)
(Liên h vi bài 1.2 !!!)
6.3 Xay dungcau truc Time va da nang hoa cac toan tu can thiet
7
Array + overloading operator
7.1 xây dng cu trúc matrix với các trường kiểu nguyên R C đ xác định s hàng s ct ca
ma trận, trường float ** data để cp phát b nh động dùng mng hai chiu. Và dịnh nghĩa các phép
toán +, * để cng và nhân 2 ma trn
** sau khi cài đặt xong c phép toán, hãy khai báo các matran a,b,c,d tương ng và thc hin biu
thc a=b+c; in ra a, d=b*c; in ra d;
Sau do cho a=b+c; và d=b*c; 2000 ln ( lp); ri in kết qu a,d so sánh vi các kết qu trên !!
( v nguyên tc thì a và d phải không đổi, vì b,c không đổi thì chy bao nhiêu ln, kết qu vn không
thay đổi, nhưng thực tế ???, hãy tìm hiu nguyên nhân ti sao !!! )
8
Array and Pointer
8.1 Chép chương trình sau, chy, xem kết qu gii thích những đim bất thường trong chương
trình :
#include <stdio.h>
#include <conio.h>
#include <string.h>
void main(){
int i,m[5];
char x1[10],x2[10];
char *s1,*s2;
for (i=1; i<7;i++) i[m] =i*2;
for (i=1;i<7;i++) printf(“\n m[%d] = %d”,i,m[i]);
Experiment and Exercise Scenario
CN CNTT
6/9
s1= new char[10];
s2= new char[10];
strcpy(s2,” xau 2”);
strcpy(s1,”Dai hoc bach khoa ha noi”);
printf(“\n s1= %s”,s1);
printf(“\n s2= %s”,s2);
strcpy(x2,” xau x2”);
strcpy(x1,”Dai hoc bach khoa ha noi”);
printf(“\n x1= %s”,x1);
printf(“\n x2= %s”,x2);
getch();
}
( Luu y ve pham vi cua mang, cach su dung i[m]=…, giai thich tai sao ket qua doi voi mang m van
dung va chi ra duoc nguy co tiem an. So sanh s1,s2 voi x1,x2, giai thich co che thuc hien !)
9
Recursive De qui
9.1 Viết hàm đệ qui tính tng các ch s chn( l) ca s nguyê n dương n
9.2 Viết Hàm đệ qui đổi 1 s nguyên dng thập phân sang 1 cơ số bt k (2,8,16)
9.3Tính S(n) = s qrt(1 + s qrt(2 + sqrt (3 + ...s qrt (n-1 + sqrt (n)))))
9.4 Tính S(n) = 1/2 + 3/4 + 5/6 + 7/8 +9/10 + .....
9.5* Cho hai dãy s X và Y vi :
X ={ 1, 4, 12,56, 880, .... }
Y ={ 1, 2, 16,384,43008, ….}
Hãy viết CT đệ qui tính tng :
S(n) = X(1)+X(2) + ……X(n) +Y(1)+Y(2)+ ….. + Y(n)
10
Các bài tập trong slide chương IV, phần đệ qui : Luu y : 1 so giai thuat cai dat trong slide tren lop co
nhung sai sot, khi thuc hien cac bai tap nay, sv can chi ra nhung diem sai sot trong cacgiai thuat do !
11
Programming Style
11.1 Ap dung cac ky thuat phan tich, thiet ke va cai dat cung phong cach lap trinh trong vi du
Text formatting. Tien hanh phan tich thiet ke va cai dat bai toan sau :
Cho mot xau ky tu gom day cac so co 3 chu so co dang nhu sau :
101,102,103,104,201,202,205,206,207,208,209,210,212,215,301,302,303,304,305,401,403 .”
( do dai tuy y)
Experiment and Exercise Scenario
CN CNTT
7/9
Hay to chuc lai de in ra ket qua tren nhieu dong, moi dong khong qua 30 ky tu. Noi dung moi
dong co dang nhu sau :
101-104,201,202,205-210,212,215
301-305,401,403 .
(tuc la neu day cac so lien tuc gom nhieu hon 3 so thi dua ve dang somin-somax)
Tu nay ve sau : cac bai tap (ke ca bai thi-kiem tra) phai tien hanh theo trinh tu :
+Dua ra bai toan
+Phan tich cac yeu cau
+Thiet ke so bo (pseudocode)
+Cai dat ( dua ra Ct nguon cuoi cung, cac buoc phan tich,trien khai chi tiet step by
step co the bo qua) Dong thoi phai ap dung moi ky thuat, phong cach nhu da hoc
trong chuong III
11.2 M rng BT trên : Bài toán tính tin png ks tính tiền phòng cho 1 đoàn
khách ti khách sn, t thc tế s dng phòng của khách người ta đã trích rút t CSDL
ra các thông tin cn thiết và lưu vào mảng với các thông tin như sau :
Experiment and Exercise Scenario
CN CNTT
8/9
T kết qu dạng như trên, ngươi ta phải đưa ra kết qu i dng sau :
Thi gian
Thành tin
01/01/2007 05/01/2007
900
880
07/01/2007 09/01/2207
90
110
07/01/2007 10/01/2007
405
825
09/01/2007 10/01/2007
45
Thi gian
S người
S phòng
Giá tin
S ngày
01/01/2007 05/01/2007
1
105
45
4
01/01/2007 05/01/2007
1
106
45
4
01/01/2007 05/01/2007
1
107
45
4
01/01/2007 05/01/2007
1
109
45
4
01/01/2007 05/01/2007
2
101
45
4
01/01/2007 05/01/2007
2
302
45
4
01/01/2007 05/01/2007
2
205
55
4
01/01/2007 05/01/2007
2
206
55
4
01/01/2007 05/01/2007
2
207
55
4
01/01/2007 05/01/2007
2
208
55
4
07/01/2007 09/01/2007
1
104
45
2
07/01/2007 09/01/2007
2
304
55
2
07/01/2007 10/01/2007
1
105
45
3
07/01/2007 10/01/2007
1
106
45
3
07/01/2007 10/01/2007
1
107
45
3
07/01/2007 10/01/2007
2
305
55
3
07/01/2007 10/01/2007
2
306
55
3
07/01/2007 10/01/2007
2
307
55
3
07/01/2007 10/01/2007
2
308
55
3
07/01/2007 10/01/2007
2
401
55
3
09/01/2007 10/01/2007
1
201
45
1
09/01/2007 10/01/2007
2
406
55
1
Experiment and Exercise Scenario
CN CNTT
9/9
55
3310
(Ghi chú : K = s ng Khách mi phòng, D = s ngày, R = S Phòng)
Hãy viết chương trình thực hin vic trên ( mảng 1 được khi to khi khai báo,
viết ct để to mng 2 )
| 1/9

Preview text:

Experiment and Exercise Scenario CN CNTT
Autor : Vũ ũức Vượng

Course Title: Programming Technique Semester : 04 Product Code: IT3540 1/9
Experiment and Exercise Scenario CN CNTT Semester: 4
Course Title: Programming Technique Week: 5+6st Theme: Basics of C,C++ No. Lý thuyết Thực hành 1
Thứ tự thực hiện các phép
1.1 Viết chương trình nhập các tham số tương ứng và tính giá trị các biểu thức sau : toán trong C int a,b,c,d; a=b=c++=d=10; in ra a,b,c,d a=b=++c=d=10; in ra a,b,c,d
Giữ nguyên đoạn code trên, sửa dòng khai báo thành int a,c,d,b; chạy chương
trình và xem kết quả và đưa ra nhận xét
1.2 Viết chương trình nhập các tham số tương ứng và tính giá trị các biểu thức sau : Int a,b Nhập a b= a++ + 2 * a; in ra a,b b= ++a + 2 * a; in ra a,b b= (2*a)+ ++a; in ra a,b b= (2*a)+ a++; in ra a,b b= ++a + (2*a); in ra a,b b= a++ + (2*a); a=10;
printf(" \n a++,a = %d, %d",a++,a); a=10;
printf(" \n ++a,a = %d, %d",++a,a); a=10;
printf(" \n a,a++ = %d, %d",a,a++); 2/9
Experiment and Exercise Scenario CN CNTT a=10;
printf(" \n a,++a = %d, %d",a,++a);
Chạy chương trình trên TURBO C++, VC++ và GCC, xem kết quả và đưa ra nhận xét
về thứ tự thực hiện các phép toán, cùng cơ chế truyền tham số cho hàm của C 2 Array
2.1 Viết CT nhập vào 1 xâu ký tự va in ra số lần xuất hiện của mỗi ký tự trong xâu.
Nhập vào 2 ký tự rồi in ra xâu với ký tự thứ nhất ( nếu có) trong xâu được thay thế
bằng ký tự thứ 2.Trình bày giải pháp
2.2 Viết chương trình tính tổng 2 ma trận
2.3 Viết chương trình tính tích 2 ma trận 3 Pointer
3.1 Chép chương trình sau, chạy, xem kết quả rồi tìm và chỉnh sửa lỗi : #include #include void main(){ int a,b,c; int *p=&c; c = 3; /* divide c by itself */ a = c/*p; b = c /* set b to 3 */ ;
printf("a=%d, b=%d, c=%d\n", a,b,c); getch(); } 4 Functions
XD hàm tính căn bậc ba của 1 số thực, rồi nhp dãy các s thc x1, x2, ..., xn và tính tng : Biết rằng : 3/9
Experiment and Exercise Scenario CN CNTT 5
Pointer và cấp phát bộ nhớ 4.1 Viết lại chương trình 2.2,2.3 dùng cấp phát bộ nhớ động ( sử dụng mảng 1 chiều, động và 2 chiều) Semester: 4
Course Title: Programming Technique Week: 7+8+ 9+10nd Theme: Advanced C,C++ No. Lý thuyết Thực hành 6 Overloading Operator
6.1 Xây dựng cấu trúc phân số , hàm tiện ích xác lập phân số ( setpPS(int,int), hàm tối giản phân số,
và đa năng hóa các toán tử +,-,*,/, ++,--
6.2 áp dụng cấu trúc phân số cung các hàm va toán tử trên, viết chương trình nhập các phân số
p1,p2,p3 và số nguyên a,b rồi tính và in ra giá trị các biểu thức sau : b= a++ + 2 * a; b= ++a + 2 * a; b= (2*a)+ ++a; b= (2*a)+ a++; b= ++a + (2*a); p2= p1++ + (2*p1); p2= p1++ + 2 * p1; p2= ++p1 + 2 * p1; p2= (2*p1)+ ++p1; 4/9
Experiment and Exercise Scenario CN CNTT p2= (2*p1)+ p1++; p2= ++p1 + (2*p1); p2= p1++ + (2*p1);
Chạy chương trình trên TURBO C++, xem kết quả và đưa ra nhận xét cách thực hiện phép toán ++,
-- của trình dịch, và so sánh với cách thức thức hiện của toán tử ++,-- do ta định nghĩa ! ( De de
dang so sanh ket qua, hay nhap a=1 va p1=(1/1) . Sv can lien he voi bang thu tu thuc hien cac phep
toan, va dua ra nhan xet ve cach thuc cai dat bieu thuc cua trinh dich tuong ung !!!)
(Liên hệ với bài 1.2 !!!)
6.3 Xay dungcau truc Time va da nang hoa cac toan tu can thiet 7 Array + overloading operator
7.1 xây dựng cấu trúc matrix với các trường kiểu nguyên R và C để xác định số hàng và số cột của
ma trận, trường float ** data để cấp phát bộ nhớ động dùng mảng hai chiều. Và dịnh nghĩa các phép
toán +, * để cộng và nhân 2 ma trận
** sau khi cài đặt xong các phép toán, hãy khai báo các matran a,b,c,d tương ứng và thực hiện biểu
thức a=b+c; in ra a, d=b*c; in ra d;
Sau do cho a=b+c; và d=b*c; 2000 lần ( lặp); rồi in kết quả a,d và so sánh với các kết quả ở trên !!
( về nguyên tắc thì a và d phải không đổi, vì b,c không đổi thì chạy bao nhiêu lần, kết quả vẫn không
thay đổi, nhưng thực tế ???, hãy tìm hiểu nguyên nhân tại sao !!! ) 8 Array and Pointer
8.1 Chép chương trình sau, chạy, xem kết quả và giải thích những điểm bất thường trong chương trình : #include #include #include void main(){ int i,m[5]; char x1[10],x2[10]; char *s1,*s2;
for (i=1; i<7;i++) i[m] =i*2;
for (i=1;i<7;i++) printf(“\n m[%d] = %d”,i,m[i]); 5/9
Experiment and Exercise Scenario CN CNTT s1= new char[10]; s2= new char[10]; strcpy(s2,” xau 2”);
strcpy(s1,”Dai hoc bach khoa ha noi”); printf(“\n s1= %s”,s1); printf(“\n s2= %s”,s2); strcpy(x2,” xau x2”);
strcpy(x1,”Dai hoc bach khoa ha noi”); printf(“\n x1= %s”,x1); printf(“\n x2= %s”,x2); getch(); }
( Luu y ve pham vi cua mang, cach su dung i[m]=…, giai thich tai sao ket qua doi voi mang m van
dung va chi ra duoc nguy co tiem an. So sanh s1,s2 voi x1,x2, giai thich co che thuc hien !) 9 Recursive – De qui
9.1 Viết hàm đệ qui tính tổng các chữ số chẵn( lẻ) của số nguyê n dương n
9.2 Viết Hàm đệ qui đổi 1 số nguyên dạng thập phân sang 1 cơ số bất kỳ (2,8,16)
9.3Tính S(n) = s qrt(1 + s qrt(2 + sqrt (3 + ...s qrt (n-1 + sqrt (n)))))
9.4 Tính S(n) = 1/2 + 3/4 + 5/6 + 7/8 +9/10 + .....
9.5* Cho hai dãy số X và Y với :
X ={ 1, 4, 12,56, 880, .... }
Y ={ 1, 2, 16,384,43008, ….}
Hãy viết CT đệ qui tính tổng :
S(n) = X(1)+X(2) + ……X(n) +Y(1)+Y(2)+ ….. + Y(n) 10
Các bài tập trong slide chương IV, phần đệ qui : Luu y : 1 so giai thuat cai dat trong slide tren lop co
nhung sai sot, khi thuc hien cac bai tap nay, sv can chi ra nhung diem sai sot trong cacgiai thuat do ! 11 Programming Style
11.1 Ap dung cac ky thuat phan tich, thiet ke va cai dat cung phong cach lap trinh trong vi du
“Text formatting”. Tien hanh phan tich thiet ke va cai dat bai toan sau :

Cho mot xau ky tu gom day cac so co 3 chu so co dang nhu sau :
“101,102,103,104,201,202,205,206,207,208,209,210,212,215,301,302,303,304,305,401,403… .” ( do dai tuy y)
6/9
Experiment and Exercise Scenario CN CNTT
Hay to chuc lai de in ra ket qua tren nhieu dong, moi dong khong qua 30 ky tu. Noi dung moi dong co dang nhu sau :
101-104,201,202,205-210,212,215 301-305,401,403 … .
(tuc la neu day cac so lien tuc gom nhieu hon 3 so thi dua ve dang somin-somax)
Tu nay ve sau : cac bai tap (ke ca bai thi-kiem tra) phai tien hanh theo trinh tu : +Dua ra bai toan
+Phan tich cac yeu cau
+Thiet ke so bo (pseudocode)
+Cai dat ( dua ra Ct nguon cuoi cung, cac buoc phan tich,trien khai chi tiet step by
step co the bo qua) – Dong thoi phai ap dung moi ky thuat, phong cach nhu da hoc trong chuong III

• 11.2 M rng BT trên : Bài toán tính tin phòng ks :ăể tính tiền phòng cho 1 đoàn
khách tại khách sạn, từ thực tế sử dụng phòng của khách người ta đã trích rút từ CSDL
ra các thông tin cần thiết và lưu vào mảng với các thông tin như sau : 7/9
Experiment and Exercise Scenario CN CNTT Thời gian Số người Số phòng Giá tiền Số ngày 01/01/2007 – 05/01/2007 1 105 45 4 01/01/2007 – 05/01/2007 1 106 45 4 01/01/2007 – 05/01/2007 1 107 45 4 01/01/2007 – 05/01/2007 1 109 45 4 01/01/2007 – 05/01/2007 2 101 45 4 01/01/2007 – 05/01/2007 2 302 45 4 01/01/2007 – 05/01/2007 2 205 55 4 01/01/2007 – 05/01/2007 2 206 55 4 01/01/2007 – 05/01/2007 2 207 55 4 01/01/2007 – 05/01/2007 2 208 55 4 07/01/2007 – 09/01/2007 1 104 45 2 07/01/2007 – 09/01/2007 2 304 55 2 07/01/2007 – 10/01/2007 1 105 45 3 07/01/2007 – 10/01/2007 1 106 45 3 07/01/2007 – 10/01/2007 1 107 45 3 07/01/2007 – 10/01/2007 2 305 55 3 07/01/2007 – 10/01/2007 2 306 55 3 07/01/2007 – 10/01/2007 2 307 55 3 07/01/2007 – 10/01/2007 2 308 55 3 07/01/2007 – 10/01/2007 2 401 55 3 09/01/2007 – 10/01/2007 1 201 45 1 09/01/2007 – 10/01/2007 2 406 55 1
Từ kết quả dạng như trên, ngươi ta phải đưa ra kết quả dưới dạng sau : Thời gian Diễn giải Thành tiền 01/01/2007 – 05/01/2007
105-107,109,(1K),101,102,(2K) : 45 usd x 4 D 900 x 6 R
205-208,(2K) : 55 usd x 4 D x 4 R 880 07/01/2007 – 09/01/2207 104,(1K) : 45 usd x 2 D x 1 R 90 304 (2K) : 55 usd x 2 D x 1 R 110 07/01/2007 – 10/01/2007
105-107,(1K) 45 usd x 3 D x 3 R 405
305-308,401,(2K) 55 usd x 3 D x 5 R 825 09/01/2007 – 10/01/2007 201,(1K) : 45 usd x 1 D x 1 R 45 8/9
Experiment and Exercise Scenario CN CNTT 406,(2K) : 55 usd x 1 D x 1 R 55 Tong cong 3310
(Ghi chú : K = số lượng Khách mỗi phòng, D = số ngày, R = Số Phòng)
Hãy viết chương trình thực hiện việc trên ( mảng 1 được khởi tạo khi khai báo,
viết ct để tạo mảng 2 ) 9/9