Bài giảng Nhập môn lập trình - Chương 2: Giới thiệu ngôn ngữ C# cung cấp các kiến thức giúp sinh viên có thể: 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#.
Trang 1CHƯƠNG 2 GIỚI THIỆU NGÔN
Trang 33
Trang 4.NET Framework
4
Trang 5.NET Framework
5
Trang 6.Net Framework
6
Trang 7 Các thư viện đê phát triển ứng dụng
Bộ thực thi ngôn ngữ dùng chung (CLR)
7
Trang 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
Bộ thư viện Framework Class Library - FCL.
Trần Minh Thái
8
Trang 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
9
Trang 10.NET Framework
Trần Minh Thái
10
Trang 12Ngô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
12
Trang 13Ngô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
13
Trang 14Khởi Tạo Project
B1 Chọn
B2 Chọn Console Application
B3 Đặt tên Project
B4 Vị trí lưu
B4 Đặt tên Solution
Trang 15Khởi Tạo Project
File Program.cs là file mặc định chứa hàm Main của chương trình
15
Trang 16Compile & 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# thường là các file cs trong project thành một tập tin chạy chương 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.
16
Trang 17Compile & chạy chương trình
Trang 18Từ khoá – Keywords
case catch char checked class const continue decimal default delegate do double else enum
event explicit extern false finally fixed float
int interface internal is lock 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
Trang 19Khởi Tạo Project
Trang 20Namespace (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
20
Trang 21Namespace (không gian tên)
Trang 24π, … hoặc tiếng việt có dấu: â, ă, ô…
25
Trang 25Lệ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 { }
26
Trang 26Data 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
27
Trang 27Data Types (Kiểu dữ liệu - KDL)
C# cũng chia tập dữ liệu thành hai kiểu: giá trị
Trang 29Số nguyên
C#
Kích Thước
byte 1 Byte [0 255] Số nguyên dương không dấusbyte 1 Sbyte [-128 127] Số nguyên có dấu short 2 Int16 [0 65.535] Số nguyên không dấu int 4 Int32 Từ -2.147.483.647 đến 2.147.483.646 Số nguyên có dấu uint 4 Uint32 Từ 0 đến 4.294.967.295 Số nguyên không dấu long 8 Int64 Từ -9.223.370.036.854.775.808đến 9.223.370.036.854.775.807 Số nguyên có dấu ulong 8 Uint64 Từ 0 đến 0xffff ffff ffff ffff Số nguyên không dấu
30
Trang 30Ký tự và logic
C# thước Kích
(byte)
.NET Miền giá trị Mô tả
bool 1 Boolean true hoặc false Giá trị logic
Unicode
31
Trang 31Số thực
C# thước Kích
(byte) .NET Miền giá trị Mô tả
float 4 Single Từ 3,4E-38 đến 3,4E+38 Kiểu dấu chấm động, với 7 chữ số có nghĩa
double 8 Double Từ 1,7E308 đến 1,7E+308
Kiểu dấu chấm động
có độ chính xác gấp đôi, với 15 chữ số có nghĩa
decimal 8 Decimal
Có độ chính xác đến
28 con số, phải có hậu tố “m” hoặc “M” theo sau giá trị
32
Trang 32String (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”;
33
Trang 33Kiể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
34
Trang 35Kiểu mảng
Mảng hai chiều
<KDL> [,]<Tên mảng>=new <KDL>[Số dòng, số 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];
36
Trang 36Enum (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
37
Trang 37Enum (kiểu liệt kê)
Trang 38Enum (kiểu liệt kê)
Trang 39Struct (kiểu cấu trúc)
Struct dùng để nhóm các dữ liệu cùng liên quan đến một đối tượng nào đó
Trang 40Struct (kiểu cấu trúc)
struct SV
{
public string ten;
public string maso;
Trang 42Identifier (đị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á
43
Trang 43 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 máy tính Tên biến được dùng để tham khảo đến những vùng nhớ này
Biến để lưu trữ các giá trị do người dùng nhập vào hoặc các giá trị tạm thời trong quá trình tính toán
Mỗi biến sẽ có tên và kiểu dữ liệu tương ứng Kiểu
dữ liệu của biến xác định những giá trị kiểu nào có thể được lưu trong biến (ví dụ số hay chữ…)
PHẢI khai báo BiẾN trước khi sử dụng
44
Trang 44Biến & khai báo biến
Trang 45Biến & khai báo biến
VD: Khai báo và khởi tạo:
Trang 46/ 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++x; x+
+ Tăng x 1 đơn vị
x; x Giảm x 1 đơn vị
47
Trang 47Ký hiệu so sánh và phép toán bit
Trang 48Thứ tự ưu tiên phép toán
Toán tử Độ ưu
tiên
Trình tự kết
hợp
! ~ ++ - + * & sizeof 2 Từ phải qua trái
<< >> 5 Từ trái qua phải
< <= >= > 6 Từ trái qua phải
= += -= *= /= %= 14 Từ phải qua trái
49
Trang 50Cho biết kết quả của đoạn chương trình sau:
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 = ?
51
Trang 51Toán tử điều kiện
(ĐK)?<BT cho trường hợp đúng>:<BT cho trường hợp
Trang 52Hàm xuất – System Console
Trang 53Hàm xuất – System Console
Trang 54Xuất ký tự đặc biệt
Trang 58VD Viết chương trình nhập vào số nguyên
Trang 59Bà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
60
Trang 60Thao tác trên Console
Trần Minh Thái
61
Cửa sổ Console
Cột (0, 0)
Console.WindowWidth
Trang 61Di chuyển dấu nháy
Trang 62Lấy số ngẫu nhiên
Trang 63Console.WriteLine(songaunhien); songaunhien = rd.Next(10, 100); Console.WriteLine(songaunhien); sothuc = rd.NextDouble();
Console.WriteLine(sothuc); Trần Minh Thái
64
Trang 64Lấy ngày giờ hệ thống
Sử dụng lớp DateTime
DateTime d = DateTime.Now
int iGio = d.Hour; Lấy giờ
int iPhut = d.Minute; Lấy phút
int iGiay = d.Second; Lấy giây
int iMGiay = d.Millisecond; Lấy phần ngàn của giây
Trần Minh Thái
65
Trang 65Xác định phím nhấn trong Console
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
66
Trang 66Xác định phím nhấn trong Console
Cấu trúc ConsoleKeyInfo
Thuộc tính Key: Chứa tên phím được nhấn
Xác định bằng cách so giá trị với các phím trong ConsoleKey
Thuộc tính Modifiers: Cho biết phím Ctrl,
Shift hoặc Alt có được nhấn kèm
Trần Minh Thái
67
Trang 67Xá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 :
Trang 68if ( k.Modifiers!=0 && (k.Modifiers&ConsoleModifiers.Shift)!=0 )
Console.Write(“Ban nhan phim Shift + A”);
Trang 69Kiểm tra phím có nhấn hay không?
Trang 70while (!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;
Trang 73Ẩ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
74
Trang 74Console.CursorVisible = false;
ConsoleColor mauchu = Console.ForegroundColor;
ConsoleColor maunen = Console.BackgroundColor;
Trang 75Qui 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ự
Các ký tự trong tên biến chỉ có thể là các
ký tự chữ, số hoặc dấu gạch dưới (_)
Không được trùng với các từ khoá
Không được trùng với phạm vi khai báo
Tên dễ hiểu, súc tích và gợi nhớ
Phân biệt chữ hoa và thường
76
Trang 76Các định danh nào sau đây là không hợp lệ?
Trang 77Khai báo biến
Khai báo nhiều biến cùng kiểu
<Kiểu dữ liệu> tênbiến1, tênbiến2, tênbiến3;
Ví dụ:
int a, x, y;
78
Trang 78Khai báo và khởi gán giá trị ban đầu cho biến
<Kiểu dữ liệu> tênbiến = giá trị;
Trang 79Cá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 dữ liệu int, hay long int) hay thực (có kiểu dữ liệu là float,
double, long double)
Hằng ký tự: Được đặt trong dấu nháy đơn Ví dụ: 'A', 'a' tương ứng với giá 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#”
80
Trang 80Cá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
sao cho mỗi lệnh phải được quan sát trọn vẹn trong pham vi cửa sổ lệnh
81
Trang 81Cách trình bày chương trình (tt)
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ương trình phân cấp các khối lệnh con theo từng cột
82
Trang 82Các lỗi thường gặp khi viết chương 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ị
83
Trang 83Các lỗi thường gặp khi viết chương trình
Dùng phép chia KHÔNG ép kiểu cho số nguyên
Trang 84Bài tập về nhà
85
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 đương của nó theo độ Celsius, sử dụng công thức 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<b<c)
không? Xuất kết quả
) 32
( 9
Trang 8586