Bài giảng Lập trình DOTNET: Chương 1 Cơ bản về ngôn ngữ lập trình C# cung cấp cho người học những kiến thức như: Giới thiệu ngôn ngữ C#; Kiểu dữ liệu, các phương thức chuyển kiểu; Khai báo biến, hằng, phép toán; Các cấu trúc lệnh; Hàm, tham số và cách truyền tham số; Các lớp cơ sở: chuỗi, mảng, tập hợp; Những ứng dụng Console.
Trang 2NỘI DUNG
1 Giới thiệu ngôn ngữ C#
2 Kiểu dữ liệu, các phương thức chuyển kiểu
3 Khai báo biến, hằng, phép toán
4 Các cấu trúc lệnh
5 Hàm, tham số và cách truyền tham số
6 Các lớp cơ sở: chuỗi, mảng, tập hợp
7 Những ứng dụng Console
Trang 31 Ngôn ngữ lập trình 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)
• Hướng đối tượng
• Hỗ trợ kiểm soát và xử lý ngoại lệ (exception) tốt
• Các loại ứng dụng: Console, Windows Forms, Web Forms, Windows Services, Web Services
Hello.cs C# Compiler
Hello.exe hoặc Hello.dll
CLR trên Windows
CLR trên Linux
CLR trên MacOS MSIL
Trang 4Giới thiệu 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
Trang 5Giới thiệu Net Framework
• Tất cả các chương trình phát triển trên NET sẽ được chuyển về mã trung gian - Microsoft Intermediate Language (MSIL)
– Bước 1: Dịch mã nguồn MSIL
– Bước 2: MSIL mã CLR thực thi
• CLR: Common Language Runtime/ Bộ thực thi ngôn ngữ dùng chung
• FCL: Framework Class Library
Trang 6Tạo ứng dụng Console
Trang 7Cấu trúc chương trình C#
• Phần chú thích (option)
• Phần khai báo dùng namespace (option)
• Phần định nghĩa namespace, lớp và các phương thức
// Chương trình C# đầu tiên
static void Main(string[] args){ {
Console Write( "Hello World!" );
Console ReadLine();
}
}
}
Trang 8• Namespace System chứa nhiều lớp giao tiếp với hệ thống
• Từ khóa using dùng để khai báo namespace
Trang 9Câu lệnh
• Các câu lệnh được viết trong thân của phương thức (ở đây là phương
thức Main)
• Thực hiện một công việc nào đó
• Kết thúc bởi 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 { }
namespace HelloWorld {
class Program {
static void Main(string[] args) {
Console Write( "Hello World!" );
Console ReadLine();
} } }
Các câu lệnh
Phương thức Main
Trang 10Chú thích
• Chú thích (comment) được dùng để giải thích về chương trình và các câu lệnh
• Giúp cho chương trình dễ hiểu hơn
• Được bỏ qua khi biên dịch
• Không ảnh hưởng tới kết quả thực thi của chương trình
• Gõ phần chú thích sau cặp ký tự //
• Gõ phần chú thích giữa cặp ký tự /* và */
/* Chương trình C# đầu tiên
In ra câu chào "Hello World" */
using System;
namespace HelloWorld {
class Program {
static void Main(string[] args) {
Console.Write("Hello World!"); // Xuất ra câu chào Console.ReadLine(); // Chờ nhấn Enter
} }
Trang 112 Kiểu dữ liệu
• 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
• C# cũng chia tập dữ liệu thành hai kiểu: giá trị và tham chiếu Biến kiểu giá trị được lưu trong vùng nhớ stack, còn biến kiểu tham chiếu được lưu trong vùng nhớ heap
Trang 12Kiểu dữ liệu số nguyên
Name Common Type
System Description Range (min:max) **
sbyte System.SByte 8-bit signed integer -128:127 (-27:27-1) Số nguyên có dấu
short System.Int16 16-bit signed integer -32,768:32,767
(-215:215-1)
Số nguyên có dấu
int System.Int32 32-bit signed integer
2,147,483,648:2,147,483,647 (-231:231-1)
-Số nguyên có dấu
long System.Int64 64-bit signed integer
9,223,372,036,854,7
-75,808:
9,223,372,036,854,775,807 (-263:263-1)
Số nguyên có dấu
byte System.Byte 8-bit signed integer 0:255 (0:28-1) Số nguyên dương không dấu
ushort System.UInt16 16-bit signed integer 0:65,535 (0:216-1) Số nguyên dương không dấu
uint System.UInt32 32-bit signed integer 0:4,294,967,295
(0:232-1) Số nguyên dương không dấu
Trang 13Kiểu dữ liệu số thập phân
Name Common Type
System
Descriptio
n Range (approximate) **
float System.Single 32-bit ±1.5 × 10-45 to ±3.4 × 1038 Kiểu dấu chấm động, với 7 chữ số có nghĩa
double System.Double 64-bit ±5.0 × 10-324 to ±1.7 ×
10308
Kiểu dấu chấm động có độ chính xác gấp đôi, với 15 chữ số có nghĩa
decimal System.Decimal 128-bit ±1.0 × 10-28 to ±7.9 × 1028 Có độ chính xác đến 28 con số, phải có hậu
tố “m” hoặc “M” theo sau giá trị
Kiểu Boolean
bool System.Boolean true or false Giá trị logic
Kiểu Ký tự, Chuỗi
char System.Char 16-bit (Unicode) character Ký tự Unicode
string System.String Unicode character string
Kiểu đối tượng
object System.Object
The root type, from which all other types in the CTS
Trang 14Kiểu chuỗi (string)
• 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”;
Trang 15Kiể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
• Có 2 loại: mảng một chiều và mảng 2 chiều
Trang 16Kiểu mảng
• Mảng một chiều
<KDL> []<Tên mảng>=new <KDL>[Số phần tử];
VD: Khai báo mảng số nguyên arr gồm 5 phần tử
int [] arr = new int [5];
• 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];
Trang 17Enum – 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
enum Ngay {Hai = 1, Ba, Tu, Nam, Sau=10, Bay, ChuNhat};
Hai = 1; Ba = 2; … ; Sau=10; Bay=11;ChuNhat = 12
Trang 19Chuyển đổi kiểu dữ liệu
Trang 203 Khai báo biến, hằng, phép toán
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
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á
Trang 21Biến & khai báo biến
• Biến dùng để lưu trữ dữ liệu Mỗi biến thuộc về một KDL nào đó
• Khai báo: <kiểu dữ liệu> tên_biến;
Trang 22Hằng
• Cú pháp khai báo hằng: const <kiểu dữ liệu> tên_hằng = <giá trị>;
VD: const int a = 20;
Trang 23cho 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ị
Trang 24Ký hiệu so sánh và phép toán bit
Trang 254 Câu lệnh điều khiển
• Rẽ nhánh : if…else
• Lựa chọn : switch…case
• Lặp : for, while, do…while, foreach
• Các cấu trúc khác : goto, break, continue
Trang 26Nếu biểu thức điều kiện
cho kết quả khác khơng
(true) thì thực hiện
khới lệnh
Biểu thức điều kiện Đúng
Trang 28Nếu biểu thức điều kiện
cho kết quả khác không thì
Trang 29Cấu trúc rẽ nhánh: IF - VD: Giải và biện luận PT: ax+b=0
static void Main(string[] args)
Trang 30Cấu trúc lựa chọn - switch…case
Trang 31Ví dụ: Nhập vào số nguyên n có giá trị từ 1 đến 5 In cách đọc của số đó ra màn hình
static void Main(string[] args)
case 3: Console.WriteLine("So ba"); break;
case 4: Console.WriteLine("So bon"); break;
case 5: Console.WriteLine("So nam"); break;
default : Console.WriteLine(“Gia tri khong hop le");
}
}
Trang 32Bài tập
• Nhập vào hai số nguyên a, b In ra màn hình giá trị lớn nhất
• Cho ba số a, b, c đọc vào từ bàn phím Hãy tìm giá trị lớn nhất của
ba số trên và in ra kết quả
Trang 34Cấu trúc lặp while và for
Thực hiện các lệnh trong vòng lặp
Khởi gán
Đúng (Biểu thức điều kiện khác 0)
Kiểm tra biểuthức điều kiện
Tăng/ giảm chỉ
số lặpSai (Biểu thức
điều kiện = 0)
Trang 35Hoạt động cấu trúc lặp while và for
• Bước 2: Kiểm tra biểu thức điều kiện
- Nếu kết quả là true thì cho thực hiện các lệnh của vòng lặp, thực hiện biểu thức tăng/ giảm Quay trở lại bước 2
- Ngược lại kết thúc vòng lặp
Trang 40Cấu trúc lặp do…while
do { < khối lệnh> ; } while (biểu thức ĐK);
Thực hiện khối lệnh cho đến khi biểu thức điều kiện là false
Trang 44• Lệnh break: dùng câu lệnh break khi muốn thoát khỏi vòng lặp
for (int i = 0; i < 10; i++)
Trang 45Các lệnh điều khiển
• Lệnh continue: được dùng trong vòng lặp khi muốn thi hành tiếp vòng lặp nhưng không thi hành các lệnh còn lại trong vòng lặp, các lệnh sau lệnh continue
for (int i = 0; i < 10; i++)
• Lệnh return: dùng để thoát khỏi một hàm, nếu hàm có một kiểu dữ liệu trả
về thì return phải trả về một kiểu dữ liệu này
Trang 465 Một số hàm thông dụng
• Thông qua lớp Math
– Lấy giá trị tuyệt đối
int x = Math.Abs(-10); // kết quả x = 10
Trang 47Một số hàm thông dụng (tt)
• Lớp ký tự - char
– bool char.IsDigit(char c) : có phải là ký số
– bool char.IsLetter(char c) : có phải là ký tự
– bool char.IsLetterOrDigit(char c) : có phải là ký tự hoặc ký số
– bool char.IsLower(char c) : có phải là ký tự thường
– bool char.IsUpper(char c) : có phải là ký tự hoa
– char char.ToUpper(char c) : trả về ký tự hoa
– char char.ToLower(char c) : trả về ký tự thường
Trang 49Một số hàm thông dụng (tt)
• Lớp chuỗi – string
– Length : Chiều dài chuỗi (số ký tự)
– IndexOf(): Vị trí xuất hiện đầu tiên của một chuỗi con trong chuỗi
– LastIndexOf(): Vị trí xuất hiện cuối cùng của một chuỗi con trong
chuỗi
– ToUpper(): Trả về chuỗi chữ hoa
– ToLower(): Trả về chuỗi chữ thường
– Replace(): Thay thế chuỗi con trong chuỗi bằng một chuỗi con khác
– Split(): Cắt một chuỗi thành nhiều chuỗi con
– SubString(): Lấy một chuỗi con
Trang 50str2 = str1.Replace(“w”, “W”); // str2=”Hello World”
str2 = str1.ToLower(); // str2 = “hello world”
str2 = str1.ToUpper(); // str2 = “HELLO WORLD”
Trang 51Một số hàm thông dụng (tt)
• Ví dụ 2:
int a = 1, b = 2, tong = a+b;
string str = "Tong " + a.ToString() + " va " + b.ToString() + " la " + tong.ToString();
string[] arrStr = str.Split(',') ;
for (int i=0; i<arrStr.Length;i++)
{
sum += Convert.ToInt32(arrStr[i]);
}
Trang 52Một số hàm thông dụng (tt)
• Ví dụ 3: Hàm kiểm tra MSSV có phải là 7 ký tự số không?
private bool KiemTraMSSV(string mssv) {
// Kiem tra mssv chi co 7 ky tu
if (mssv.Length != 7) return false;
// Kiem tra cac ky tu phai la chu so
for (int i = 0; i < mssv.Length; i++)
Trang 53Bài tập – dữ liệu kiểu chuỗi
• 1.Viết hàm tách tên Tham số truyền vào là họ và tên, hàm sẽ trả về tên
• 2.Viết hàm tách họ Tham số truyền vào là họ và tên, hàm sẽ trả về họ và chữ lót
• 3 Viết hàm chuẩn hóa chuỗi họ tên:
– Không có khoảng trắng trước và sau tên
– Không có hơn 1 ký tự khoảng trắng giữa các ký tự
– Ký tự đầu của các từ phải viết hoa
– Ví dụ: “Nguyen Y Van” là hợp lệ
• 4.Viết hàm đếm số từ trong chuỗi
– Ví dụ: “Truong Dai hoc Dong Thap” 5
• 5.Viết hàm chuyển đổi số thành chữ
– Ví dụ: 12345 Mười hai nghìn ba trăm bốn mươi lăm
Trang 546 Method - Phương thức
• Phương thức (hay còn gọi là hàm) là một đoạn chương trình độc lập thực hiện trọn vẹn một công việc nhất định sau đó trả về giá trị cho chương trình gọi nó, hay nói cách khác hàm là sự chia nhỏ của chương trình
Mục đích sử dụng phương thức:
• Khi có một công việc giống nhau cần thực hiện ở nhiều vị trí
• Khi cần chia một chương trình lớn phức tạp thành các đơn thể nhỏ (hàm con) để chương trình được trong sáng,
dễ hiểu trong việc xử lý, tính toán
Trang 55Phương thức
Mẫu tổng quát của phương thức
<phạm vi> <KDL> TênPhươngThức([tham số]);
Trang 56Phương thức
KDL của phương thức (đầu ra), gồm 2 loại
• void: Không trả về giá trị
• float / int / long / string / kiểu cấu trúc / … : Trả về giá trị có KDL tương ứng với kết quả xử lý
Trang 58Khi hàm xử lý biến toàn cục thì không cần tham số
Trang 59 Phương thức không trả về giá trị
static void TênPhươngThức([danh sách các tham số])
{
Khai báo các biến cục bộ
Các câu lệnh hay lời gọi đến phương thức khác
}
• Gọi hàm: TênPhươngThức(danh sách tên các đối số);
• Những phương thức loại này thường rơi vào những nhóm chức năng: Nhập / xuất dữ liệu, thống kê, sắp xếp, liệt kê
59
Trang 60• Input: số nguyên dương (Xác định tham số)
• Output: In ra các ước số của n (Xác định KDL trả về của phương thức)
- Xuất Không trả về giá trị KDL là void
- Xác định tên phương thức: Phương thức này dùng in ra các
US của n nên có thể đặt là LietKeUocSo
static void LietKeUocSo(uint n)
Viết chương trình nhập số nguyên dương n và in ra màn hình các ước số của n
Trang 61static void LietKeUocSo(uint n)
Trang 62 Phương thức có trả về kết quả
static <KDL> TênPhươngThức([tham số])
{
}
Gọi hàm:
<KDL> Tên biến = TênPhươngThức(tên các đối số);
Những phương thức này thường rơi vào các nhóm: Tính
tổng, tích, trung bình, đếm, kiểm tra, tìm kiếm
Trang 63Viết chương trình nhập số nguyên dương n và tính
• Input: số nguyên dương n (Xác định tham số)
• Output: Tổng S (Xác định KDL trả về của phương thức)
Trả về giá trị tổng (S)
S là tổng các số nguyên dương nên S cũng là số nguyên dương
Kiểu trả về của hàm là ulong
• Xác định TênPhươngThức: Dùng tính tổng S nên có thể đặt là TongS
static ulong TongS(uint n)
63
0
; 3
Trang 64static ulong TongS(uint n)
Trang 65Tham số là tham chiếu
• Tham số lưu kết quả xử lý của hàm: out (thường dùng cho trường hợp nhập dữ liệu, kết quả hàm có nhiều giá trị)
• Tham số vừa làm đầu vào và đầu ra: ref
số và trước tên đối số khi gọi phương thức
• Dùng từ khóa ref bắt buộc phải khởi gán giá trị ban đầu cho đối số trước khi truyền vào khi gọi phương thức (Nếu dùng out thì không cần thiết)
65
Trang 66Ví dụ: Hoán vị 2 số nguyên a, b cho trước
Đánh giá kết quả khi viết chương trình với hai trường hợp sau
Trang 67 Không dùng tham chiếu
static void HoanVi(int a, int b)
Trang 69Ví dụ - sử dụng tham chiếu out
static void Nhap( out int a, out int b)
Trang 70Bài tập
Viết chương trình tính diện tích và chu vi của hình chữ nhật
Viết chương trình tính diện tích và chu vi hình tròn
Nhập vào 3 số thực a, b, c và kiểm tra xem chúng có lập thành 3 cạnh của một tam giác hay không? Nếu có hãy tính diện tích, chiều dài mỗi đường cao của tam giác và
in kết quả ra màn hình
Trang 71Bài tập
71
Viết chương trình nhập 2 số nguyên dương a, b
Tìm USCLN & BSCNN
Viết chương trình nhập số nguyên dương n, tính
tổng các ước số của n
Ví dụ: Nhập n=6 Tổng các ước số từ 1 đến n: 1+2+3+6=12
Nhập vào giờ, phút, giây Kiểm tra xem giờ,
phút, giây đó có hợp lệ hay không?
Trang 73Thao tác trên Console
Trang 74Một số site tham khảo
https://sites.google.com/site/duongniit905/lap-trinh/tai-lieu-hoc-c-danh-cho-nguoi-moi-bat-dau