CÁC THÀNH PHẦN CƠ BẢN TRONG NGÔN NGỮ LẬP TRÌNH
NGÔ QUỐC VIỆT-LÊ ĐỨC LONG 2011
1. Tổng quát về lập trình 2. Khái niệm từ khoá 3. Các kiểu dữ liệu cơ bản 4. Đặt tên, khai báo biến, hằng, và các vấn đề
liên quan sử dụng biến/hằng.
5. Nhập xuất dữ liệu 6. Sử dụng toán tử, biểu thức và cách viết một
số lệnh cơ bản trong lập trình
7. Một số quy ước lập trình để viết chương
trình trong sáng.
2
Sinh viên sẽ nắm vững và vận dụng các kỹ
năng cơ bản sau cần cho lập trình Từ khoá Các kiểu dữ liệu Cách ghi chú Đặt tên và khai báo biến Phạm vi sử dụng biến
Trình bày cách viết một chương trình dễ đọc
và trong sáng.
3
1. Phân tích và xác định nhập-xử lý-xuất (I-P-O) 2. Xác định thuật giải (mã giả hay lưu đồ) 3. Cài đặt với ngôn ngữ lập trình cụ thể 4. Biên dịch (kiển tra cú pháp) và chạy thử 5. Kiểm chứng và hoàn thiện chương trình
Lập trình phần nào đó là ánh xạ cách giải quyết đã xác định sang một ngôn ngữ lập trình.
4
Là yếu tố quan trọng nhất của lập trình Giúp phân biệt ‘viên ngọc lập trình’ với ‘mớ
hỗn độn’.
Phân biệt giữa ‘nghệ sỹ lập trình’ và ‘tên đồ tể
lập trình’
Làm sao có ‘phong cách’ ? Không có cách nào, ngoại trừ một vài nguyên tắc cơ bản: Hãy đặt tên theo quy ước dễ hiểu Hãy viết nhiều chú thích khi có thể.
Nguyên tắc vàng: càng rõ ràng, càng đơn giản
càng tốt.
5
làm thực tế.
Không có thầy giáo nào dạy tốt hơn kinh nghiệm
cả khi viết cho chính mình.
Viết chú thích sẽ:
Giúp tổ chức lại các suy nghĩ. Giúp nhớ lại những gì đã làm. Giúp làm việc nhóm hiệu quả.
Luôn đặt tên cho các thành phần của chương
trình một cách tường minh và dễ hiểu.
Cần tổ chức và quản lý các tập tin mã nguồn
khoa học.
6
Luôn viết thật nhiều chú thích khi lập trình. Ngay
Thực tế Bắt đầu
Kết thúc
thúc hàm chính (hàm
Kết main)
Ngôn ngữ lập trình Điểm vào (thường là hàm main)
Các lệnh trong chương trình Hằng (cố định trong cả chương trình)
Đủ loại dữ kiện Giải thích thêm
Biến (thay đổi được). Phải khai báo ba biến để có thể gán giá trị mới. Kiểu dữ liệu Chú thích trong chương trình
7
Xử lý vấn đề Xác định trước và không thay đổi, ví dụ: số (3.1416). Thay đổi, ví dụ hệ số a, b, c của phương trình bậc 2
Quy trình xử lý cơ bản của máy tính
Ví dụ: xác định I-P-O của việc nấu cơm. Bài tập ngắn: xác định I-P-O của giải
phương trình bậc 1.
Bài tập: xác định I-P-O của giải phương
trình bậc 2. Vẽ lưu đồ thể hiện.
Xem: Giai Phuong Trinh Bac 2
8
Chuyển từ bài toán thành chương trình
BÀI TOÁN
CHƢƠNG TRÌNH
Dữ liệu của chƣơng trình
Dữ liệu của bài toán
Giá trị đầu vào, đầu ra
Biến, hằng
Input: a, b Output: max (a,b) Nếu a>b thì max a Ngược lại max b
Quá trình tính toán của bài toán
Các cấu trúc của chƣơng trình
Các bước tính toán
Các câu lệnh xử lý
9
Dữ liệu của bài toán sẽ đƣợc biểu diễn lại dƣới dạng các biến (variable) của chƣơng trình thông qua các quy tắc xác định của NNLT cụ thể (*)
(*) Hoàng Kiếm (2000), Giải một bài toán trên máy tính như thế nào – Tập 1, NXB Giáo dục
10
Là tập các từ dành riêng (nghĩ là không dùng chúng làm của riêng) cho từng nnlt cụ thể. Ví dụ, trong ngôn ngữ C/C++.
Các từ khoá sẽ tham gia như một thành phần của từng câu lệnh. Ngoài ra, mỗi lệnh còn có sự tham gia của biến, hằng và biểu thức.
11
Tập kí tự dùng trong NNLT bậc cao
Ngôn ngữ C được xây dựng trên bộ ký tự sau:
A B C .. Z
26 chữ cái hoa 26 chữ cái thường a b c .. z 10 chữ số Các ký hiệu toán học Ký tự gạch nối Các ký tự khác
0 1 2 .. 9 + - * / = ( ) _ . , : ; [ ] {} ! \ & % # $ ...
Dấu cách (space) dùng để tách các từ.
Ví dụ: tiếng VIET NAM có 8 ký tự, còn VIETNAM chỉ có 7 ký tự. Tập kí tự dùng trong NNLT Pascal thì sao ???
12
Tại sao nên viết: cho dễ hiểu, nhớ là đã làm gì. Viết ở đâu?
Đầu mỗi tập tin mã nguồn. Đầu mỗi hàm Ở các lệnh quan trọng trong hàm (sẽ nói sau).
Viết những gi?
Hàm hay tập tin mã nguồn này làm gì. In, Output của từng hàm/tập tin mã nguồn.
13
Heading Author (tác giả) Purpose (mục đích) Usage (cách sử dụng) References (tham khảo) File Formats (định dạng tập tin) Restrictions (một số hạn chế-nếu có) Revision History (phiên bản) Error Handling (điều khiển lỗi) Notes (chú thích thêm)
14
hello -- program to print out "Hello World". Not an especially earth-shattering program. Author: Ngô Quốc Việt Purpose: Demonstration of a simple program Usage: Run the program and the message appears
/*
*
*
*
*
*
*
*/
#include "stdafx.h"
#include
int main(int argc, char* argv[])
{
// Tell the world hello printf("Hello World!\n"); getchar();
return 0;
}
15
16
17
Luôn dóng cột cho lệnh (hoặc khối lệnh) cho
các cấu trúc điều khiển (thảo luận sau).
Không viết hai (hay nhiều) lệnh trên cùng một
dòng.
Tránh lồng nhau quá sâu (thảo luận sau). Tách tập tin mã nguồn lớn (nhiều hơn 1000 dòng lệnh) thành những tập mã nguồn nhỏ Nguyên tắc vàng: càng rõ ràng, càng đơn
giản càng tốt.
18
Mọi kiểu dữ liệu (có hay không có cấu trúc) đều dựa trên các kiểu dữ liệu cơ bản. Cụ thể:
char/string, integer, float, double, boolean
Mỗi ngôn ngữ lập trình có khai báo và sử dụng kiểu dữ liệu khác nhau (tuy không nhiều) cho các biến, tham số, hằng.
Lựa chọn kiểu dữ liệu là yếu tố quan trọng trong lập trình cần phải nắm vững miền giá trị, độ chính xác, dung lượng nhớ của kiểu.
19
Các kiểu dữ liệu cơ bản trong C/C++
Nguồn: http://www.cplusplus.com/doc/tutorial/variables/ Chú ý đặc biệt: kích thước vùng nhớ và miền giá trị của kiểu dữ liệu không hoàn toàn giống nhau giữa các nnlt. Đọc thêm: cách biểu diễn dữ liệu kiểu số thực
20
Giá trị
Kiểu char
Biểu diễn ‘A’, ‘B’
string short int long int “Hello world” 2, -8, 30 2L,
1.12345, 0.001
boolean float double true, false 1.12345 1.12345, 1E-3
21
long double 1.12345, 1E-3 1.12345, 0.001
Sử dụng tên dài (nhưng đừng quá dài) và có
nghĩa dễ hiểu. int account
Chú thích cho biến Có kèm thêm kiểu của biến trong tên biến
//khai báo biến kiểu integer trong C.
int iAccount; String sAccount; double dbMoney; bool bFaultTransaction;
//số tài khoản //tên tài khoản //số tiền còn //giao dịch thất bại.
Luôn có chú thích đầu hàm (hay tập tin mã
nguồn)
22
Có thể dùng chữ hoa hay dấu gạch dưới ở
đầu các từ có nghĩa.
//hoặc
double dbCurrentMoney; double db_current_money;
Nên dùng chữ hoa để đặt tên hằng (số, chuỗi,
bool, …)
MAX_ITEMS, SCREEN_WIDTH
Chỉ dùng các ký tự az, AZ, 09, dấu
gạch dưới để đặt tên.
Ký tự đầu tiên phải là chữ. Không dùng chữ tiếng Việt có dấu để đặt tên.
23
Hầu hết nnlt phân biệt chữ hoa / chữ
thường (gọi là case sensitive). Nghĩa là: nội dung giống nhau, nhưng khác ở chữ hoa, chữ thường ở một vài ký tự cũng được xem là khác nhau
Ví dụ: name và Name. Chúng được xem là hai tên
khác nhau.
Hầu hết nnlt: biến, hằng luôn được khai báo và sử dụng sử dụng kèm theo kiểu dữ liệu.
24
Nguyên lý thứ hai !!!
Các cấu trúc của chƣơng trình
Chuyển đổi quá trình tính toán của bài toán
MỌI QUÁ TRÌNH TÍNH TOÁN ĐỀU CÓ THỂ MÔ TẢ VÀ THỰC HIỆN DỰA TRÊN BA CẤU TRÚC CƠ BẢN:
CẤU TRÚC TUẦN TỰ CẤU TRÚC RẼ NHÁNH CẤU TRÚC LẶP
C. Bohm & G. Jacopini (1966), Flow Diagrams, Turing Machines and Languages With Only Two Formation Rules. In Communications of ACM, Vol.9, Number 5, May 1966.
25
Chương trình
Biến
Hàm hay thủ tục
Hằng
Khối lệnh
Lệnh
Gán
Điều kiện
Lặp
Biểu thức
So sánh
26
Biến là nơi lưu trữ giá trị – số nguyên, số thực, kí tự, …. Một biến chỉ có thể lưu được một loại giá trị nhất định kiểu dữ liệu của biến Giá trị mà biến đang lưu trữ có thể bị thay đổi nhiều lần trong quá trình chương trình thi hành Một biến bất kì trong máy tính có 3 thuộc tính:
Tên biến (được đặt tên do người lập trình – gọi là định danh – indentifier) Kiểu dữ liệu của biến Giá trị hiện tại mà biến đang lưu trữ
Biến cần phải được khai báo (định nghĩa) trước khi sử dụng
Ví dụ:
STT 50 DiemTB 7.8 TenSV
“Long”
Biến có tên STT, kiểu số nguyên, đang lưu trữ giá trị là 50 Biến có tên DiemTB, kiểu số thực, đang lưu trữ giá trị là 7.8 Biến có tên TenSV, kiểu chuỗi kí tự, đang lưu trữ một dòng chữ
o Ý nghĩa của biến chỉ được hiểu bởi con người, kô có nghĩa với PC; o Tên biến cần gợi nhớ và thống nhất; o Tên biến phải hợp lệ – tuân thủ theo quy ước của NNLT.
27
thay đổi được (qua lệnh gán)
Biến (variable): dùng để lưu trữ giá trị có thể
Cú pháp khai báo biến trong C/C++
name;
Datatype Ví dụ:
int iSonguyento; string sName; char cMychar; float fSoFloat;
Mỗi chương trình có thể khai báo nhiều biến
theo nhu cầu.
28
riêng
Biến không được đặt trùng tên với từ khoá dành
Biến nên được khai báo ở đầu hàm, mặc dù có thể được đặt ở bất cứ đâu (thảo luận sau).
Biến phải được khai báo trước khi sử dụng.
#include
//biểu thức
/lệnh xem kết quả
int height; int width; int area; height = 3; width = 5 area = height * width; printf("Area is %d sq. inches \n", area); return 0;
}
29
KIỂU DỮ LIỆU (DATA TYPE)
Trong NNLT, loại giá trị mà biến lưu trữ được phân
thành những kiểu dữ liệu khác nhau
Thông thường, trong một NNLT có các kiểu dữ liệu
cơ sở sau: Kiểu dữ liệu số: gồm có 2 loại
• Kiểu dữ liệu số nguyên • Kiểu dữ liệu số thực Kiểu luận lý (logic) Kiểu kí tự Kiểu chuỗi kí tự
Mỗi kiểu dữ liệu có 1 miền giá trị khác nhau
30
Kiểu số nguyên
Reading(*)
Có nhiều kiểu số nguyên Tuỳ vào độ lớn của miền giá trị, có:
-128
127
0
0
255
• Loại có dấu: - 32,768 32,767 • Loại không dấu: 0 65,535
Số nguyên 32 bit (4 byte)
• Loại có dấu: -2,147,483,648 2,147,483,647 • Loại không dấu: 0 4,294,967,295
Một số ngôn ngữ lập trình còn hỗ trợ kiểu số nguyên 64 bit, 128 bit Kiểu số nguyên k bit sẽ chiếm bộ nhớ k bit dữ liệu
31
Số nguyên 8 bit ( 1 byte) • Loại có dấu: -128 127 • Loại không dấu: 0 255 Số nguyên 16 bit (2 byte)
Ví dụ một số kiểu dữ liệu số nguyên
Kiểu số nguyên
Pascal
C
8 bit có dấu
shortint
N/A
8 bit không dấu
byte
N/A
16 bit có dấu
integer
short (int*)
16 bit không dấu
word
unsigned short (int*)
32 bit có dấu
longint
long (int)
32 bit không dấu
N/A
unsigned long (int)
32
Kiểu số thực
Có 2 dạng số thực thường gặp
Reading(*)
Số thực 32 bit (4 byte)
• Miền giá trị: trong khoảng ± 3.4E-38 đến ± 3.4E+38 • Có 8 chữ số có nghĩa sau dấu phẩy
Số thực 64 bit (8 byte)
• Miền giá trị: trong khoảng ± 1.7E-308 đến ± 1.7E+308 • Có 16 chữ số có nghĩa sau dấu phẩy
Một số ngôn ngữ lập trình còn hỗ trợ số thực 80 bit (10 byte)
Loại
Pascal
Miền giá trị
C
Miền giá trị
32 bit
real
2.9x10-39…3.4x1039
float
3.4x10-38…3.4x1038
64 bit
double
5.0x10-324…1.7x10308
double
1.7x10-308…1.7x10308
33
HẰNG (CONSTANT)
Hằng trong chương trình là một giá trị không đổi trong suốt quá trình thi hành Mục đích của hằng là giúp cho chương trình dễ hiểu hơn, hoặc điều chỉnh
chương trình dễ dàng hơn
Hằng phải được khai báo trước khi sử dụng Hằng gồm 2 thành phần: tên hằng và giá trị gán cho hằng
Có các loại hằng sau:
o Hằng số: hằng nguyên, hằng thực – Vd: 2, -8, 30, 2.5, -2.0, 1E-3, … o Hằng bool: có 2 giá trị là true và false o Hằng kí tự: có 2 dạng biểu diễn sau Đặt kí tự trong dấu nháy đơn Dùng mã ASCII o Pascal: o C:
(d là mã ASCII ở dạng thập phân) (FF là mã ASCII ở dạng hexa)
#d \xFF
o Hằng chuỗi kí tự
Pascal, đặt chuỗi kí tự trong dấu nháy đơn – Vd: „Hello‟ C, đặt chuỗi kí tự trong dấu nháy kép – Vd: “Hello”
34
Hằng (thuộc kiểu dữ liệu bất kỳ): dùng làm
sáng tỏ chương trình.
Ví dụ: xem hai đoạn lệnh sau (bằng C/C++)
và ----------------------------------------
//khai báo hằng
double myMagicNumber, yourNumber; myMagicNumber = 3.1416; /// ….. yourNumber = 3.141601
//biến
const float PI = 3.1416; double myMagicNumber, yourNumber; myMagicNumber = PI; yourNumber = PI;
//lệnh gán //lệnh gán
35
Hằng (thuộc kiểu dữ liệu bất kỳ): dễ thay đổi
và bảo trì.
Hằng thường được khai báo ở đầu các tập tin
mã nguồn.
Không nên sử dụng trực tiếp giá trị trong
chương trình.
36
Thường (trong hầu hết nnlt) kết thúc bằng
dấu chấm phẩy ‘;’. Ví dụ: Khai báo biến: char cMyChar; Lệnh: cMyChar = ‘V’;
Mỗi lệnh nên được viết trên một hàng.
37
LỆNH GÁN (ASSIGNMENT)
Lệnh gán dùng để thay đổi giá trị hiện thời của biến Lệnh gán không phải là phép so sánh giữa hai biểu thức, mà là thao tác tính kết quả biểu thức phía bên phải lệnh gán, sau đó đặt kết quả này vào biến ở phía bên trái lệnh gán. Lệnh gán làm thay đổi giá trị hiện thời của biến và không thể nào lấy lại được giá trị này.
Biểu diễn bằng lưu đồ: Ý nghĩa: đưa giá trị của biểu thức vế phải (B) gán vào cho biến ở vế trái (A)
Cú pháp lệnh gán
= ;
A = 5;
A 5
A = B;
A B
A = B +5;
A B + 5
A = A +1;
A A + 1
A = (A + B) * C + D;
A (A + B) * C + D
38
Cú pháp trong C:
Biểu thức toán học kết hợp các biến/hằng và
các toán tử sau
Ví dụ:
39
Các phép tăng/giảm 1 đơn vị
Phép tăng: ++
Lưu ý:
Phép toán ++ (hay --) đứng trước tên biến sẽ thực
hiện trước
Phép toán ++ (hay --) đứng sau tên biến sẽ thực
hiện sau
Ví dụ
40
int iCount = 0; iCount ++; //tăng iCount một đơn vị
Ví dụ (tt)
int iCount = 3; int t1 = i++; int t2 = ++i;
//gán t1 bằng i trước rồi mới tăng i //tăng i rồi mới gán cho t2
Có thể kết hợp các phép toán số học với phép
gán. Ví dụ: x += 3 ; x -= 3; x = x * 3; x /= 3;
41
// tương đương x = x + 3 // tương đương x = x – 3 // tương đương x = x *3; // tương đương x = x / 3
Biểu thức luận lý được kết hợp với các toán
tử sau
AND, OR, XOR, NOT.
Kết quả biểu thức logic là: TRUE hoặc FALSE.
//khai báo biến bool trong C/C++
bool bFlag; bFlag = true;//gán true cho biến bFlag
TRUE (true) hay FALSE (false) chỉ là macro
hay hằng logic trong ngôn ngữ.
Kiểu bool có khi được dùng là boolean.
Cần phân biệt với biểu thức trên BIT.
42
Nhỏ hơn
<
<
Lớn hơn
>
>
Phép toán Ký hiệu trong Pascal Ký hiệu trong C
So sánh bằng = ==
Khác nhau <> !=
<= <= Nhỏ hơn hoặc bằng
Lớn hơn hoặc bằng >= >=
Phép not not !
Phép or
or
||
43
Phép and and &&
Các phép toán trên BIT
Phép toán
Kí hiệu
Phép AND
Ví dụ: int x = 5; int y = 4;
&
Phép OR
// x = 101b // y = 100b
Phép XOR
^
Bù bit
~
Dịch trái
|
Dịch phải
<<
44
>> int r1 = x & y; // r1 = 100b int r2 = x | y; // r2 = 101b int r3 = ~x; int r4 = x << 3; int r5 = x >> 1; // r3 = 010b // r4 = 101000b // r5 = 10b
Số nguyên có thể gán cho biến thực Số thực cũng có thể gán cho biến nguyên,
nhưng phần sau dấu chấm sẽ bị mất.
Biểu thức
Kết quả
Kiểu kết quả
19/10 19.0/10 19/10.0 1 1.9 1.9 Số nguyên Số chấm động Số chấm động
45
19.0/10.0 1.9 Số chấm động
Nhập từ bàn phím và xuất ra màn hình
Trong C Trong C++ Trong Pascal
Nhập Xuất printf scanf
Nhập Dùng cin
Xuất Dùng cout
Nhập Xuất readln writeln
trong B. S. Gottfried (1996), Programming with C, 2nd Ed.,
Xem thêm C.4. SCHAUM’S Outline Series - McGRALL-HILL
46
Mô tả
Kiểu tham số
Kiểu trả về
Hàm
abs(x)
Tính trị tuyệt đối
Số
Cùng kiểu tham số
exp(x)
Tính hàm ex
Số
Số thực
log(x)
Tính ln
Số
Số thực
ceil(x)
Số
Số nguyên
Lấy trần số nguyên
Floor
Lấy sàn số nguyên
Số
Số nguyên
sqrt(x)
Số
Căn bậc 2
Số thực
Pow(x,y)
Tính xy
Số, Số
Số thực
47
Các thành phần của một chương trình
Kiểu chương trình Kiểu chú thích Quy tắc đặt tên
Một số kiểu dữ liệu cơ bản Cách khai báo và sử dụng biến, hằng Một số hàm cơ bản
48
1. Thực hiện các bài tập trong Ex_Chapter_2.docx. https://sites.google.com/site/ngoquviet/documents 2. Viết chương trình đổi một số nguyên hệ 10 sang hệ 2,
hệ 16.
3. Viết chương trình nhập vào số giây từ 0 đến 86399, đổi số giây nhập vào thành dạng "gio:phut:giay", mỗi thành phần là một số nguyên có 2 chữ số .
4. Viết chương trình đọc từ bàn phím 3 số nguyên biểu diễn ngày, tháng, năm và xuất ra màn hình dưới dạng "ngay/thang/nam" (chỉ lấy 2 số cuối của năm).
49

