25
  TRUNG TÂM TIN HC – AN QU C VI T 318 Thng Nht P.16 - Qun Vp - Tp.HChí Minh Tel: 3996.1590 – 0913.681856 I TP NN TNG LP TRÌNH NG DNG VI C# GV: PHM ÁNH THI U

bai_tap_c_01_6449

Embed Size (px)

Citation preview

Page 1: bai_tap_c_01_6449

5/13/2018 bai_tap_c_01_6449 - slidepdf.com

http://slidepdf.com/reader/full/baitapc016449 1/25

 

TRUNG TÂM TIN HỌC – AN QUỐC VIỆT

318 Thống Nhất P.16 - Quận Gò Vấp - Tp.Hồ Chí Minh

Tel: 3996.1590 – 0913.681856

BÀI TẬP 

NỀN TẢNG LẬP TR ÌNH ỨNGDỤNG VỚI C# 

GV: PHẠM ÁNH THIỀU

Page 2: bai_tap_c_01_6449

5/13/2018 bai_tap_c_01_6449 - slidepdf.com

http://slidepdf.com/reader/full/baitapc016449 2/25

 

TRUNG TÂM TIN HỌC – AN QUỐC VIỆT

BÀI 1: Các khái niệm tổng quanGiúp học viên nắm r õ một số thao tác cơ bản trong môi trường C# và ứng dụng dạng ConsoleApplication.

1.1. Làm quen môi trường phát triển ứng dụng

Mục đích:

Tạo Project, tổ chức cây thư mục

Làm quen với các đối tượng trong ứng dụng Console Thực

hiện các thao tác: tạo, thêm, xoá các đối tượng Thực thi

một ứng dụng

Yêu cầu:

Tạo một ứng dụng dạng Console có tên NhapMon lưu tại thư mục làm việc Làm

quen với các thành phần trong môi trường C#

Thực hiện thêm và xóa một đối tượng trong ứng dụng (Tr ên cửa sổ Solution Explorer, nhấn chuột phảitrên Project chọn Add để thêm một đối tượng, nhấn chuột phải trên đối tượng cần xóa và chọn Delete)

Thực thi ứng dụng (nhấn phím F5 hoặc nhấn nút Start Debugging)

1.2. Xuất thông báo chào

Mục đích:

Làm quen với các lệnh nhập xuất thông tin trong C# Yêu

cầu:

Tạo một ứng dụng dạng Console có tên Chao_hoi lưu tại thư mục làm việc

Trong phương thức Main của tập tin Program.cs, sử dụng lệnh Console.Write hoặc Console.WriteLine để xuấtdữ liệu và Console.Read hoặc Console.ReadLine để đọc dữ liệu

Cho phép nhập vào họ tên sau đó xuất ra câu chào: Chào mừng bạn đến với ngôn ngữ lập tr  ình C# Thực

thi ứng dụngg.

(hình 1.1)

GV: PHẠM ÁNH THIỀU Trang 2/54

Page 3: bai_tap_c_01_6449

5/13/2018 bai_tap_c_01_6449 - slidepdf.com

http://slidepdf.com/reader/full/baitapc016449 3/25

 

TRUNG TÂM TIN HỌC – AN QUỐC VIỆT

BÀI 2: Các khái niệm và nguyên tắc cơ bảncủa .NET Framework

Giúp học viên hiểu r õ về các kiểu dữ liệu trong C#, ứng dụng các kiểu dữ liệu để khai báobiến và cách sử dụng các toán tử trong C# 

2.1. Using Value Types

Mục tiêu: Giúp học viên nắm bắt việc sử dụng kiểu dữ liệu dạng tham trị dựa tr ên kiểu cấu trúc Công

việc thực hiện:

1. Sử dụng Visual Studio, tạo một ứng dụng dạng Console với tên là CreateStruct

2. Tạo cấu trúc NHAN_VIEN với các thành phần được khai báo Public

Họ tên nhân viên: string

Tuổi: int

Lương cơ bản: int

Số con: int (cho phép chứa giá trị NULL)

3. Xây dựng phương thức khởi tạo cho cấu trúc NHAN_VIEN, trong đó khởi tạo giá trị cho các thành

phần được khai báo ở tr ên.

4. Xây dựng phương thức tính tiền lương cho Nhân viên theo quy ước:

Tiền lương = Lương cơ bản + ( Số con * 100000)5. Xây dựng phương thức ToString để hiển thị thông tin của nhân viên theo dạng: Họ tên - Tuổi - Số

con - Tiền lương

Ví dụ: “Nguyễn Thanh Thúy - 32 tuổi - Số con: 2 - Tiền lương: 2500000

6. Trong thủ tục Main của ứng dụng dạng Console, định nghĩa và khởi tạo một thể hiện của cấu trúc

NHAN_VIEN sau đó xuất ra thông tin của thể hiện bằng lệnh Console.WriteLine

7. Thực thi chương tr  ình và ghi nhận kết quả

8. Trong cấu trúc NHAN_VIEN, định nghĩa kiểu Enum với tên GIOI_TINH với hai giá trị “Nam” và

“Nữ”.

9. Bổ sung vào cấu trúc NHAN_VIEN thành phần Phái được khai báo với kiểu GIOI_TINH.

10. Chỉnh sửa lại các lệnh trong phương thức khởi tạo và phương thức ToString để hiển thị giá trị củathành phần Phái

Ví dụ: “Nguyễn Thanh Thúy (Nữ) - 32 tuổi - Số con: 2 - Tiền lương: 2500000

11. Thực thi chương tr  ình và ghi nhận kết quả

2.2. Using Common Reference Types

Mục tiêu: Giúp học viên phân biệt các kiểu dữ liệu dạng tham chiếu Công

việc thực hiện:

1. Sử dụng Visual Studio, tạo một ứng dụng dạng Console với tên là TestType

2. Khai báo các đối tượng từ các lớp: Sbyte, Byte, Int16, Int32, Int64, String, Exception.

SByte a = 0;

Byte b =0;

GV: PHẠM ÁNH THIỀU Trang 3/54

Page 4: bai_tap_c_01_6449

5/13/2018 bai_tap_c_01_6449 - slidepdf.com

http://slidepdf.com/reader/full/baitapc016449 4/25

 

TRUNG TÂM TIN HỌC – AN QUỐC VIỆT

Int16 c = 0;

Int32 d = 0;

Int64 e = 0;

string s = "";

Exception ex = new Exception();

3. Khai báo mảng có kiểu dữ object với các phần tử là các đối đượng được khai báo ở tr ên

object[] types = { a, b, c, d, e, s, ex };

4. Sử dụng vòng lặp foreach để duyệt qua từng phần tử trong mảng, ứng với từng phần tử, kiểm tra

xem kiểu dữ liệu tương ứng của phần tử đó là Value hay Reference

foreach ( object o in types )

{

string type;

if (o.GetType().IsValueType)

type = "Value type";

else

type = "Reference Type";

Console.WriteLine("{0}: {1}", o.GetType(), type);

}

(hình 2.1)

2.3. Chuyển đổi giữa các kiểu dữ liệu

Mục tiêu: Giúp cho học viên hiểu được cơ chế chuyển đổi giữa các kiểu dữ liệu. Công

việc thực hiện:

1. Sử dụng Visual Studio, tạo một ứng dụng dạng Console với tên là ConvertType

2. Khai báo các biến với kiểu dữ liệu tương ứng là: Int16, Int32 và double

Int16 i16 = 1;

Int32 i32 = 1;

double db = 1;

3. Lần lượt gán giá trị giữa các biến, ví dụ:

i16 = i32;

i16 = db;

i32 = i16;

i32 = db;

db = i16;

db = i32;

GV: PHẠM ÁNH THIỀU Trang 4/54

Page 5: bai_tap_c_01_6449

5/13/2018 bai_tap_c_01_6449 - slidepdf.com

http://slidepdf.com/reader/full/baitapc016449 5/25

 

TRUNG TÂM TIN HỌC – AN QUỐC VIỆT

4. Thực thi ứng dụng và ghi nhận các lỗi xảy ra (nếu có) và tìm cách khắc phục

2.4. Tính diện tích h ình chữ nhật

Mục tiêu: Giúp cho học viên thông thạo trong việc lựa chọn kiểu dữ liệu cần sử dụng Yêu

cầu thực hiện:

1. Nhập vào chiều dài vào chiều rộng của h ình chữ nhật

2. Xuất ra diện tích của h ình chữ nhật

(hình 2.2)

2.5. Tính diện tích và chu vi hình tròn

Mục tiêu: Giúp cho học viên thông thạo trong việc lựa chọn kiểu dữ liệu cần sử dụng Yêu

cầu thực hiện:

1. Nhập vào bán kính của h ình tròn

2. Xuất ra diện tích và chu vi của h ình tròn

(hình 2.3)

2.6. Tính chiều dài của cạnh huyền trong tam giác vuông

Mục tiêu: Giúp cho học viên thông thạo trong việc lựa chọn kiểu dữ liệu cần sử dụng Yêu

cầu thực hiện:

1. Nhập vào chiều dài của hai cạnh góc vuông của hình tam giác

2. Xuất ra chiều dài của cạnh huyền

(hình 2.4)

GV: PHẠM ÁNH THIỀU Trang 5/54

Page 6: bai_tap_c_01_6449

5/13/2018 bai_tap_c_01_6449 - slidepdf.com

http://slidepdf.com/reader/full/baitapc016449 6/25

 

TRUNG TÂM TIN HỌC – AN QUỐC VIỆT

BÀI 3: Các cấu trúc điều khiển cơ bản

Giúp học viên hiểu r õ về các cấu trúc điều khiển cơ bản, cách khai báo và sử dung mảngcũng như cách bẫy lỗi và xử lý lỗi trong C#.

3.1. Xếp loại học tập

Mục tiêu: Giúp học viên nắm r õ cách sử dụng cấu trúc IF

Công việc thực hiện:

1. Sử dụng Visual Studio, tạo một ứng dụng dạng Console với tên là Xep_loai_hoc_tap

2. Khai báo các biến HK1 (điểm thi học kỳ 1) và HK2 (điểm thi học kỳ 2) để lưu thông tin về điểm thi  của 2 học kỳ. 

float HK1;

float HK2;

3. Xử lý để nhập vào điểm thi của học kỳ 1 và học kỳ 2

Console.Write(“Xin nhập vào điểm thi học kỳ 1: ”); HK1

= float.Parse(Console.ReadLine());

Console.Write(“Xin nhập vào điểm thi học kỳ 2: ”); HK2

= float.Parse(Console.ReadLine());

4. Xử lý tính điểm trung b ình (DTB) dựa vào điểm học kỳ 1 (HK1) và điểm học kỳ 2 (HK2) theo công  

thức: DTB = (HK1 + HK2*2)/3 và làm tròn 2 số lẻ 

float DTB = (HK1 + HK2*2)/3;

DTB = (float)Math.Round(DTB, 2);

5. Xử lý xếp loại học lực cho học sinh dựa vào điểm trung b ình với quy ước: 

DTB < 5 : loại yếu 

5 <= DTB < 6.5 : loại trung b ình

6.5 <= DTB < 8 : loại khá

DTB >=8 : loại giỏi

string xep_loai;

if (DTB < 5 )xep_loai = "Yếu";

else if (DTB < 6.5)

xep_loai = "Trung bình";

else if (DTB < 8)

xep_loai = "Khá";

else

xep_loai = "Giỏi";

6. Xuất thông tin điểm trung b ình và xếp loại ra màn hình

Console.WriteLine(“ Điểm trung bình: {0}“, DTB);Console.WriteLine(“Xếp loại học lực: {0}”, xep_loai);Console.ReadLine();

GV: PHẠM ÁNH THIỀU Trang 6/54

Page 7: bai_tap_c_01_6449

5/13/2018 bai_tap_c_01_6449 - slidepdf.com

http://slidepdf.com/reader/full/baitapc016449 7/25

 

TRUNG TÂM TIN HỌC – AN QUỐC VIỆT

(hình 3.1)

3.2. Nhận dạng tam giác

Mục tiêu: Giúp học viên nắm r õ cách sử dụng cấu tr úc IF Yêu

cầu thực hiện:

1. Nhập vào 3 cạnh bất kỳ (canh_1, canh_2, canh_3)

2. Kiểm tra xem 3 cạnh này có tạo thành được một tam giác hay không, nếu được th ì đó là tam giác

gì (tam giác thường, tam giác cân, tam giác đều, tam giác vuông, tam giác vuông cân). Sau đó

xuất kết quả ra màn hình theo dạng sau:

(hình 3.2)

3.3. Giải phương tr  ình bậc nhất

Mục tiêu: Giúp học viên nắm r õ cách sử dụng cấu trúc IF Yêu

cầu thực hiện:

1. Nhập vào hệ số a (he_so_a) và hệ số b (he_so_b) của phương trình: Ax + B = 0

2. Giải phương tr  ình Ax + B = 0 với hệ số A (he_so_a) và hệ số B (he_so_b) được nhập vào. Sau đó

xuất kết quả ra màn hình theo dạng sau:

GV: PHẠM ÁNH THIỀU Trang 7/54

Page 8: bai_tap_c_01_6449

5/13/2018 bai_tap_c_01_6449 - slidepdf.com

http://slidepdf.com/reader/full/baitapc016449 8/25

 

TRUNG TÂM TIN HỌC – AN QUỐC VIỆT

(hình 3.3)

3.4. Giải phương tr  ình bậc hai

Mục tiêu: Giúp học viên nắm r õ cách sử dụng cấu trúc IF Yêu

cầu thực hiện:

1. Nhập vào hệ số a (he_so_a), hệ số b (he_so_b) và hệ số b (he_so_b) của phương tr  ình bậc hai:

Ax2 + Bx + C = 0

2. Giải phương tr  ình Ax2 + Bx + C = 0 với hệ số A (he_so_a), hệ số B (he_so_b) và hệ số C

(he_so_c) được nhập vào. Sau đó xuất kết quả ra màn hình theo dạng sau:

(hình 3.4)

3.5. Tìm thứ trong tuần

Mục tiêu: Giúp học viên nắm r õ cách sử dụng cấu trúc switch

Công việc thực hiện:

1. Sử dụng Visual Studio, tạo một ứng dụng dạng Console với tên là Tim_thu_trong_tuan

2. Khai báo biến ngay để lưu thông tin ngày tháng và năm được nhập vào.

DateTime ngay;

Console.Write(“Xin nhập giá trị ngày tháng năm (mm/dd/yyyy): ”); Ngay= DateTime.Parse(Console.ReadLine());

3. Xử lý t ìm thứ trong tuần ứng với ngày được nhập vào:

string thu_trong_tuan = “”;

switch (ngay.DayOfWeek)

{

case DayOfWeek.Monday:

thu_trong_tuan = "Thu hai";

break;

case DayOfWeek.Tuesday:

thu_trong_tuan = "Thu ba";

break;

case DayOfWeek.Wednesday:

thu_trong_tuan = "Thu tu";

break;

case DayOfWeek.Thursday:

thu_trong_tuan = "Thu nam";

break;

case DayOfWeek.Friday:

thu_trong_tuan = "Thu sau";break;

GV: PHẠM ÁNH THIỀU Trang 8/54

Page 9: bai_tap_c_01_6449

5/13/2018 bai_tap_c_01_6449 - slidepdf.com

http://slidepdf.com/reader/full/baitapc016449 9/25

 

TRUNG TÂM TIN HỌC – AN QUỐC VIỆT

case DayOfWeek.Saturday:

thu_trong_tuan = "Thu bay";

break;

default:

thu_trong_tuan = "Chu nhat";break;

}

4. Xuất thông tin ra màn hình

Console.WriteLine("Ngày {0} là: {1}", ngay.ToString("dd/MM/yyyy"),

thu_trong_tuan);

Console.ReadLine();

(hình 3.5)

3.6. Tính năm âm lịnh

Mục tiêu: Giúp học viên nắm r õ cách sử dụng cấu trúc switch Yêu

cầu thực hiện:

1. Nhập vào năm dương lịch (nam_duong)

2. Tính và xuất ra năm âm lịch ứng với năm dương lịch được nhập v

ào với quy ước tính năm âm lịch:

Năm âm lịch được tính dự vào CAN + CHI trong đó CAN và CHI được tính theo quy tắc sau:

Nam_duong % 10 0 1 2 3 4 5 6 7 8 9

CAN Canh Tân Nhâm Quý Giáp Ất Bính  Đinh Mậu Kỷ 

Nam_duong % 12 0 1 2 3 4 5 6 7 8 9 10 11

CHI Thân Dậu Tuất Hợi Tí Sử Dần Mẹo Thìn Tỵ Ngọ Mùi

(hình 3.6)

3.7. Tính số ngày trong tháng

Mục tiêu: Giúp học viên nắm r õ cách sử dụng cấu trúc switch Yêu

cầu thực hiện:

1. Nhập vào tháng (thang) và năm dương lịch (nam) cần t ìm số ngày2. Tính và xuất ra số ngày trong tháng (thang) và năm (nam) được nhập vào:

GV: PHẠM ÁNH THIỀU Trang 9/54

Page 10: bai_tap_c_01_6449

5/13/2018 bai_tap_c_01_6449 - slidepdf.com

http://slidepdf.com/reader/full/baitapc016449 10/25

 

TRUNG TÂM TIN HỌC – AN QUỐC VIỆT

(hình 3.7)

3.8. In bảng cửu chương

Mục tiêu: Giúp học viên nắm r õ cách sử dụng cấu trúc lặp for Công

việc thực hiện:

1. Sử dụng Visual Studio, tạo một ứng dụng dạng Console với tên là In_bang_cuu_chuong

2. Khai báo các biến cửu chương (cc) và kết quả (kq) để lưu thông tin về bảng cửu chương cần in.

string kq = “”;

int cc;

3. Xử lý nhập vào cửu chương cần in

Console.WriteLine("Nhap vao so cuu chuong can in: "); cc

= int.Parse(Console.ReadLine());

4. Xử lý in bảng cửu chương:

for(int i = 1; i<=10; i++)

{

kq += cc.ToString("00") + " x " + i.ToString("00") + " = " +

((int)(cc * i)).ToString("00") + "\n";}

5. Xuất thông tin ra màn hình

Console.WriteLine("Bang cuu chuong {0}:", cc);

Console.WriteLine(kq);

Console.ReadLine();

(hình 3.8)

GV: PHẠM ÁNH THIỀU Trang 10/54

Page 11: bai_tap_c_01_6449

5/13/2018 bai_tap_c_01_6449 - slidepdf.com

http://slidepdf.com/reader/full/baitapc016449 11/25

 

TRUNG TÂM TIN HỌC – AN QUỐC VIỆT

3.9. In bảng cửu chương mở rộng

Mục tiêu: Giúp học viên nắm r õ cách sử dụng cấu trúc for lồng nhau Yêu

cầu thực hiện:1. Nhập vào cửu chương bắt đầu (cc_bd) và cửu chương kết thúc (cc_kt)

2. Tính và xuất ra bảng cửu chương từ cửu chương bắt đầu (cc_bd) đến cửu chương kết thúc

(cc_kt):

(hình 3.9)

3.10. Kiểm tra số nguyên tố

Mục tiêu: Giúp học viên nắm r õ cách sử dụng cấu trúc for Yêu

cầu thực hiện:1. Nhập vào số cần kiểm tra (sokt)

2. Kiểm tra xem số cần kiểm tra (sokt) có phải là số nguyên tố hay không và xuất thông báo ra màn

hình. Sau đó t ìm và xuất ra danh sách các số nguyên tố nhỏ hơn số cần kiểm tra:

(hình 3.10)

3.11. Tìm ước số chung lớn nhất

Mục tiêu: Giúp học viên nắm r õ cách sử dụng cấu trúc lặp while Công

việc thực hiện:

1. Sử dụng Visual Studio, tạo một ứng dụng dạng Console với tên là Tim_uoc_so_chung

2. Khai báo các biến số thứ 1 (so_1), số thứ 2 (so_2) và ước số chung lớn nhất (uscln) để lưu thông

tin về ước số chung lớn nhất của 2 số.

int so_1, so_2, uscln;

3. Xử lý nhập vào số thứ 1 (so_1) và số thứ 2 (so_2)

GV: PHẠM ÁNH THIỀU Trang 11/54

Page 12: bai_tap_c_01_6449

5/13/2018 bai_tap_c_01_6449 - slidepdf.com

http://slidepdf.com/reader/full/baitapc016449 12/25

 

TRUNG TÂM TIN HỌC – AN QUỐC VIỆT

Console.WriteLine("Nhap vao so thu 1: ");

so_1 = int.Parse(Console.ReadLine());

Console.WriteLine("Nhap vao so thu 2: ");

so_2 = int.Parse(Console.ReadLine());

4. Xử lý t ìm ước số chung lớn nhất:

int a = so_1, b = so_2;

while (a != b)

{

if (a > b)

a -= b;

else

b -= a;

}

uscln = a;

5. Xuất thông tin ra màn hìnhConsole.WriteLine("Uoc so chung lon nhat cua {0} va {1} la: {2}", so_1,

so_2, uscln);

Console.ReadLine();

(hình 3.11)

3.12. Tính tổng tr ên dãy số

Mục tiêu: Giúp học viên nắm r õ cách sử dụng cấu trúc while Yêu

cầu thực hiện:

1. Nhập vào một dãy số bất kỳ, mỗi lần sẽ nhập giá trị cho một phần tử, muốn kết thúc việc nhập giá

trị cho các phần tử th ì để trống và nhấn enter.

2. Tính tổng của các phần tử trong dãy số và xuất ra màn hình theo dạng sau:

(hình 3.12)

3.13. Thực hiện lại các bài 3.8, 3.9 và 3.10 bằng cách dùng vòng lặp while

GV: PHẠM ÁNH THIỀU Trang 12/54

Page 13: bai_tap_c_01_6449

5/13/2018 bai_tap_c_01_6449 - slidepdf.com

http://slidepdf.com/reader/full/baitapc016449 13/25

 

TRUNG TÂM TIN HỌC – AN QUỐC VIỆT

3.14. Xử lý mảng 

Mục tiêu: Giúp học viên nắm r õ cách sử dụng mảng trong C# 

Công việc thực hiện: 1. Sử dụng Visual Studio, tạo một ứng dụng dạng Console với t ên là Xu_ly_mang

2. Khai báo và khởi tạo số phần tử của mảng 

Console.Write("Nhap so phan tu cua mang: "); int

sopt = int.Parse(Console.ReadLine()); int[]

mang_nguyen= new int[sopt];

3. Nhập giá trị cho từng phần tử trong mảng

for (int i = 0; i < sopt; i++)

{

Console.Write("Nhap gia tri cho phan tu thu {0} cua mang: ", i + 1);

mang_nguyen[i] = int.Parse(Console.ReadLine());

}

4. Tính tổng giá trị của các phần tử và Xuất giá trị của các phần tử trong mảng:

string chuoimang = "";

int tong = 0;

for (int i = 0; i < sopt; i++)

{

chuoimang += mang_nguyen[i] + " ";

tong += mang_nguyen[i];}

5. Xuất thông tin ra màn hình

Console.WriteLine("Mang cac phan tu: {0}", chuoimang);Console.WriteLine("Tong cac phan tu: {0}", tong);

Console.ReadLine();

(hình 3.14)

3.15. Xắp sếp tr ên mảng

Mục tiêu: Giúp học viên nắm r õ các thuật toán tr ên mảng trong C# Yêu

cầu thực hiện:

1. Sử dụng lại bài 3.14, bổ sung thêm các yêu cầu sau.

Tính tổng các phần tử có giá trị chẵn

Tính tổng các phần tử có giá trị lẻ

Tìm phẩn tử nhỏ nhất trong mảng

GV: PHẠM ÁNH THIỀU Trang 13/54

Page 14: bai_tap_c_01_6449

5/13/2018 bai_tap_c_01_6449 - slidepdf.com

http://slidepdf.com/reader/full/baitapc016449 14/25

 

TRUNG TÂM TIN HỌC – AN QUỐC VIỆT

Tìm phần tử lớn nhất trong mảng

Tìm kiếm 1 giá trị xem có trong mảng hay không

2. Xử lý và xuất ra màn hình theo dạng sau:

(hình 3.15)

3.16. Phát sinh mảng

Mục tiêu: Giúp học viên nắm r õ các thuật toán tr ên mảng trong C# Yêu

cầu thực hiện:

1. Nhập vào số phần tử (sopt) của mảng.

2. Ứng với số phần tử được nhập (sopt), phát sinh giá trị cho các phần tử một cách ngẫu nhiên. Gợi

ý: sử dụng lớp Random theo cú pháp sau:

Random ngau_nhien = new Random();

Gia_tri = ngau_nhien.Next(<giá trị nhỏ nhất>, <giá trị lớn nhất>);

3. Xuất danh sách các phần tử của mảng ra màn hình theo dạng sau:

(hình 3.16a)

4. Sau khi xuất mảng sẽ xuất thực đơn cho phép lựa chọn thao tác tr ên mảng:

GV: PHẠM ÁNH THIỀU Trang 14/54

Page 15: bai_tap_c_01_6449

5/13/2018 bai_tap_c_01_6449 - slidepdf.com

http://slidepdf.com/reader/full/baitapc016449 15/25

 

TRUNG TÂM TIN HỌC – AN QUỐC VIỆT

(hình 3.16b)

5. Sau khi người dùng nhập thao tác cần thực hiện (ví dụ chọn thao tác sắp xếp mảng tăng dần),

thực hiện thao tác sắp xếp mảng tương ứng và xuất mảng ra màn hình theo dạng sau:

(hình 3.16c)

3.17. Thay đổi mảng

Mục tiêu: Giúp học viên nắm r õ các thuật toán tr ên mảng trong C# Yêu

cầu thực hiện:

1. Nhập vào số phần tử (sopt) của mảng.

2. Ứng với số phần tử được nhập (sopt), phát sinh giá trị cho các phần tử một cách ngẫu nhiên.

3. Xuất danh sách các phần tử của mảng và thực đơn cho phép lựa chọn thao tác tr ên mảng ra mànhình theo dạng sau:

(hình 3.16a)

4. Sau khi người dùng nhập thao tác cần thực hiện (ví dụ chọn thao tác thêm phần tử sẽ yêu cầu

GV: PHẠM ÁNH THIỀU Trang 15/54

Page 16: bai_tap_c_01_6449

5/13/2018 bai_tap_c_01_6449 - slidepdf.com

http://slidepdf.com/reader/full/baitapc016449 16/25

 

TRUNG TÂM TIN HỌC – AN QUỐC VIỆT

nhập giá trị và vị trí cần thêm), thực hiện thao tác thêm phần tử tương ứng vào mảng và xuất mảng

ra màn hình theo dạng sau:

(hình 3.16b)

(hình 3.16c)

GV: PHẠM ÁNH THIỀU Trang 16/54

Page 17: bai_tap_c_01_6449

5/13/2018 bai_tap_c_01_6449 - slidepdf.com

http://slidepdf.com/reader/full/baitapc016449 17/25

 

TRUNG TÂM TIN HỌC – AN QUỐC VIỆT

BÀI 4: Class, objects và namespacesGiúp học viên thành thạo trong việc xây dựng các class cũng như các thành phần trong classtrên môi trường C#.

4.1. Giải phương tr  ình bậc nhất Ax + B = 0

Mục tiêu: Giúp học viên nắm r õ cách xây dựng class trong C#

Công việc thực hiện:

1. Sử dụng Visual Studio, tạo một ứng dụng dạng Console với tên là Giai_PT_bac_1_class

2. nhấn chuột phải lên project Giai_PT_bac_1_class và chọn Add Class.3. Trong cửa sổ Add New Item, nhập tên cho class là PHUONG_TRINH_BAC_I.CS

4. Khai báo các thành phần trong class: 

Biến thành viên (Field): lưu trữ thông tin về hệ số A và hệ số B

private float mHe_so_a;

private float mHe_so_b;

Thuộc tính (Property): Truy xuất đến giá trị của các biến thành viên trong class

public float He_so_a

{

get { return mHe_so_a; }

set { mHe_so_a = value; }}

public float He_so_b

{

get { return mHe_so_b; }

set { mHe_so_b = value; }

}

Phương thức khởi tạo (Constructor): Khởi tạo các giá trị ban đầu cho hệ số A và hệ số B

public PHUONG_TRINH_BAC_I(float pHe_so_a, float pHe_so_b)

{

mHe_so_a = pHe_so_a;

mHe_so_b = pHe_so_b;

}

Phương thức tính nghiệm của phương tr  ình

public string Nghiem()

{

string kq; //lưu kết quả nghiệm của pt//Xét nghiệm của phương trình theo hệ số a

if (mHe_so_a == 0)

if (mHe_so_b == 0)

kq="PT có vô số nghiệm";else

kq = "PT vô nghiệm";else

kq = "x= " + ((float)(-mHe_so_b / mHe_so_a)).ToString();

//trả về giá trị cho hàm

GV: PHẠM ÁNH THIỀU Trang 17/54

Page 18: bai_tap_c_01_6449

5/13/2018 bai_tap_c_01_6449 - slidepdf.com

http://slidepdf.com/reader/full/baitapc016449 18/25

 

TRUNG TÂM TIN HỌC – AN QUỐC VIỆT

return kq;

}

5. Khai báo đối tượng và gọi thực hiện trong phương thức Main()

//khai báo bi

ến

float a, b;

//gán giá trị cho biếnConsole.Write("Nhập hệ số A: ");

a = float.Parse(Console.ReadLine());

Console.Write("Nhập hệ số B: ");

b = float.Parse(Console.ReadLine());

PHUONG_TRINH_BAC_I pt_bac_1 = new PHUONG_TRINH_BAC_I(a, b);

string nghiem = pt_bac_1.Nghiem();

Console.WriteLine("Nghiệm của phương trình {0}x + {1} = 0 là: x ={2}", a, b, nghiem);

Console.ReadLine();

6. Biên dịch và thực thi chương tr  ình

(hình 4.1)

4.2. Giải phương tr  ình bậc hai Ax2 + Bx + C = 0

Mục tiêu: Giúp học viên nắm r õ cách xây dựng class trong C# Yêu

cầu thực hiện:

1. Xây dựng class PHUONG_TRINH_BAC_II với các yêu cầu:

Biến thành viên (Field): lưu trữ thông tin về hệ số A, hệ số B và hệ số C của phương tr  ình

Thuộc tính (Property): Truy xuất đến giá trị của các biến thành viên trong class

Phương thức khởi tạo (Contructor) với 3 tham số: hệ số A, hệ số B và Hệ số C

Phương thức tính nghiệm của phương tr  ình: Giải và biện luận phương tr  ình bậc 2 theo Hệ số A, hệ

số B và hệ số C. Nếu hệ số A = 0, sử dụng lớp PHUONG_TRINH_BAC_I để giải phương trình Bx + C= 0.

2. Xử lý và xuất ra màn hình theo dạng sau:

(hình 4.2)

GV: PHẠM ÁNH THIỀU Trang 18/54

Page 19: bai_tap_c_01_6449

5/13/2018 bai_tap_c_01_6449 - slidepdf.com

http://slidepdf.com/reader/full/baitapc016449 19/25

 

TRUNG TÂM TIN HỌC – AN QUỐC VIỆT

4.3. Xử lý phân số

Mục tiêu: Giúp học viên nắm r õ cách xây dựng class trong C# Yêu

cầu thực hiện:1. Xây dựng class PHAN_SO với các yêu cầu:

Biến thành viên (Field): lưu trữ thông tin về Tử số và Mẫu số

Thuộc tính (Property): Truy xuất đến giá trị của các biến th ành viên trong class

Phương thức khởi tạo (Contructor):

Phương thức khởi tạo không có tham số: gán giá trị mặc định cho Tử số và mẫu số là 1  

Phương thức khởi tạo có 2 tham số là Tử số và Mẫu số

Các phương thức tính toán:

Phương thức tối giản phân số: dùng để tối giản phân số (ví dụ: 2/4 tối giản thành 1/2)

Phương thức Cộng: tính tổng của 2 phân số và trả về phân số kết quả sau khi đã được tối

giản

Phương thức Trừ: tính hiệu của 2 phân số và trả về phân số kết quả sau khi đã được tối

giản 

Phương thức Nhân: tính tích của 2 phân số và trả về phân số kết quả sau khi đã được tối

giản

Phương thức Chia: tính thương của 2 phân số và trả về phân số kết quả sau khi đã được

tối giản

Trong đó:

a c a * d b * c a c a * c

b

a

b

d b * d 

c a * d b

*

d b * d 

* b d b * d 

c a c a * d :

b d b * c

2. Trong phương thức Main. Xuất thông báo nhập giá trị cho tử số và mẫu số của các phần số theo

dạng sau:

(hình 4.3a)

3. Sau khi nhập tử số và Mẩu số cho 2 phân số, xuất thực đơn cho phép lựa chọn thao tác tr ên phânsố ra màn hình theo dạng sau:

GV: PHẠM ÁNH THIỀU Trang 19/54

Page 20: bai_tap_c_01_6449

5/13/2018 bai_tap_c_01_6449 - slidepdf.com

http://slidepdf.com/reader/full/baitapc016449 20/25

 

TRUNG TÂM TIN HỌC – AN QUỐC VIỆT

(hình 4.3b)

4. Sau khi người dùng nhập thao tác cần thực hiện (ví dụ chọn thao tác Hiệu của hai phân số), thực

hiện thao tác tương ứng và xuất kết quả ra màn hình theo dạng sau:

(hình 4.3c)

4.4. Quản lý thông tin nhân viên

Mục tiêu: Giúp học viên nắm r õ cách xây dựng class trong C# Yêu

cầu thực hiện: 

1. Xây dựng class NHAN_VIEN với các yêu cầu:

Biến thành viên (Field): lưu trữ thông tin về nhân viên bao gồm: Họ tên nhân viên, Ngày vào

làm, Hệ số lương và Lương cơ bản (Lương cơ bản được khai báo static và có giá trị mặc định là

450000)

static double mLuong_co_ban = 450000;

Thuộc tính (Property): Truy xuất đến giá trị của các biến thành viên trong class bao gồm: Họ

tên, Hệ số lương và Ngày vào làm. Bổ sung thêm thuộc tính Thâm niên (chỉ cho phép đọc dữ

liệu)

public int Tham_nien

{

GV: PHẠM ÁNH THIỀU Trang 20/54

Page 21: bai_tap_c_01_6449

5/13/2018 bai_tap_c_01_6449 - slidepdf.com

http://slidepdf.com/reader/full/baitapc016449 21/25

 

TRUNG TÂM TIN HỌC – AN QUỐC VIỆT

get { return DateTime.Today.Year - mNgay_vao_lam.Year; }

}

Phương thức khởi tạo (Contructor): với 3 tham số Họ tên, Hệ số lương và Ngày vào làm để khởitạo giá trị cho các biến thành viên tương ứng.

Các phương thức tính toán:

Phương thức tính tiền thưởng (Tien_thuong): tính tiền thưởng cho nhân viên dựa vào

thâm niên theo công thức:

Tiền thưởng = Thâm niên * 500000

Phương thức tính tiền lương (Tien_luong): tính tiền lương cho nhân viên dựa vào lương cơ

bản và hệ số lương theo công thức:

Tiền lương = Lương cơ bản * Hệ số lương

2. Trong phương thức Main. Xuất thông báo và nhập giá trị cho các thông tin của nhân viên theodạng sau:

(hình 4.4a)

3. Sau khi nhập thông tin, khỏi tạo đối tượng nhân viên với các thông tin vừa nhập và xuất ra màn

hình thông tin tiền lương và tiền thưởng của nhân viên đó như sau:

(hình 4.4b)

GV: PHẠM ÁNH THIỀU Trang 21/54

Page 22: bai_tap_c_01_6449

5/13/2018 bai_tap_c_01_6449 - slidepdf.com

http://slidepdf.com/reader/full/baitapc016449 22/25

 

TRUNG TÂM TIN HỌC – AN QUỐC VIỆT

BÀI 5: Tính thừa kế (Inheritance) và tính đahình (Polymorphism)

Giúp học viên thành thạo trong việc xây dựng các class kế thừa từ class khác cũng như hiểurõ tính đa h ình của class.

5.1. Quản lý thông tin nhân viên

Mục tiêu: Giúp học viên nắm rõ cách xây dựng class kế thừa trong C# Công

việc thực hiện:

1. Sử dụng Visual Studio, tạo một ứng dụng dạng Console với tên là QL_Nhan_vien

2. Sử dụng lại class NHAN_VIEN đã xây dựng trong bài 4.4

3. Xây dựng class NHAN_VIEN_VAN_PHONG kế thừa từ class NHAN_VIEN với các yêu cầu:

Biến thành viên (Field): lưu trữ thêm thông tin của nhân viên văn phòng bao gồm: Số ngày vắng,

 Định mức vắng (mặc định là 3 ngày) và Đơn giá phạt (mặc định là 100000/1 ngày)

protected int mSo_ngay_vang;

protected static int mDinh_muc_vang = 3;

protected static double mDon_gia_phat = 100000;

Thuộc tính (Property): Truy xuất đến giá trị của các biến th ành viên trong class bao gồm: Số ngày

vắng, Định mức vắng và Đơn giá phạtpublic int So_ngay_vang{

get { return mSo_ngay_vang; }

set { mSo_ngay_vang = value; }

}

public static int Dinh_muc_vang

{

get { return mDinh_muc_vang; }

set { mDinh_muc_vang = value; }

}

public static double Don_gia_phat

{get { return mDon_gia_phat; }

set { mDon_gia_phat = value; }}

Phương thức khởi tạo (Contructor):

Phương thức khởi tạo với 3 tham số Họ tên, Hệ số lương và Ngày vào làm để khởi tạo giá

trị cho các b iến thành viên tương ứng trong class cơ sở (NHAN_VIEN).

public NHAN_VIEN_VAN_PHONG(string pHo_ten, double pHe_so_luong,

DateTime pNgay_vao_lam): base(pHo_ten, pHe_so_luong, pNgay_vao_lam){

}

Phương thức khởi tạo với 4 tham số Họ tên, Hệ số lương, Ngày vào làm và Số ngày vắng

để khởi tạo giá trị cho các biến thành viên tương ứng trong class cơ sở (NHAN_VIEN) và

GV: PHẠM ÁNH THIỀU Trang 22/54

Page 23: bai_tap_c_01_6449

5/13/2018 bai_tap_c_01_6449 - slidepdf.com

http://slidepdf.com/reader/full/baitapc016449 23/25

 

TRUNG TÂM TIN HỌC – AN QUỐC VIỆT

Số ngày vắng trong class NHAN_VIEN_VAN_PHONG.

public NHAN_VIEN_VAN_PHONG(string pHo_ten, double pHe_so_luong,

DateTime pNgay_vao_lam, int pSo_ngay_vang)

: base(pHo_ten, pHe_so_luong, pNgay_vao_lam){

mSo_ngay_vang = pSo_ngay_vang;

}

Các phương thức tính toán:

Phương thức tính tiền phạt: tính tiền phạt khi nhân viên nghỉ quá số ngày quy định

public double Tien_phat()

{

double tien = 0;

if (mSo_ngay_vang > mDinh_muc_vang)

tien = (mSo_ngay_vang - mDinh_muc_vang) * mDon_gia_phat;

return tien;

}

Phương thức tính tiền lương: tính tiền lương cho nhân viên (ghi đè lên phương thức tính

tiền lương trong lớp cơ sở)

public override double Tien_luong(){

return base.Tien_luong() - Tien_phat();

}

4. Thực hiện các bước tương tự như trên để xây dựng class NHAN_VIEN_SAN_XUAT kế thừa từ class  

NHAN_VIEN với các yêu cầu: 

Biến thành viên (Field): lưu trữ thêm thông tin của nhân viên sản xuất bao gồm: Số sản phẩm,  Định mức sản phẩm (mặc định là 100 sản phẩm) và Đơn giá sản phẩm (mặc định là 10000/1

sản phẩm)

Thuộc tính (Property): Truy xuất đến giá trị của các biến thành viên trong class bao gồm: Số sản

phẩm, Định mức sản phẩm và Đơn giá sản phẩm

Phương thức khởi tạo (Contructor):

Phương thức khởi tạo với 3 tham số Họ tên, Hệ số lương và Ngày vào làm để khởi tạo giá

trị cho các b iến thành viên tương ứng trong class cơ sở (NHAN_VIEN).

Phương thức khởi tạo với 4 tham số Họ tên, Hệ số lương, Ngày vào làm và Số sản phẩm

để khởi tạo giá trị cho các biến thành viên tương ứng trong class cơ sở (NHAN_VIEN) và

Số sản phẩm trong class NHAN_VIEN_SAN_XUAT.

Các phương thức tính toán:

Phương thức tính tiền thưởng theo sản phẩm (Thuong_SP): tính tiền thưởng cho nhân v iên

khi hoàn thành vượt định mức số sản phẩm quy định theo công thức:

Tiền thưởng = (Số sản phẩm -  Định mức sản phẩm) *  Đơn giá sản phẩm *0.05;

Phương thức tính tiền lương (Tien_luong): tính tiền lương cho nhân viên (ghi đè lên

phương thức tính tiền lương trong lớp cơ sở)

Tiền lương = Số sản phẩm *  Đơn giá sản phẩm + Tiền thưởng theo sảnphẩm

GV: PHẠM ÁNH THIỀU Trang 23/54

Page 24: bai_tap_c_01_6449

5/13/2018 bai_tap_c_01_6449 - slidepdf.com

http://slidepdf.com/reader/full/baitapc016449 24/25

 

TRUNG TÂM TIN HỌC – AN QUỐC VIỆT

5. Khai báo và xử lý trong phương thức Main:

Console.WriteLine("QUAN LY HO SO NHAN VIEN");

Console.WriteLine("");Console.WriteLine("========== Thong tin nhan vien ==========");

//Nhập thông tin cho nhân viênConsole.Write("Ho ten nhan vien: ");

string hoten = Console.ReadLine();

Console.Write("Ngay vao lam (mm/dd/yyyy): ");

DateTime ngayvao = DateTime.Parse(Console.ReadLine());

Console.Write("He so luong: ");

float hesoluong = float.Parse(Console.ReadLine());

Console.WriteLine("========================================="); //

Tạo ra nhân viên mới NHAN_VIEN nv;

//Xuất thực đơn chọn loại nhân viên

Console.WriteLine("");

Console.WriteLine("Xin chon loai nhan vien: ");

Console.WriteLine("1. Nhan vien van phong");

Console.WriteLine("2. Nhan vien san xuat");

Console.Write("Ban cho loai nhan vien nao: ");

int loai = int.Parse(Console.ReadLine());

Console.WriteLine("=========================================");

string loainv = "";

if (loai == 1)

{

loainv="Nhan vien van phong";

Console.Write("So ngay vang cua nhan vien: ");

int songayvang = int.Parse(Console.ReadLine());

//Khởi tạo nhân viên là nhân viên văn phòngnv = new NHAN_VIEN_VAN_PHONG(hoten, hesoluong, ngayvao, songayvang);

}

else{

loainv="Nhan vien san xuat";

Console.Write("So san pham cua nhan vien: ");

int sosanpham = int.Parse(Console.ReadLine());

//Khởi tạo nhân viên là nhân viên sản xuấtnv = new NHAN_VIEN_SAN_XUAT(hoten, hesoluong, ngayvao, sosanpham);

}

Console.WriteLine("=========================================");

Console.WriteLine("");

Console.WriteLine("Thong tin luong cua {0}", nv.Ho_ten_nhan_vien);Console.WriteLine("Loai nhan vien: {0}", loainv);

Console.WriteLine("Tien luong: {0,9}",

nv.Tien_luong().ToString("#,##0"));

Console.ReadLine();

6. Kết quả xuất ra màn hình:

GV: PHẠM ÁNH THIỀU Trang 24/54

Page 25: bai_tap_c_01_6449

5/13/2018 bai_tap_c_01_6449 - slidepdf.com

http://slidepdf.com/reader/full/baitapc016449 25/25

 

TRUNG TÂM TIN HỌC – AN QUỐC VIỆT

(hình 5.1)

5.2. Quản lý các lớp h ình học

Mục tiêu: Giúp học viên nắm r õ cách xây dựng class trừu tượng (Abstract) trong C# Công

việc thực hiện:

1. Sử dụng Visual Studio, tạo một ứng dụng dạng Console với tên là Xu_ly_hinh_hoc

2. Xây dựng class trừu tượng HINH_HOC với hai phương thức trừu tượng tính diện tích và chu vi như 

sau:

abstract class HINH_HOC{

public abstract double Dien_tich();

public abstract double Chu_vi();

}

3. Xây dựng lớp HINH_TRON được dẫn xuất từ lớp HINH_HOC với các yêu cầu:

Biến thành viên (Field): lưu trữ thông tin về bán kính của h ình tròn

Thuộc tính (Property): Truy xuất đến giá trị của các biến thành viên trong class

Phương thức khởi tạo (Constructor): với 1 tham số bán kính để khởi tạo giá trị ban đầu cho biến

thành viên tương ứng trong class HINH_TRON

Phương thức tính toán: cài đặt lại phương thức tính Diện tích và Chu vi được ghi đ è từ lớp

HINH_HOC.

class HINH_TRON: HINH_HOC

{

double mBan_kinh;

const double PI = 3.1415;

public HINH_TRON(double pBan_kinh)

{

mBan_kinh = pBan_kinh;

}

public double Ban_kinh

{

get { return mBan_kinh; }

set { mBan_kinh = value; }}

GV: PHẠM ÁNH THIỀU Trang 25/54