You are on page 1of 25

1210134 - Nhập môn lập trình

TRƯỜNG ĐẠI HỌC NGOẠI NGỮ - TIN HỌC TP. HỒ CHÍ MINH
HO CHI MINH CITY UNIVERSITY OF FOREIGN LANGUAGES - INFORMATION TECHNOLOGY

Bài 2
Chương trình C# đầu tiên với
cấu trúc Tuần tự
Biên soạn: ThS. Huỳnh Thành Lộc (locht@huflit.edu.vn)

Cập nhật: tháng 09/2023


www.huflit.edu.vn

NỘI DUNG

§ Giới thiệu ngôn ngữ lập trình C# và Visual Studio IDE


§ Biến và phép gán
§ Các kiểu dữ liệu cơ sở trong C#
§ Viết C# Console App đầu tiên với câu lệnh Tuần tự

Bài 2: Cấu trúc Tuần tự


2

NGÔN NGỮ LẬP TRÌNH C#

§ C# (phát âm C Sharp) là một ngôn ngữ


lập trình bậc cao được thiết kế bởi
Anders Hejlsberg từ Microsoft©
§ C# được phát triển dựa trên nền tảng
của ngôn ngữ C, C++ và Java
§ Phiên bản đầu tiên là C# 1.0 được giới
thiệu năm 2002
§ Tính đến tháng 9/2023, phiên bản ổn
định mới nhất là C# 11, đã có phiên bản
thử nghiệm C# 12

Bài 2: Cấu trúc Tuần tự


3

Biên soạn: ThS. Huỳnh Thành Lộc


1
1210134 - Nhập môn lập trình

NGÔN NGỮ LẬP TRÌNH C#

Nhập môn
lập trình

Kỹ thuật
lập trình

The C# Player's Guide (4th Edition), RB Whitaker, 2021.

Bài 2: Cấu trúc Tuần tự


4

NGÔN NGỮ LẬP TRÌNH C#

§ Mã nguồn chương trình viết bằng C# được biên


dịch thành mã ngôn ngữ trung gian (CIL).
§ Khi thực thi, CIL được biên dịch thành mã máy
tương ứng với hệ điều hành của máy tính đang
thực thi nó.

C# Common
Machine
source Intermediate
code
code Language
C# Compiler JIT in CLR
EXE DLL

Compile time Runtime

Chương trình C# chạy trên .NET

Bài 2: Cấu trúc Tuần tự


5

TẠI SAO CHỌN C#?

ĐƠN GIẢN + MẠNH MẼ


• Loại bỏ các vấn đề phức • Được xây dựng trên nền
tạp trên C, C++ và Java tảng C, C++ và Java
• Là ngôn ngữ lập trình • Đa năng: phát triển được
bậc cao nên cú pháp nhiều dạng ứng dụng
thân thiện, ít từ khóa (desktop, web, mobile &
• Sau khi học C# có thể dễ cloud app)
dàng học các ngôn ngữ • Đa nền tảng: Windows,
lập trình khác Linux, Mac

Bài 2: Cấu trúc Tuần tự


6

Biên soạn: ThS. Huỳnh Thành Lộc


2
1210134 - Nhập môn lập trình

.NET

https://dotnet.microsoft.com/en-us/learn/dotnet/what-is-dotnet

Bài 2: Cấu trúc Tuần tự


7

.NET

§ Năm 2002, Microsoft phát hành phiên bản đầu tiên với
tên gọi .NET Framework chỉ hỗ trợ trên các hệ điều
hành Windows.
§ Năm 2016, Microsoft phát hành thêm .NET core (mã nguồn
mở) cho phép phát triển ứng dụng trên các hệ điều hành
khác (Linux, MacOS,…)
§ Năm 2020, Microsoft gộp chung thành 1 phiên bản duy nhất
với tên gọi .NET 5

Bài 2: Cấu trúc Tuần tự


8

.NET

§ .NET có nhiều thành phần, trong đó


có 2 thành phần cơ bản là:
• Common Language Runtime (CLR)
• .NET Class Libraries

Bài 2: Cấu trúc Tuần tự


9

Biên soạn: ThS. Huỳnh Thành Lộc


3
1210134 - Nhập môn lập trình

.NET

§ CLR: môi trường máy ảo để


thực thi các ứng dụng .NET
§ JIT trong CLR có nhiệm vụ
dịch chương trình từ CIL thành
mã máy
§ CLR cung cấp các dịch vụ
như:
• Thu dọn rác
(garbage collection)
• Quản lý tài nguyên (resource
management)
• Xử lý lỗi ngoại lệ (exception
handling) Class Loader; JIT compiler; Security;
Garbage Collector; Code Manager;
Exception Handler; Collection;…

Bài 2: Cấu trúc Tuần tự


10

10

.NET

§ .NET Class Libraries: thư


viện chứa các lớp tiện ích
được xây dựng sẵn giúp
phát triển các ứng dụng
.NET dễ dàng hơn
§ BCL là các lớp cơ bản nhất

Bài 2: Cấu trúc Tuần tự


11

11

IDE

§ Text Editor: để viết source code


• Vd: Notepad, Notepad++, WordPad, MS Word,…
§ C# compiler
§ .NET
Để viết và chạy
§ ... một chương trình
C# trên máy tính
cần có những gì?

Integrated
Development
Environment

Bài 2: Cấu trúc Tuần tự


12

12

Biên soạn: ThS. Huỳnh Thành Lộc


4
1210134 - Nhập môn lập trình

IDE

§ Môi trường phát triển tích hợp (IDE) là


một chương trình tích hợp nhiều công
cụ để hỗ trợ lập trình viên viết chương
trình máy tính:
• Code editor với các tính năng hỗ trợ việc
soạn thảo code nhanh và đúng cú pháp
• Compiler: trình biên dịch
• Debugger: trình kiểm tra lỗi
• …
§ Microsoft Visual Studio (VS): là một IDE Rider
do chính Microsoft phát triển.
§ VS hỗ trợ nhiều ngôn ngữ lập trình
khác nhau: C#, C, C++, XML, CSS,
HTML, Python, Node.js

Bài 2: Cấu trúc Tuần tự


13

13

VISUAL STUDIO

https://visualstudio.microsoft.com
§ Máy tính Windows: cài đặt Visual Studio bản Community (miễn phí)

§ Máy tính MacOS: cài đặt Visual Studio for Mac

§ Các hệ điều hành khác: Visual Studio Code

Tính đến tháng 9/2023, phiên bản mới nhất là Visual Studio 2022

Bài 2: Cấu trúc Tuần tự


14

14

CHƯƠNG TRÌNH C# ĐẦU TIÊN

§ Tạo C# Project trên Visual Studio (VS)


• Bước 1: Sau khi khởi động VS à File à New àProject…
(Ctrl+Shift+N)

Hình ảnh minh họa


trên Visual Studio
Community 2019

Bài 2: Cấu trúc Tuần tự


15

15

Biên soạn: ThS. Huỳnh Thành Lộc


5
1210134 - Nhập môn lập trình

CHƯƠNG TRÌNH C# ĐẦU TIÊN

§ Tạo C# Project trên Visual Studio (VS)


• Bước 2: Chọn ngôn ngữ lập trình (C#) và loại ứng dụng
(Console Application) à Next

Bài 2: Cấu trúc Tuần tự


16

16

CHƯƠNG TRÌNH C# ĐẦU TIÊN

§ Tạo C# Project trên Visual Studio (VS)


• Bước 3: Đặt tên dự án (Project name) và vị trí lưu trên bộ nhớ
máy tính (Location) à Next

Solution name:
Tên giải pháp

Một solution có thể chứa


nhiều project , mặc định
Solution name giống
Project name

Bài 2: Cấu trúc Tuần tự


17

17

CHƯƠNG TRÌNH C# ĐẦU TIÊN

§ Tạo C# Project trên Visual Studio (VS)


• Bước 4: Chọn phiên bản .NET (Target Framework) à Create

Bài 2: Cấu trúc Tuần tự


18

18

Biên soạn: ThS. Huỳnh Thành Lộc


6
1210134 - Nhập môn lập trình

CHƯƠNG TRÌNH C# ĐẦU TIÊN

§ Giao diện lập trình trên VS Các menu chức năng


của VS

Solution name

Project name

Source files

Code editor: cửa sổ Solution Explorer: cửa sổ quản lý


soạn thảo code các Project của Solution

Bài 2: Cấu trúc Tuần tự


19

19

CHƯƠNG TRÌNH C# ĐẦU TIÊN

§ Cấu trúc thư mục của Solution

Thư mục Solution


name đặt trong
Location thiết lập ở
Bước 3
Thư mục các Project
trong Solution và file
khởi động Solution
(.sln)

Thư mục bin: Chứa các file


khi biên dịch chương trình
thành CIL (.exe,.dll)
Thư mục chứa các file
của một Project File .cs: Chứa source code
của chương trình

Bài 2: Cấu trúc Tuần tự


20

20

CHƯƠNG TRÌNH C# ĐẦU TIÊN

§ Hello World
using System;

namespace MyFirstCSharpProject
Để chạy chương trình:
{ § Cách 1: Ctrl + F5
class Program § Cách 2: Chọn menu Debug à
Start Without Debugging
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}

Bài 2: Cấu trúc Tuần tự


21

21

Biên soạn: ThS. Huỳnh Thành Lộc


7
1210134 - Nhập môn lập trình

CẤU TRÚC CHƯƠNG TRÌNH C#

§ using Directives: Khai báo cho compiler biết chương


trình sử dụng các câu lệnh thuộc thư viện nào trong
BCL
using System;
§ Primitive data types: các kiểu dữ liệu cơ cơ sở
namespace MyFirstCSharpProject
VD: int, double, char, string, boolean
{ § Console Class: Lớp chứa các câu lệnh nhập, xuất dữ liệu chuẩn trên
cửa sổ Console
class ProgramVD: Console.Read(), Console.ReadLine(), Console.Write(),
{ Console.WriteLine(),…
static Convert
§ void Class: Lớp chứa
Main(string[] args)các câu lệnh chuyển giúp đổi giữa các kiểu dữ
liệu cơ bản
{ VD: Convert.ToInt32(), Convert.ToDouble(),…
Console.WriteLine("Hello
§ Math Class: Lớp chứa cácWorld!");
câu lệnh tính toán trong Toán học
} VD: Math.Pow(), Math.Sqrt(), Math.Round(), Math.Abs(),…
§ String class: Lớp chứa các câu lệnh xử lý chuỗi ký tự (sẽ học ở Bài 9)
} § …
}

Bài 2: Cấu trúc Tuần tự


22

22

CẤU TRÚC CHƯƠNG TRÌNH C#

§ namespace, class , method : Các cấu trúc tổ chức


code khác nhau của một chương trình, lớn nhất là
namespace, nhỏ nhất là method
using System;
namespace
namespace MyFirstCSharpProject
{
class Program class
(sẽ học ở học phần Kỹ thuật lập trình)
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
} method
(sẽ học ở Bài 5)
}

Bài 2: Cấu trúc Tuần tự


23

23

CẤU TRÚC CHƯƠNG TRÌNH C#

§ {…}: Các cặp dấu {…} dùng để xác định điểm


bắt đầu và điểm kết thúc của một cấu trúc
(namespace/class/method) hoặc một khối lệnh
(code block)
using System;
namespace MyFirstCSharpProject
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}
Bài 2: Cấu trúc Tuần tự
24

24

Biên soạn: ThS. Huỳnh Thành Lộc


8
1210134 - Nhập môn lập trình

CẤU TRÚC CHƯƠNG TRÌNH C#

§ Hàm Main(): Đây là một Hàm đặc biệt, xác định


điểm bắt đầu khi thực thi một chương trình
à mỗi chương trình chỉ có 1 hàm Main() duy nhất
using System;
namespace MyFirstCSharpProject
{ Dấu “ ; ”
Cú pháp bắt buộc khi kết thúc
class Program một câu lệnh trong C#
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
} code here
Hiện tại, chúng ta sẽ viết tất cả các câu lệnh của
}
chương trình bên trong cặp {…} của hàm Main()

Bài 2: Cấu trúc Tuần tự


25

25

CẤU TRÚC TUẦN TỰ

§ Cấu trúc tuần tự: Từng bước của thuật toán được
thực hiện một cách tuần tự từ bước đầu tiên cho đến
bước cuối cùng.
§ Ví dụ: Viết chương trình yêu cầu người dùng nhập vào
Họ và Tên (name), sau đó in ra màn hình (cửa sổ
Console) dòng chữ:
Hello name!

Bài 2: Cấu trúc Tuần tự


26

26

CẤU TRÚC TUẦN TỰ


using System;

namespace Greeter
{
class Program
{
static void Main(string[] args)
{
Console.Write("Enter your name: ");
string name = Console.ReadLine();
Console.WriteLine("Hello " + name);
}
}
} In ra màn hình dòng chữ:
Enter your name:

Bài 2: Cấu trúc Tuần tự


27

27

Biên soạn: ThS. Huỳnh Thành Lộc


9
1210134 - Nhập môn lập trình

CẤU TRÚC TUẦN TỰ


using System;

namespace Greeter
{
class Program
{
static void Main(string[] args)
{
Console.Write("Enter your name: ");
string name = Console.ReadLine();
Console.WriteLine("Hello " + name);
}
}
Khai báo sử dụng một nơi trong bộ nhớ máy tính
} để lưu trữ dữ liệu (gọi là Biến - Variable):
§ Tên biến (name variable): name
§ Kiểu dữ liệu (data type): string – biến này
dùng để lưu một chuỗi ký tự
Bài 2: Cấu trúc Tuần tự
28

28

CẤU TRÚC TUẦN TỰ


using System;

namespace Greeter
{
class Program
{
static void Main(string[] args)
{
Console.Write("Enter your name: ");
string name = Console.ReadLine();
Console.WriteLine("Hello " + name);
}
}
} Thực hiện đọc một dòng dữ liệu do người
dùng nhập vào từ bàn phím, kết thúc việc
nhập bằng phím Enter

Bài 2: Cấu trúc Tuần tự


29

29

CẤU TRÚC TUẦN TỰ


using System;

namespace Greeter
{
class Program
{
static void Main(string[] args)
{
Console.Write("Enter your name: ");
string name = Console.ReadLine();
Console.WriteLine("Hello " + name);
}
}
} Lưu trữ giá trị vừa đọc được vào biến
name à thực hiện phép gán (assignment)
giá trị cho biến

Bài 2: Cấu trúc Tuần tự


30

30

Biên soạn: ThS. Huỳnh Thành Lộc


10
1210134 - Nhập môn lập trình

CẤU TRÚC TUẦN TỰ


using System;

namespace Greeter
{
class Program
{
static void Main(string[] args)
{
Console.Write("Enter your name: ");
string name = Console.ReadLine();
Console.WriteLine("Hello " + name);
}
}
} In ra màn hình dòng chữ “Hello ” và theo
sau là giá trị được lưu trong biến name
Sau khi in xong xuống dòng

Bài 2: Cấu trúc Tuần tự


31

31

BIẾN TRONG C#

§ Biến là tên gọi chỉ một nơi trong bộ nhớ, dùng để lưu
trữ dữ liệu của chương trình
§ Trước khi sử dụng 1 biến phải thực hiện khai báo biến
(variable declaration)

Cú pháp khai báo biến:


type name;
• type: Kiểu dữ liệu
• name: Tên biến
Variable
§ Lưu ý: Mỗi biến chỉ khai báo 1 lần và C# có phân biệt
chữ hoa với chữ thường

Bài 2: Cấu trúc Tuần tự


32

32

BIẾN TRONG C#

§ Quy định đặt tên biến trong C# (bắt buộc phải tuân
theo):
• Bắt đầu phải là một chữ cái (a-z, A-Z) hoặc underscore ( _ )
• Tiếp theo có thể là chữ cái, số hoặc underscore

• Tên biến không được trùng với từ khóa (keyword) C# đã


dùng: namespace, class, int, double,…

§ Hãy cho biết tên biến nào là hợp lệ trong C#:


answer 1stValue value1
$message delete-me delete_me
PI _min money$

Bài 2: Cấu trúc Tuần tự


33

33

Biên soạn: ThS. Huỳnh Thành Lộc


11
1210134 - Nhập môn lập trình

BIẾN TRONG C#

§ Quy ước đặt tên biến (không bắt buộc phải tuân theo):
• Rule 1. Tên biến nên mô tả được ý nghĩ của giá trị mà bạn sẽ
lưu vào nó
• Rule 2. Không viết tắt những từ không phổ biến

• Rule 3. Dùng camelCasing: Ký tự đầu tiên của mỗi từ trong


tên biến nên viết HOA (trừ từ đầu tiên – phân biệt với Hàm)
à giúp dễ đọc tên biến.

VD: areaOfTriangle sẽ dễ đọc hơn areaoftriangle

Bài 2: Cấu trúc Tuần tự


34

34

CÁC KIỂU DỮ LIỆU CƠ SỞ TRONG C#

§ Các kiểu dữ liệu cơ sở trong C#:

C# primitive data types

The C# Player's Guide (4th Edition), RB Whitaker, 2021.

Bài 2: Cấu trúc Tuần tự


35

35

CÁC KIỂU DỮ LIỆU CƠ SỞ TRONG C#

§ Các kiểu dữ liệu cơ sở trong C#:

https://www.c-sharpcorner.com/blogs/data-types-in-c-sharp
Bài 2: Cấu trúc Tuần tự
36

36

Biên soạn: ThS. Huỳnh Thành Lộc


12
1210134 - Nhập môn lập trình

PHÉP GÁN =

§ Phép gán = (Assignment): gán giá trị của biểu thức ở


vế phải toán tử “=” vào biến ở vế trái.

variable = value;

§ Vế phải phải có kiểu dữ liệu giống với vế trái.

static void Main(string[] args)


{
int score = 0;
}

Bài 2: Cấu trúc Tuần tự


37

37

PHÉP GÁN =

§ Khi thực thi chương trình, tại từng thời điểm, biến có
một giá trị cụ thể
static void Main(string[] args)
{
int a = 5;
int b;
b = 2;

b = a;

a = -3;

Bài 2: Cấu trúc Tuần tự


38

38

CÁC PHÉP TOÁN SỐ HỌC

§ Toán tử một ngôi (unary operators):


• Tăng một đơn vị: ++
• Giảm một đơn vị: --
• Hỗ trợ 2 cách viết:
x++ ++x
int x = 3; int x = 3;
Console.WriteLine(x); // output: 3 Console.WriteLine(x); // output: 3
Console.WriteLine(x++); // output: 3 Console.WriteLine(++x); // output: 4
Console.WriteLine(x); // output: 4 Console.WriteLine(x); // output: 4

x-- --x
int x = 3; int x = 3;
Console.WriteLine(x); // output: 3 Console.WriteLine(x); // output: 3
Console.WriteLine(x--); // output: 3 Console.WriteLine(--x); // output: 2
Console.WriteLine(x); // output: 2 Console.WriteLine(x); // output: 2

Bài 2: Cấu trúc Tuần tự


39

39

Biên soạn: ThS. Huỳnh Thành Lộc


13
1210134 - Nhập môn lập trình

CÁC PHÉP TOÁN SỐ HỌC

§ Toán tử một ngôi (unary operators):


• Đổi dấu: -

int x = 3;
int y = - x;
int z = - y;
Console.WriteLine(x); // output: 3
Console.WriteLine(y); // output: -3
Console.WriteLine(z); // output: 3

Bài 2: Cấu trúc Tuần tự


40

40

CÁC PHÉP TOÁN SỐ HỌC

§ Toán tử hai ngôi (binary operators):


• Cộng: +
• Trừ: -
• Nhân: *
• Nếu các toán hạng có kiểu dữ liệu khác nhau, thì kết quả của
phép toán sẽ được chuyển về kiểu dữ liệu gần nhất
Console.WriteLine(5 + 4); // output: 9
Console.WriteLine(5 + 4.3); // output: 9.3

Console.WriteLine(47 - 3); // output: 44


Console.WriteLine(5 – 4.3); // output: 0.7

Console.WriteLine(5 * 2); // output: 10


Console.WriteLine(0.5 – 2.5); // output: 1.25

Bài 2: Cấu trúc Tuần tự


41

41

CÁC PHÉP TOÁN SỐ HỌC

§ Toán tử hai ngôi (binary operators):


• Toán tử + còn có thể được dùng để ghép nối chuỗi

string a = “Hello”;
string b = “my friends”;
string c = a + “ “ + b; // output: “Hello my friends”

Bài 2: Cấu trúc Tuần tự


42

42

Biên soạn: ThS. Huỳnh Thành Lộc


14
1210134 - Nhập môn lập trình

CÁC PHÉP TOÁN SỐ HỌC

§ Toán tử hai ngôi (binary operators):


• Chia: /
• Đối với kiểu số nguyên: thương của phép chia 2 toán hạng
được làm trong về 0
• Đối với kiểu số thực: thương của phép chia 2 toán hạng

Console.WriteLine(13 / 5); // output: 2


Console.WriteLine(-13 / 5); // output: -2
Console.WriteLine(13 / -5); // output: -2
Console.WriteLine(-13 / -5); // output: 2

Console.WriteLine(13.0 / 5.0); // output: 2.6


Console.WriteLine(13.0 / 5); // output: 2.6
Console.WriteLine(13 / 5.0); // output: 2.6

Bài 2: Cấu trúc Tuần tự


43

43

CÁC PHÉP TOÁN SỐ HỌC

§ Toán tử hai ngôi (binary operators):


• Số dư: %
• Đối với kiểu số nguyên: a % b là kết quả của a - (a / b) * b

Console.WriteLine(5 % 4); // output: 1


Console.WriteLine(5 % -4); // output: 1
Console.WriteLine(-5 % 4); // output: -1
Console.WriteLine(-5 % -4); // output: -1

Console.WriteLine(13.0 / 5.0); // output: 2.6


Console.WriteLine(13.0 / 5); // output: 2.6
Console.WriteLine(13 / 5.0); // output: 2.6

Bài 2: Cấu trúc Tuần tự


44

44

CÁC PHÉP TOÁN SỐ HỌC

§ Toán tử hai ngôi (binary operators):


• Số dư: %
• Đối với kiểu số thực: x % y là giá trị z
ü Dấu của z (nếu z ≠ 0) giống với dấu của x;
ü Giá trị của z bằng |x| - n * |y|, với n là số nguyên lớn nhất nhỏ
hơn hoặc bằng |x| / |y| và |x|, |y| lần lượt là giá trị tuyệt đối của x
và y.

Console.WriteLine(-5.2 % 2.0); // output: -1.2


Console.WriteLine(5.9 % 3.1); // output: 2.8

Bài 2: Cấu trúc Tuần tự


45

45

Biên soạn: ThS. Huỳnh Thành Lộc


15
1210134 - Nhập môn lập trình

CÁC PHÉP TOÁN CƠ BẢN

§ Phép toán chuyển kiểu (type conversions)


• Ngầm định (Implicit conversions): chuyển kiểu không gây mất
mát thông tin.
• Ví dụ chuyển từ kiểu int à long, int à double,…

int a = 2147483647;
long b = a;
double c = a;

Bài 2: Cấu trúc Tuần tự 46

46

CÁC PHÉP TOÁN CƠ BẢN

§ Phép toán chuyển kiểu (type conversions)


• Ngầm định (Explicit conversions): chuyển kiểu có thể gây mất
mát thông tin.
• Ví dụ chuyển từ kiểu double à int

double a = 1234.7;
int b = (int) a;
Console.WriteLine(b); // output: 1234

Bài 2: Cấu trúc Tuần tự 47

47

CÁC PHÉP TOÁN SỐ HỌC

§ Phép toán kép

Phép toán Ý nghĩa


a += k a=a+k
a -= k a=a-k
a *= k a=a*k
a /= k a=a/k

Bài 2: Cấu trúc Tuần tự 48

48

Biên soạn: ThS. Huỳnh Thành Lộc


16
1210134 - Nhập môn lập trình

CÁC PHÉP TOÁN CƠ BẢN

§ Một số hàm toán học: Lớp Math

Hàm Ý Nghĩa
Math.Abs(x) |𝑥|
Math.Max(x, y) Giá trị lớn nhất trong 2 số x, y
Math.Min(x, y) Giá trị nhỏ nhất trong 2 số x, y
Math.Pow(x, y) 𝑥!
Math.Sqrt(x) 𝑥

Bài 2: Cấu trúc Tuần tự


49

49

NHẬP DỮ LIỆU

§ Console.ReadLine() – đọc toàn bộ một dòng dữ liệu do


người dùng nhập trong cửa sổ Console cho đến khi
nhấn Enter
Nhập 1 ⏎
static void Main(string[] args) numberText: "1"
{
string numberText = Console.ReadLine();
}

§ Dữ liệu đọc bằng Console.ReadLine() có kiểu String

Làm sao đọc


các kiểu dữ
liệu khác?

Bài 2: Cấu trúc Tuần tự


50

50

NHẬP DỮ LIỆU

§ Phép chuyển kiểu: Covert.To…()


Nhập 1 ⏎
static void Main(string[] args) numberText: "1”
{ numberInt1: 1
string numberText = Console.ReadLine();
int numberInt1 = Convert.ToInt32(numberText);

double numberDouble = Convert.ToDouble(Console.ReadLine());

Nhập 3.14 ⏎
numberDouble: 3.14
int numberInt2 = Convert.ToInt32(Console.ReadLine());
}
Nhập 3.14 ⏎
Lỗi: “Input string was not in a correct format”

Lưu ý: Dòng dữ liệu nhập vào phải có giá trị phù hợp với kiểu dữ liệu được chuyển
Bài 2: Cấu trúc Tuần tự
51

51

Biên soạn: ThS. Huỳnh Thành Lộc


17
1210134 - Nhập môn lập trình

NHẬP DỮ LIỆU

§ Phép chuyển kiểu: type.Parse()


Nhập 1 ⏎
static void Main(string[] args) numberText: “1”
{ numberInt1: 1
string numberText = Console.ReadLine();
int numberInt1 = int.Parse(numberText);

double numberDouble = double.Parse(Console.ReadLine());

Nhập 3.14 ⏎
numberDouble: 3.14

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


}
Nhập 3.14 ⏎
Lỗi: “Input string was not in a correct format”
Lưu ý: Dòng dữ liệu nhập vào phải có giá trị phù hợp với kiểu dữ liệu được chuyển
Bài 2: Cấu trúc Tuần tự
52

52

XUẤT DỮ LIỆU

§ Console.WriteLine(…) – xuất một dòng dữ liệu ra cửa


sổ Console và kết thúc bằng ký tự xuống dòng (‘\n’)
static void Main(string[] args)
{
int score = 0;
double max = 10;
string message = "Good!";
Console.WriteLine("Example 1: "); Example 1:
Console.WriteLine(score); 0
Console.WriteLine(max); 10
Console.WriteLine(message); Good!
}

Bài 2: Cấu trúc Tuần tự


53

53

XUẤT DỮ LIỆU

static void Main(string[] args) Example 2:


{ Your score: 0
int score = 0; Max score is: 10 pts
double max = 10;

Console.WriteLine("Example 2: ");
Console.WriteLine("Your score: " + score);
Console.WriteLine("Max point is: " + max + " pts");
}

§ Nhận xét: Phép toán “+” có nhiệm vụ:


• Ghép các chuỗi với nhau. VD: “hello” + “guys” à “Hello guys”
• Ghép số với với chuỗi à kết quả là một chuỗi.
VD: “Max score is” + 10 à “Max score is 10”

Bài 2: Cấu trúc Tuần tự


54

54

Biên soạn: ThS. Huỳnh Thành Lộc


18
1210134 - Nhập môn lập trình

XUẤT DỮ LIỆU

§ Console.WriteLine(String, Object[])
• String: một chuỗi ký tự có trộn lẫn với các indexed
placeholder (vị trí được đánh số thứ tự)à composite format
string
• Object[]: dãy các giá trị/biến (item) tương ứng với các indexed
placeholder

static void Main(string[] args)


Your score: 0 / 10 pts
{
Indexed placeholder
int score = 0;
double max = 10;
0 1

Console.WriteLine("Your score: {0} / {1} pts", score , max);


}
composite format string Object[]
Bài 2: Cấu trúc Tuần tự
55

55

XUẤT DỮ LIỆU

§ Cú pháp định dạng cho indexed placeholder:


{index[,alignment][:formatString]}
• index: bắt buộc, xác định vị trí item được in ra
trong dãy Object[] (đánh số bắt đầu từ 0)

static void Main(string[] args)


{
string primes;
primes = String.Format("Prime numbers less than 10: {0},
{1}, {2}, {3}", 2, 3, 5, 7);
Console.WriteLine(primes); 0 1 2 3

}
Prime numbers less than 10: 2, 3, 5, 7
Bài 2: Cấu trúc Tuần tự
56

56

XUẤT DỮ LIỆU

§ Cú pháp định dạng cho indexed placeholder:


{index[,alignment][:formatString]}
• [,alignment]: không bắt buộc, một số nguyên xác
định độ rộng (số ký tự) và cách canh lề khi in:
ü Nếu alignment < chiều dài cần để in item à tham số này sẽ
được bỏ qua
ü Ngược lại, alignment là số dương à canh lề phải , alignment là
số âm à canh lề trái

static void Main(string[] args)


{
Console.WriteLine("{0,-10} | {1,15}", "First Name", "Last Name");
Console.WriteLine("{0,-10} | {1,15}", "Andres", "Hejlsberg");
}
First Name | Last Name
Andres | Hejlsberg
4 ký tự space
Bài 2: Cấu trúc Tuần tự 6 ký tựspace
57

57

Biên soạn: ThS. Huỳnh Thành Lộc


19
1210134 - Nhập môn lập trình

XUẤT DỮ LIỆU

§ Cú pháp định dạng cho indexed placeholder:


{index[,alignment][:formatString]}
• [:formatSting]: không bắt buộc, chuỗi định dạng
phù hợp với kiểu dữ liệu của item

static void Main(string[] args)


{
int value;
value = 12345;
Console.WriteLine("{0:D}", value); // Displays 12345
Console.WriteLine("{0:D8}", value); // Displays 00012345
}

Xem thêm tại: https://docs.microsoft.com/en-us/dotnet/standard/base-types/composite-formatting

Bài 2: Cấu trúc Tuần tự


58

58

XUẤT DỮ LIỆU

§ Ví dụ: Xuất số thực với có độ chính xác

static void Main(string[] args)


{
double mark = 7.456;

// Displays: “Your mark: 7.46”


Console.WriteLine("Your mark: {0:0.00}", mark);
}

Bài 2: Cấu trúc Tuần tự


59

59

XUẤT DỮ LIỆU

§ Từ C# 6.0, hỗ trợ trợ tính năng chèn trực tiếp {tên


biến} vào giữa chuỗi bằng các thêm ký tự ‘$’ vào trước
chuỗi đó à String interpolation

static void Main(string[] args)


{
double mark = 7.456;

// Displays: “Your mark: 7.46”


Console.WriteLine($"Your mark: {mark:0.00}");
}

Bài 2: Cấu trúc Tuần tự


60

60

Biên soạn: ThS. Huỳnh Thành Lộc


20
1210134 - Nhập môn lập trình

XUẤT DỮ LIỆU

§ Xuất ký tự đặc biệt:


Chương trình xem đây là dấu kết thúc chuỗi

static void Main(string[] args)


{
Console.WriteLine(""C:\My Documents"");
}
Ký tự đặc biệt
à Cách giải quyết:
• Dùng Escape Characters Cần in đường dẫn sau
• Dùng Verbatim String Literal ra màn hình (bao gồm
cả cặp dấu “”):
“C:\My Documents”

Bài 2: Cấu trúc Tuần tự


61

61

XUẤT DỮ LIỆU

§ Escape Characters: sử dụng dấu backslash (\). Nếu ký


tự theo sau ‘\’ là:
• Ký tự đặc biệt (*) à dịch thành ký tự đặc biệt tương ứng.
Ví dụ: \t (ký tự tab), \n (ký tự xuống dòng),…

• Các ký tự khác, in ra như một ký tự bình thường.

Ví dụ: \" (in ký tự "), \\ (in ký tự \), \{ (in ký tự {),…


static void Main(string[] args)
{
Console.WriteLine("\"C:\\My Documents\"");
}

(*) https://docs.microsoft.com/en-us/dotnet/standard/base-types/character-escapes-in-regular-expressions

Bài 2: Cấu trúc Tuần tự


62

62

XUẤT DỮ LIỆU

§ Verbatim String Literal: đặt ký tự ‘@’ trước chuỗi à các


ký tự đặc biệt trong chuỗi được xem như là một ký tự
bình thường. Ngoại trừ các trường hợp đặc biệt sau:
• Dùng "" à "
• Dùng {{ à {
• Dùng }} à }

static void Main(string[] args)


{
Console.WriteLine(@"""C:\My Documents""");
}

Bài 2: Cấu trúc Tuần tự


63

63

Biên soạn: ThS. Huỳnh Thành Lộc


21
1210134 - Nhập môn lập trình

GHI CHÚ

§ Ghi chú (Comment)


• Ghi chú là văn bản (text) được đặt đâu đó trong source code
để cho con người đọc
• Máy tính không xem ghi chú là lệnh, nên sẽ bỏ qua khi biên
dịch và thực thi chương trình

§ Tại sao phải ghi chú? static void Main()


{
• Làm code dễ đọc hơn double x = 1234.7;
• Giải thích code hoạt động int a;
ra sao
ü Cho bản thân mình đọc lại // Cast double to int
ü Cho programmer khác a = (int)x;
Console.WriteLine(a);
}

Bài 2: Cấu trúc Tuần tự


64

64

GHI CHÚ

§ Cú pháp 1: Ghi chú chỉ 1 dòng

// Nội dung ghi chú

§ Cú pháp 2: Ghi chú nhiều dòng

// Nội dung ghi chú 1


// Nội dung ghi chú 2
// Nội dung ghi chú 3

/*
Nội dung ghi chú 1
Nội dung ghi chú 2
Nội dung ghi chú 3
*/

Bài 2: Cấu trúc Tuần tự


65

65

GHI CHÚ

§ Ví dụ

static void Main(string[] args)


{
// Ghi chú
Console.WriteLine("Hello World!");
}

static void Main(string[] args)


{
Console.WriteLine("Hello World!"); // Ghi chú
}

static void Main(string[] args)


{
Console.WriteLine("Hello World!"); /* Ghi chú */
}

Bài 2: Cấu trúc Tuần tự 66

66

Biên soạn: ThS. Huỳnh Thành Lộc


22
1210134 - Nhập môn lập trình

GHI CHÚ

§ Tạo ghi chú hiệu quả


• Rule 1. Viết ghi chú cho đoạn mã trước hoặc ngay khi hoàn
thành xong đoạn mã
• Rule 2. Ghi chú phải cung cấp thêm thông tin cho đoạn mã
ü Đặt mình vào hoàn cảnh đây là đoạn mã do người khác viết và
giờ mình cần phải đọc hiểu đoạn mã này thì cần ghi chú những

ü Mô tả Thuật toán của đoạn mã
ü Những kỹ thuật đặc biệt đã áp dụng
• Rule 3. Đừng ghi chú mọi dòng code hay không ghi chú gì cả!

Bài 2: Cấu trúc Tuần tự


67

67

BÀI TẬP

§ Hãy mô tả thuật toán (bằng ngôn ngữ tự nhiên và sơ


đồ khối) và viết chương trình giải các bài toán sau đây:
• Bài 1. Cho 2 số thực a và b. Thực hiện hoán đổi giá trị của a
và b. In ra màn hình giá trị của a, b trước và sau khi hoán đổi.

INPUT OUTPUT
a = 8.53 Before swapping:
b=4 a = 8.53, b = 4
After swapping:
a = 4, b = 8.53

Bài 2: Cấu trúc Tuần tự


68

68

BÀI TẬP

§ Hãy mô tả thuật toán (bằng ngôn ngữ tự nhiên và sơ


đồ khối) và viết chương trình giải các bài toán sau đây:
• Bài 2. Cho số thực r là bán kính của một hình tròn. Tính và in
ra màn hình chu vi và diện tích của hình tròn đó (kết quả
được làm tròn đến 2 chữ số thập phân).
• Biết rằng: Chu vi: 𝑷 = 𝟐𝝅𝐫, Diện tích: 𝑨 = 𝝅𝒓𝟐

INPUT OUTPUT
r = 3 P = 18.85
A = 28.27

Bài 2: Cấu trúc Tuần tự


69

69

Biên soạn: ThS. Huỳnh Thành Lộc


23
1210134 - Nhập môn lập trình

BÀI TẬP

§ Hãy mô tả thuật toán (bằng ngôn ngữ tự nhiên và sơ


đồ khối) và viết chương trình giải các bài toán sau đây:
• Bài 3. Cho 3 số thực lần lượt là điểm quá trình, điểm thi
thực hành và điểm thi cuối kỳ môn Nhập môn lập trình của
một sinh viên có trọng số lần lượt là 20%, 30% và 50%
(điểm có giá trị từ 0 đến 10). Hãy tính điểm trung bình
môn học (làm tròn đến 1 chữ số thập phân) của sinh viên.

INPUT OUTPUT
Attendant mark = 8.5 Average mark: 8.5
mark = 7.5
Final exam = 9.0

Bài 2: Cấu trúc Tuần tự


70

70

BÀI TẬP

§ Hãy mô tả thuật toán (bằng ngôn ngữ tự nhiên và sơ


đồ khối) và viết chương trình giải các bài toán sau đây:
• Bài 4. Cho một số thực là số giờ làm việc của nhân viên và
một số nguyên là số tiền công của mỗi giờ làm việc. Tính và
in ra màn hình lương tháng của nhân viên.

INPUT OUTPUT
Working hours = 7.5 Your Salary: 112.5
Unit price = 15

Bài 2: Cấu trúc Tuần tự


71

71

BÀI TẬP

§ Hãy mô tả thuật toán (bằng ngôn ngữ tự nhiên và sơ


đồ khối) và viết chương trình giải các bài toán sau đây:
• Bài 5. Có một số tiền N và các tờ tiền với mệnh giá 100, 50,
20, 10, 5, 2, 1. Hãy đổi N thành các tờ tiền sao cho tổng số
tờ giấy bạc cần dùng là ít nhất.

INPUT OUTPUT
Amount of money: 266 100 : 2
50 : 1
20 : 0
10 : 1
5 : 1
2 : 0
1 : 1

Bài 2: Cấu trúc Tuần tự


72

72

Biên soạn: ThS. Huỳnh Thành Lộc


24
1210134 - Nhập môn lập trình

BÀI TẬP

§ Hãy mô tả thuật toán (bằng ngôn ngữ tự nhiên và sơ


đồ khối) và viết chương trình giải các bài toán sau đây:
• Bài 6. Cho một số nguyên là khoảng thời gian diễn ra của một
sự kiện (tính bằng giây). Hãy biểu diễn thời gian đó dưới
dạng “hh : mm : ss” (“giờ : phút : giây”).

INPUT OUTPUT
Input time (s): 566 00 : 09 : 26

Bài 2: Cấu trúc Tuần tự


73

73

TỔNG KẾT

§ Hiểu cấu trúc C# Console App và biết


cách sử dụng Visual Studio
§ Nắm vững các kiểu dữ liệu cơ sở trong
C#
§ Viết được các chương trình C# đơn giản
với câu lệnh Tuần tự

Bài 2: Cấu trúc Tuần tự


74

74

Biên soạn: ThS. Huỳnh Thành Lộc


25

You might also like