Tải bản đầy đủ (.docx) (31 trang)

Lập trình ngôn ngữ C

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 (263.31 KB, 31 trang )

CHƯƠNG 1:
Trong chương này trình bày:
# Liệt kê các bước giải quyết vấn đề .
# Thuật toán
# Vẽ lưu đồ
# Ký hiệu sử dụng trong lưu đồ
# Biến
# Kiểu dữ liệu
# Kiểm tra chương trình bằng cách chạy thô
# Cấu trúc một chương trình C
1.1 Giới thiệu:
Máy tính được dùng để giải quyết vấn đề và thực hiện các phép tính .Tuy nhiên ,để thực hiện được
điều này ,chúng ta phải cung cấp giải pháp dưới các câu lệnh cần thiết để giải quyết vấn đề cụ thể.
Nói cách khác,chúng ta phải cung cấp cho máy tính dãy lệnh để giải quyết bài toán .Dãy lệnh này được
gọi là chương trình .Khi viết một chương trình để giải quyết vấn đề cụ thể,thì chương trình có thể được
sử dụng đề giải quyết vấn đề tương tự.
VD:viết chương trình tính điểm cho 100 sinh viên trong một lớp ,thì chương thình này cũng có thể sử
dụng để tính điểm cho 100 sinh viên khác.
1.2 Phương pháp giải quyết vấn đề:
Giải quyết vấn đề là một quá trình phức tạp đòi hỏi phải suy nghó ,lên kế hoạch ,lập luận chính xác
,kiên trì và chú ý tới từng chi tiết .
Máy tính không thể tự giải quyết được vấn đề nếu lập trình viên không cung cấp giải pháp .Giải pháp
này được gọi là thuật toán(algorithm).
Các bước giải quyết vấn đề:
1. Nghiên cứu chi tiết vấn đề .
2. Tập hợp các thông tin thích hợp .
3. Xử lý các thông tin .
4. Đi đến kết quả.
VD 1:để kiểm tra một số chẵn hay lẻ ,cần thực hiện các bước sau:
* đọc vào một số
* chia số đó cho 2


* nếu phần dư là 0 thì đó là số chẵn.
* ngược lại đó là số lẻ.
Với các bước theo thứ tự trên ,chúng ta tiến hành biểu diễn chúng thành các lệnh bằng một ngôn ngữ
lập trình cụ thể.
1.3 Thuật toán(Algorithm): thuật toán là bước đầu tiên để giải quyết vấn đề
Thuật toán là gì?
Thuật toán là các bước súc tích và hợp logic cần thiết để giải quyết một vấn đề.
Ở ví dụ 1 ,danh sách các bước để kiểm tra một số là chẵn hay lẻ chính là thuật toán.
VD 2: một hành khách đi xe lửa từ Oxford đến London :
Các bước cần thực hiện :
# thông tin về hành khách .Ngày đăng kí chỗ ,nơi xuất phát ,nơi đến.
# người bán vé ghi nhận các thông tin về khách hàng,kiểm tra chỗ còn trống.
# nếu còn đủ thì cho đặt vé,ngược lại sẽ đưa vé chờ.
# vé chờ sẽ thành vé chính thức nếu có hành khách khác hủy vé.
# nếu không nhận được trả lời thì hành khách này không đặt được vé chính thức.
Phân tích như trên sẽ dễ dàng cho việc lập trình .
1.4 Lưu đồ (flowchart):là công cụ dùng để mô tả thuật toán
Lưu đồ là gì?
Lưu đồ là một biểu đồ minh họa cho dãy các thao tác cần tiến hành để giải quyết một vấn đề.
Các câu lệnh được mô tả bằng các kí hiệu cụ thể .Các kí hiệu này được nối với nhau bằng mũi tên để
chỉ rõ thứ tự thực hiện .
Lưu đồ là công cụ dễ sử dụng để viết chương trình và để phục vụ cho các mục đích sau:
# Mô tả trực quan dễ hiểu hơn mô tả bằng tường thuật.
# Dựa vào lưu đồ ta có thể xem lại và gỡ rối chương trình một cách dễ dàng .
# Cung cấp tài liệu chương trình .
# Nhờ vẽ lưu đồ ,dễ dàng hiểu được chương trình hoặc thảo luận giải pháp.
1.5 Rẽ nhánh (branching):
Rẽ nhánh là một quá trình chọn ra một trong hai hay nhiều con đường cho việc thực hiện tính toán
sau đó .
1.6 Lặp:

Lặp là việc sử dụng nhiều lần một hoặc nhiều bước .
Có hai loại vòng lặp:cố đònh và thay đổi.
Vòng lặp cố đònh nếu các thao tác được lặp lại với một số lần cố đònh.
Vòng lặp thay đổi nếu các thao tác được lặp lại nhiều lần cho tới khi thoã mãn điều kiện.Số lần lặp
có thể thay đổi.
1.7 Kết nối (connector) :
Một lưu đồ phức tạp thường :có thể không vừa trên một trang giấy ,có thể khó nối liền nhau trực tiếp .
Trong các trường hợp này ,lưu đồ có thể được chia cắt thành nhiều phần và chúng ta sẽ kết hợp chúng
lại với nhau bằng các điểm kết nối.
Một điểm kết nối được đánh số (số duy nhất cho một trang),một mũi tên vẽ điểm đến nối tại vò trí chia
cắt của biểu đồ .Một kết nối khác có số tương tự (trên trang khác ) và mũi tên đi ra được vẽ từ nơi biểu đồ
được chia cắt ,thể hiện sự nối liền với phần kia của biểu đồ.
1.8 Hướng dẫn vẽ lưu đồ:
Cần ghi nhớ các điểm sau đây khi vẽ lưu đồ:
# Lúc đầu tập trung vào các logic tổng quát của bài toán và vẽ các đường chính của lưu đồ.
# Sau khi đã hoàn tất các đường chính ,vẽ thêm các đường phụ ,nhánh va vòng lặp.
# Một lưu đồ chỉ có duy nhất một điểm bắt đầu và một điểm kết thúc .
# Để cho lưu đồ có tính độc lập với chương trình ,càng ít các thuật ngữ liên quan tới máy tính
càng tốt
# Không cần thiết phải mô tả từng bước của bài toán trong lưu đồ .Chỉ mô tả các bước có ý nghóa.
# Sử dụng các thuật ngữ mô tả thích hợp để trình logic của vấn đề .Không dùng các thuật ngữ mơ
hồ,khó hiểu.
# Người sử dụng hoặc lập trình viên khác phải hiểu được lưu đồ này.
1.9 Biến:
Khi chương trình cần xử lý dữ liệu ,nó cần nơi để lưu trữ tạm thời tập tin này .Nơi lưu trữ thông tin
gọi la ø bộ nhớ.
Một chương trình có thể xử lý nhiều dữ liệu .Vì thế chương trình cần cấp phát bộ nhớ cho từng dữ
liệu ,khi cấp phát bộ nhớ cần quan tâm hai yếu tố sau:
# Phải cấp phát dung lượng bao nhiêu?
# Vò trí cấp phát cho từng dữ liệu phải được ghi nhận.

Chương trình có thể sử dụng nhiều vò trí bộ nhớ được đại diện bời các tên biến.
1.9.1 Các quy tắc đặt tên biến:
Ở mỗi ngôn ngữ lập trình có cách đặt tên biến khác nhau .Có vài quy ước đặt tên biến sau:
# Tên biến phải bắt đầu bằng một chữ cái .
# Ký tự theo sau có thể là chữ hay số và cũng có thể là các ký tự đặt biệt.
# Tránh sử dụng mẫu tự o (chữ o) vì dễ nhầm với số 0 (số không),hay chữ i dể nhầm với số 1
# Tên biến phân biệt chữ hoa ,chữ thường .
# Tên biến phải mô tả được ý nghóa nó lưu trữ.
1.9.2 Biến đếm (counter variable):
Biến được sử dụng thường xuyên khi viết chương trình liên quan tới vòng lặp gọi là biến đếm.Biến
đếm dùng để theo dõi số lần thực hiện vòng lặp.Nó được khởi tạo bằng giá trò 0,và tăng dần lên sau đó
.Biến này thường đặt tên là cnt.
1.10 Giới thiệu các kiểu dữ liệu:
Kiểu dữ liệu là gì?
Các loại dữ liệu khác nhau được lưu trữ trong các biến :numbers (123456,số âm,số
dương ),names(Jones) ,các giá trò logic(yes,no).Dữ liệu được lưu trữ tronh các biến có các kiểu khác
nhau và do đó chúng cần dung lượng bộ nhớ khác nhau .Kiểu dữ liệu quyết đònh dung lượng bộ nhớ
được cấp để biến lưu trữ kiểu dữ liệu cụ thể.Để chỉ đònh vùng nhớ cho từng loại dữ liệu chúng ta
phải :khai báo biến thuộc một kiểu dữ liệu cụ thể .
Thuật ngữ khai báo biến có nghóa là một vùng nhớ được cấp và được tham chiếu bằng tên biến.
Dạng tổng quát để khai báo biến là:data type (tên biến),Numeric:chứa các giá trò
số;Alphanumeric:chứa các thông tin mô tả.
1.10.1 Kiểu int:
Đây là kiểu dữ liệu chứa các con số – một trong những kiểu dữ liệu cơ bản trong bất kỳ ngôn ngữ
lập trình nào.Kiểu này chứa một dãy các con số .
1.10.2 Kiểu float:
Một biến được khai báo là kiểu float có thể được sử dụng để chứa các giá trò bao gồm cả phần thập
phân.Chương trình biên dòch kiểu dữ liệu phân biệt biến float và biến int. Biến int chỉ chứa các số
nguyên nhưng biến float chứa cả số nguyên và phân số
1.10.3 Kiểu char:

Kiểu char được dùng để chứa một ký tự.
1.10.4 Kiểu double:
Kiểu double được sử dụng khi cần lưu trữ dữ liệu có độ chính xác cao hơn mà kiểu float không đáp
ứng được.
1.10.5 Kiểu dữ liệu cơ bản và kiểu dẫn xuất:
Bốn kiểu dữ liệu trên được dùng để biễu diễn dữ liệu thực sự trong bộ nhớ máy tính .Các kiểu dữ
liệu này có thể được thay đổi cho phù hợp với các tình huống biễu diễn khác nhau .Kiểu dữ liệu có
được do sự thay đổi trên một kiểu cơ bản gọi là kiểu dẫn xuất (derived data type).
Một số từ bổ nghóa (modifier)được sử dụng để thay đổi kiểu dữ liệu cơ bản gồm:unsigned ,long, short
1.01.6 Kiểu unsigned:
unsigned cho biết biến chỉ chứa được số dương,unsigned có thể được sử dụng với kiểu dự liệu int và
float .Sử dụng int với unsigned ,miền số dương có thể gấp đôi.
1.10.7 Kiểu long và short:
Từ long và short được sử dụng khi chiều dài của số nguyên dài hơn hoặc ngắn hơn chiều dài
chuẩn.Long integer được kí hiệu là long int và short integer là short int.
Bảng liệt kê miền giá trò của biến
Kiểu dữ liệu Miền giá trò Kích thước lưu trữ (bit)
Char -128đến127 8
Int -32,768đến32,767 16
Float 6số lẻ thập phân 32
Double 10số lẻ thập phân 64
Unsigned int 0đến 65,535 16
Short int -32,768đến 32,767 16
Long int -2,147,483,647đến 2,147,483,647 32
Long double 10 số thập phân 128
1.10.8 Từ khóa(keyword):
Mặc dù chúng ta có thể đặt tên bất kỳ,nhưng có một số tên được dành riêng cho mục đích riêng biệt và
các lập trình viên không được sử dụng .Tất cả các kiểu dữ liệu chúng ta biết được xem như các từ khoá.
Sẽ không xảy ra vấn đề gì nếu từ khoá và tên biến phân biệt được.
1.11 Chạy thử chương trình:

Chạy thử chương trình là phương pháp thử bằng tay để kiểm tra tính đúng đắn của thuật toán.
1.12 Một chương trình C mẫu:
Một chương trình C gồm:
#include<…>
void main()
{
//khai báo các biến
//các lệnh
}
Giải thích:
Void main():dòng này cho biết bắt đầu chương trình mà mỗi chương trình C phải có.
Dấu mở ngoặc móc {}phần giữa hai ngoặc móc là các lệnh của chương trình .Các lệnh này tạo thành
phần thân cho chương trình .
Các câu lệnh đầu tiên trong chương trình là các câu lênh khai báo biến Tất cảcác lệnh phải được
khai báo trứơc khi sử dụng trong chương trình .Khai báo biến chỉ rõ cho chương trình sử dụng các biến
như thế nào .
Các câu lệnh nằm dưới phần khai báo biến chỉ ra các thao tác cần thực thi bởi chương trình .
Các câu lệnh trong lập trình C phải được kết thúc bằng dấu chấm phẩy ;

CHƯƠNG 2:
Trong chương này sẽ trình bày:
# Các kiểu dữ liệu
# Sự khác nhau giữa các kiểu dữ liệu
# Các toán tử
2.1
Dữ liệu kiểu số :
Dữ liệu kiểu số biểu diễn mọi loại số .Các số có thể là số nguyên hay số thực .Dữ liệu kiểu số có
thể chứa :
* Các số từ 0 đến 9
* Dấu thập phân

Kiểu dữ liệu int ,float,double được trình bày ở chương 1 là các kiểu dữ liệu số .
Có thể thực hiện các phép toán số học trên dữ liệu kiểu số.
2.2
Các kiểu dữ liệu số quan trọng:
Kiểu dữ liệu Mô tả Kích thước(byte)
Byte có thể chứa số dương từ 0-255
Không chứa số âm,số thập phân
Integer chứa các số từ-32,786tới32,786

không chứa số thập phân
Long chứa các số từ-2,147,483,648tới2,147,483,648

Không chứa số thực
Single chứa các số thực trong phạm vi
-3.402823E38tới -1.401298E-45
1.401298E-45 tới 3.402823E38cho số dương
2.3
Dữ liệu kiểu ký tự:
Dữ liệu ký tự có thể chứa bất kỳ ký tự nào :
* Chữ số từ 0 đến 9
* Chữ cái từ A đến Z, a đến z
*Các ký tự đặt biệt:#,$,&
Kiểu này dùng để mô tả các dữ liệu như tên ,đòa chỉ, Dữ liệu kiểu ký tự được đặt trong dấu nháy Ta
có “1234”được xem như dữ liệu kiểu ký tự chứ không phải là dữ liệu số .Nếu là dữ liệu số ,thì nó không
có dấu nháy “”.Các phép tính số học không thể thực hiện trên loại dữ liệu ký tự này.
Kiểu char được nhận biết bởi một ký tự chứa trong dấu nháy đơn ‘ ’.Ngoài ra kiểu char còn có thể
chứa các ký tự như là chuỗi ký tự .Chuỗi ký tự có thể chứa một ký tư và luôn được chứa trong cặp dấu
nháy đôi “”
Đa số các ngôn ngữ lập trình quy đònh kich thước cực đại cho chuỗi .Giới hạn này thay đổi với các
ngôn ngữ ,có thể từ 1024 byte đến 2 triệu byte.

2.4
Ngày và giờ:

Các giá trò về ngày và giờ có các kiểu dữ liệu cho riêng chúng .Kiểu này cần thiết vì ngày tháng gồm :
*Ngày (day)
*Tháng (month)
*Năm (year)
Các giá trò về giờ gồm :
* Giờ (hour)
* Phút(minute)
* Giây(second)
Đây là kiểu dữ liệu đặt biệt dành cho các giá trò ngày tháng :
Date trong vài ngôn ngữ lập trình ,kiểu dữ liệu này có thể chứa cả các giá trò ngày giờ ,trong khi các
ngôn ngữ khác chỉ chứa ngày tháng .
Time chứa giá trò thời gian.
Không có quy tắc chung về biến kiểu này.Nó tuỳ thuộc vào từng ngôn ngữ.
2.5
Dữ liệu logic:
Dữ liệu logic chỉ có hai giá trò:true (đúng) và false (sai).
Con số đại diện cho false là 0 ,các số khác không (cả số âm)được hiểu là true.
2.6
Các kiểu dữ liệu đặt biệt:
Một số ngôn ngữ lâïp trình hỗ trợ các kiểu dữ liệu đặt biệt như:số liệu văn bản ,âm thanh phim
ảnh.Các dữ liệu này không xử lý được bằng các kiểu dữ liệu cơ bản nói trên ,cần có kiểu dữ liệu đặt biệt
Mọi ngôn ngữ đều cung cấp loại dữ liệu đặt biệt .Các loại này có ten khác nhau
như :Blob,Memo,Long Binary.
Chúng không có kích thước cố đònh mà tuỳ thuộc vào dữ liệu chứa bên trong.
2.7
Toán tử (Operator):


Toán tử là gì?
Toán tử là các ký hiệu tác động lên dữ liệu.
Chúng đại diện cho các phép toán cụ thể được thực hiện trên dữ liệu.Dựa vào bản chất phép ,các
toán tử được phân loại như sau:
*Toán tử số học:
# Cộng
# Trừ
# Nhân
#Chia
#Luỹ thừa
#Modulus (chia lấy phần dư )
*Toán tử so sánh:
# Lớn hơn
#Nhỏ hơn
#Lớn hơn hoặc bằng
#Nhỏ hơn hoặc bằng
#Bằng
#Không bằng
*Toán tử logic:
#Và (and)
#Hoặc (or)
#Phủ đònh (not)

CHƯƠNG 3:
Trong chương này trình bày:
# Câu lệnh if
# Câu lệnh if else
# Câu lệnh if lồng nhau
# Câu lệnh do case
# Vòng lặp while

# Vòng lặp for
# Vòng lặp repeat until
3.1
Các câu lệnh điều kiện:
Câu lệnh điều kiện là gì ?
Câu lệnh điều kiện cho phép chúng ta thay đổi luồng thực thi của chuổi lệnh tronh chương
trình.Dựa vào điều kiện, câu lệnh hoặc một dãy các câu lệnh sẽ được quyết đòh thực thi hay không.
Phần lớn các nôn ngữ lập trình sử dụng lệnh if để ra quyết đònh. Một trong những khái niệm cơ bản
của khoa học máy tính là :nếu một điều kiện nào đó là đúng thì nó sẽ thực hiện câu lệnh nhất đònh ,còn
nếu điều kiện sai ,thì nó sẽ thực hiện một câu lệnh khác.
3.2
Câu lệnh if:
Câu lệnh if cho phép ra quyết đònh nhờ đánh giá một điều kiện là đúng hoặc sai .Các điều kiện như
vậy chứa các toán tử logic và so sánh .Mỗi câu lệnh if phải kết thúc bằng câu lệnh endif.
Nếu kết quả của condition là đúng thì statement 1 được thực hiện ,ngược lại thì statement 2 được thực
hiện,nhưng không thể thực hiện cả hai.
Lệnh if…else làm giảm độ phức tạp của chương trình ,làm cho chương trình dễ hiểu hơn.
Câu lệnh if mà chúng ta sử dụng là phép so sánh đơn giản Đôi khi chúng cũng được sử dụng để
kiểm tra điều kiện.
VD:
Start
if điểm>=8.5AND điểm<=9.5
Hiển thò “học sinh xuất sắc”
Endif
End
Điều kiện trong câu lệnh if ở trên gồm hai phần tử so sánh được kết hợp bởi toán tử AND .Chúng
ta cũng có thể có các điều kiện vô cùng phức tạp với nhiều toán tử phức hợp ,các điều kiện đó kết hợp
nhiều toán tử so sánh và logic
Khi sử dụng các điều kiện phức hợp phải chú ý :phải dùng dấu ngoặc đơn để đọc và tránh nhầm lẫn
độ ưu tiên của các toán tử.

3.4
Câu lệnh if lồng nhau:
Câu lệnh if có thể chứa câu lệnh if…else khác ,nhằm nâng cao tính linh hoạt của ngôn ngữ lập
trình .Phương pháp này được gọi là lồng các lệnh if .Mệnh đề else cũng có thể chứa câu lệnh if else
khác.
Dạng tổng quát của câu lệnh if lồng nhau là:
If condition 1
Câu lệnh 1
If condition 2
Câu lệnh 2
Else
Câu lệnh 3
Endif
Else
Câu lệnh 4
Endif
Hoặc
If condition 1
Câu lệnh 1
Else
If condition 2
Câu lệnh 2
Else
Câu lệnh 3
Endif
Endif
Việc xác đònh else thuộc câu lệnh if nào rất quan trọng .
Các nguyên tắc cần chú ý:
# Mỗi else thuộc về một lệnh if nào gần nó nhất với điều kiện if đó chưa thuộc về lệnh else khác .
#Câu lệnh if lồng nhau trong câu lệnh if khác có thể được viết lại bằng toán tử AND.

# Câu lệnh if được lồng trong mệnh đề else có thể được viết lại bằng toán tử OR.
3.5
Câu lệnh do case:
Câu lệnh do case được dùng khi một biến được so sánh liên tiếp với các giá trò khác nhau.
Dạng tổng quát của do case là :
do case
case condition 1 là true
statement 1
case condition 2 là true
statement 2
case conditon 3 là true
statement 3
otherwise
statement 4
endcase
3.6
Vòng lặp:
Vòng lặp là gì?
Vòng lặp la ømột khối lệnh được lặp đi lặp lại nhiều lần cho đến khi một
điều kiện là đúng hoặc sai.
Các lệnh lặp được hỗ trợ ở một số ngôn ngữ lập trình :
# Vòng lặp while
# Vòng lặp for
# Vòng lặp repeat until
Cú pháp của mỗi vòng lặp ở các ngôn ngữ lập trình có thể khác nhau nhưng chức năng thì giống
nhau.
3.7
Vòng lặp while:
Vòng lặp while lặp lại một câu lệnh hoặc một chuỗi lệnh nào đó cho đến khi điều kiện không còn đúng.
Dạng tổng quát :

while Text expression
do
Statements
Enddo
Vòng lặp while được thực hiện như sau:
Biểu thức được viết sau từ khoá while sẽ được kiểm tra .Các câu lệnh được viết giữa từ khoá do-
enddo .Nếu biểu thức kiểm tra đúng thì các câu lệnh nằm giữa do-enddo được thực hiện.
Để tránh trường hợp lặp vô hạn ,cần chú ý:
#Giá trò của biến được sử dụng trong biểu thức phảiđược thiết lập trước khi vòng lặp while thực
hiện .Đây là bước khởi tạo giá trò Lệnh này chỉ thực hiện một lần trước khi thực hiện vòng lặp.
#Thân vòng lặp phải làm thay đổi giá trò của biến trong biểu thức kiểm tra .Biến này được gọi là biến
tăng (incremented) nếu giá trò trong thân vòng lặp tăng ,và được gọi là biến giảm(decremented) nếu giá trò
giảm.
3.8
Vòng lặp for:
Vòng lặp for là phiên bản rút gọn của vòng lặp while .Ở vòng lặp while ,biến sử dụng trong biểu thức
kiểm tra được khởi tạo đầu tiên.Tiếp theo ,biểu thức này được xét và vòng lặp được thực hiện.
Thân của vòng lặp được kết thúc bởi lệnh thay đổi giá tròcủa biến được sử dụng trong biểu thức kiểm
tra .Tất cả các bước này được kết hợp lại thành một câu lệnh duy nhất trong vòng lặp for .Vòng lặp for
được sử dụng khi biết trứơc số lần lặp thực hiện.
VD:
Start
for cnt in range 1 to 10
Display “đây là một vòng lặp”
endfor
End
Biến cnt được gán giá trò 1 .Kế đó nó kiểm tra nếu cnt nhỏ hơn hoặc bằng 10.Nếu đúng thì các câu
lệnh theo sau câu lệnh for sẽ được thực hiện.Vòng lặp for tự động tăng giá trò biến cnt.Khi biến này lớn
hơn 10 thì vòng lặp chấm dứt.
Dạng tổng quát của vòng lặp for:

for (variable) in range start_value to end_value
Statement

endfor
3.8.1
Mệnh đề increment:

Xem lại VD trên ,vòng lặp for tự động tăng giá trò biến cnt.Xem tiếp VD sau:
Start
for cnt in range 1 to 10
Display”Đây là một vòng lặp ”
cnt=cnt+1
endfor
End
Trong VD trên,giá trò ban đầu của biến cnt là 1 ,giá trò này nhỏ hơn 10 nên câu thông báo được hiển
thò.
Câu lệnh
cnt=cnt+1
làm tăng giá trò của biến.Tiếp theo biến này được tăng tự động khi endfor thực
hiện.Vì thế biến cnt được tăng hai lần trong vòng lặp.Kết quả là câu thông báo này hiển thò 5 lần.Mặc
đònh giá trò của biến này được tăng lên 1 .Để tăng giá trò của biến bằng một giá trò khác ta có thể sử dụng
mệnh đề increment .
VD:
Start
for cnt in range 1 to 10 increment 2
Display”Đây là một vòng lặp ”
endfor
End
3.8.2
Các vòng lặp for lồng nhau:

Chúng ta có thể có vòng lặp for nằm trong vòng lặp for khác tương tự như câu lệnh if trong câu lệnh
if khác.
Dạng tổng quát :
for var 1 in range start_value to end_value

for var 2 in range start_value to end_value

endfor
endfor
3.9
Vòng lặp repeat…until:
Hai câu lệnh lặp được giới thiệu ở phần trên sẽ kiểm tra biểu thức trước khi vòng lặp thực hiện ,Do
đó ,thân vòng lặp có thể không bao giờ được thực hiện trước khi điuề kiện không được thoã mãn .Khi
phát triển chương trình ,có khi chúng ta muốn kiểm tra biểu thức ở cuối vòng lặp .Vòng lặp
repeat until sẽ giải quyết vấn đề trên .Điều kiện chỉ được kiểm tra sau khi thân vòng lặp thực hiện
một lần.
Dạng tổng quát:
Start
repeat (Statement)
Display”nhập vào số dương”
Accept value
until (condition) value<=0
End
3.10
Chọn vòng lặp thích hợp:
Chọn vòng lặp nào khi viết chương trình là một công việc của mỗi lập trình viên.Bất kỳ vòng lặp nào
được viết dưới dạng while cũng được viết dưới dạng for và ngược lại.Vòng lặp repeat…until cũng có thể
được viết lại theo cách của hai vòng lặp kia nhưng sẽ có mức độ phức tạp hơn vì vòng lặp repeat…until
thực hiện các câu lệnh một lần trước khi kiểm tra điều kiện.
CHƯƠNG 4:

Trong chương này trình bày:
# Mảng một chiều
# Mảng hai chiều
# Con trỏ
# Cấu trúc
4.1
Mảng(Array):
Chúng ta biết rằng các biến được sử dụng để lưu trữ một thông tin riêng lẻ trong bộ nhớ .Khi có nhiều
thông tin cần lưu trữ ,sẽ dẫn đến nhiều rắc rối khi đặt tên biến.Hơn nữa mỗi biến phải được khai báo ở
đầu chương trình .Mảng sẽ giải quyết được vấn đề này,mảng là phần quan trọng của các ngôn ngữ lập
trình.
Mảng là gì?
Mảng là một nhóm các phần tử có cùng kích thước,cùng kiểu dữ liệu và cùng
tên.
Giả sử cần viết chương trình cộng 5 số .Chúng ta có thể tiến hành như sau:
Start
Declare num 1,num 2,num 3,num 4, num 5và sum is an integer
Accept num 1
Accept num 2
Accept num 3
Accept num 4
Accept num 5
Sum=num 1+ num 2+ num3+ num4+ num 5
Display sum
End
Ởû chương trình này chúng ta phải khai báo nhiều biến.Nếu là chương trình có 50 biến thì chúng ta
phải khai báo 50 lần.Ngoài ra ,đoạn mã trên phải nhập số nhiều lần.Đoạn mã nhập gia trò phải lặp lại
nhiều lần.
Cách khắc phục là khai báo một biến đơn và một vòng lặp như sau:
Start

Declare num,sum và count is an integer
Sum=0
Count=0
While count<5
Do
Accept value into num
Add to the value in sum
Increment the value of count by 1
Enddo
Display sum
End
Nhược điểm của chương trình trên là mỗi giá trò người dùng nhập vào sẽ mất ngay khi nhập giá trò kế
tiếp.Mảng giải quyết được vấn đề này.Xem VD sau:
Start
Array num[5] is an integer
Declare sum ,count is an integer
Sum=0
Count=0
While count<5
Do
Accept value into num[count]
Add num[count]to the value in sum
Increment the value of count by 1
Enddo
Display sum
End
Array là từ được dùng trong thuật toán và lưu đồ để khai báo mảng.Tên mảng là num cho biết mảng
này chứa những con số và[5]cho biết mảng này có năm phần tử .Số phần tử là giới hạn(bound) của
mảng.5 là giới hạn của mảng .Giới hạn của mảng là số phần tử lớn nhất ma ømảng có thể chứa.
Như vậy ,bằng cách sử dụng mảng ,chương trình cộng 5 số sẽ ngắn gọn hơn.

Chúng ta khởi tạo biến đếm là 0.Lần chạy thứ nhất vòng lặp while thực hiện :
Accept value into num[count]
Add num[count] to the value in sum
Sẽ tương đương với:
Accept value into num[0]
Sum=sum+num[0]
Lần thứ hai se là:
Accept value into num[1]
Sum=sum+num[1]
Và tiếp tục .Mỗi giá trò nhập vào được chứa trong một phần tử riêng của mảng.
4.1.1
Chỉ số của mảng:
Chỉ số của mảng chỉ rõ phần tử nào của mảng được truy xuất .Phần tử của mảng được quy ước như
sau:
Array _Name[Index]
Lưu ý: phần tử của mảng được bắt đầu từ 0.Vì thế num[o] truy xuất đến phần tử đầu tiên,num[1]
truy xuất đến phần tử thứ hai và tiếp tục .
4.1.2
Khai báo mảng:
Trước khi gán giá trò cho mảng ,nó cần được khai báo giống như việc khai báo biến.Tất cả các phần tử
của mảng là số nguyên ,chứa phần tử kiểu int .Tên mảng đặt theo quy tắc đặt tên biến.Mỗi phần tử của
mảng có thể được sử dụng ở bất kỳ nơi nào cần sử dụng.
4.1.3
Gán giá trò cho các phần tử của mảng:
Phần tử của mảng được gán giá trò như sau:
Để gán 10 vào phần tử thứ 3 của mảng,ta viết:
Num[2]=10
Mảng không hạn chế chỉ dùng dữ liệu số ,nó có thể chứa các ký tự .
VD:để khai báo các ký tự:’a’;’b’;’c’;’d’;_chúng ta khai báo mảng như sau:
Array var[4] is an integer

Var[0]=’a’
Var[1]=’b’
Var[2]=’c’
Var[3]=’d’
Chú ý:
các ký tự bao giờ cũng nằm trong dấu nháy đơn.
4.1.4
Lấy giá trò từ mảng:
Khai báo một biến ,biến này phải có cùng kiểu dữ liệu với phần tử của mảng cần lấy giá trò.
Giá trò được lấy từ phần tử của mảng được thực hiện như sau:
I=num[5]
Dòng lệnh trên sẽ lấy giá trò của phần tử thứ 6 của mảng,và giá trò này chứa trong biến i.
4.1.5
Các phần tử của mảng trong bộ nhớ:
Bộ nhớ của máy tính được xếp theo từng byte.Xem dòng
sau:
Num is an integer.
Num là biến có kiểu integer.kích thước lưu trữ của integer là 2 byte.Vì thế ,2 byte này được cố đònh
trong bộ nhớ và được tham chiếu bằng tên num.Xem dòng sau:
Num[5] is an integer.
Dòng này khai báo num là mảng có 5 phần tử số nguyên.Mỗi số nguyên cần 2 byte .Do đó bộ nhớ cần
cho mảng 5 phần tử là:5 integer*2 byte=10byte.Những phần tử của mảng này được chứa trong vùng nhớ
liên tục.
4.2
Mảng nhiều chiều:
Xem mảng sau:
Num[10] is an integer :được gọi là mảng 1 chiều vì nó chứa một dãy liên tiếp các giá trò
Xem mảng sau:

Dữ liệu được lưu trữ sao cho khi đọc phải dưới dạng bảng.Điều này có nghóa là:loại dữ liệu này không

thể chứa trong bảng một chiều.Nếu dữ liệu này được chứa trong bảng một chiều thì sẽ không thể hiện hết
thông tin dưới dạng bảng như trên.
VD:
0 1
0 1 4
1 2 5
Trong VD ,số 2 nằm tại dòng thứ 2 cột thứ nhất trong khi số 4 nằm ở cột thứ 2 ,dòng thứ nhất .Vì chỉ
số của mảng bắt đầu từ không nên chúng ta viết số 2 tại vò trí[1][0] và số 4 tại [0][1].Vậy chúng ta cần
tham chiếu đến vò trí của cả hàng và cột.
Mảng hai chiều:
Xem bảng sau:
Vật lý Hoá học Toán
Julia 45 60 90
Ben 20 67 92
Nicholas 90 35 56
1 4
2 5
Demi 78 50 80
Ở bảng trên :các dòng chứa tên học viên,các cột chứa các môn học.Chúng ta lưu trữ 3 môn học của
các học viên .Để đọc từng thông tin riêng biệt ,chúng ta phải xác đònh dòng và cột và đọc thông tin tại
dòng đó.
VD: để xem điểm toán của Ben :dòng thứ hai chứa điểm 3 môn của Ben,cột thứ 3 chứa điểm môn
toán,vì thế điểm toán của Ben là:92.
Trong bảng có 4 dòng và 3 cột.Chúng ta khai báo mảng như sau:
Array score [4][3] is an integer
Mảng score[4][3] gọi là mảng hai chiều.[4] đại diện cho số dòng,[3] đại diện cho số cột .
Vì chỉ số của mảng bắt đầu từ 0 .Do đó điểm của Ben được viết như sau:score[1][2].
4.3
Con trỏ:


Con trỏ là gì?
Con trỏ là một biến đặc biệt,chứa đòa chỉ bộ nhớ của một biến khác. Con trỏ
cung cấp cách truy xuất biến mà không cần tham chiếu trực tiếp biến đó ,chỉ sử
dụng đòa chỉ của nó.
4.3.1
Khai báo biến con trỏ:
Xem dòng sau:
Int *p
Dòng này cho biết biến p được khai báo là một con trỏ, nó chứa đòa chỉ của kiểu dữ liệu số
nguyên.Dấu * không phải là một phần của biến,int*có nghóa là kiểu dữ liệu con trỏ của p.
Biến con trỏ có tên giống như tên các biến khác .Khi một biến con trỏ được khai báo ,nó chưa chứa giá
trò nào cả,giống như các kiểu biến khác.Để gán đòa chỉ cho con trỏ chúng ta cần phải gán giá trò cho con
trỏ đó.
VD:
int a= 10
int*p
p=&a
a p
đòa chỉ int a=10,int*p
100 104

10
10010
đòa chỉ p=&a
100 104
Hai dòng đầu của VD trên có thể được viết là:int a,*p vì chúng có cùng kiểu dữ liệu số .Sơ đồ trên thể
hiện :
a là biến kiểu integer được khởi tạo bằng 10 .
p là biến con trỏ ,chứa đòa chỉ của kiểu dữ liệu integer,lúc này nó không chứa giá trò nào.
Câu lệnh p=&a có nghóa là gán đòa chỉ của a cho p.Biến con trỏ bây giờ chứa đòa chỉ của biến a.

Giả sử đòa chỉ của biến a và p trong bộ nhớ là 100 và 104 .Câu lệnh p=&a để gán đòa chỉ của a vào
p.Dấu “&” viết phía trước biến a được gọi là toán tử đòa chỉ (address operator).Mặc dù chúng ta khai báo
biến con trỏ với dấu ‘*’ớ phía trước nhưng bộ nhớ chỉ gán cho p chứ không phải *p.
Ngoài ra ,ta cũng có thể gán biến con trỏ cho các ký tự.
VD:
char c=’s’.*cp
cp=&c
c là biến kiểu charactervà chứa ký tự ‘s’,cp là con trỏ cũng có kiểu character.Nghóa là giá trò được lưu
trữ trong vò trí cp là một ký tự .Dòng cp=&c có nghóa là cp trỏ tới biến c.
4.3.2
Lấy giá trò tử con trỏ:
Các biến có đòa chỉ được gán cho biến con trỏ có thể được thao tác thông qua biến con trỏ.
VD:
int num 1=2,num 2,*pnt
pnt=&num 1
num 2=*pnt
num 1 và num 2 là hai biến số nguyên,pnt là biến con trỏ cũng có kiểu số nguyên.Biến num 1 đựơc gán
=2
Dòng pnt= &num 1 nghóa là biến con trỏ pnt chứa đòa chỉ của biến num 1.
Dòng num 2= *pnt ,dấu * được đặt trước biến con trỏ trong một biểu thức ,thì giá trò mà biến con trỏ trả
về là giá trò của biến được trỏ tới bởi con trỏ .Trong trường hợp này ,num 2 được gán giá trò của biến num 1
là 2.
4.3.3
Các kiểu khai báo con trỏ:
int x; x là một biến nguyên
int*x; x là con trỏ tới một số nguyên(con trỏ số nguyên)
int**x; x là con trỏ trỏ tới một con trỏ số nguyên
conts int x; x là một hằng nguyên(constant integer)
conts int*x; xlà một con trỏ trỏ tới một hằng nguyên .Giá trò của x có thể thay đổi nhưng số
nguyên mà nó trỏ tới thì không được thay đổi.

int*conts x; x là hằng con trỏ trỏ tới một số nguyên.Giá trò của x không thể thay đổi(vò trí chỉ tới
x không bò thay đổi),nhưng giá trò nguyên được chỉ tới có thể thay đổi.
int x[ ]; x là một con trỏ hằng trỏ tới một hằng nguyên.Giá trỉ của x và của số nguyên mà x trỏ tới
không thể thay đổi được.
int*x [ ]; x là một mảng số nguyên.
int(*x)[ ]; x là một mảng các con trỏ trỏ tới số nguyên.
int*(*x)[ ]; x là một con trỏ trỏ tới một mảng các con trỏ số nguyên.
int F( ); F là một hàm trả về kiểu dữ liệu nguyên.
int*F( ); Flà một hàm trả về một con trỏ số nguyên
int(*x)( ); x là một con trỏ trỏ tới một hàm trả về kiểu nguyên.
int(*x[99])( ); x là một mảng 99 con trỏ trỏ tới hàm trả về kiểu nguyên.
int(*F( ))( ); F là một hàm trả về một con trỏ trỏ tới một hàm trả về kiểu nguyên.
int*(*F( ))( ); F là một hàm trả về một con trỏ tới một hàm trả về con trỏ trỏ tới một hàm số
nguyên.
int(*F( ))[ ];F là một hàm trả về một con trỏ trỏ tới một mảng số nguyên .
int(*(*F( ))[ ])( ); F là một hàm trả về một con trỏ trỏ tới một mảng các con trỏ,các con trỏ
này trỏ tới các hàm trả về kiểu dữ liệu nguyên.
int*(*(F( ))[ ])( ); F là một hàm trả về một con trỏ trỏ tới một mảng con trỏ,các con trỏ này trỏ
tới các hàm trả về một con trỏ số nguyên.
4.4
Cấu trúc(structures):
Cấu trúc là gì?
Cấu trúc là một kiểu dữ liệu chứa nhiều kiểu dữ liệu khác nhau trong
một nhóm.
4.4.1
Khai báo một cấu trúc:
Giả sử ,một công ty cần phải lưu trữ hồ sơ của nhân viên gồm tên,đòa chỉ,tiền thưởng.Một phương
pháp để lưu trữ thông tin này là khai báo 3 biến riêng biệt như sau:
Start
Char tên[10]

Char đòa chỉ[20]
Float tiền thưởng
End
Với cách này ta quản lý được 3 biến cho một nhân viên .Tốt hơn chúng ta có thể nhóm các biến này lại
thành một thực thể và đặt tên là nhân viên.
Các biến được nhóm lại thành một cấu trúc sử dụng được khai báo như sau:
Start
Structure nhân viên
Char tên[10]
Char đòa chỉ[20]
Float tiền thưởng
End
Khai báo một cấu trúc là phương pháp tạo ra một kiểu dữ liệu.Sử dụng từ khoá structure để đònh
nghóa một cấu trúc trong thuật toán và lưu đồ.Theo sau là thân củacấu trúc nó chứa các thành phần
(mambers)của cấu trúc.Từ “nhân viên” là tên của cấu trúc.Thành phần của cấu trúc là một biến đơn.
Cần chú ý :các thành phần cảu cấu trúc không được cấp phát vò trí trong bộ nhớ .Chỉ khi khai báo
một biến ,các thành phần của cấu trúc mới có vò trí trong bộ nhớ.
Chúng ta hoàn tất câu khai báo như sau:
Start
Structure nhân viên
Char tên[10]
Char đòa chỉ[20]
Float tiền thưởng
Structure nhân viên e1
End
Câu lệnh structure nhân viên e1 có nghóa là khai báo biến e1 có kiểu dữ liệu nhân viên .Câu lệnh
này được đặt ở cuối việc khai báo cấu trúc.Biến e1 được tạo ra chứa 3 thành phần là tên,đòa chỉ ,tiền
thưởng.
4.4.2
Truy xuất các thành phần của một cấu trúc:

Các thành phần cấu trúc được truy xuất theo cách sau:
Structure variable.Member variable
Do đó để truy xuất 3 thành phần dữ liệu ở trên ta làm như sau:
e1 .tên
e1 .đòa chỉ
e1 .tiền thưởng
mỗi thành phần được gán giá trò và được sử dụng như các biến bình thường khác.
Biến cấu trúc được gán dữ liệu như sau:
e1 .tên=”jacson”
e1 .đòa chỉ=”15/2 NewYork”
e1 .tiền thưởng=500000
CHƯƠNG 5:
Trong chương này trình bày:
# Cách sử dụng hàm.
# Truyền tham số cho hàm.
# Sự khác nhau giữa hàm do người sử dụng đònh nghóa và hàm chuẩn.
# Sự khác nhau giữa truyền bằng giá trò và truyền bằng tham chiếu.
5.1
Hàm (fumction):
Một chương trình có thể gồm hàng trăm câu lệnh và nó cần được ngắt thành các đoạn (module)nhỏ
hơn.Mỗi module là một chương trình con riêng biệt.Những chương trình con làm cho chương trình dễ
hiểu ,dễ bảo trì.
Chương trình con như vậy gọi là hàm(function).
5.2
Lợi ích của hàm:
# Dễ bảo trì
# Dễ hiểu
# Tránh dư thừa ,lặp lại nhiều lần một đoạn lệnh.
# Khả năng sử dụng lại đoạn lệnh .
5.3

Tham số của hàm:
Xem VD sau:
Start
Add (2,5)
End
Add (x is an integer,y is an integer)
Start
Decrale sum as an integer
sum=x+y
Display sum
Return
Xem dòng lệnh đầu tiên của hàm Add( )
Add (x is an integer,y is an integer)
Hàm này nhận hai tham số x và y ,cả hai đều có kiuể integer
Như vậy các tham số của hàm cho phép nhận giá trò vào hàm.Điều này có nghóa là khi hàm Add ( )
được gọi thì nó nhận vào hai tham số như :Add( 2,5),giá trò 2 được gán cho x vạ được gán cho y.
Ki một hàm được khai báo thì chúng ta phải chắc chắn rằng khi gọi hàm phải truyền đúng số lương
tham số và truyền các giá trò cho tham số theo đúng thứ tự ,chính xác.
5.4
Giá trò trả về :
Câu lệnh return được sử dụng để trả quyền điều kiện mà không trả giá trò .Thường chúng ta yêu cầu
hàm trả về giá trò .Ví dụ ,hàm Add ( ) được sử dụng ở trên chỉ hiển thò sum.Chúng ta có thể cần thực
hiện phép tính tổng để tính các đại lượng khác như tính giá trò trung bình chẳng hạn .Hàm sẽ trả về giá
trò cho chương trình gọi nó thông qua các giá trò trả về.
VD:

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×