1.1. Giới thiệu chung 1.2. Tập ký tự 1.3. Từ khóa (keyword) 1.4. Tên (identifier) 1.5. Một số quy tắc cần nhớ khi viết C.T 1.6. Sơ lược về khai báo biến, toán tử gán, câu lệnh vào ra, toán tử include 1.7. Cấu trúc một chương trình C và cách vận hành trên máy Ngôn ngữ C ra đời năm 1972 Phát triển thành C++ vào năm 1983 Ngôn ngữ được sử dụng rất phổ biến Có nhiều trình biên dịch C khác nhau Turbo C, Borland C GCC Thực hành trên Turbo C Cung cấp môi trường tích hợp cho phép soạn thảo và biên dịch 1.1. Giới thiệu chung 1.2. Tập ký tự 1.3. Từ khóa (keyword) 1.4. Tên (identifier) 1.5. Một số quy tắc cần nhớ khi viết C.T 1.6. Sơ lược về khai báo biến, toán tử gán, câu lệnh vào ra, toán tử include 1.7. Cấu trúc một chương trình C và cách vận hành trên máy
Trang 1NGÔN NGỮ LẬP TRÌNH C
Trang 2Chương 1:
CÁC KHÁI NIỆM CƠ BẢN
Trang 31.1 Giới thiệu chung
1.2 Tập ký tự
1.3 Từ khóa (keyword)
1.4 Tên (identifier)
1.5 Một số quy tắc cần nhớ khi viết C.T
1.6 Sơ lược về khai báo biến, toán tử gán, câu lệnh vào ra, toán tử #include
1.7 Cấu trúc một chương trình C và cách vận hành trên máy
CÁC KHÁI NIỆM CƠ BẢN
Trang 4Giới thiệu chung
Ngôn ngữ C ra đời năm 1972
Phát triển thành C++ vào năm 1983
Ngôn ngữ được sử dụng rất phổ biến
Có nhiều trình biên dịch C khác nhau
Trang 51.1 Giới thiệu chung
1.2 Tập ký tự
1.3 Từ khóa (keyword)
1.4 Tên (identifier)
1.5 Một số quy tắc cần nhớ khi viết C.T
1.6 Sơ lược về khai báo biến, toán tử gán, câu lệnh vào ra, toán tử #include
1.7 Cấu trúc một chương trình C và cách vận hành trên máy
CÁC KHÁI NIỆM CƠ BẢN
Trang 6Tập ký tự
sau:
26 chữ cái tiếng anh thường: a b c … z
10 chữ số thập phân: 0 1 2 … 9
Các ký hiệu toán học như: + - * / = ()
Ký tự gạch dưới: _
Các ký tự đặc biệt khác: , : ; [ ] { } ? …
Trang 71.1 Giới thiệu chung
1.2 Tập ký tự
1.3 Từ khóa (keyword)
1.4 Tên (identifier)
1.5 Một số quy tắc cần nhớ khi viết C.T
1.6 Sơ lược về khai báo biến, toán tử gán, câu lệnh vào ra, toán tử #include
1.7 Cấu trúc một chương trình C và cách vận hành trên máy
CÁC KHÁI NIỆM CƠ BẢN
Trang 8Từ khóa
Trang 91.1 Giới thiệu chung
1.2 Tập ký tự
1.3 Từ khóa (keyword)
1.4 Tên (identifier)
1.5 Một số quy tắc cần nhớ khi viết C.T
1.6 Sơ lược về khai báo biến, toán tử gán, câu lệnh vào ra, toán tử #include
1.7 Cấu trúc một chương trình C và cách vận hành trên máy
CÁC KHÁI NIỆM CƠ BẢN
Trang 10và gạch nối “_”
tên không đuợc chứa kí tự trống,
tên không được bắt đầu bằng một chữ số,
tên không được trùng với từ khóa
phân biệt chữ hoa và chữ thường
(Options/Compiler.Source/Identifier length)
Trang 11a_1 beta x1
delta_7 _x1
case 3xyz_7
be ta f(x) r#3 x-1
Trang 121.1 Giới thiệu chung
1.2 Tập ký tự
1.3 Từ khóa (keyword)
1.4 Tên (identifier)
1.5 Một số quy tắc cần nhớ khi viết C.T
1.6 Sơ lược về khai báo biến, toán tử gán, câu lệnh vào ra, toán tử #include
1.7 Cấu trúc một chương trình C và cách vận hành trên máy
CÁC KHÁI NIỆM CƠ BẢN
Trang 13 Mỗi câu lệnh có thể viết trên một hay nhiều
dòng, kết thúc bằng dấu;
Dùng dấu \ trước khi xuống dòng
Ví dụ printf(“\n Han hanh \
\n lam quen voi ban”);
Các lời chú thích cần được giữa cặp dấu /*
… */ và có thể viết:
Trên một dòng
Trên nhiều dòng
Trên phần còn lại của dòng
Một số quy tắc khi viết C.T
Trang 14 Sử dụng các hàm chuẩn: Phải khai báo
các tệp chứa hàm chuẩn
Ví dụ: #include <stdio.h> (hàm printf())
Một số quy tắc khi viết C.T
Trang 151.1 Giới thiệu chung
1.2 Tập ký tự
1.3 Từ khóa (keyword)
1.4 Tên (identifier)
1.5 Một số quy tắc cần nhớ khi viết C.T
1.6 Sơ lược về khai báo biến, toán tử gán, câu lệnh vào ra, toán tử #include
1.7 Cấu trúc một chương trình C và cách vận hành trên máy
CÁC KHÁI NIỆM CƠ BẢN
Trang 16 Mọi biến trước khi sử dụng phải được
khai báo để xác định kiểu
Trang 17 printf(Chuỗi điều kiện, bt1, bt2, …, btk);
Chuỗi điều kiện:
Trang 18 scanf(“t1t2…tk”, &b1, &b2, …, &bk);
Dùng đặc tả cho biến thực
Trang 191.1 Giới thiệu chung
1.2 Tập ký tự
1.3 Từ khóa (keyword)
1.4 Tên (identifier)
1.5 Một số quy tắc cần nhớ khi viết C.T
1.6 Sơ lược về khai báo biến, toán tử gán, câu lệnh vào ra, toán tử #include
1.7 Cấu trúc một chương trình C và cách vận hành trên máy
CÁC KHÁI NIỆM CƠ BẢN
Trang 21printf(“\n Turbo C han hanh”);
printf(“\n lam quen voi ban”);
getch();
}
Cấu trúc một chương trình C
Trang 22 Tạo tệp chương trình gốc đuôi C
Vận hành chương trình trên máy
Trang 23 Tạo tệp chương trình gốc đuôi C
• File/New
Vận hành chương trình trên máy
Trang 24 Dịch chương trình (đuôi EXE)
Compile/Compile (Alt + F9)
Vận hành chương trình trên máy
Trang 26Chương 2:
CÁC KIỂU DỮ LIỆU CƠ BẢN VÀ
CÁC PHÉP TOÁN
Trang 272.1 Các kiểu dữ liệu cơ bản
2.2 Biến, hằng và biểu thức
2.3 Các phép toán
CÁC KIỂU DỮ LIỆU VÀ CÁC
PHÉP TOÁN
Trang 28Các kiểu dữ liệu cơ bản
Kiểu kí tự Kích thước Miền giá trị
signed char 1 byte -128 -> 127
Trang 29 Kiểu số nguyên
Các kiểu dữ liệu cơ bản
Kiểu số nguyên Kích thước Miền giá trị
int, short 2 byte -32768 -> 32767
unsigned int,
long 4 byte -2147483648 -> 2147483647 unsigned long 4 byte 0 -> 4294967295
Trang 30 Kiểu số thực
Các kiểu dữ liệu cơ bản
Kiểu số thực Kích thước Miền giá trị
double 8 byte 1.7E-308 -> 1.7E+308 long double 10 byte 3.4E-4932->1.1E+4932
Trang 31 Chuyển kiểu
này sang kiểu khác
Trang 322.1 Các kiểu dữ liệu cơ bản
2.2 Biến, hằng và biểu thức
2.3 Các phép toán
CÁC KIỂU DỮ LIỆU VÀ CÁC
PHÉP TOÁN
Trang 33 Dấu phẩy động (float và double):
Dạng thập phân: Số gồm phần nguyên, dấu chấm thập phân và phần phân Ví dụ: 214.35, -4563.48
Dạng khoa học (dạng mũ): Gồm phần định trị và phần bậc Phần định trị là một số nguyên hoặc số thực dạng thập phân, phần bậc là một số nguyên Hai phần cách nhau bởi kí tự e hoặc E.
Ví dụ: 21.34E-4 (biểu diễn giá trị 0.012134)
0.15E3 (biểu diễn giá trị120.0) -48.5e-2 (biểu diễn giá trị -0.485) 1E6 (biểu diễn giá trị 1000000.0)
int: 125
long: -567L hoặc -567l
Hằng, Biến, Biểu thức
Trang 34Chú ý: ‘a’ khác “a”, a là hằng ký tự lưu trữ 1 byte,
còn “a” là xâu ký tự được lưu trữ trong mảng 2 phần tử (a và \0)
Trang 35đứng trước mọi câu lệnh khác
biến ta đặt dấu = Ví dụ: int a, b = 20 (int a, b; a=20, b=20)
Hằng, Biến, Biểu thức
Trang 36 Biến
Ví dụ
main() {
int a, b, c;
a = 35;
int d;
}
Hằng, Biến, Biểu thức
Trang 37 Biểu thức
qui tắc toán học
Vế phải của câu lệnh gán
Trang 392.1 Các kiểu dữ liệu cơ bản
2.2 Biến, hằng và biểu thức
2.3 Các phép toán
CÁC KIỂU DỮ LIỆU VÀ CÁC
PHÉP TOÁN
Trang 41 Chia lấy phần nguyên: /
Chia lấy phần dư: %
Trang 43 Các phép toán quan hệ (so sánh)
• Phép toán quan hệ (so sánh) và logic cho hoặc giá trị đúng (1) hoặc giá trị sai (0)
• Biểu thức chứa các phép toán quan hệ
được gọi là biểu thức quan hệ
Các phép toán
Trang 44 Các phép toán quan hệ (so sánh)
Trang 46 Phép tăng 1 (++), giảm 1 ( )
hoặc sau biến là thể hiện trong phép gán: biến =
biểu_thức
Nếu toán tử ++x ( x) xuất hiện trong biểu_thức thì x sẽ được tăng
(giảm) 1 trước khi thực hiện phép gán
Nếu toán tử x++ (x ) xuất hiện trong biểu_thức thì thực hiện phép
gán trước khi x được tăng (giảm) 1
a = 5; b = ++a; kết quả ?
a = 5; b = a++; kết quả ?
Các phép toán
Trang 47Chương 3:
XUẤT, NHẬP DỮ LIỆU
Trang 50 printf(“Gia tri thuc cua bien thuc =%f\n”,bien_thuc);
printf(“Truoc khi lam tron=%f \nSau khi lam tron=
%.2f”,bien_thuc, bien_thuc);
Trang 51Lệnh nhập/xuất
Vào dữ liệu
Scanf là hàm cho phép đọc dữ liệu từ bàn phím và gán cho các biến trong chương trình khi chương trình thực thi Hàm scanf nằm trong thư viện stdio.h.
Cú pháp:
scanf(“Chuỗi định dạng”, địa chỉ của các biến);
Giải thích:
- Chuỗi định dạng: dùng để qui định kiểu dữ liệu, cách biểu diễn, độ
rộng, số chữ số thập phân Một số định dạng khi nhập kiểu số
nguyên, số thực, ký tự.
- Địa chỉ của các biến: là địa chỉ (&) của các biến mà chúng ta cần
nhập giá trị cho nó Được viết như sau: &<tên biến>.
Trang 52Vào dữ liệu
Trang 53 Lưu ý:
- Chuỗi định dạng phải đặt trong cặp dấu nháy kép (“”).
- Các biến (địa chỉ biến) phải cách nhau bởi dấu phẩy (,).
- Có bao nhiêu biến thì phải có bấy nhiêu định dạng.
- Thứ tự của các định dạng phải phù hợp với thứ tự của các biến.
- Để nhập giá trị kiểu char được chính xác, nên dùng hàm fflush(stdin)
để loại bỏ các ký tự còn nằm trong vùng đệm bàn phím trước hàm
scanf().
- Để nhập vào một chuỗi ký tự (không chứa khoảng trắng hay kết thúc bằng khoảng trắng), chúng ta phải khai báo kiểu mảng ký tự hay con trỏ ký tự, sử dụng định dạng %s và tên biến thay cho địa chỉ biến.
- Để đọc vào một chuỗi ký tự có chứa khoảng trắng (kết thúc bằng phím Enter) thì phải dùng hàm gets().
Trang 54scanf(“%c”,&bienchar);
Trang 57Lệnh nhập/xuất
trả về giá trị 0, ngược lại trả về giá trị khác 0
Trang 59Chương 4:
CÁC CẤU TRÚC ĐIỀU KHIỂN
Trang 604.1 Cấu trúc rẽ nhánh
4.2 Cấu trúc vòng lặp
CÁC CẤU TRÚC ĐIỀU KHIỂN
Trang 61Cấu trúc rẽ nhánh
Lệnh
Một câu lệnh nhằm thực hiện một công việc nào đó
Câu lệnh kết thúc bởi dấu “;”
Ví dụ
printf(“một câu lệnh\n”);
i++;
Là dãy các lệnh được đặt giữa cặp ngoặc nhọn “{“ và “}”
Khối lệnh thường được sử dụng khi muốn chúng thực hiện dưới một điều kiện nào đó
{
/* các lệnh */
}
Trang 63Lệnh if:
Trang 64Lệnh if
Trang 65Ví dụ: Chương trình nhập vào hai số a và b, tìm max của hai số rồi in kết quả lên màn hình Chương trình có thể viết bằng cả hai cách trên như sau :
Trang 67Sự lồng nhau của các toán tử if :
C cho phép sử dụng các toán tử if lồng nhau có
nghĩa là trong các khối lệnh ( 1 và 2 ) ở trên có thể chứa các toán tử if - else khác
Trang 68Sự lồng nhau của các toán tử if :
Đoạn chương trình trên tương đương với :
Trang 69Sự lồng nhau của các toán tử if :
Trang 70Ví dụ : Chương trình giải phương trình bậc hai.
Trang 71bảng mã sau Viết chương trình để từ mã suy
Trang 72Cấu trúc lựa chọn Switch
Là cấu trúc tạo nhiều nhánh đặc biệt Nó căn cứ vào giá trị một biểu thức nguyên để chọn một trong nhiều cách nhảy.
Cấu trúc tổng quát của nó là :
{
…
}
Trang 73Cấu trúc lựa chọn Switch Đoạn chương trình nằm giữa các dấu { } gọi là thân của toán tử switch
default là một thành phần không bắt buộc phải có trong thân của
switch.
thức viết trong dấu ngoặc ( ) như sau :
lệnh có nhãn là case ni.
lại phụ thuộc vào sự có mặt hay không của lệnh default như sau :
Trang 74Cấu trúc lựa chọn Switch
}
}
Trang 75Ví dụ 2:Lập chương trình phân loại học sinh theo điểm sử
dụng cấu trúc switch : #include "stdio.h"
Trang 76int n;
printf(" Nhập vào một số nguyên từ 0 đến 2: ");
scanf("%d", &n);
switch(n) {
case 0: printf("Số không\n");
}
Trang 78max = b;
printf(“Phần từ nhất là :%f”, max);
} printf(“\n Co tiep tuc khong, c/k?”);
k= getch();
if (k == ‘c’ || k == ‘C’) goto tt;
}
Trang 79Cấu trúc rẽ nhánh
Một số điểm lưu ý khi dùng lệnh goto
Lệnh goto chỉ cho phép nhảy từ vị trí này đến vị trí khác trong thân của một hàm
vào trong một khối lệnh Việc nhày từ trong ra ngoài khối lệnh lại hoàn toàn hợp lệ.
Trang 80goto alfa
{ alfa: printf(“\n Ket qua tinh toan”);
} }
Trang 81Cấu trúc rẽ nhánh
Bài tập
Giả sử để theo dõi trình độ của cán bộ ta dùng bảng mã sau Viết chương trình để từ mã suy ra trình độ học vấn sử dụng lệnh switch case
Trang 824.1 Cấu trúc rẽ nhánh
4.2 Cấu trúc vòng lặp
CÁC CẤU TRÚC ĐIỀU KHIỂN
Trang 84 Các dấu “;” và cặp ngoặc “(” và “)” là bắt buộc phải có
Ý nghĩa câu lệnh: lệnh for hoạt động theo các bước
1 Tính biểu thức 1.
2 Tính biểu thức 2 Nếu biểu thức 2 có giá trị 0 (sai), máy sẽ ra
khỏi for và chuyển tới câu lệnh sau thân for Nếu biểu thức 2 có giá trị khác 0 (đúng), máy thực hiện các câu lệnh trong thân for, sau đó chuyển tới bước 3.
3 Tính biểu thức 3, sau đó quay trở lại bước 2 để bắt đầu các bước
lặp mới
Trang 85 Các dấu “;” và cặp ngoặc “(” và “)” là bắt buộc phải có
Ý nghĩa câu lệnh: lệnh for hoạt động theo các bước
1 Tính biểu thức 1.
2 Tính biểu thức 2 Nếu biểu thức 2 có giá trị 0 (sai), máy sẽ ra
khỏi for và chuyển tới câu lệnh sau thân for Nếu biểu thức 2 có giá trị khác 0 (đúng), máy thực hiện các câu lệnh trong thân for, sau đó chuyển tới bước 3.
3 Tính biểu thức 3, sau đó quay trở lại bước 2 để bắt đầu các bước
lặp mới
Trang 86int i;
for (i=1; i <=10; i++) printf("%d\n", i); getch();
}
Trang 88Cấu trúc vòng lặp
Chú ý:
lệnh for được lặp đi lặp lại nhiều lần
Để thoát khỏi lệnh for trong trường hợp này phải dùng lệnh break hoặc return
Trang 89Cấu trúc vòng lặp
Lệnh lặp while
while (biểu thức) khối lệnh;
Trong khi biểu thức có giá trị đúng, tức khác 0, thì còn
phải thực hiện khối lệnh Việc lặp dừng lại khi biểu thức
có giá trị sai (bằng 0).
Lệnh while kiểm tra điều kiện trước khi thực hiện khối lệnh
Trang 90s = s + i;
i++;
} printf(“Tổng của %d số tự nhiên đầu tiên là: %d\n”, n, s); getch();
}
Trang 91Cấu trúc vòng lặp
Lệnh While - Chú ý:
“(” và “)” Có thể viết một dãy biểu thức phân cách nhau bởi dấu phầy “,” Tính đúng sai của dãy biểu thức được hiểu là tính đúng sai của biểu thức cuối cùng trong dãy.
dụng for và while khác
phải có giá trị xác định
Trang 94Cấu trúc vòng lặp
Lệnh break
thoát vòng lặp trực tiếp chứa nó
case
Trang 96Cấu trúc vòng lặp
Lệnh lặp continue
hiện lần lặp mới mà không cần thực hiện phần còn lại
Khi gặp câu lệnh continue bên trong thân của lệnh for, máy sẽ chuyển tới bước khởi đầu lại (bước 3 trong điểm
“Sự hoạt động của for”)
Khi gặp câu lệnh continue bên trong thân của while
hoặc do while máy sẽ chuyển tới xác định giá trị biểu thức (viết sau từ khóa while) và sau đó tiến hành kiểm tra điều kiện kết thúc chương trình.
Chú ý: continue chỉ áp dụng cho các chu trình chứ
không áp dụng cho switch
Trang 97Cấu trúc vòng lặp
Lệnh lặp continue
hiện lần lặp mới mà không cần thực hiện phần còn lại
Ví dụ #include <stdio.h>
main() { int i;
for (i=1; i <= 5; i++) {
printf(" Bắt đầu %d\n", i);
printf("Chào bạn\n");
} }
Trang 98printf(“%d”, j);
if (j != 10) continue;
printf(“\n”);
}
Trang 99Cấu trúc vòng lặp
Bài tập
nhiên đầu tiên dùng do … while
khi kí tự nhập vào là “@”
Trang 100CHƯƠNG 5: LẬP TRÌNH CẤU TRÚC VỚI HÀM
1. Khai báo và sử dụng hàm trong C
- Cú pháp khai báo một hàm trong C là như sau
[<kiểu giá trị trả về>] <tên hàm>([<danh sách tham số>,…])
Thân hàm
Trang 101Khai báo và sử dụng hàm trong C
- Khai báo của một hàm được chia làm 2 phần:
Dòng đầu hàm:
[<kiểu giá trị trả về>] <tên hàm>([<danh sách tham số>,…])
Thân hàm: là tập hợp các khai báo và câu lệnh đặt trong cặp dấu ngoặc nhọn
Trang 102Khai báo và sử dụng hàm trong C
Ví dụ sau là khai báo và định nghĩa hàm tính giai thừa của một số nguyên dương Ta quy ước rằng
giai thừa của một số âm thì bằng –1, của 0 bằng 0, của một số nguyên dương a là a! = a × (a-1) ×…× 1.
Trang 103được giá trị đó ta cần phải biết nó thuộc kiểu dữ liệu
gì Kiểu dữ liệu của đối tượng tính toán được hàm
trả về được gọi là kiểu dữ liệu trả về của hàm.
Trang 104Các thành phần của dòng đầu hàm
Tên hàm là có thể là bất kì một định danh hợp lệ nào Tuy nhiên tên hàm nên mang nghĩa gợi ý chức năng công việc mà hàm thực hiện Ví dụ một hàm có chức năng tính và trả về bình phương của một số thực x thì nên có tên là binh_phuong Trong C, các hàm
không được đặt tên trùng nhau.
Tham số của hàm là các thông tin cần cho hoạt động của hàm và các thông tin, kết quả tính toán được hàm trả lại Tức là có những tham số chứa dữ liệu vào cung cấp cho hàm, có những tham số
chứa dữ liệu ra mà hàm tính toán được.
Trang 105Các thành phần của dòng đầu hàm
Lệnh return
Trong chương trình, một hàm được thực hiện khi ta gặp lời gọi
hàm của hàm đó trong chương trình Một lời gọi hàm là tên hàm theo sau bởi các tham số thực trong chương trình Sau khi hàm
thực hiện xong, nó sẽ trở về chương trình đã gọi nó
Sau khi thực hiện tất cả các câu lệnh có trong thân hàm.
Khi gặp lệnh return.
Cú pháp chung của lệnh return là
return biểu_thức;
Trang 1072 Sử dụng hàm
Một hàm sau khi khai báo thì có thể sử dụng Để sử dụng một hàm (hay còn nói là gọi hàm) ta sử dụng cú pháp sau:
<tên hàm> ([danh sách các tham số])
Trang 109Hàm đệ quy
C không những cho phép từ hàm này gọi tới hàm khác, mà nó còn cho phép từ một điểm trong thân của một hàm gọi tới chính hàm
đó Hàm như vậy gọi là hàm đệ qui.
Khi chưa dùng đệ quy hàm có thể được viết như sau:
long int gt(int n) /* Tính n! với n>=0*/
Trang 111Trong trường hợp chung :
uscln(a,b)=uscln(a-b,b) nếu a>b uscln(a,b)=uscln(a,b-a) nếu a<b