Tải bản đầy đủ (.pdf) (20 trang)

Lập trình C# từ cơ bản đến nâng cao phần 1

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.54 MB, 20 trang )

PHẠM CÔNG NGÓ
É

ĐẾN

CD

NHÀ XUẤT BÀN GtÁO DỤC VIỆT NAM


PHẠM CỒNG NGÔ

LẬP TDÌNH c »
từ cơ bản đến nâng cao
(Tái bản lẩn th ứ hai)

NHÀ X U Ấ T BẢN GIÁO DỤC VIỆT NAM


Công ly cổ phẩn Sắch Đại học - Dạy nghể - Nhà xuất bản Giáo dục Việt Nam
gỉữ quyển công bế tác phẩm.

19 - 2010/CXB/178 - 2244/GD

Mã số : 7B656yO - DAI


L ờ i q iớ i rh iệ u
Đầu thế kỷ XXI, Microsoít đite ra một bộ Visual Studio ,NET (VS 7.0),
Có thể nói từ v s 2001 đến v s 2 0 0 3 đã có một bước cải tiến đảng kể vể
nội dung, Bộ Visual Studio 6.0 (với các ngôn ngữ Visual Basic 6.0, Visual


C++ 6.0, ASP 3.0,...) đâ đem lại cho lập trình viên nhiều thuận tiện và lợi
ích. Tuy nhiên khi bộ Visual Studio. NET đưỢc công bố thi mọi ngưchưyến sang học tập, nghiên củu phiên bản mcrt này khá rầm rộ. Bộ Visual
Studio 2003 đã chiếm tĩnh vi trí đáng kể trong mấy năm gán đáy. Từ đầu
nãm 2006, bộ Visua! Studio 2005 (VS 8.0) đã xuất hiện ở Việt Nam và
mọi ngưíỉí đã thử nghiệm sử dựng bộ .NET 2005 này. Tính từ 2001 đếh
2006. ba bộ .NET: 2001; 2003; 2005 íần lượt ra đcổ. Độĩ ngũ lập trinh
viên không còn lạ với chúng và hầu hết các sinh \àên ngành Công nghệ
thông tin, ngành Điện, Điện tử, Cơ khí, Kinh tế... đã bắt đầu học tập,
nghiên cứu sử dụng chúng. Các trường và trung tâm hợp tác quốc tế như
"Hà Nội Genetic - Singapore", các tmng tâm của Austraiia, Pháp, Mỹ, Ân
Độ ở Hà Nội. ửùinh phố Hổ Chí Minh hầu như giảng dạy cho sinh viên vcfi
tỷ lệ phần trẫm rất cao về bộ Visual Studio .NET.
D ể đáp úhg yêu cầu tìm hiểu, học tập của sinh viên các ngành kỹ

thuật, kinh tế nói chung và cúa các sinh viên ngành Công nghệ thòng tin
nói riêng và đặc biệt cho nhũtig ai có nhu cầu tự học tập.
vào kinh
nghiệm giảng dạy từ năm 2002 đến nay về bộ .NET, tác giả biên soạn tài
liệu này nhằm đáp ứhg phẩn nào cho các đối tượng trên.
Nêu các bạn đã có kiến thức về lập trinh C /C ++ hoặc Javá thi việc
học ngón ngữ c*f (C sharp) rất thuận lợi. Tuy nhiên đây là một cuốn sách
dành cho sinh viên và các bạn tự học, do đó tài liệu đã cố gắng trinh bày
thật dễ hiểu và ngắn gọn nhất.
Lđp trìn h c # từ c ơ b â n đ ế n n â n g c a o bao gồm các lệnh chu
trinh, điểu kiện, lựa chọn, về phương thức hay "hàm", lớp, ửiừỉỉ kế, nạp
chồng hàm và toán tử trùng tên. uỷ nhiệm, quản lý sự kiện, đa luồng
(multithreading). v.v...

Vể Visual Studio .NET đả có khá nhiều sách ở nước ngoài cũng như

trong nước. Tuy nhiên để có một tài liệu tự học. tham khảo nhanh,


ngắn gọn và dể hiểu tác giả đâ cố gắng dựa vào kinh nghiệm giảng dạy
cũng như các bài giảng đã được soạn và chinh lý để cuốn sách được
hoàn thiện hơn.
Cuốn sách này đưỢc xuất bản lần đầu cho nẻn không thể tránh khỏi
khiếm khuyểt. Tác giả rất mong các bạn đồng nghiệp gần xa. các sinh
viên sử dụng bộ sách này đóng góp ý kiến để lần tái bản sau được hoàn
chinh hơn. Cuối cùng tác giả cũng có một lời mách nhỏ là tắt cả các
chương trình trong sách đều đã chạy tốt trêii máy PC có cài đạt bộ Visual
Studio 20 0 3 và các bạn hãy cố gắng tự mỉnh đánh vào máy đề kiểm tra
kết quả. đây cũng là một phương pháp tự học rất hiệu quả mà trong bao
năm qua tác giả và đổng nghiệp đã sử dụng.

Mọi ý kiến góp ý và thư từ xin gửí về Công ty CP Sách ĐH - DN, 25
Hàn Thuyên, Hà Nội, hoặc email: .vn
TÁC GỈẢ
Hà Nội, 15 - 8 - 200 7


C hươN q 1. C

ác nét c ơ

bẢN CỦA c #

1 .1. GIỚI THiỆU c #
c** (được phát âm là "C sharp") là một ngôn ngữ lập trinh hướng đối
tưcfrig. hiện đại. tin cậy và được sử dụng nhiểu cho Internet, c** được kế


thùầ từ các ngôn ngữ lập trình hưé^g đối tưcrtig quen thuộc khác như
CTT. Java.
được xây dựtìg từ mộí nhóm các kỹ sư phần mềm của Microsoít
do hai ngưâri lãnh đạo là Anders Hejlsberg và Scott Wiltamuth.

Các chưcffig trình c** chủ yếu được viết trong môi tn/cfríg "console"
và môi trường "windows form". Để giới thiệu một chương trinh đầu tiên
làm ví dụ, các bạn phải cài đạt bộ Visual Studio ,NET (2003) trong
Windows 2000 hoặc Windows XP.
- Nhấn Start -> Program trong WừKÌows-

- Chọn Mlcrosoít Studio -NET 2003.
- Từ menu File -> New —> Project.
Nevv P ro je c t

'11 B

Iw npl8«s

<ỉppỉỉca6õn'
J

v is m

I

FTQỉ«ets

• - J Vtsu«l




_ J s«tu(ỉ onct 0«pỉộ>iTwnt Pro}«ce

AâFf4Fr MOŨri«

• _ J o th tr Pro jKt$
^

ỉtủdỉO SolưOon^

w « b A p p l(C « & o n *

Conc^

iiCr»rv

Contoh
AppỊiCMion

- proỊect for aetông e ccmmand*ỉỉn« app^cAGort

IImií;

Conioi«Applicalỉon2

LocaOon:

C: ,g«o«ocứó


Nev> ẵữkỉbon

firov/se

w Creat9 dlr«ctory fúr Sứlubdn

I O>nsoỉe«%ppỉicoocti2

y/dl b« cre9(<đ d( C: '.9effCữcO6<,Conso<«Applic«DOA2\COQ«DỉeAp0UKWt2.
tL£ S S

OK

Hình 1.1

Mlp


Trong hình 1.1, phía trái Project Types chọn Visual c*f Project. ở

phía phải Templates, chọn Console Application,
- Tại Textbox có nhãn Name; p rgl.
- Tại Textbox có nhãn Location: C :\tu hoc csharp.
- Nhấn nút OK.

Sau đó. nhấn đồng thcrt 2 phím Ctrl + A để lự& chọn toàn bộ rồi
bấm phím Delete.
Cuối cùng bạn gõ vào văn bản chương trình sau:
Ví dụ 1.1. Viết chưcmg trinh hiển thị trẽn màn hình dòng chữ: "Hello


world !”.
using System;
public class progl

{
public static void Main ()

I
Console. WriteLine ("Hello Víorld !” );
Console.ReadLineO;

)
}
Đ ể chạy chương trình nhấn phím F5 và ta có dòng chữ hiển thị trên

màn hình:

S n ế t quá:
Hello VVortd!
1.2. BĨẾN, BIỂU THỨC

Sử dtưig 26 chữ cái tiếng Anh thường và hoa:
~ a. b, c. d. e, f, g, h, i, j, k, 1, m. n, o. p, q. r, s, í. u, V, w, X, y, z.

- A . B, c, D,...w, X, Y. z.
- 10 chữ số 0, 1, 2. 3, 4. 5 . 6 . 7, 8, 9.

- Dấu gạch dcfới _ (không phải dấu trừí.



Tên biến, biểu thức hoặc phương thửt (hay hàm) chỉ được sử dụng
63 kí tự trên mới hợp lệ, Ví dụ: Hanoi; HANOI; _Hanoi; Ha_noi.
^!5v.Cỉiú ý;

+ C hửsố 0.1.... 9 không được phép đặt vị trí đầu tiên của tên biến.
+ Tên biến không đưỢc phép đặt trùng với các từ khoá (keyword).

4- Tên biến phân biệí nhau bởi chữ thường và chữ hoa (điểu này khác
hoàn toàn vtì ngôn ngữ Pascal).
+ Dấu gạch dưétì có thể đặt ở vi tri đầu hoặc giữa tên biến đều hợp lệ.
1.3. T ừ K H O Á (KEYVVORD)
Bàng

1.1. Từkhoã cùa ngôn ngữ c#

abstrocí

as

base

booi

break

byte

ose


cotch

char

checked

ciass

consí

continue

decimal

đefault

đelegote

do

double

eise

enum

event

explicit


extern

false

tinally

fixed

fioat

for

foreach

goto

ịf

impliclt

in

Int

ínterface

internai

Is


lOCQ

íong

namespace

new

null

object

operator

out

overrìde

params

prỉvate

protected

publlc

readonly

res


return

sbyte

sealed

short

sifeof

stackolloc

statlc

stiing

strucí

swtch

this

throw

ínje

try

typeoí


unií

ulong

uncbeckeđ

unsaíe

ushort

uslng

Virtual

voiđ

whỉ)e




1.4. KIÊU (TYPE)
Bàng 1.2. Mô tà câc kiểu dữ liệu xây dựng sân

Kiểu c #

S6
byte

Kiểu

•NET

Mô tỏ

byte

1

Byte

SỐ nguyên đưong không dốu: 0 4- 255

char

2

Char

Ký tụ Unicode

bool

1

Booleon

Già tfỊ logic true/ false

sbyte


1

Sbyte

SỐ nguyên cố đâu: -128 + 127

short

2

Intló

SỐ nguyên c ố ctóu giã trị: -32768 -r 32767.

ushort '

2

Uintìó

SỐ nguyên không ddu: 0 -ỉ- 65.535

ínt

á

Int32

Số nguyên c ố đđu: -2.147,483.647 Ỷ
2.14^483.647


uint

4

Uint32

SỐ nguyên không dốu: 0 -i- 4.294,967.295

íloat

4

Singíe

Kiểu dốu châm động giá ừ xấp xỉ tù
3.4E-38 đến 3,4E+38rvoì 7 chữ sổ có
nghĩa

đouble

8

Double

Kiểu ddu chốm động cỏ độ chính xỏc
gâ’p đôi, giá ừ xốp xỉ to 1.7E-308 đến
l,7E+308,với IS lỏ c h ữ s ố c ố n g h ía .

de clm a l


8

Decimal

Cố độ chính xốc đến 28 con số và giở fr|
thi*ip phân, đưoc dùng trong tính toán tài
chính, kiểu này đỏi hỏi phài có hộu tố "m"
hay "M" theo sau già trị.

long

8

Int64

SỐ nguyèn có dđu:
-9,223.370.036,054,775,808 -í9.223.372.036.854.775.807

ulong

8

Uint64

SỐ nguyèn không đđu: 0 -f Oxffffmfffffffff

1.5. KHAI BÁO BĨẾN pECLARATIO N)
kiểu b iâi ỉ , biến 2 = giá trị;
int a, b = 2;

double X = 1 .4 56378, y, &.

string s = ''Hanoi”;

8


iong m = 356L:
bytc vb = 67;
sbyte sb = -2 0 5 :
Iishort u sl = 7653;
ulong u!l = 568u!;
íloa( fl = 1.367P:
tioubledl = 1.25439:
boo! b l = true;
char ch = ‘M';
decima! vdl = 1.28659M;
string s l » "Hd noi’’;
string s2 » 'Vieí nam";
btring s3 = s l + s2:
" ^ C h ú ỷ:
- Vcrt kiếu íioat sau giá trị gán cho biến luôn phải ghi thêm chữ F

(viết hoa). Ví dụ; íloat f l = 1.2589F;
- Các kiểu biến khác không nhất thiết phải ghi thêm. Có thể bỏ chữ
L vẫn hỢp !ệ. Ví dụ: long 11 = 125987654L.
1.6. CÁC TOÁN TỦ SỐ HỌC
+

cộng


-

trù



nhân

/

chia

%

chia lổy số dư

++-Ì, Í++

lãng gió trị i lên 1 đon vị

—i; i -

giòm giã trị i xuống 1 đon VỊ

Ví dụ;

int a = 16. b = 3;
int q l * a + b; kết quả q l = 19:


9
2.LẬPT1ÚNH .NC>


int q2 = a / b; kết quả q2 ® 5;
int q3 = a % b; kết quả q3 = 1;
double q4 = (doubie) a/b; kết quả q4 = 3 .2
kiểu viết iệnh gán ngắn gọn:
i+

=

5; tương đuơng i = i + 5;

= 4; tuơng đifc?ng i = i - 4;
* » 6; tuơng đương i = i • 6;
i / = 2; tương đưcMg i = i / 2;
1.7. TO Á N TỬ Q U A N HỆ VÀ LOGIC
>

lớn hon



íớn hơn hoộc bàng

<

nhó hon


< ss

nhỏ hon hoộc bàng
bồng
không bàng

&&



1!


hoộc
phủ định

Ví dụ:
if (<a > b) ỈÍ& (a > c)) lênh 1;
if (a !* b) lệnh 2;

1.8. TOÁN TỬ XỬ LÝ BIT

10

&

và bit

t


h oộc bỉt

1

phù đ nh bií

»

đ ch phải (right shift)

«

d c h trói (ieftshift)

A

xor b il

2.L ầ fT rtlM ....N C £


Vĩ dụ 1.2.
using System;
class xulybit

s t â t i c VDíd Main(string (]

arg s )

int a = Ỉ26, b = 86;

int ql, q2, q3, q4, q5;
ql = a & b
q2 = a I b;
q3 - a ^ b;
q4 = a »

2;

q5 = b «

3;

C onsoỉe,W riteLine r a = "+a+” ; b = *'+b);
Console.WriteLine ("ql = '’+ql+*'; q2 = *’+q2);
Console.VíriteLine (*'q3 == ”+q3+"; q4 = ”+q4);
Consoie.WriteLineq5 * *'+q5);
Ccnsoie,ReadLine();

}

P . K ế ỉ quả:
a = 126; b = 86;

^

q 1 = 86; q 2 = 126;
q3 = 40: q4 = 31;
q5 = 688,
Để hiểu được kết quả này ta nhớ lại bảng các phép toán logic VỞI bit:
o


b

a &b

a b

a-^b

0

0

0

0

0

0

0

1

1

0

0


1

1

1

1

0

11


+ Đổi cdc số d, b từ hệ 10 về hệ 16.
a = 126 -> a = {7E)i^.
b = 86 -> b = (56)k;.
+ Đổi a từ hệ 16 về hệ 2.
a = (7E ),^-> 0 1 1 1 1 1 1 0
q4 = a »

20 00 1 1 1 1 1

q4 = (lF )„ = (1 6 + 15ho= (31),0.
+ Đổi b từ hệ 16 về hệ 2.
b= (56),-»01010110
q5 = b « 3; 0 1 0 1 0 1 1 0 0 0 0
2

B


0

q5 = (2B0)„ = (2.256 + 11.16)io = (688}jo.
1.9. C H Ú THÍCH

Cách chú thích các đểu dòng lệnh và đoạn iệnh chưcrtig trình trong
cũng giống như trong C++ hay Java.
- Chú thích cho một dòng: / / dòng được chú thích đến hết dòng
- Chú thích cho nhiều dòng;
/* dòng 1 ;
dòng 2 ;
,

dòng n;

V
1.10. K ĩỂu LIỆT KÊ (ENUM )

Cú pháp kiểu liệt kê phải đặt từ khoá enum lẻn đầu:
enurn E 1 { a, b, c = 15, d, e} ;

Trong đó E1 !à tên biến có kiểu enum fliệt kê):
bằng số a lấy giá trị ng ạ;ên bằng 0
b lấy giá trị 1
c lấy giá trị 15

12



d lấy giá trị 16
e iấy giá trị 17

' S v i d ụ 1.3.
using System;
class Enumeration

(
enum El( a, b, c « 15, d, e} ;
static void MainO
I
Console.WriteLine (”Gia tri b » ’’+ {int)E1 .b);
Console.WriteLine (*’Gia tri d » *'+ {int)El-d);
Console.ReadLine ();

}
1

^ ^ K ết

quở.

Giá trị b = 1
Giá trị d = 16

1.11. KIÊU CẤU TRÚC - STRUCT
Kiểu struct giống như trong ngôn ngữ c. Stmct điíỢc định nghĩa với
tất cả các biến có kiểu public đặt trên class và dưới using System.
Trong hàm Main 0 ta khai báo các biến có kiểu struct và gán trựt
tiếp dữ liệu cho các biến struct qua toán tử chấm {dot operator).

stru G t

S tl

public sfr\ng ten;
Public int maso;

}
+ Khai báo biến struct trong hàm Mdin 0
Stl p;

+ Truy cập vào các biến trong struct
p.ten = "Hoa";
p.maso = 555;

13


s

Ví dụ 1.4.
using System;
public struct stl

{
public string ten;
public int mâso;

)
class ViduStruct


{
static '/oid MainO

{
stl p; / / k h ạ í bao bien p co kieu stl
p .ten =

Hoa" ;

t

p.maso » 555;
Console.WriteLine (" Ten: ’’+p.ten+"\nMa so: "+p.maso>;
Console.ReadLine ()

}

S ^ K ế t quả:
Ten: Hoa
Ma so: 555
1.12. KIỂU M ẢN G (ARRAY)
+ Mảng m ột chiểu:
int [ ] a - new int [ 10] ;

+ Mảng hai chiều:
double t ,) mat * new double [ 3,3) ;

Mục này ta chỉ nêu kiểu khai báo mảng. Đ ể hiểu
xem ờ chương 5.


14

về mảng các bạn


ChươNq 2 . X uất NhẬp d ữ liỆu
2.1. XUẤT D ử LỈỆU RA MÀN H ÌN H

2.1.1. Xuất dữ iiệu không định dạng
int a = 15;
double b » 123,45789;
char ch * ’M*;
string str * "Ha Noi” /
Console .Hriteline (*‘a =

b * ”+b);

Console.Writeline("ch »

str = ”+str);

2.1.2. Xuất dữ liệu c ó định d ạ n g với số dấu phày động
float fl = 123.7658437;
double dl = -?25.45<568;
Console.Writeliner£l ={0:0.000); dl = { 1 rO.OOOO} " , fl,dĩ);

K ết quá:

f1 = 123.766: d1 =325.4345

2.2.

N H Ậ P DỬ LIỆU TỪ BÀN PHÍM
string s;//khai bảo chuỗi ký tự s
int n;//khâi báo biến nguyên n
s * Console.Readline0 / //các ký tự từ bần phím gán cho s
n =* int 32. Parse (s);//chuyển đổi các ký tự số về giá trị số
I

Hoặc ta c 6 thể viết gộp:
int n/
n = Int32.Parse(Console.ReađLine{));
Hay: n » int.Parse (Console.ReadLine ());

ứng với một kiểu khai báo phải có một lệnh tương ứhg. Sau đây ta
nêu iẽn bảng liệt kẻ của kiểu khai báo vcfi lệnh chuyển đổi chuỗi nhập từ
bàn phím.

15


shorta

a = intló.Parse (Console.ReađLineO);

ushort a

a = Ulntlố.Parse (Consoie-ReadllnôO);

unit a


a = Ulnt32.Parse(Console,ReaơLineO);

long a

a = !ntó4.Parse (Consoie.ReadLineO);

uiong a

a = Ulnt64,ParseCConsole,ReadLineO);

string s

s = Console.ReađLineO;

char ch

fIoat a

đoubte a

ch = Char.Parse(Console.ReađLineO):
ch = char.Parse(ConsoIe.ReadUneO):
a » Single.ParseíConsole.ReadUneO);
a * tloat.ParseCConsoỉe.ReađUneO);
a = Double,Parse(Console.ReadUne());
a = double.Parse(Console.ReadLíneO);

c 5 \ / í dụ 2.1.
using Systemĩ

class InOut

(
static void MainO
{



int. ID; //ma so
string narae; //ten
float salarỵ; //luong
uĩong tel; //díen thoai

Console.Write("Nhap nia 80: ")
ID = Int32.Parse(Console.ReadLine 0);
Console.Write ("Nhap ten ỉ ")
narae = Console-ReadLine0;
Console.Write("Nầap luong: ");
salary “ Single.Parse(CConsứle.WriterNhap so dien thoai:- ")
tel = UỊrít64.Parse(Console.ReadLine0);
Consolẹ.Write ("Ma SOĨ "+ID);

16


Console.Wríte{"; Ten: ”+namet;
Console.Write(” ; Luong: ”+salary);
Console.VỉriteLine {'•;


So

dien thoai; "+tel);

Console.ReadLine0;// doi go mot phim

S ksí quá:
Nhap ma so: 111
Nhap ten; An
Nhap luong: 2000
Nhap so dien ỉhoai: 8676432
Ma so: 111; Ten: An; Luong: 2000; So dien thoai: 8676432

JềC*

17


ChươNq f , C á c

lệ N h đ ỉỀ u khiỂ N

Các lệnh điều khiến được chia làm ba nhóm:
- Lệnh iặp hay lệnh chu trình.
- Lệnh điều kiện.
- Lệnh lựa chọn.
3.1. CÁC LỆNH LẶP (LOOP)
Trong

c6 bốn lệnh lặp; for; do... ivhile, while, íoreach.


3.1.1. Lệnh lặ p to r
for (bt khởi tao; bt điều kiên; bt thay đổi)

{
lênh 1;
lệnh 2;

)
Trong đó biểu thứt (bt) khởi tạo. biểu thức điều kiện và biểu thức
thay đổi đứttg tách nhau bởi dấu chấm phảy.
Ví dụ: for (int i = 0; i < 5; i++) {}

dụ 3.1. Sử dụng vòng lạp for để hiển thị bình phưcftig của số
nguyên ỉ từ 0 đến 10 .
using System
class LoopForl

{
statỉc void MaiTiO

for (int i ■ 0; i <3 10; i++)
Console.writeLine ("i «= **+i+"; i*i »
Console.ReadLine ();

18

&L>FTTÓNH. MC.B



Vòng lặp for còn thực hiện vóí các biểu thút phút tạp. Trong ba biểu
thút tách nhau bởi dấu chấm phảy thì ở biểu thút khởi tạo và biểu thứt
thay đổi có thể chứa nhiều biểu thức con và chúng tách nhau bc^ dấu
phẳy còn biểu thức điều kiện thi có các phép toán quan hệ như && (và);
!! (hoặc) tạo thành.
Vi dụ 3.2. Hiển thị các giá trị i và j đồng thời,
using System;
class LoopFor2

i
static void Mâin {)

I
int i, j;
for (i = 0, j = 5; {i < 4) && (j > 2); i++, j— )
Console.WriteLine{"i = "+i+"; j = "+j);
Console.ReadLine();

H k ồ í quà:
= 0 ;j = 5
= l;j = 4
= 2 :j = 3
Nếu thay đổi toán tử && bằng toán tử I I ta sẽ có kết quả khác một
chút. Các bạn hãy tự thay*đoi.
Vòng lặp for còn thựd hiện vófi biểu ứìứt có kiểu íloat, double.
Trong vòng íor. lệnh thay đổi được viết:
for (double i = 0; i <= 2; i = i+0.1)

ở đây bước thay đổi (step) sẻ bằng 0 . 1 .


3.1.2. Vòng lộp d o ... whỉle
Vòng lặp d o ... whiie cũng có 3 biểu thứC:
- Biểu ứiức khctì tạo.
19



×