Mục Đích Yêu Cầu Khái niệm về ngôn ngữ lập trình Khái niệm về kiểu dữ liệu Kiểu dữ liệu có cấu trúc cấu trúc dữ liệu Khái niệm về giải thuật Ngôn ngữ biểu diễn giải thuật Ngôn
Trang 1Lập Trình Căn Bản
Trang 2Mục Đích Yêu Cầu
Khái niệm về ngôn ngữ lập trình
Khái niệm về kiểu dữ liệu
Kiểu dữ liệu có cấu trúc (cấu trúc dữ liệu)
Khái niệm về giải thuật
Ngôn ngữ biểu diễn giải thuật
Ngôn ngữ sơ đồ (lưu đồ), sử dụng lưu đồ để biểu diễn các giải thuật
Trang 3Nội Dung Cốt Lõi
Chương 1: Giới thiệu về ngôn ngữ C & môi trường lập trình Turbo C
Chương 2: Các thành phần của ngôn ngữ C
Chương 3: Các kiểu dữ liệu sơ cấp chuẩn và các lệnh đơn
Trang 4LẬP TRÌNH CĂN BẢN
Phần 1 GIỚI THIỆU VỀ CẤU TRÚC DỮ
LIỆU VÀ GIẢI THUẬT
N.C Danh
Trang 5Nội dung chương
Từ bài toán đến chương trình
Giải thuật
Khái niệm giải thuật
Các đặc trưng của giải thuật
Ngôn ngữ biểu diễn giải thuật
Một số giải thuật cơ bản
Các cấu trúc suy luận cơ bản của giải thuật
Từ giải thuật đến chương trình
Trang 6Từ Bài Toán Đến Chương Trình
Các bước giải bài toán bằng máy tính
sang ngôn ngữ lập trình
Trang 7Giải Thuật
Khái niệm giải thuật
Các đặc trưng của giải thuật
Ngôn ngữ biểu diễn giải thuật
Một số giải thuật cơ bản
Các cấu trúc suy luận cơ bản của giải thuật
Từ giải thuật đến chương trình
Trang 8Khái Niệm Giải Thuật
Ví dụ: Hoán đổi chất lỏng trong 2 bình A (nước mắm) và B (rượu):
Yêu cầu phải có thêm một bình thứ ba gọi là bình C
Bước 1: Đổ rượu từ bình B sang bình C
Bước 2: Đổ nước mắm từ bình A sang bình B
Bước 3: Đổ rượu từ bình C sang bình A
“Giải thuật là một dãy các thao tác trên những dữ liệu vào sao cho sau một hữu hạn bước ta thu được kết quả của bài toán ”.
Trang 9Các Đặc Trưng Của Giải Thuật
Tính kết thúc
Tính xác định
Tính phổ dụng
Tính hiệu quả
Trang 11Ngôn Ngữ Tự Nhiên
Là ngôn ngữ của chúng ta
Ví dụ: Giải thuật giải phương trình bậc nhất ax+b=0
Bước 1: Nhận giá trị của các tham số a, b.
Bước 2: Xét giá trị của a xem có bằng 0 hay không?
Nếu a=0 thì làm bước 3, nếu a khác không thì làm bước 4.
Bước 3: (a bằng 0) Nếu b bằng 0 t=> pt vô số nghiệm
Nếu b khác 0 => pt vô nghiệm
Trang 12Ngôn Ngữ Sơ Đồ (1)
Mô tả giải thuật bằng bằng các sơ đồ hình khối đã được (quy ước trước)
Trang 13Ngôn Ngữ Sơ Đồ (2)
Ví dụ: Dùng lưu đồ để biểu diễn giải thuật tìm UCLN nêu trên như sau:
Trang 15Một Số Giải Thuật Cơ Bản (1)
Trang 17Các Cấu Trúc Suy Luận Cơ Bản
Của Giải Thuật (1)
Giải thuật được thiết kế theo 3 cấu trúc suy luận cơ bản:
Tuần tự (Sequential):
Các công việc được thực hiện tuần tự, công việc này nối tiếp công việc kia
Cấu trúc lựa chọn (Selection)
Lựa chọn một công việc để thực hiện căn cứ vào một điều kiện nào đó
Cấu trúc 1: Nếu < điều kiện> (đúng) thì thực hiện <công việc>
Trang 18Các Cấu Trúc Suy Luận Cơ Bản
Của Giải Thuật (2)
Trang 19Từ Giải Thuật Đến Chương
Trình
Cả 2 đều là tập các chỉ thị (instruction) – làm thế nào để giải quyết 1 công việc (task).
Giải thuật
Chương trình
giải thuật
Trang 20 “Kiểu dữ liệu là một tập hợp các giá trị có cùng một
tính chất và tập hợp các phép toán thao tác trên các giá trị đó”.
Có 2 loại
Kiểu dữ liệu sơ cấp
Kiểu dữ liệu có cấu trúc
Trang 21Kiểu Dữ Liệu Sơ Cấp
“ Kiểu dữ liệu sơ cấp là kiểu dữ liệu mà giá trị của nó là đơn nhất”.
Ví dụ: Kiểu int trong C
là kiểu sơ cấp
gồm các số nguyên từ -32768 32767
và các phép toán: +, -, *, /, %…
Trang 22Kiểu Dữ Liệu Có Cấu Trúc
“Kiểu dữ liệu có cấu trúc là kiểu dữ liệu mà các giá trị của
Trang 23Ngôn Ngữ Lập Trình
Khái niệm về ngôn ngữ lập trình
Chương trình dịch
Trang 25Ngôn Ngữ Máy (machine
language)
Là các chỉ thị dưới dạng
nhị phân, can thiệp trực
tiếp vào trong các mạch
điện tử
Có thể được thực hiện
ngay không cần qua
bước trung gian nào
Tuy nhiên chương trình
viết bằng ngôn ngữ máy 3
Trang 26thì chương trình đó phải được dịch
sang ngôn ngữ máy Công cụ thực
hiện việc dịch đó được gọi là
Assembler
Assembly Language
INPUT a ; Nhập giá trị cho a từ bàn phím
LOAD a ; Đọc giá trị a vào thanh ghi tổng A
PRINT a; Hiển thị giá trị của a ra màn hình.
INPUT b ADD b ; Cộng giá trị của thanh ghi tổng A ;với giá trị b
Trang 27Ngôn Cấp Cao (High level
language )
Rất gần với ngôn ngữ con người
Một chương trình viết bằng ngôn
ngữ cấp cao được gọi là chương
trình nguồn (source programs)
Để máy tính "hiểu" và thực hiện
được các lệnh trong chương trình
nguồn thì phải có một chương
Trang 29LẬP TRÌNH CĂN BẢN
Phần 2 - Chương 1 GIỚI THIỆU VỀ NGÔN NGỮ C
& MÔI TRƯỜNG TURBO C 3.0
N.C Danh
Trang 32Lịch Sử (2)
Dennis Ritchie(trái) và
Ken Thompson
trước hệ thống
PDP-11 với 2 text-terminal (1972)
Trang 34Lịch Sử (4)
C được chuẩn hóa vào năm 1989 bởi ANSI (American
National Standards Institute) , được biết như ANSI C
Được chuẩn hóa ISO (International standard) năm 1990
(chuẩn này cũng được ANSI chấp nhận và được biết như C89)
Được cập nhật năm 1995 (C95) và 1999 (C99).
Trang 36Những đặc điểm của C (2)
Tính linh động (flexible):
Cú pháp rất uyển chuyển, chấp nhận nhiều cách thể hiện
Có thể thu gọn kích thước của mã lệnh
Làm chương trình chạy nhanh hơn
Trang 37Môi trường lập trình Turbo C
Turbo C do hãng Borland cung cấp.
Có các chức năng: soạn thảo chương trình, dịch, thực thi chương trình, …
Phiên bản được sử dụng ở đây là Turbo C 3.0
Trang 38Gọi Turbo C
Trang 39Soạn thảo chương trình mới
Vào menu File ->New
#include <stdio.h>
#include<conio.h>
int main () {
char ten[50];
Trang 40Ghi chương trình đang soạn
thảo vào đĩa
Sử dụng File->Save hoặc gõ phím F2
Lệnh Save As để lưu chương trình với tên khác
Tên hiện tại (tên
cũ)
Tên mới ( kể cả tên thư mục)
Trang 41Qui tắc đặt tên tập tin (file)
Theo quy tắc đặt tên tập tin của DOS
Tên của tập tin gồm 2 phần: phần tên và phần mở rộng
Phần tên:
Bắt đầu là 1 ký tự từ a z (không phân biệt hoa thường).
Theo sau có thể là các ký tự từ a z, các ký số từ 0 9 hay dấu gạch
dưới (_), phần này dài tối đa là 8 ký tự.
Phần mở rộng:
Dài tối đa 3 ký tự.
Ví dụ:
Trang 42 Thoát khỏi Turbo C
Vào menu File->Exit hoặc
nhấn Alt-X
Trang 43Các lệnh trên menu Option
Directories:
Include directories: chứa các
tập tin ta muốn đưa vào
chương trình (file h trong
dòng #include).
Library directories: chứa các
tập tin thư viện (file lib)
Output directory: chứa các
tập tin “đối tượng “ obj và exe
sau khi biên dịch chương
trình
Source directories: chứa
các tập tin “nguồn” (.obj và
Trang 44LẬP TRÌNH CĂN BẢN
Phần 2 - Chương 2 CÁC THÀNH PHẦN CƠ BẢN
CỦA NGÔN NGỮ C
N.C Danh
Trang 45Nội dung chương này
Trang 46Bộ chữ viết trong C
Bộ chữ viết trong ngôn ngữ C bao gồm các ký tự sau:
26 chữ cái latinh lớn A,B,C Z
26 chữ cái latinh nhỏ a,b,c z.
10 chữ số thập phân 0,1,2 9.
Các ký hiệu toán học: +, -, *, /, =, <, >, (, )
Các ký hiệu đặc biệt: : , ; " ' _ @ # $ ! ^ [ ] { }
Phân biệt chữ in hoa và in thường
Trang 47Các từ khóa trong C
Từ khóa là các từ dành riêng của C.
của riêng mình.
Trang 48printf(“Xin cho biet ten cua ban !”);
scanf(“%s”,ten); /*Doc vao 1 chuoi la ten ban*/
printf(“Xin chao ban %s\n ”,ten);
//Dung chuong trinh, cho go phim
getch();
return 0;
}
Trang 49Các kiểu dữ liệu sơ cấp chuẩn
trong C
Kiểu số nguyên (integer)
Kiểu số thực (real)
Trang 50Kiểu số nguyên
Được dùng để lưu các giá trị nguyên hay còn
gọi là kiểu đếm được.
Kiểu số nguyên 1 byte (8 bits)
Kiểu số nguyên 2 bytes (16 bits)
Kiểu số nguyên 4 byte (32 bits)
Trang 51Kiểu số thực
Được dùng để lưu các số thực hay các số có dấu
chấm thập phân
Kiểu void
Trang 54Chú ý khi đặt tên
Trang 55Tên do người lập trình tự đặt
Ví dụ:
Phải tuân thủ quy tắc:
Độ dài tối đa của tên là 32 ký tự, tuy nhiên cần đặt sao cho rõ ràng,
Trang 57 Cách 2: viết theo số mũ hay số khoa học
Một số thực được tách làm 2 phần (phân cách bởi e/E)
Phần giá trị: như cách 1
Phần mũ: là một số nguyên
Trang 580
8
*
Trang 60Hằng số nguyên (3)
Ví dụ: Kết quả của chương trình sau là gi?
Trang 61Hằng số nguyên (4)
Hằng số nguyên 4 byte (long)
l hoặc L
Ví dụ:
45345L hay 45345l hay 45345
Trang 62Hằng ký tự (char)
Ví dụ: ‘a’, ‘A’, ‘0’, ‘9’
Là 1 ký tự được viết trong
cặp dấu nháy đơn (‘)
Mỗi một ký tự tương ứng với
ASCII = American Standard
Code for Information
Interchange
Trang 63Hằng chuỗi ký tự
Ví dụ: “Ngon ngu lap trinh C”
Chú ý:
“” : chuỗi rỗng - không có nội dung
Khi lưu trữ trong bộ nhớ, một chuỗi được kết thúc bằng ký tự NULL
(‘\0’: mã Ascii là 0)
Để biểu diễn ký tự đặc biệt bên trong chuỗi ta phải thêm dấu \ phía trước.
Ví dụ:
Trang 64 Giá trị của biến có thể bị thay đổi.
Cú pháp khai báo biến:
<Kiểu dữ liệu> Danh sách các tên biến cách nhau bởi dấu phẩy;
Trang 65Khởi tạo giá trị cho biến lúc
khai báo
Ví dụ:
Cách viết giá trị cho biết luôn kiểu của nó:
Trang 66Vị trí khai báo biến (1)
Biến ngoài
(biến toàn cục)
Trang 67Vị trí khai báo biến (2)
Trang 68 Toán tử con trỏ & và *
Trang 69Các toán tử số học (1)
Trang 71Các toán tử số học (3)
Đâu là sự khác nhau?
x++ trả về giá trị hiện hành của x và sau đó tăng x
++x tăng x trước và sau đó trả về giá trị mới của x
Trang 72false Giá trị 0true Bất kỳ giá trị nào ngoại trừ 0
Trang 73Các toán tử quan hệ và các toán
tử Logic (1)
Các phép so sánh sau tạo ra các biểu thức logic có giá trị
kiểu Boolean
Trang 75Các toán tử quan hệ và các toán
tử Logic (3)
Bảng chân trị cho các toán tử Logic
Thứ tự ưu tiên
Trang 76Các toán tử Bitwise(cho lop nghi
hoc roi)
Toán tử Bitwise giúp kiểm tra,
gán hay thay đổi các bit thật sự
trong 1 byte của word.
Chỉ dùng cho kiểu char và int
Trang 78=>Đặt vào biến m địa chỉ bộ nhớ của biến count
Toán tử * trả về nội dung của ô nhớ mà một con trỏ đang chỉ vào
Ví dụ:
x = *p; // x=5
Trang 79Toán tử dấu phẩy
Ví dụ :
x = (y=3,y+1);
Trước hết gán 3 cho y rồi gán 4 cho x
Được sử dụng để kết hợp các biểu thức lại với nhau
Bên trái của dấu (,) luôn được xem là kiểu void
Biểu thức bên phải trở thành giá trị của tổng các biểu
Trang 80Tổng kết về độ ưu tiên
Tổng kết về độ ưu tiên
Trang 81Phép gán được viết gọn lại
x= x <phép toán> y;
có thể được viết gọn lại (short form):
Trang 82Các tập tin thư viện thông
dụng
stdio.h: Định nghĩa các hàm vào/ra chuẩn (standard
input/output):printf(), scanf(), getc(), putc(), gets(), puts(), fflush(),
fopen(), fclose(), fread(), fwrite(), getchar(), putchar(), getw(), putw()…
conio.h: Định nghĩa các hàm vào ra trong chế độ DOS: clrscr(), getch(), getche(), getpass(), cgets(), cputs(), putch(), clreol(),…
math.h: Định nghĩa các hàm tính toán: abs(), sqrt(), log() log10(), sin(), cos(), tan(), acos(), asin(), atan(), pow(), exp(),…
alloc.h: Định nghĩa các hàm liên quan đến việc quản lý bộ nhớ: calloc(), realloc(), malloc(), free(), farmalloc(), farcalloc(), farfree(), …
io.h: Định nghĩa các hàm vào ra cấp thấp: open(), _open(), read(),
_read(), close(), _close(), creat(), _creat(), creatnew(), eof(), filelength(), lock(),…
graphics.h: Định nghĩa các hàm liên quan đến đồ họa: initgraph(),
line(), circle(), putpixel(), getpixel(), setcolor(), …
Trang 83Cấu trúc của 1 chương trình C
Trang 84Cấu trúc của 1 chương trình C
(2)
Chương trình chính
Cài đặt các hàm
Trang 85Tiền xử lý và biên dịch (preprocess
Trang 87Chia chương trình ra các
module (2)
Vấn đề: testmodule.c phải biết các
prototype của foor và bar.
Giải pháp 1 (tệ):
Chèn tay các prototype vào các file c có
dùng nó.
phải chỉnh lại prototype trong tất cả các
file c dùng nó.
Giải pháp 2 (tốt):
Trang 88#include
filename bằng nội dung của filename.
Các header file sẽ được tìm ở đâu?
#include <file.h>: tìm file.h trong thư mục đã được xác định trong
INCLUDE DIRECTORIES Hoặc trong /usr/include (linux)
#include “C:\\TC\\file.h ”: tìm file.h trong đường dẫn
Trang 89LẬP TRÌNH CĂN BẢN
Phần 2 - Chương 3 CÁC CÂU LỆNH ĐƠN
TRONG C
Trang 90 Lệnh nhập giá trị từ bàn phím cho biến
Lệnh xuất giá trị của biểu thức lên màn hình
Trang 91Khái niệm câu lệnh
“1 câu lệnh xác định 1 công việc mà chương trình phải thực hiện”
Kết thúc bởi ;
Trang 92 cấu trúc điều kiện rẽ nhánh
cấu trúc điều kiện lựa chọn
cấu trúc lặp
cấu trúc lệnh hợp thành
Trang 93Các lệnh đơn
Lệnh gán
Lệnh nhập giá trị từ bàn phím cho biến
Lệnh xuất giá trị của biểu thức lên màn hình
Trang 94Lệnh gán (1)
Ví dụ:
Cú pháp:
<Tên biến> = <biểu thức>;
Ý nghĩa: Gán giá trị cho 1 biến
Gán giá trị ngay tại lúc khai báo:
Trang 95Lệnh gán (2)
Kiểu của biểu thức và của biến phải giống nhau
Trang 96Lệnh gán (3)
Thường thì có sự chuyển đổi kiểu tự động nếu có thể.
Chuyển được
Trang 97Lệnh gán (4)
Kết quả chương trình sau là gì?
Trang 98Lệnh gán (5)
Trong C, các chuyển đổi kiểu sau được làm tự động.
Những chuyển đổi trên đảm bảo không làm mất đi sự chính xác (loss of precision)
Việc chuyển đổi theo các hướng khác có thể làm mất sự chính xác
Ví dụ:
Trang 99Lệnh gán (6)
Trang 100Lệnh nhập giá trị từ bàn phím
cho biến (1)
cách biểu diễn, độ rộng, số chữ số thập phân, …
Trang 101Lệnh nhập giá trị từ bàn phím
cho biến (2)
scanf phải lưu giá trị vào 1 biến
hiện hành của 1 biến.
xác định.
Trang 102Ví dụ - Dùng Standard Input
Trang 103Lệnh xuất giá trị của biểu thức
Trang 104Lệnh xuất giá trị của biểu thức
lên màn hình (2)
Nếu muốn in ra các biến và biểu thức, ta truyền nó vào
printf như các đối số.
Các định dạng (format) khác nhau cho các kiểu giá trị khác nhau (dùng %).
Trang 105Lệnh xuất giá trị của biểu thức
lên màn hình (3)
Trang 106Ví dụ - Output từ C
Hết chương
Trang 107Giải thích thêm về printf
Trang 109Nội dung chương này
Trang 110Khối lệnh trong C (1)
Là 1 dãy các khai báo cùng với các câu lệnh nằm trong cặp dấu ngoặc móc { và }
Trang 111Khối lệnh trong C (2)
1 khối lệnh có thể chứa nhiều khối lệnh khác gọi là khối lệnh lồng nhau (không hạn chế).
Trang 112Phạm vi các biến
Có thể khai báo các biến cùng
tên trong các khối.
Nếu một biến được khai báo
bên ngoài khối lệnh và không
trùng tên với biến bên trong
khối lệnh thì nó cũng dùng
được bên trong khối.
Một khối lệnh con có thể sử
dụng các biến bên ngoài, nhưng
điều ngược lại không đúng.
Trang 116Câu lệnh và khối lệnh
C cho phép nhóm các câu lệnh liên tiếp vào 1 khối.
1 khối lệnh có thể được dùng như 1 lệnh đơn.
Ví dụ:
Trang 117Nhầm lẫn khi dùng if
Trang 118Chú ý khi dùng if-else
Câu lệnh if-else lồng nhau
else sẽ kết hợp với if gần nhất chứa có else
Trong trường if bên trong không có else thì phải viết nó
trong cặp dấu {} để tránh sự kết hợp else if sai.
Ví dụ
Trang 119Cấu trúc lựa chọn
(switch-case) (1)
C cung cấp 1 cấu trúc đẹp - dùng 1 dãy các câu lệnh if.
Trang 121Cấu trúc lựa chọn
(switch-case) (3)
Cú pháp:
Tính giá trị của biểu thức expr trước.
Nếu giá trị expr bằng value1 thì thực hiện statement_sequence1 rồi thoát.
Nếu giá trị expr khác value1 thì so sánh nó với value2 , nếu bằng value2
thì thực hiện statement_sequence2
rồi thoát.
Cứ như thế, so sánh tới giá trị n
Trang 123Ví dụ - switch-case (1)
Trang 124Ví dụ - switch-case (2)
In ra số ngày của 1 tháng
Trang 126 Nếu giá trị biểu thức 2 là
sai (==0) => thoát khỏi for
Nếu giá trị biểu thức 2 là
đúng (!=0) => thực hiện
<Công việc>
B3: Tính giá trị biểu thức 3
rồi quay lại B2
for (Biểu thức 1; biểu thức 2; biểu thức 3) <Công việc>;
Trang 127Vòng lặp for (2)
Trang 128Vòng lặp for (2)
Chương trình in dãy số nguyên từ 1 10
output
Trang 129Vòng lặp for (3)
Nhập số nguyên n Tính tổng các số nguyên từ 1 n.
Trang 130- Nếu điều kiện sai (==0) thì
thoát khỏi lệnh while.
- Nếu điều kiện đúng (!=0) thì
thực hiện công việc rồi quay
lại kiểm tra điều kiện tiếp.
while (Biểu thức điều kiện) <Công việc>;
Trang 131Vòng lặp while (2)
Chương trình in dãy số nguyên từ 1 10
Trang 132Vòng lặp while (3)
Nhập số nguyên n Tính tổng các số nguyên từ 1 n.
output