ƯƠ CH Ệ
Ớ
NG 2 Ữ I THI U NGÔN NG
GI
C#
Ầ
TR N MINH THÁI Email: minhthai@huflit.edu.vn Website: www.minhthai.edu.vn
1
2
ụ
M c tiêu
Gi
ớ ơ ả ữ ệ ệ ề i thi u .Net FramWork, các khái ni m c b n v ngôn ng C#
C u trúc c a m t ch
ủ ấ ộ ươ ươ ng trình và cách trình bày ch ng trình
Gi
ớ ụ ậ ứ ệ i thi u công c l p trình và các ch c năng liên quan
ệ ậ ấ L nh nh p/ xu t trong C#
3
.NET Framework
ể ỗ ợ ư ệ ộ ậ ợ ườ ậ Framework là m t t p h p các th vi n đ h tr cho ng i l p trình.
M i Framework đ
ỗ ượ ạ ộ ế c t o ra có m t ki n trúc khác nhau LTV ph i ả
ế tuân theo ki n trúc đó
ư ệ ỗ ợ ủ .NET Framework là th vi n tài nguyên c a Microsoft, h tr cho các
ầ ề ậ l p trình viên trong nhi u yêu c u khác nhau.
4
.NET Framework
5
.NET Framework
6
.Net Framework
7
.NET Framework
Các ngôn ng : C#, VB.Net, J#, F#, VC++…
ữ
Công c phát tri n Visual Studio
ụ ể
ặ ả ớ ữ L p đ c t ngôn ng dùng chung (CLS)
Các th vi n đê phát tri n ng d ng
ư ệ ể ứ ụ
ộ ự ữ B th c thi ngôn ng dùng chung (CLR)
8
.NET Framework
ươ
ượ
ị
Ch
ng trình đ
ữ c biên d ch thành ngôn ng
trung gian (MSIL Microsoft Intermediate
ượ
ự
Language), sau đó chúng đ
c CLR th c thi.
ề ả
Common Language Runtime CLR, n n t ng
ướ
ố ượ
ể ứ
ụ
h
ng đ i t
ng cho phát tri n ng d ng
ữ
ể Windows và Web mà các ngôn ng có th
ẻ ử ụ chia s s d ng. ầ
ộ ư ệ
Tr n Minh Thái B th vi n Framework Class Library FCL.
9
.NET Framework
Common Language Runtime CLR, n n t ng h
ề ả ướ ố ượ ng đ i t ng cho phát
ể ứ ụ ữ ể ẻ ử tri n ng d ng Windows và Web mà các ngôn ng có th chia s s
ụ d ng.
ộ ư ệ B th vi n Framework Class Library FCL.
ầ Tr n Minh Thái
10
.NET Framework
ầ Tr n Minh Thái
11
.
k r o w e m a r F T E N
12
Ngôn ng C#ữ
Ngôn ng l p trình đ
ữ ậ ượ ự ự ữ ữ ề ả c xây d ng d a trên n n t ng nh ng ngôn ng
ự ươ t ng t C (C, C++, Java)
Ho t đ ng trên .NET Framework
ạ ộ
ầ Tr n Minh Thái
13
Ngôn ng C#ữ
D a trên ph
ự ươ ố ượ ng pháp thi ế ế ướ t k h ng đ i t ng
Ứ ụ ng d ng : Console, WinForm, WebForm
ữ ễ ạ Có tính di n đ t ng nghĩa cao
ệ ữ ườ Phân bi t ch hoa th ng
ầ Tr n Minh Thái
ở ạ
Kh i T o Project
B2. Ch nọ Console Application 14
B1. Ch nọ
ư ị B4. V trí l u
ặ B3. Đ t tên Project
ặ B4. Đ t tên Solution
ở ạ
Kh i T o Project
15
File Program.cs là file mặc định chứa hàm Main của chương trình
16
ạ
ươ
Compile & ch y ch
ng trình
ị ứ ẽ ậ
ữ ươ ộ ậ ườ ạ
ị Trình biên d ch (compiler) s biên d ch các t p tin ch a ngôn ng C# ng ng là các file .cs trong project thành m t t p tin ch y ch th trình .exe
Có 2 cách biên d ch :
ạ ử
ổ
T i c a s cmd, gõ : csc.exe tenfile.cs
ấ
ặ
ả
ị
Nh n Build / Compile (ho c Build / Build Solution)
Biên d ch c project.
ị
17
ạ
ươ
Compile & ch y ch
ng trình
ươ ạ Ch y ch ng trình
ư ụ ử ụ S d ng file tenfile.exe trong th m c Bin\Debug
Ho c click Debug\ Start (Ctrl + F5)
ặ
ừ
T khoá – Keywords
abstract
add*
as
base
bool
break
byte
case
catch
char
checked
class
const
continue
decimal
default
delegate
do
double
else
enum
event
explicit
extern
false
finally
fixed
float
for
foreach
get*
goto
if
implicit
in
int
lock
interface
internal
is
long
namespace
new
null
object
operator
out
override
params
partial*
private
protected
public
readonly
ref
remove
return
sbyte
sealed
set*
short
sizeof
stackalloc
static
string
struct
switch
this
throw
true
try
typeof
uint
ulong
unchecked
unsafe
ushort
using
value*
virtual
void
volatile
where*
while
yield
18
19
ở ạ
Kh i T o Project
ấ
ộ
C u trúc m t project : using System; //khai báo không gian tên sử
dụng
namespace BaiTapVD {
class Program //tên lớp, tên file = tên lớp {
static void Main(string[] args)
{
//Các lệnh viết tại đây
}
} }
20
Namespace (không gian tên)
ệ ộ ượ ử ụ ố ượ ể ớ Namespace là m t khái ni m đ c s d ng đ phân nhóm các l p đ i t ng
ố ượ ữ ớ ệ trong .Net Framework, tránh vi c trùng tên gi a các l p đ i t ng
ầ Tr n Minh Thái
21
Namespace (không gian tên)
Ví d :ụ
System.Drawing2D.Pen
và System.Drawing3D.Pen
ề ậ ộ ớ ố ượ ề ư ộ ế đ u đ c p đ n m t l p đ i t ng Pen nh ng thu c hai namespace khác
ố ượ ớ nhau, do đó chúng là hai l p đ i t ng khác nhau.
ầ Tr n Minh Thái
ử ụ
S d ng Namespace 22
ủ ự ế ầ ằ Khai báo tr c ti p b ng cách ghi đ y đ namespace.
VD:
System.Media.SoundPlayer spStart
=new System.Media.SoundPlayer(“start.wav”);
ầ Tr n Minh Thái
ử ụ
S d ng Namespace 23
ử ụ ừ ướ ẽ ượ ế ể khóa using đ khai báo tr c namespace s đ c tham chi u
S d ng t đ n.ế
VD:
using System.Media;
SoundPlayer spStart = new SoundPlayer();
ầ Tr n Minh Thái
24
Comments (ghi chú)
Ý nghĩa
Ví dụ
Ki u ể Comments
/*comment*/
ề
Delimited comments
ể ở ộ Chú thích có th m r ng cho ồ nhi u dòng mã ngu n
ộ
//comment
Singleline comments
ử ụ Chú thích s d ng cho m t dòng mã ngu nồ
ề
/**comment**/
ử ụ ồ
ẩ ủ
Chú thích s d ng cho nhi u dòng mã ngu n chu n c a XML
XML delimited comments
///comment
ộ ẩ ủ
ử ụ Chú thích s d ng cho m t ồ dòng mã ngu n chu n c a XML
XML single line comments ầ
Tr n Minh Thái
25
ậ
T p các ký t
ự ườ th
ng dùng
ữ
Ch cái hoa: A, B, ..., Z ườ
ng: a, b, c, ..., z
ữ Ch cái th ữ ố
Ch s : 0, 1, ..., 9
ệ
ọ
Các ký hi u toán h c: +, , *, /, =,
(, ),...
ố
ạ
ệ
Ký hi u g ch n i: _ ệ
ệ
ư . , ; []
t nh :
ặ Các ký hi u đ c bi {} ? ! \ & | % # ...
ượ
ư
ệ
c dùng các ký hi u nh :
, α
Không đ φ Ω π
ế
ặ
ệ
ấ
, , … ho c ti ng vi
t có d u: â,
,
ă, ô…
26
ố ệ
ệ
L nh & Kh i l nh
M t câu l nh th c hi n m t ch c năng nào đó (gán, xu t, nh p, …) và
ứ ự ệ ệ ấ ậ ộ ộ
ượ ế ấ ẩ ằ đ ấ c k t thúc b ng d u ch m ph y (;)
ề ệ ố ệ ồ ượ ặ ặ ặ ọ Kh i l nh g m nhi u l nh và đ ấ c đ t trong c p d u ngo c nh n { }
27
ữ ệ
ể Data Types (Ki u d li u KDL)
ạ ữ ệ ị ủ ạ ộ ớ KDL là các lo i d li u và ph m vi giá tr c a chúng trong b nh mà
ườ ậ ử ụ ể ư ng ữ i l p trình s d ng đ l u tr .
Có 2 lo i : KDL d ng s n & KDL t
ự ẵ ạ ự ị đ nh nghĩa.
28
ữ ệ
ể Data Types (Ki u d li u KDL)
ữ ệ ế ể ậ ị C# cũng chia t p d li u thành hai ki u: giá tr và tham chi u
ị ượ ư ế ể ớ stack Bi n ki u giá tr đ c l u trong vùng nh
ế ể ế ượ ư ớ heap Bi n ki u tham chi u đ c l u trong vùng nh
29
ẵ
ị KDL đ nh s n
ố S nguyên
ố ự S th c
ự Ký t , logic
M ng, chu i ký t
ả ỗ ự
M t s KDL có c u trúc khác
ộ ố ấ
30
ố
S nguyên
ề
ị
C#
.NET
Mi n giá tr
Mô tả
Kích cướ Th (byte)
ố
ươ
ng
Byte
[0..255]
byte
1
S nguyên d không d uấ
ố
Sbyte
[128..127]
ấ S nguyên có d u
sbyte
1
ấ
ố
Int16
[0..65.535]
S nguyên không d u
short
2
ố
Int32
ấ S nguyên có d u
int
4
ừ ế
T 2.147.483.647 đ n 2.147.483.646
ừ
ấ
ố
ế Uint32 T 0 đ n 4.294.967.295
S nguyên không d u
uint
4
ố
Int64
ấ S nguyên có d u
long
8
ừ ế
T 9.223.370.036.854.775.808 đ n 9.223.370.036.854.775.807
ừ
ế
ấ
ố
ulong
Uint64 T 0 đ n 0xffff ffff ffff ffff
S nguyên không d u
8
31
ự
Ký t
và logic
ề
C#
.NET
ị Mi n giá tr
Mô tả
ặ
Kích c ướ th (byte) 1 2
bool char
Boolean true ho c false Char
ị Giá tr logic ự Ký t Unicode
32
ố ự S th c
ề
ị
C#
.NET
Mi n giá tr
Mô tả
Kích c ướ th (byte)
ấ
4
float
Single
ừ T 3,4E38 ế đ n 3,4E+38
ấ
8
double
Double
ừ T 1,7E308 ế đ n 1,7E+308
ấ ữ ố
ấ ể Ki u d u ch m ữ ố ớ ộ đ ng, v i 7 ch s có nghĩa ấ ể Ki u d u ch m ộ ộ đ ng có đ chính ớ xác g p đôi, v i 15 ch s có nghĩa
ộ
8
decimal
Decimal
ả ặ
“m” ho c
ế Có đ chính xác đ n ố 28 con s , ph i có ậ ố h u t “M” theo sau giá trị
33
ỗ
ể String (ki u chu i)
ể ộ ớ ạ ữ ệ ể ứ Ki u ể string có th ch a n i dung không gi i h n, vì đây là ki u d li u
ố ượ ượ ứ ở ộ đ i t ng đ c ch a ớ b nh heap.
Khai báo:
string s = “Nguyen Van A”;
34
ể
ả
Ki u m ng
M ng là m t t p h p các ph n t
ộ ậ ầ ử ả ợ ế ể ộ ữ ệ cùng m t ki u d li u liên ti p nhau
ượ ấ và đ ỉ ố c truy xu t thông qua ch s .
Ch s b t đ u t
ỉ ố ắ ầ ừ 0.
35
ể
ả
Ki u m ng
M ng m t chi u
ả
ầ
ố
t
];ử
ả
ố
VD: Khai báo m ng s nguyên
ề ả ộ
ồ arr g m 5
ầ ử
ph n t
int [] arr = new int [5];
36
ể
ả
Ki u m ng
M ng hai chi u
ả
ố
ố
c t];ộ
ậ
ố
ồ
VD: Khai báo ma tr n s nguyên
ề ả
mt g m 5 dòng và
3 c tộ
long [ ,] mt = new long [5, 3];
37
ể
ệ
Enum (ki u li
t kê)
ể ặ ị ể ứ ộ ị ố Enum là m t cách th c đ đ t tên cho các tr nguyên (các tr ki u s
ươ ự ư ậ ươ nguyên, theo nghĩa nào đó t ng t ằ nh t p các h ng), làm cho ch ng
ễ ể ơ trình rõ ràng, d hi u h n
38
ể
ệ
Enum (ki u li
t kê)
VD1:
enum Ngay {Hai, Ba, Tu, Nam, Sau, Bay, ChuNhat};
Hai = 0; Ba = 1; … ; ChuNhat = 6
VD2:
enum Ngay {Hai = 1, Ba, Tu, Nam, Sau, Bay, ChuNhat};
Hai = 1; Ba = 2; … ; ChuNhat = 7
39
ể
ệ
Enum (ki u li
t kê)
VD3:
enum Ngay {Hai = 1, Ba, Tu, Nam, Sau=10, Bay, ChuNhat};
Hai = 1; Ba = 2; … ; Sau=10; Bay=11;ChuNhat = 12
ấ
40
ể Struct (ki u c u trúc)
ữ ệ ộ ố ượ ế ể ng nào
Struct dùng đ nhóm các d li u cùng liên quan đ n m t đ i t đó.
Khai báo :
ấ
struct
{
ộ
Danh sách các thu c tính;
}
ế ấ ấ Truy xu t:
41
ấ
ể Struct (ki u c u trúc)
struct SV {
public string ten; public string maso;
}
static void Main(string[] args) { SV a; a.ten = "Le Van Teo"; a.maso = "002"; Console.WriteLine("Ten: "+a.ten+" Ma so:
"+a.maso);
Console.ReadLine();
}
42
ị
Identifier (đ nh danh)
ế ệ ằ ị ị Đ nh danh là vi c xác đ nh tên: bi n, hàm, h ng, …
ệ ữ ườ Phân bi t ch hoa th ng
43
ị
Identifier (đ nh danh)
ướ
ặ
Quy
c đ t tên :
ử ụ ữ ườ ữ ố S d ng 26 ch cái (th ng/ hoa), 10 ch s
D u n i ( _ )
ấ ố
ữ ố ở ầ Không dùng ch s đ u
ớ ừ Không trùng v i t khoá
44
Bi nế
ộ
ớ
ạ
ế
ệ
ớ
ủ
ớ ế
ể
ữ
ế
ả
ộ M t bi n đ i di n cho m t vùng nh hay ộ ậ t p các vùng nh trên b nh chính c a ượ c dùng đ tham máy tính. Tên bi n đ ớ kh o đ n nh ng vùng nh này ữ
ể ư
ị ị ạ
ườ ờ
ế ậ
ặ
i dùng Bi n đ l u tr các giá tr do ng nh p vào ho c các giá tr t m th i trong quá trình tính toán
ẽ
ế
ể
ủ
ể
ể ượ ư
ỗ ữ ệ ươ ng ị ế ng. Ki u d li u c a bi n xác đ nh ữ c l u
ữ
ế
M i bi n s có tên và ki u d li u t ữ ệ ứ ể ị nh ng giá tr ki u nào có th đ ụ ố trong bi n (ví d s hay ch …)
Ả
Ế
ướ
ử ụ
PH I khai báo Bi N tr
c khi s d ng
45
ế
ế
Bi n & khai báo bi n
Khai báo:
VD:
int x;
int a, b;
46
ế
ế
Bi n & khai báo bi n
ở ạ VD: Khai báo và kh i t o:
int x = 5;
int y = x;
float z = 3.7;
float k = (float) x/2;
47
ử ố ọ
Toán t
s h c
Ký hi uệ
Ý nghĩa
Ghi chú
+
*
C ngộ Trừ Nhân
/
Chia
ố ớ ố ế
ị ầ
Đ i v i s chia & b chia là nguyên ả thì cho k t qu là ph n nguyên
ầ
ỉ
ị
%
ấ Chia l y ph n dư
ố ụ Ch áp d ng cho s chia & b chia là ố s nguyên
ị Tăng x 1 đ n vơ
++x; x+ +
ơ
ị ả x; x Gi m x 1 đ n v
48
ệ
Ký hi u so sánh và phép toán bit
Ý nghĩa
Ký hi uệ
Ý nghĩa
ớ
Ký hi uệ >
&
Và bit
ặ ằ
ớ
ơ L n h n ơ
>=
L n h n ho c b ng
|
ặ Ho c bit
<
ị
>>
ả D ch ph i
ặ ằ
ỏ ơ Nh h n ỏ ơ
<=
ị
<<
D ch trái
==
^
Xor bit
!=
Nh h n ho c b ng B ngằ Khác
&&
||
!
Và Ho cặ ủ ị Ph đ nh
ứ ự ư
Th t
49
ự ế
u tiên phép toán ộ ư Đ u
Trình t
k t
Toán tử
ừ
() [] >
tiên 1
! ~ ++ + * & sizeof
2
ừ
* / %
3
ừ
+
4
ừ
<< >>
5
ừ
< <= >= >
6
ừ
== !=
7
ừ
&
8
h pợ T trái qua ph iả ừ ả T ph i qua trái T trái qua ph iả T trái qua ph iả T trái qua ph iả T trái qua ph iả T trái qua ph iả T trái qua ph iả
ừ
|
9
T trái qua
ph iả
ừ
^
10
T trái qua
ph iả
ừ
&&
11
T trái qua
ph iả
ừ
||
12
T trái qua
ph iả
ừ ả
? :
13
T ph i qua
trái
ừ ả
= += = *= /= %=
14
T ph i qua
trái
Stt
x
y
z
Ví d :ụ
1
5
11
int x = 5, y = 11;
2
int z = ++x + y++;
++x x=6
3
ế
ả
K t qu : x=6; y=12; z=17
z=x+y z=6+11=17
4
y++ y=12
ế ế
ả ủ
ạ
ươ
Cho bi
t k t qu c a đo n ch
ng trình sau:
int a, b;
b=a++ + ++a + a;
ế
ớ
ả V i a = 2 K t qu :
ế
ớ
ả V i a = 9 K t qu :
50
ế ế ả ủ ạ ươ Cho bi t k t qu c a đo n ch ng trình sau:
51 int a, b;
b=a%2 + a/2 + a;
ế ớ ả V i a = 17 K t qu : a = ?; b = ?
ế ớ ả V i a = 3 K t qu : a = ?; b = ?
int a, b;
b=a/3 + a;
ế ả ớ V i a = 8 K t qu : a = ?; b = ?
ế ả ớ V i a =21 K t qu : a = ?; b = ?
ử ề
ệ
Toán t
đi u ki n
ườ
ợ
ườ
ng h p đúng>:
ng
52
ợ
(ĐK)?
Ví d :ụ
ự
n = 10 (n%2==0): đúng
ệ ệ
th c hi n l nh n++ = 10++ = 11
int n;
(n%2==0)? n ++ : n ;
ự
n = 21 (n%2==0): sai
th c hi n l nh n = 21 = 20
ệ ệ
ế
ị
ế
ị
n u n = 10 thì giá tr n = 11
n u n = 21 thì giá tr n = 20
ế ế
ạ
ươ
Cho bi
ả
t k t qu đo n ch
ng trình sau:
int k;
m = (k%3==0)?k++: k;
ả
ớ
ế
V i k =10 K t qu : m = ?
ả
ớ
ế
V i k =15 K t qu : m = ?
53
ấ
Hàm xu t – System. Console
ấ
Write (Xu t ra màn hình)
ấ
ố
WriteLine (Xu t xong xu ng dòng)
ạ
ấ
ị
Xu t không đ nh d ng
int a = 5;
double x = 7.534;
string s = "ABC";
Console.WriteLine("a = " +a);
Console.WriteLine("x = "+x+"; s = "+s);
54
ấ
Hàm xu t – System. Console
ấ ậ ị ạ
Xu t có đ nh d ng th p phân
float x = 7.53489F;
double y = 5.6482;
Console.WriteLine("x = {0: 0.0000};
y = {1: 0.00} ", x, y);
ầ Tr n Minh Thái
55
ự ặ
ệ
ấ
Xu t ký t
đ c bi
t
ự
ượ
c “\”
ế
c
Ký t
\’
\”
\\
\0
\a
\b
\f
\n
\r
\t
Ý nghĩa
ấ
ơ
D u nháy đ n
ấ
D u nháy đôi
ấ
D u chéo ng
Null
Alert : Ti ng bip
ề ướ
Lùi v tr
Form feed
ố
Xu ng dòng
ề ầ
V đ u dòng
ầ
Tr n Minh Thái
Tab ngang
56
ụ
ậ
Bài t p áp d ng
Vi
ế ươ ẫ t ch ng trình in ra màn hình thông tin cá nhân theo m u sau:
Ho ten:
Lop:
Thong tin lien lac:
Dia chi:
So dien thoai:
ậ
Hàm nh p – System. Console
57
string s;
int n;
s = Console.ReadLine();
n = int.Parse(s);
Ho cặ
int n;
n = int.Parse(Console.ReadLine());
ầ Tr n Minh Thái
ậ
Hàm nh p – System. Console
58
ẫ M u chung:
Bi n;ế
ế Bi n = .Parse(Console.ReadLine());
Ho c ặ
Bi n;ế
ế Bi n = Convert.To(Console.ReadLine());
ầ Tr n Minh Thái
59
ế
ươ
t ch
ố ừ
ố
ậ
ng trình nh p vào s
VD Vi
nguyên và in ra màn hình s v a
nh pậ
int n;
n = int.Parse(Console.ReadLine());
Console.WriteLine(“So ban vua nhap la: “ + n);
60
ụ
ậ
Bài t p áp d ng
ậ ờ ấ ế ả ổ Nh p vào gi phút và giây, đ i ra giây và xu t k t qu ra màn hình.
ủ ậ ộ ố ị ố
Nh p vào 3 s nguyên a, b và c, tính giá tr trung bình c ng c a 3 s
ấ ế ả trên và xu t k t qu ra màn hình.
61
Thao tác trên Console
Console.WindowWidth
t
Cửa sổ Console
Cửa sổ Console
i
(0, 0)
Cột
i
.
h
g
e
H
w
o
d
n
W
e
l
D
ò
n
g
o
s
n
o
C
ầ Tr n Minh Thái
62
ể
ấ
Di chuy n d u nháy
ộ Console.SetCursorPosition(c t, dòng);
ấ ộ ỗ ị
VD: Xu t chu i Hello v trí dòng 20 và c t 10
Console.SetCursorPosition(10, 20);
Console.Write(“Hello”);
ầ Tr n Minh Thái
63
ấ
ẫ
ố
L y s ng u nhiên
ươ
ề
Ph
ứ
ng th c
ị
Mi n giá tr phát sinh
Next()
[0…2,147,483,646]
Next(max)
[0…max 1]
Next(min, max)
[min..max 1]
ố ự ừ
NextDouble()
S th c t
ế
0.0 đ n 1.0
ử ụ ớ
S d ng l p Random
ầ Tr n Minh Thái
int songaunhien;
double sothuc;
Random rd = new Random();
songaunhien = rd.Next();
Console.WriteLine(songaunhien);
songaunhien = rd.Next(100);
Console.WriteLine(songaunhien);
songaunhien = rd.Next(10, 100);
Console.WriteLine(songaunhien);
sothuc = rd.NextDouble();
64
Console.WriteLine(sothuc);
ầ Tr n Minh Thái
65
ấ
ờ ệ ố
L y ngày gi
h th ng
ử ụ ớ
S d ng l p DateTime
ộ
Thu c tính
Ý nghĩa
ủ
int iNg = d.Day;
int iTh = d.Month;
int iNm = d.Year;
int iGio = d.Hour;
int iPhut = d.Minute;
int iGiay = d.Second;
int iMGiay = d.Millisecond; L y ph n ngàn c a
DateTime d = DateTime.Now
ấ
L y ngày
ấ
L y tháng
ấ
L y năm
ờ
ấ
L y gi
ấ
L y phút
ấ
L y giây
ầ
ấ
giây
ầ Tr n Minh Thái
ị
ấ
Xác đ nh phím nh n trong Console
66
ConsoleKeyInfo k = Console.ReadKey()
ế ể ị ượ ề ấ N u không mu n hi n th phím đ
ố ố
c nh n thì truy n true vào tham s
ươ ứ ph ng th c ReadKey:
ConsoleKeyInfo k = Console.ReadKey(true)
ầ Tr n Minh Thái
ị
ấ
Xác đ nh phím nh n trong Console
67
ấ C u trúc ConsoleKeyInfo
ộ ứ ượ ấ ằ ị Thu c tính c nh n. Xác đ nh b ng cách so giá Key: Ch a tên phím đ
ị ớ tr v i các phím trong ConsoleKey
ộ ế ượ ấ Thu c tính t phím c nh n Modifiers: Cho bi Ctrl, Shift ho c ặ Alt có đ
kèm
ầ Tr n Minh Thái
68
ị
ấ
Xác đ nh phím nh n trong Console
ị
ượ
ấ
Xác đ nh phím Ctrl, Alt hay Shift đ
c nh n
ằ
ộ
b ng cách dùng phép toán AND (&) thu c tính
Modifiers v i :ớ
ConsoleModifiers.Ctrl
ConsoleModifiers.Alt
ConsonleModifiers.Shift
ầ Tr n Minh Thái
ể
ườ
ặ
ấ
VD Ki m tra xem ng
i dùng nh n phím A, Shift + A ho c phím
up arrow
ConsoleKeyInfo k;
k = Console.ReadKey(true);
switch(k.Key)
{
case ConsoleKey.A:
if (k.Modifiers!=0 && (k.Modifiers&ConsoleModifiers.Shift)!=0)
Console.Write(“Ban nhan phim Shift + A”);
else
Console.Write(“Ban nhan phim A”);
break;
case ConsoleKey.UpArrow:
Console.Write(“Ban nhan phim mui ten huong len”);
break;
default: Console.Write(“Ban nhan phim khac”);
}
69
ể
ấ
Ki m tra phím có nh n hay không?
70
ấ
Có nh n phím:
Console.KeyAvailable = true
ấ
Không nh n phím:
Console.KeyAvailable = false
ầ Tr n Minh Thái
ị ờ ệ ố
ế
ấ
ấ
ể
h th ng cho đ n khi nh n phím b t
Hi n th gi
71
kỳ
while (!Console.KeyAvailable)
{
DateTime d = DateTime.Now;
Console.Write("{0:00}:{1:00}:{2:00}",
d.Hour, d.Minute, d.Second);
Thread.Sleep(1000); //using
System.Threading;
Console.Clear();
}
ầ Tr n Minh Thái
72
ế ậ
Thi
t l p màu
ủ
ữ
ề
Màu n n c a ch
ằ
ố
Console.BackgroundColor = h ng s màu;
VD: Console.BackgroundColor =
ConsoleColor.Green;
Màu chữ
ằ
ố
Console.ForegroundColor = h ng s màu;
VD: Console.ForegroundColor = ConsoleColor.Red;
ử
ộ
ổ
Xóa n i dung c a s console: Console.Clear();
ầ Tr n Minh Thái
73
ằ
ố
H ng s màu
ằ
Các h ng s màu
ố
ConsoleColor.DarkRed
ConsoleColor.DarkYellow
ConsoleColor.Gray
ConsoleColor.Green
ConsoleColor.Magenta
ConsoleColor.Red
ConsoleColor.White
ConsoleColor.Black
ConsoleColor.Blue
ConsoleColor.Cyan
ConsoleColor.DarkBlue
ConsoleColor.DarkCyan
ConsoleColor.DarkGray
ConsoleColor.DarkGreen
ConsoleColor.DarkMagenta ConsoleColor.Yellow
74
Ẩ
ệ
ấ
n hi n d u nháy
Ẩ ấ n d u nháy
Console.CursorVisible = false;
Hi n d u nháy
ệ ấ
Console.CursorVisible = true;
ị ờ ề ớ ể
VD: Hi n th gi phút giây trên màn hình v i màu n n là màu xanh và màu
ỏ ữ
ch là đ
ầ Tr n Minh Thái
Console.CursorVisible = false;
ConsoleColor mauchu = Console.ForegroundColor;
ConsoleColor maunen = Console.BackgroundColor;
Console.BackgroundColor = ConsoleColor.Green;
while (!Console.KeyAvailable)
{
Console.ForegroundColor = ConsoleColor.Red;
DateTime d = DateTime.Now;
Console.SetCursorPosition(5, 5);
Console.Write("{0:00}:{1:00}:{2:00}", d.Hour, d.Minute,
d.Second);
Thread.Sleep(1000); //using System.Threading;
Console.ForegroundColor = Console.BackgroundColor;
Console.SetCursorPosition(5, 5);
75
ầ
}
Tr n Minh Thái
Console.Write("{0:00}:{1:00}:{2:00}", d.Hour, d.Minute,
d.Second);
76
ắ
ặ
Qui t c đ t tên
ể ặ
ế
ằ
Dùng đ đ t tên bi n, tên h ng, tên
hàm, …
ộ
ự
ắ ầ
.
ỉ
ữ ố
ấ
ạ
ướ
ằ
B t đ u b ng m t ký t
ể
ế
ự
trong tên bi n ch có th là
Các ký t
ặ
ự
ch , s ho c d u g ch
các ký t
i (_)
d
ượ
ớ
ừ
Không đ
khoá.
ượ
c trùng v i các t
ạ
ớ
c trùng v i ph m vi khai
Không đ
báo.
ễ ể
ợ
ớ
Tên d hi u, súc tích và g i nh .
ệ
ữ
ườ
Phân bi
t ch hoa và th
ng
Main
ợ ệ ị Các đ nh danh nào sau đây là không h p l ?
Tinh Tong
TinhTong
Tinh_Tong
x_Mu_2
2_Mu_2
using
class
Tien$
default
yahoo.com
77
78
Khai báo bi nế
ữ ệ
ế
Cú pháp
ể
tênbi n;
Ví d : ụ
ể ư
ế
ố
int a; //Khai báo bi n đ l u s
nguyên tên a
ố ự
ể ư
float c; //Khai báo bi n đ l u s th c tên
ế
c
ế
ể
ề
Khai báo nhi u bi n cùng ki u
ữ ệ
ế
ế
ể
tênbi n1, tênbi n2,
tênbi n3;ế
Ví d :ụ
int a, x, y;
79
ị
ở
Khai báo và kh i gán giá tr ban
ế
ầ
đ u cho bi n
ữ ệ
ể
ế
ị
tênbi n = giá tr ;
Ví d :ụ
int a = 5;
float b = 5.4, c = 9.2;
char ch = ‘n’;
80
ố
ạ ằ
Các lo i h ng s
H ng s : Đó là các giá tr xác đ nh, m t h ng s có th là
ể ố ị
ộ ằ
ể ố
ữ ệ nguyên (có ki u ể
ị
th c ự (có ki u d li u là float, double, long
ằ
ữ ệ
d li u int, hay long int) hay
double)
ự ượ ụ ấ ặ ơ ươ ứ ớ : Đ c đ t trong d u nháy đ n. Ví d : 'A', 'a' t ng ng v i giá
ằ
H ng ký t
ị ả tr nguyên 65, 97 trong b ng mã ASCII
H ng chu i: Là t p h p các ký t
ợ ặ ặ ỗ ự ượ
đ ấ
c đ t trong c p d u nháy kép " ". Ví
ằ
ụ ậ
d : “Lap trinh C#”
81
ươ
Cách trình bày ch
ng trình
ỗ ệ
ằ
ố
ộ
M i l nh n m trên m t dòng. Cu i dòng
ẩ
ấ
ấ
l nh ệ
PH IẢ có d u ch m ph y (;)
ể ượ
ệ
ế
ề
L nh quá dài có th đ
c vi
t thành nhi u
ỗ ệ
ả ượ
dòng sao cho m i l nh ph i đ
c quan sát
ổ ệ
ử
ẹ
ọ
tr n v n trong pham vi c a s l nh
82
ươ
Cách trình bày ch
ng trình
(tt)
ặ
ề ệ
ả
ế
ộ
ế
ể
ặ
ủ
ố ệ
ươ
ấ
ng trình phân c p các kh i l nh
ừ
Không nên đ t nhi u l nh trên cùng
m t dòng, ngay c các khai báo
ế
bi n, n u các bi n có khác ki u
cũng nên đ t trên các dòng khác
nhau.
Có các chú thích, ghi chú đ y đầ
Ch
ộ
con theo t ng c t
83
ườ
ặ
ế
ươ
i th
ng g p khi vi
t ch
ng
ỗ
Các l
trình
ử ụ
ế
KHÔNG khai báo các bi n s d ng trong
ươ
ch
ng trình
ư
ư
ế
ộ
ộ
ị
L u m t giá tr vào m t bi n nh ng
ữ ệ
ế
ớ
ể
KHÔNG cùng ki u d li u v i bi n
ử ụ
ứ
ế
ể
ộ
S d ng bi n trong m t bi u th c khi
CH AƯ có giá trị
84
ườ
ặ
ế
ươ
i th
ng g p khi vi
t ch
ng
ể ố
ỗ
Các l
trình
Dùng phép chia KHÔNG ép ki u cho s nguyên
Ví d : ụ
float kq = 3.2 + 2/3 + 1.5;
ẽ ằ
thì kq s b ng 4.7
thay vì
float kq = 3.2 + (float)2/3 + 1.5;
ẽ ằ thì kq s b ng 5.36666666666667
85
ề
ậ
Bài t p v nhà
ế
ươ
ậ
ộ
Vi
t ch
ng trình cho phép nh p vào m t
ố
ệ
ộ
ộ
s đo nhi
t đ theo đ Fahrenheit và
ấ
ệ
xu t ra nhi
t đ t
ủ
ng c a nó
)32
ứ
ộ
ộ ươ
0
C
ử
theo đ Celsius, s d ng công th c
ươ
ng đ
5 0
F
(
ụ
9
ổ
ể
chuy n đ i:
ế
ươ
ậ
ố
Vi
t ch
ng trình nh p vào 3 s nguyên
ế
ố ừ
ứ
ậ
a, b và c, cho bi
t 3 s v a nh p có th
ự
ấ ế
ả
t
tăng d n
ầ (a
(cid:0) (cid:0)
86
Q&A
ng
52
ợ
(ĐK)?
Ví d :ụ
ự
n = 10 (n%2==0): đúng ệ ệ th c hi n l nh n++ = 10++ = 11
int n;
(n%2==0)? n ++ : n ;
ự
n = 21 (n%2==0): sai th c hi n l nh n = 21 = 20 ệ ệ
ế
ị
ế
ị
n u n = 10 thì giá tr n = 11 n u n = 21 thì giá tr n = 20
ế ế
ạ
ươ
Cho bi
ả t k t qu đo n ch
ng trình sau:
int k;
m = (k%3==0)?k++: k;
ả
ớ
ế V i k =10 K t qu : m = ?
ả
ớ
ế V i k =15 K t qu : m = ?
53
ấ
Hàm xu t – System. Console
ấ
Write (Xu t ra màn hình)
ấ
ố
WriteLine (Xu t xong xu ng dòng)
ạ
ấ
ị
Xu t không đ nh d ng
int a = 5;
double x = 7.534;
string s = "ABC";
Console.WriteLine("a = " +a);
Console.WriteLine("x = "+x+"; s = "+s);
54
ấ
Hàm xu t – System. Console
ấ ậ ị ạ Xu t có đ nh d ng th p phân
float x = 7.53489F;
double y = 5.6482;
Console.WriteLine("x = {0: 0.0000};
y = {1: 0.00} ", x, y);
ầ Tr n Minh Thái
55
ự ặ
ệ
ấ Xu t ký t
đ c bi
t
ự
ượ
c “\”
ế
c
Ký t \’ \” \\ \0 \a \b \f \n \r \t
Ý nghĩa ấ ơ D u nháy đ n ấ D u nháy đôi ấ D u chéo ng Null Alert : Ti ng bip ề ướ Lùi v tr Form feed ố Xu ng dòng ề ầ V đ u dòng ầ Tr n Minh Thái Tab ngang
56
ụ
ậ
Bài t p áp d ng
Vi
ế ươ ẫ t ch ng trình in ra màn hình thông tin cá nhân theo m u sau:
Ho ten:
Lop:
Thong tin lien lac:
Dia chi:
So dien thoai:
ậ
Hàm nh p – System. Console
57
string s;
int n;
s = Console.ReadLine();
n = int.Parse(s);
Ho cặ
int n;
n = int.Parse(Console.ReadLine());
ầ Tr n Minh Thái
ậ
Hàm nh p – System. Console
58
ẫ M u chung:
ế Bi n =
Ho c ặ
ế Bi n = Convert.To
ầ Tr n Minh Thái
59
ế
ươ
t ch
ố ừ
ố ậ ng trình nh p vào s VD Vi nguyên và in ra màn hình s v a nh pậ
int n;
n = int.Parse(Console.ReadLine());
Console.WriteLine(“So ban vua nhap la: “ + n);
60
ụ
ậ
Bài t p áp d ng
ậ ờ ấ ế ả ổ Nh p vào gi phút và giây, đ i ra giây và xu t k t qu ra màn hình.
ủ ậ ộ ố ị ố Nh p vào 3 s nguyên a, b và c, tính giá tr trung bình c ng c a 3 s
ấ ế ả trên và xu t k t qu ra màn hình.
61
Thao tác trên Console
Console.WindowWidth
t
Cửa sổ Console Cửa sổ Console
i
(0, 0)
Cột
i
.
h g e H w o d n W e
l
D ò n g
o s n o C
ầ Tr n Minh Thái
62
ể
ấ
Di chuy n d u nháy
ộ Console.SetCursorPosition(c t, dòng);
ấ ộ ỗ ị VD: Xu t chu i Hello v trí dòng 20 và c t 10
Console.SetCursorPosition(10, 20);
Console.Write(“Hello”);
ầ Tr n Minh Thái
63
ấ
ẫ
ố
L y s ng u nhiên
ươ
ề
Ph
ứ ng th c
ị Mi n giá tr phát sinh
Next()
[0…2,147,483,646]
Next(max)
[0…max 1]
Next(min, max)
[min..max 1]
ố ự ừ
NextDouble()
S th c t
ế 0.0 đ n 1.0
ử ụ ớ S d ng l p Random
ầ Tr n Minh Thái
int songaunhien;
double sothuc;
Random rd = new Random();
songaunhien = rd.Next();
Console.WriteLine(songaunhien);
songaunhien = rd.Next(100);
Console.WriteLine(songaunhien);
songaunhien = rd.Next(10, 100);
Console.WriteLine(songaunhien);
sothuc = rd.NextDouble();
64
Console.WriteLine(sothuc);
ầ Tr n Minh Thái
65
ấ
ờ ệ ố
L y ngày gi
h th ng
ử ụ ớ S d ng l p DateTime
ộ Thu c tính
Ý nghĩa
ủ
int iNg = d.Day; int iTh = d.Month; int iNm = d.Year; int iGio = d.Hour; int iPhut = d.Minute; int iGiay = d.Second; int iMGiay = d.Millisecond; L y ph n ngàn c a
DateTime d = DateTime.Now
ấ L y ngày ấ L y tháng ấ L y năm ờ ấ L y gi ấ L y phút ấ L y giây ầ ấ giây
ầ Tr n Minh Thái
ị
ấ Xác đ nh phím nh n trong Console
66
ConsoleKeyInfo k = Console.ReadKey()
ế ể ị ượ ề ấ N u không mu n hi n th phím đ ố ố c nh n thì truy n true vào tham s
ươ ứ ph ng th c ReadKey:
ConsoleKeyInfo k = Console.ReadKey(true)
ầ Tr n Minh Thái
ị
ấ Xác đ nh phím nh n trong Console
67
ấ C u trúc ConsoleKeyInfo
ộ ứ ượ ấ ằ ị Thu c tính c nh n. Xác đ nh b ng cách so giá Key: Ch a tên phím đ
ị ớ tr v i các phím trong ConsoleKey
ộ ế ượ ấ Thu c tính t phím c nh n Modifiers: Cho bi Ctrl, Shift ho c ặ Alt có đ
kèm
ầ Tr n Minh Thái
68
ị
ấ Xác đ nh phím nh n trong Console
ị
ượ
ấ
Xác đ nh phím Ctrl, Alt hay Shift đ
c nh n
ằ
ộ
b ng cách dùng phép toán AND (&) thu c tính
Modifiers v i :ớ
ConsoleModifiers.Ctrl
ConsoleModifiers.Alt
ConsonleModifiers.Shift
ầ Tr n Minh Thái
ể
ườ
ặ
ấ
VD Ki m tra xem ng
i dùng nh n phím A, Shift + A ho c phím
up arrow
ConsoleKeyInfo k; k = Console.ReadKey(true); switch(k.Key) { case ConsoleKey.A:
if (k.Modifiers!=0 && (k.Modifiers&ConsoleModifiers.Shift)!=0)
Console.Write(“Ban nhan phim Shift + A”);
else
Console.Write(“Ban nhan phim A”);
break;
case ConsoleKey.UpArrow:
Console.Write(“Ban nhan phim mui ten huong len”); break;
default: Console.Write(“Ban nhan phim khac”); }
69
ể
ấ
Ki m tra phím có nh n hay không?
70
ấ Có nh n phím:
Console.KeyAvailable = true
ấ Không nh n phím:
Console.KeyAvailable = false
ầ Tr n Minh Thái
ị ờ ệ ố
ế
ấ
ấ
ể
h th ng cho đ n khi nh n phím b t
Hi n th gi 71 kỳ
while (!Console.KeyAvailable)
{
DateTime d = DateTime.Now;
Console.Write("{0:00}:{1:00}:{2:00}",
d.Hour, d.Minute, d.Second);
Thread.Sleep(1000); //using
System.Threading;
Console.Clear();
}
ầ Tr n Minh Thái
72
ế ậ
Thi
t l p màu
ủ
ữ
ề Màu n n c a ch
ằ
ố
Console.BackgroundColor = h ng s màu;
VD: Console.BackgroundColor =
ConsoleColor.Green;
Màu chữ
ằ
ố
Console.ForegroundColor = h ng s màu;
VD: Console.ForegroundColor = ConsoleColor.Red;
ử
ộ
ổ
Xóa n i dung c a s console: Console.Clear();
ầ Tr n Minh Thái
73
ằ
ố H ng s màu
ằ
Các h ng s màu
ố ConsoleColor.DarkRed ConsoleColor.DarkYellow ConsoleColor.Gray ConsoleColor.Green ConsoleColor.Magenta ConsoleColor.Red ConsoleColor.White
ConsoleColor.Black ConsoleColor.Blue ConsoleColor.Cyan ConsoleColor.DarkBlue ConsoleColor.DarkCyan ConsoleColor.DarkGray ConsoleColor.DarkGreen ConsoleColor.DarkMagenta ConsoleColor.Yellow
74
Ẩ
ệ
ấ n hi n d u nháy
Ẩ ấ n d u nháy
Console.CursorVisible = false;
Hi n d u nháy
ệ ấ
Console.CursorVisible = true;
ị ờ ề ớ ể VD: Hi n th gi phút giây trên màn hình v i màu n n là màu xanh và màu
ỏ ữ ch là đ
ầ Tr n Minh Thái
Console.CursorVisible = false;
ConsoleColor mauchu = Console.ForegroundColor;
ConsoleColor maunen = Console.BackgroundColor;
Console.BackgroundColor = ConsoleColor.Green;
while (!Console.KeyAvailable)
{
Console.ForegroundColor = ConsoleColor.Red;
DateTime d = DateTime.Now;
Console.SetCursorPosition(5, 5);
Console.Write("{0:00}:{1:00}:{2:00}", d.Hour, d.Minute, d.Second);
Thread.Sleep(1000); //using System.Threading;
Console.ForegroundColor = Console.BackgroundColor;
Console.SetCursorPosition(5, 5);
75
ầ
}
Tr n Minh Thái Console.Write("{0:00}:{1:00}:{2:00}", d.Hour, d.Minute, d.Second);
76
ắ
ặ
Qui t c đ t tên
ể ặ
ế
ằ
Dùng đ đ t tên bi n, tên h ng, tên hàm, …
ộ
ự
ắ ầ
.
ỉ
ữ ố
ấ
ạ
ướ
ằ B t đ u b ng m t ký t ể ế ự trong tên bi n ch có th là Các ký t ặ ự ch , s ho c d u g ch các ký t i (_) d
ượ
ớ
ừ
Không đ
khoá.
ượ
c trùng v i các t ạ
ớ
c trùng v i ph m vi khai
Không đ báo.
ễ ể
ợ
ớ
Tên d hi u, súc tích và g i nh .
ệ
ữ
ườ
Phân bi
t ch hoa và th
ng
Main
ợ ệ ị Các đ nh danh nào sau đây là không h p l ?
Tinh Tong
TinhTong
Tinh_Tong
x_Mu_2
2_Mu_2
using
class
Tien$
default
yahoo.com
77
78
Khai báo bi nế
ữ ệ
ế
Cú pháp
ể
tênbi n;
Ví d : ụ
ể ư
ế
ố int a; //Khai báo bi n đ l u s nguyên tên a
ố ự
ể ư
float c; //Khai báo bi n đ l u s th c tên ế c
ế
ể
ề
Khai báo nhi u bi n cùng ki u
ữ ệ
ế
ế
ể
Ví d :ụ
int a, x, y;
79
ị
ở Khai báo và kh i gán giá tr ban
ế
ầ
đ u cho bi n
ữ ệ
ể
ế
ị
Ví d :ụ
int a = 5;
float b = 5.4, c = 9.2;
char ch = ‘n’;
80
ố
ạ ằ Các lo i h ng s
H ng s : Đó là các giá tr xác đ nh, m t h ng s có th là
ể ố ị
ộ ằ ể ố ữ ệ nguyên (có ki u ể ị th c ự (có ki u d li u là float, double, long
ằ ữ ệ d li u int, hay long int) hay double)
ự ượ ụ ấ ặ ơ ươ ứ ớ : Đ c đ t trong d u nháy đ n. Ví d : 'A', 'a' t ng ng v i giá
ằ H ng ký t ị ả tr nguyên 65, 97 trong b ng mã ASCII
H ng chu i: Là t p h p các ký t
ợ ặ ặ ỗ ự ượ đ ấ c đ t trong c p d u nháy kép " ". Ví
ằ ụ ậ d : “Lap trinh C#”
81
ươ
Cách trình bày ch
ng trình
ỗ ệ
ằ
ố
ộ
M i l nh n m trên m t dòng. Cu i dòng
ẩ
ấ
ấ
l nh ệ
PH IẢ có d u ch m ph y (;)
ể ượ
ệ
ế
ề
L nh quá dài có th đ
c vi
t thành nhi u
ỗ ệ
ả ượ
dòng sao cho m i l nh ph i đ
c quan sát
ổ ệ
ử
ẹ
ọ
tr n v n trong pham vi c a s l nh
82
ươ
Cách trình bày ch
ng trình
(tt)
ặ
ề ệ ả
ế
ộ ế
ể
ặ
ủ ố ệ
ươ
ấ ng trình phân c p các kh i l nh
ừ
Không nên đ t nhi u l nh trên cùng m t dòng, ngay c các khai báo ế bi n, n u các bi n có khác ki u cũng nên đ t trên các dòng khác nhau. Có các chú thích, ghi chú đ y đầ Ch ộ con theo t ng c t
83
ườ
ặ
ế
ươ
i th
ng g p khi vi
t ch
ng
ỗ Các l trình
ử ụ
ế
KHÔNG khai báo các bi n s d ng trong
ươ
ch
ng trình
ư
ư
ế
ộ
ộ
ị
L u m t giá tr vào m t bi n nh ng
ữ ệ
ế
ớ
ể KHÔNG cùng ki u d li u v i bi n
ử ụ
ứ
ế
ể
ộ
S d ng bi n trong m t bi u th c khi
CH AƯ có giá trị
84
ườ
ặ
ế
ươ
i th
ng g p khi vi
t ch
ng
ể ố
ỗ Các l trình
Dùng phép chia KHÔNG ép ki u cho s nguyên
Ví d : ụ
float kq = 3.2 + 2/3 + 1.5;
ẽ ằ thì kq s b ng 4.7
thay vì
float kq = 3.2 + (float)2/3 + 1.5;
ẽ ằ thì kq s b ng 5.36666666666667
85
ề
ậ
Bài t p v nhà
ế
ươ
ậ
ộ
Vi
t ch
ng trình cho phép nh p vào m t
ố
ệ
ộ
ộ
s đo nhi
t đ theo đ Fahrenheit và
ấ
ệ
xu t ra nhi
t đ t
ủ ng c a nó )32
ứ
ộ
ộ ươ 0 C ử theo đ Celsius, s d ng công th c
ươ ng đ 5 0 F ( ụ 9
ổ ể chuy n đ i:
ế
ươ
ậ
ố
Vi
t ch
ng trình nh p vào 3 s nguyên
ế
ố ừ
ứ
ậ
a, b và c, cho bi
t 3 s v a nh p có th
ự
ấ ế
ả
t
tăng d n
ầ (a
(cid:0) (cid:0)
86