



















Preview text:
Bài giảng Lập trình C cơ bản -1-
_________________________________________________________________________________ Lập trình C
Chương 1. Thành phần cơ bản – chương trình
1.1 Giới thiệu
Ngôn ngữ C ra đời từ năm 1972 bởi Brian Kernighan và Dennis Ritchie. Năm 1983, Viện chuẩn hoá
quốc gia Mỹ (ANSI - American National Standards Institute) tiến hành chuẩn hoá. Năm 1989, Tổ chức
chuẩn hoá quốc tế (ISO - International Organization for Standardization) tiếp tục chuẩn hoá và đến năm
1990 thì việc chuẩn hoá được hoàn thành và được gọi là “C chuẩn”. Mọi ngôn ngữ C trước đó được gọi
là C K&R. C là một trong những ngôn ngữ được sử dụng rộng rãi nhất hiện nay.
Từ “C chuẩn”, các hãng phần mềm phát triển thành các ngôn ngữ C riêng như: Microsoft C, Quick C,
Turbo C, Borland C... Năm 1983, với sự phát triển của công nghệ phần mềm, từ “lập trình cấu trúc”
sang “lập trình hướng đối tượng” thì ngôn ngữ C được phát triển thành C++.
1.2 Các thành phần cơ bản trong ngôn ngữ C 1.2.1 Từ khóa
Từ khóa (keyword) là các từ dành riêng của ngôn ngữ C. Từ khóa phải được sử dụng đúng cú pháp
và không được định nghĩa lại. Dưới đây là một số từ khóa thông dụng: auto break case char continue default do double else extern float for goto if int long register return short sizeof static struct switch typedef union unsigned void volatile while 1.2.2 Tên
Tên (identifier) dùng để định danh hay đặt tên cho một thành phần của chương trình, chẳng hạn như
tên biến, tên hằng, tên hàm,...
Tên là một dãy các kí tự gồm các chữ cái (a..z, A..Z), chữ số (0..9) và ký tự gạch nối “_”. Các lưu ý khi đặt tên:
- Bắt đầu bằng một chữ cái hoặc dấu gạch dưới; tên không được bắt đầu bằng một chữ số.
- Tên không được chứa kí tự trống, không được trùng với từ khóa.
_________________________________________________________________________________ GV: Phan Thanh Tao -2016-
Bài giảng Lập trình C cơ bản -2-
_________________________________________________________________________________
Ví dụ các tên hợp lệ: so_sanh, chuong_trinh, batdau, program12; các tên không hợp lệ: trung binh,
1_bien, char, abc$ten. Nên đặt các tên gợi nhớ và có ý nghĩa. 1.2.3 Tên chuẩn
Tên chuẩn là tên đã có sẵn của ngôn ngữ C. Một số tên chuẩn như: printf, sin, sqrt, M_PI, BLUE...
Không cấm việc đặt tên trùng với tên chuẩn nhưng khi đó ý nghĩa của tên chuẩn không còn giá trị nữa.
1.2.4 Hằng, biến, biểu thức
Hằng là đại lượng không đổi trong suốt quá trình thực thi của chương trình. Hằng có thể là một ký tự,
một chuỗi ký tự, một giá trị số xác định. Hằng có thể được biểu diễn hay định dạng với nhiều dạng thức khác nhau.
Hằng số thực dùng dấu chấm thập phân hoặc dạng khoa học.
Hằng ký tự dùng dấu nháy đơn.
Hằng chuỗi kí tự dùng dấu nháy kép. Ví dụ: 123 là hằng số nguyên, 31.2 là hằng số thực, 314e-2
là hằng số thực dạng khoa học và có giá trị 3.14, „a‟ là hằng kí tự, “bai toan” là hằng chuỗi kí tự.
Biến là đại lượng có thể thay đổi được giá trị trong chương trình. Khai báo biến để chương trình dành
riêng vùng nhớ thích hợp cho biến. Chương trình truy cập giá trị của biến thông qua tên của biến.
Biểu thức là một công thức tính toán để có một giá trị theo một qui tắc toán học nào đó. Một biểu
thức bao gồm các toán tử và các toán hạng (có thể là giá trị, biến, hằng số). Khi tính toán thì ưu tiên cho
các biểu thức con trong ngoặc đơn. Ví dụ: (x + y) / z a > b
1.2.5 Dấu ngăn cách câu lệnh, khoảng trống
Dấu “;” dùng để ngăn cách các lệnh, nghĩa là mỗi lệnh hoặc mỗi khai báo đều phải kết thúc bởi một
dấu chấm phẩy “;”. Bản thân “;” là lệnh rỗng.
Khoảng trống được trình biên dịch bỏ qua. Khoảng trống gồm các ký tự: dấu cách (space bar), dấu
tab và dấu sang dòng (Enter).
_________________________________________________________________________________ GV: Phan Thanh Tao -2016-
Bài giảng Lập trình C cơ bản -3-
_________________________________________________________________________________
1.2.6 Lời chú thích
Khi viết chương trình, nên sử dụng các lời chú thích để làm cho chương trình dễ hiểu. Trong chương
trình, các lời chú thích được đặt giữa hai dấu “/*” và “*/”. Ví dụ: /* Day la ham so sanh 2 so */
Lời chú thích không được lồng vào nhau. Ví dụ chú thích sau có lỗi:
/* Dai hoc Da Nang /* Truong DHBK*/ */
1.3 Kiểu dữ liệu chuẩn
Kiểu dữ liệu là một tập hợp các giá trị và các phép toán thực hiện trên các giá trị đó. Các kiểu dữ liệu
có sẵn của ngôn ngữ C gọi là kiểu dữ liệu chuẩn.
1.3.1 Kiểu kí tự - char
Một giá trị kiểu char chiếm một byte và biểu diễn một kí tự trong bảng mã ASCII. Ví dụ: Kí tự Mã ASCII „0‟ 48 „a‟ 65 „A‟ 97
Có hai kiểu char: signed char và unsinged char. Kiểu kí tự Kích thước Miền giá trị (signed) char 1 byte -128 .. 127 unsigned char 1 byte 0 .. 255
1.3.2 Kiểu số nguyên Kiểu số nguyên Kích thước Miền giá trị (signed) int, short (int) 2 byte -32768 .. 32767 unsigned (int) 2 byte 0 .. 65535 (signed) long 4 byte -2147483648 .. 2147483647 unsigned long 4 byte 0 .. 4294967295
Từ khóa short ít dùng vì mặc định của int là short int.
Với các kiểu số nguyên thì mặc định là số nguyên có dấu (signed), để chỉ định số nguyên không dấu
(không có số âm) thì đặt từ khóa unsigned trước tên kiểu với.
Lưu ý: các kiểu kí tự cũng được xem là một dạng của kiểu số nguyên.
Các số trong hệ 16 được viết bởi 10 chữ số và 6 chữ cái là: 0.. 9 và A, B, C, D, E, F.
_________________________________________________________________________________ GV: Phan Thanh Tao -2016-
Bài giảng Lập trình C cơ bản -4-
_________________________________________________________________________________
Hằng cơ số 16: thêm kí tự 0x hoặc 0X vào trước số nguyên ở hệ 16. Ví dụ:
0x41 có giá trị thập phân là 65 0XF
có giá trị thập phân là 15
Hằng cơ số 8: thêm kí tự 0 (số 0) vào trước số nguyên ở hệ 8. Ví dụ: 017
có giá trị thập phân là 15
0101 có giá trị thập phân là 65
Cách biểu diễn số nguyên ở hệ 16 và ở hệ 8 thường được dùng trong lập trình hệ thống.
Ngôn ngữ C luôn mặc định kiểu dữ liệu là int. Ví dụ: 16/5 có giá trị là 3.
Hằng kiểu long thêm L vào sau (chữ cái l thường dễ nhầm với số 1). Ví dụ: 123456L
1.3.3 Kiểu số thực Kiểu số thực Kích thước Miền giá trị float 4 byte 3.4E-38 .. 3.4E+38 double 8 byte 1.7E-308 .. 1.7E+308 long double 10 byte 3.4E-4932 .. 1.1E+4932
Có 2 cách biểu diễn số thực:
Dạng thập phân: dùng dấu chấm để ngăn cách phần nguyên và phần thập phân. Ví dụ: -12.345672 1203.8375
Dạng khoa học: gồm phần định trị và phần mũ của cơ số 10. Hai phần cách nhau bởi chữ E hoặc e. Ví dụ: -6.123E+02 0.9827462E-03 1.3.4 Ép kiểu
Ép kiểu (còn gọi là chuyển kiểu) là chuyển giá trị một toán hạng hoặc một biểu thức có kiểu dữ liệu
này sang kiểu dữ liệu khác. Có hai cách chuyển kiểu: chuyển kiểu tự động và chuyển kiểu tường minh.
Với chuyển kiểu tự động, khi biểu thức thực hiện trên các kiểu dữ liệu khác nhau, ngôn ngữ C tự động
chuyển sang kiểu có kích thước lớn nhất để thực hiện. Ví dụ: 11.2/5 giống như 11.2/5.0.
Với chuyển kiểu tường minh, dùng cú pháp sau:
_________________________________________________________________________________ GV: Phan Thanh Tao -2016-
Bài giảng Lập trình C cơ bản -5-
_________________________________________________________________________________
Cú pháp: (kiểu_mới) biểu_thức
hoặc kiểu_mới (biểu_thức)
Trong cú pháp trên, kiểu_mới là kiểu đích chúng ta cần chuyển đến của biểu_thức cần chuyển kiểu. Ví dụ: i = (int) 2.7; /* i =3 */ n = int(12.3); /* n =12 */ m=2; n = 5; x = float(m)/n; /* x = 2.0/5 = 0.4 */
1.4 Các phép toán
1.4.1 Các phép toán trên số nguyên
Các phép toán trên số nguyên bao gồm: Phép toán Kí hiệu Ví dụ Cộng + 2+5 = 7 Trừ - „A‟-„B‟ = -1 Nhân * 7*3 = 21 Chia lấy phần nguyên / 15 / 2 = 7 Chia lấy phần dư % 17 % 5 = 2
1.4.2 Các phép toán trên số thực
Các phép toán trên số thực bao gồm: cộng (+), trừ (-), nhân (*), chia (/).
1.4.3 Các phép toán so sánh
Một biểu thức chứa các phép so sánh ==, !=, >, <, >=, <= được gọi là một biểu thức so sánh (hay còn
gọi là biểu thức quan hệ). Các toán hạng của một biểu thức so sánh có thể là số nguyên hoặc số thực,
chúng không nhất thiết phải tương thích nhau về kiểu, chương trình tự động chuyển sang kiểu lớn nhất
để so sánh. Kết quả của một biểu thức so sánh có giá trị đúng hoặc sai. Một biểu thức đúng có giá trị 1;
ngược lại, một biểu thức sai có giá trị 0.
Kí hiệu phép toán quan hệ Ý nghĩa == So sánh bằng nhau. != So sánh khác nhau. > So sánh lớn hơn. < So sánh nhỏ hơn. >=
So sánh lớn hơn hoặc bằng. <=
So sánh nhỏ hơn hoặc bằng. Ví dụ:
_________________________________________________________________________________ GV: Phan Thanh Tao -2016-
Bài giảng Lập trình C cơ bản -6-
_________________________________________________________________________________
1+2 <= 3 có giá trị 1 (đúng)
„A‟+1 == „C‟ có giá trị 0 (sai)
1.4.4 Các phép toán logic
Trong ngôn ngữ C, kiểu logic không được định nghĩa một cách tường minh, nó được sử dụng dưới
dạng số. Một giá trị khác 0 được xem là đúng, một giá trị 0 được xem là sai.
Các phép toán logic bao gồm: Phép toán Ý nghĩa Ví dụ && Phép AND
1 < 2 && „A‟ > ‟Z‟ có giá trị sai || Phép OR
0 > 10 || 5 có giá trị đúng ! Phép NOT !5 có giá trị sai
Thứ tự ưu tiên của các phép toán logic: !, &&, ||. Ví dụ:
!3 > 5 = 0 > 5 = 0 (sai) !(3>5) = !0 = 1 (đúng) !!5 = !0 = 1 (đúng)
1.4.5 Các phép toán trên bit
Ngôn ngữ C còn cung cấp cho chúng ta những toán tử để thao tác trên các bit (0 và 1). Các toán tử này bao gồm: Phép toán trên bit Ý nghĩa & Phép AND từng bit | Phép OR từng bit ^ Phép XOR từng bit Phép đảo bit << Phép dịch trái (nhân 2) >> Phép dịch phải (chia 2)
Ví dụ: phép đảo bit của số nguyên 3 (kiểu int) 3 = 0000 0000 0000 0011 ~ 3 = 1111 1111 1111 1100
Quy tắc thực hiện phép AND từng bit là: 0 & 0 = 0 0 & 1 = 0 1 & 0 = 0 1 & 1 = 1
_________________________________________________________________________________ GV: Phan Thanh Tao -2016-
Bài giảng Lập trình C cơ bản -7-
_________________________________________________________________________________ Ví dụ: 3 & 5 0000 0000 0000 0011 = 3 & 0000 0000 0000 0101 = 5
------------------------------- kết quả: 0000 0000 0000 0001 = 1
Qui tắc thực hiện phép OR từng bit là: 0 | 0 = 0 0 | 1 = 1 1 | 0 = 1 1 | 1 = 1
Qui tắc thực hiện phép XOR (eXclusive OR-hoặc tuyển chọn) từng bit là: 0 ^ 0 = 0 0 ^ 1 = 1 1 ^ 0 = 1 1 ^ 1 = 0
Các phép dịch trái (<<) 1 bít tương đương nhân 2, dịch phải (>>) 1 bít tương đương với chia 2. a << n;
/*tương đương với a*(2n)*/ a >> n = a/(2n);
/*tương đương với a/(2n) */
1.5 Cấu trúc chương trình và các khai báo
1.5.1 Khái niệm hàm
Hàm là một đoạn chương trình được viết ra một lần và có thể sử dụng nhiều lần, mỗi lần sử dụng chỉ
cần gọi tên hàm và cung cấp các tham số tương ứng. Khai báo, định nghĩa và sử dụng hàm sẽ được trình
bày cụ thể trong các phần dưới đây.
1.5.2 Cấu trúc chương trình
Một chương trình C thường có cấu trúc như sau:
#include <...> /* Gọi các tệp tiêu đề trong chương trình */
#define ... /* Khai báo hằng số hay còn gọi là macro*/
typedef /* Định nghĩa kiểu dữ liệu */
/* Nguyên mẫu các hàm: khai báo tên hàm và các tham số */
/* Khai báo các biến toàn cục */ main() {
_________________________________________________________________________________ GV: Phan Thanh Tao -2016-
Bài giảng Lập trình C cơ bản -8-
_________________________________________________________________________________ /* Khai báo biến */ /* Các câu lệnh */ }
/* Định nghĩa các hàm */
Như vậy, trong một chương trình C, có thể có nhiều phần khác nhau: khai báo, định nghĩa,... Tất cả
các phần này đều là tùy chọn (có thể có hoặc không có), trừ định nghĩa hàm main( ) bắt buộc phải có.
Hàm main( ) là hàm chính trong một chương trình C, định nghĩa hàm main( ) là bắt buộc.
Ví dụ: chương trình đơn giản nhất. main( ){}
Chương trình này không làm gì cả, nhưng cũng không báo lỗi, bởi vì nó không chứa một câu lệnh nào. 1.5.3 Các khai báo
Trong cấu trúc chung của một chương trình C, có nhiều loại khai báo khác nhau, trong phần này chỉ
giới thiệu một vài khai báo đơn giản, còn các khai báo kiểu và hàm sẽ được trình bày sau.
a) #include Dùng để gọi các tệp tiêu đề vào chương trình, các tệp tiêu đề này chứa các hàm chuẩn
hoặc các hàm do người sử dụng định nghĩa.
Cú pháp: #include
Ví dụ: gọi tệp tiêu đề stdio.h để sử dụng các hàm nhập xuất chuẩn.
#include <stdio.h > b) #define
Dùng để định nghĩa các hằng số hay các macro. Khai báo macro dùng để đặt tên cho
hằng số với mục đích để chương trình dễ hiểu hoặc dễ thay đổi đại lượng truy cập nhiều lần trong chương trình.
Cú pháp: #define tên_macro phần_thay_ thế
Khi biên dịch chương trình, nếu gặp tên_macro thì được thay bởi phần_thay_ thế. Ví dụ: #define MAX 100 #define PI 3.14 Lưu ý:
- Mỗi chỉ dẫn (#) được viết trên một dòng.
- Nếu cuối phần_thay_ thế của macro có dấu “;” thì cũng được xem là một phần của nó. Ví dụ:
_________________________________________________________________________________ GV: Phan Thanh Tao -2016-
Bài giảng Lập trình C cơ bản -9-
_________________________________________________________________________________ #define
BYE printf(“Tạm biệt”);
- Các từ khóa và hàm chuẩn đều là chữ thường; các macro chuẩn là chữ hoa. Ví dụ: sin, log, for, RED, XOR_PUT.
- Nên dùng chữ hoa đặt tên macro.
c) Khai báo biến
Muốn sử dụng một biến, bắt buộc phải khai báo trước khi sử dụng.
Cú pháp: kiểu_dữ_liệu danh_sách _biến; Ví dụ: int a, b;
/* khai báo 2 biến a, b kiểu int */ float x, y, so_thuc;
/* khai báo 3 biến x, y, so_thuc kiểu số thực*/
Lưu ý, khi khai báo biến chúng ta có thể khởi tạo giá trị cho biến như sau: int a, b = 100;
b có giá trị đầu 100, a có giá trị đầu là giá trị ngẫu nhiên.
d) Khai báo biến hằng
Biến hằng là biến trong bộ nhớ nhưng chương trình không được thay đổi.
Cú pháp: const kiểu
tên_hằng = giá_trị_hằng ; Ví dụ: const float PI = 3.14; const MAX = 100;
Chương trình tạo ra biến hằng tên PI trong bộ nhớ và có giá trị 3.14, biến hằng tên MAX kiểu int có giá trị 100.
1.6 Quy tắc viết chương trình
- Các lệnh cùng nhóm nên được nhóm thẳng cột dọc.
- Đặt tên cho các đại lượng nên có tính gợi nhớ, có ý nghĩa.
- Nên viết thêm các lời giải thích bên cạnh lệnh cho rõ. 1.7 Phép gán a) Phép gán đơn
Cú pháp: biến = biểu_thức;
Gán giá trị của biểu_thức cho biến.
_________________________________________________________________________________ GV: Phan Thanh Tao -2016-
Bài giảng Lập trình C cơ bản -10-
_________________________________________________________________________________ Ví dụ: a = 1;
/* biến a nhận giá trị 1 */
b = a + 1; /* biến b nhận giá trị biểu thức a + 1 tức là giá trị 2 */
Biểu thức gán có giá trị là giá trị của biến sau khi gán. Ví dụ: a = b = c = 1;
/* gán giá trị 1 cho cả 3 biến a, b, c */
x = a + (y = 3); /* y nhận giá trị 3, sau đó x nhận giá trị của a + y, nghĩa là x = 4 */
b) Phép gán kết hợp
Cú pháp: tên_biến
pt = biểu_thức;
Lấy giá trị hiện tại của biến thực hiện phép toán pt với biểu thức, được giá trị mới gán trở lại cho biến. Ví dụ: a += 1; /* a=a+1; */ x *= 2+3; /* x=x*5; */
c) Phép tăng/giảm (++/--)
Toán tử “++” đặt trước hoặc sau một biến nguyên để tăng biến một đơn vị. Tương tự, toán tử “--” đặt
trước hoặc sau biến để giảm biến đi 1 đơn vị. Ví dụ:
i++; /* i = i+1 hoặc i+=1; hoặc ++i; */
Nếu đặt trước biến thì giá trị của biến tăng/giảm trước khi thực hiện lệnh. Tương tự, cho đặt sau biến
thì giá trị của biến tăng/giảm sau khi thực hiện lệnh. Ví dụ:
x = 5; y = x++; /* y=5; x=6; */
x = 10; y = --x; /* x=9; y=9; */ Xét phép gán sau: a = 3; b = a + --a;
Như vậy, --a phải được thực hiện trước, sau đó thực hiện b = 2 + 2 = 4.
Lệnh b = a + --a; tương đương với các lệnh: --a; b = a + a;
_________________________________________________________________________________ GV: Phan Thanh Tao -2016-
Bài giảng Lập trình C cơ bản -11-
_________________________________________________________________________________
Câu hỏi và bài tập chương 1 1.
Các tên nào sau đây là hợp lệ?
diemtin, Lop13T, 15X3b, Bach-Khoa, Dai_Hoc, USDto$, La#, diem toan, 3diemtoan,
_diemtoan, -diemtoan, 3a_1, num-odd, int, del ta, f(x) 2.
Các khai báo nào sau đây là hợp lệ? a) int bien n; b) float x, y; c) char do, xanh ; 3.
Với giá trị ch=‟M‟. Cho biết giá trị của các biểu thức sau:
a) ch>=‟A‟ && ch<=‟Z‟
b) ch<‟9‟ && ch >=‟a‟
c) ch!=‟5‟ || ch >‟A‟
d) ch>=‟M‟ && ch<=‟Z‟
e) ch>‟M‟ && ch<=‟Z‟ 4.
Cho biết giá trị của các biểu thức sau: a) 1 + 2/3 – 4*5 b) 2 + 4/5.0 – 1 c) „A‟ + 3 d) „b‟+„A‟– „a‟ e) 5 + 10%10/3 5.
Hãy đặt cặp ngoặc đơn theo thứ tự ưu tiên vào các biểu thức sau:
a) c!=‟$‟ || ch>=‟A‟ && ch<=‟Z‟ || ch>=‟0‟ && ch<=‟9‟ b) a>b%5 & y
c) !!n>3 && k < 7
d) ~ ~ a = = 2 && ~ b = 5 e) x=y=a & b | c f) a+b*c > 1+2*a 6.
Tính giá trị cuối cùng của các biến sau khi thực hiện các lệnh?
a) int a=2, b=3, c; c=a+2*b++; a=5+a--; b=c+++a++;
b) char a=‟A‟, b, c; b=a+2; c=++b-1;
c) int m = -14, n = 6, p; p = m % ++n; n += m++ - p; m <<= (p ^ n) & 3; 7.
Viết biểu thức kiểm tra biến chữ cái ch có phải là chữ hoa hay không. 8.
Giả sử biến chữ cái ch là chữ hoa. Viết lệnh đổi ch sang chữ thường. 9.
Giả sử biến chữ cái ch là chữ thường. Viết lệnh đổi ch sang chữ hoa.
10. Viết biểu thức kiểm tra biến ký tự ch có phải là chữ cái hay không.
_________________________________________________________________________________ GV: Phan Thanh Tao -2016-
Bài giảng Lập trình C cơ bản -12-
_________________________________________________________________________________
11. Viết biểu thức kiểm tra biến ký tự num có phải là chữ số hay không.
12. Viết biểu thức kiểm tra biến ký tự op có phải là phép toán (+,-,*,/,^,~) hay không.
13. Viết biểu thức kiểm tra biến ký tự ch có phải là chữ cái hoặc chữ số hay không.
14. Năm nhuận (có ngày 29/2) là năm chia hết cho 4 mà không chia hết cho 100 hoặc chia hết cho
400. Viết biểu thức kiểm tra năm n có phải là năm nhuận hay không.
_________________________________________________________________________________ GV: Phan Thanh Tao -2016-
Bài giảng Lập trình C cơ bản -13-
_________________________________________________________________________________
Chương 2. Lệnh nhập xuất
2.1 Lệnh printf
Lệnh printf cho phép hiển thị nội dung ra màn hình. Ví dụ, một chương trình đơn giản sử dụng lệnh printf. #include main() { printf(“Chao ban.\n”); } Cú pháp:
printf(chuỗi_định_dạng [, danh_sách_biểu_thức]);
In ra màn hình chuỗi_định_dạng cùng các giá trị của danh_sách_biểu_thức đặt tương ứng vào các vị
trí có chỉ định kiểu in ra với ký hiệu “%”. Ví dụ:
printf(“Nghiem cua phuong trinh bac 2 la: x1 = %f, x2 = %f\n”, x1, x2);
Trong đó “%f ” là kí tự định dạng cho phép in ra giá trị của một số thực, “\n” là kí tự điều khiển sang dòng mới.
Dưới dây là một số chuỗi kí tự định dạng thường sử dụng: Ký tự Ý nghĩa %c
In ra một kí tự kiểu char %d, %i
In ra số nguyên thập phân kiểu int %u
In ra số nguyên không dấu kiểu unsigned int %ld
In ra số nguyên kiểu long %lu
In ra số nguyên kiểu unsigned long %f
In ra số thực với phần thập phân mặc định có 6 chữ số %s In ra chuỗi kí tự %x, %X
In ra số nguyên dưới dạng cơ số 16 (hexadecimal) %o
In ra số nguyên dưới dạng cơ số 8 (octal) %e, %E, %g, %G
In ra số thực dạng khoa học Ví dụ:
In kí tự %c và số nguyên %d:
_________________________________________________________________________________ GV: Phan Thanh Tao -2016-
Bài giảng Lập trình C cơ bản -14-
_________________________________________________________________________________
printf(“%c va %c co ma ASCII tuong ung la %d va %d\n”, „a‟, „A‟, „a‟, „A‟);
Kết quả trên màn hình là:
a và A co ma ASCII tuong ung la 97 va 65
Lưu ý: kiểu kí tự char được xem là kiểu số nguyên. Tùy vào chuỗi định dạng được sử dụng mà kết
quả in ra là ký tự hay số.
In số nguyên dưới dạng biểu diễn cơ số 16 và cơ số 8:
printf(“Số %d có dạng cơ số 16 là %x hoặc %X có dạng cơ số 8 là %o\n”, 90, 90, 90);
Kết quả in ra màn hình là:
Số 90 có dạng cơ số 16 là 5a hoặc 5A có dạng cơ số 8 là 132
Để in ra số thực, ra dùng chuỗi định dạng %f: printf(“%f”, x);
Nếu x = 12.345, kết quả in ra là 12.345000 với phần thập phân mặc định là 6 chữ số; nếu x =
12.34567890, kết quả in ra là 12.345679 với phần thập phân bị làm tròn.
Có thể chỉ định canh cột tiếp sau ký tự “%”. Nếu số cột canh lề lớn hơn độ dài của biểu thức thì canh
lề phải; là số âm thì canh lề trái; bằng 0 thì không canh lề. Để dễ đếm các kí tự, chúng ta sẽ sử dụng kí tự
để chỉ ra ký tự trống. Ví dụ:
printf(“|%5d|%-5c|%s|”, 123, „A‟,”ABC”);
Cho kết quả là: | 123|A |ABC|
Với số thực, có thể chỉ định thêm “%n.d” để canh n cột và lấy d chữ số thập phân. Ví dụ:
printf(“|%6.2f|”, x); nếu x = 12.348 kết quả in ra là |12.35| nếu x = 123.456 kết quả in ra là |123.46| Ví dụ:
printf(“|%0.2f|”, x); nếu x = 12.348 kết quả in ra |12.35|
Trong chuỗi định dạng có thể dùng các ký tự điều khiển sau Ký tự Ý nghĩa \n Điều khiển sang dòng \b Lùi một cột
_________________________________________________________________________________ GV: Phan Thanh Tao -2016-
Bài giảng Lập trình C cơ bản -15-
_________________________________________________________________________________ \t Khoảng tab \\ In ra ký tự \ \‟ In ra ký tự ‟ \” In ra ký tự ” Ví dụ:
printf(“Xin chao!\nTam biet!”); Kết quả là: Xin chao! Tam biet!
2.2 Lệnh scanf
Lệnh scanf cho phép nhập dữ liệu vào từ bàn phím. Ví dụ sử dụng lệnh scanf. #include main() { float r, dien_tich;
printf(“Nhập vào bán kính: ”); scanf(“%f”, &r); dien_tich = 3.14 * r * r;
printf(“Diện tích là: %f\n”, dien_tich); return; }
Lệnh scanf có cách sử dụng gần giống với lệnh printf tuy nhiên lệnh printf dùng để hiện thị còn
lệnh scanf thì dùng để nhập dữ liệu vào. Cú pháp của lệnh scanf như sau:
scanf(chuỗi_định_dạng [, danh_sách_địa_chỉ]);
chuỗi_định_dạng chỉ định kiểu dữ liệu nhập vào cho các biến tương ứng trong danh_sách_địa_chỉ,
dùng ký tự “%” như với lệnh printf. Dấu “&” đặt trước một biến để lấy địa chỉ của biến.
Nên dùng lệnh printf trước lệnh scanf để hiển thị thông báo thông tin cần nhập.
Các giá trị nhập vào cách nhau khoảng trống, nhập xong ấn Enter (ký hiệu được dùng để chỉ ấn Enter)
Ví dụ: Nhập vào 2 số nguyên, tính tổng và tích của chúng. #include main() {
_________________________________________________________________________________ GV: Phan Thanh Tao -2016-
Bài giảng Lập trình C cơ bản -16-
_________________________________________________________________________________ int a, b, tong;
printf(“Nhập vào 2 số: ”);
scanf(“%d%d”, &a, &b); tong = a + b;
printf(“Tổng a+b = %d\n Tích ab = %d”, tong, a*b); getchar(); } Nếu nhập như sau:
Nhập vào 2 số: 5 10
thì 5 gán cho a, 10 gán cho b nhưng ký tự vẫn còn trong vùng đệm bàn phím. Vì vậy, lệnh getchar(
) không có tác dụng chờ xem kết quả. Có thể dùng 2 lần lệnh getchar() hoặc xóa ký tự trong vùng
đệm bằng cách thêm ký hiệu “%*c” trong chuỗi điều khiển như:
scanf(“%d%d%*c”, &a, &b);
2.3 Một số tệp tiêu đề chuẩn
Trong C có rất nhiều tệp tiêu đề, đây là nơi chứa các khai báo và định nghĩa cho các hàm đã được xây
dựng sẵn. Các hàm này được gộp lại theo chức năng vào các tệp tiêu đề khác nhau.
Hàm chuẩn là một số hàm đã được khai báo và định nghĩa sẵn bởi Ngôn ngữ C mà chúng ta có thể sử
dụng. Để sử dụng các hàm chuẩn, thông thường chúng ta phải sử dụng #include để chỉ cho chương trình
biết các hàm chuẩn đó được chứa trong tệp tiêu đề nào.
2.3.1 Tệp tiêu đề stdio.h
Tệp tiêu đề stdio.h chứa các hàm vào ra chuẩn, ví dụ như các hàm printf() và scanf() trình bày ở trên.
int getchar( ); nhận một kí tự nhập từ bàn phím.
2.3.2 Tệp tiêu đề conio.h
void clrscr( ); Xóa màn hình.
int getch( ); Nhận một kí tự nhập từ bàn phím, không hiện ký tự trên màn hình.
int getche( ); Nhận một kí tự nhập từ bàn phím, có hiện ký tự trên màn hình.
int kbhit(void); Kiểm tra trạng thái có nhấn phím. Nếu có nhấn phím thì trả về 1; ngược lại, trả về 0.
void textbackground(int c); Đặt màu nền là màu c. Các hằng màu có giá trị 0..15.
void textcolor(int c); Đặt màu chữ là màu c.
int wherex(void); Lấy hoành độ hiện thời. Giá trị trả về trong 1..80.
int wherey(void); Lấy tung độ hiện thời. Giá trị trả về trong 1..25.
void gotoxy(int x, int y); Di chuyển đến toạ độ (x,y). Màn hình mặc định là 80x25.
_________________________________________________________________________________ GV: Phan Thanh Tao -2016-
Bài giảng Lập trình C cơ bản -17-
_________________________________________________________________________________
2.3.3 Tệp tiêu đề stdlib.h
void randomize(); Khởi động bộ tạo số ngẫu nhiên, phải gọi trước hàm rand().
int random(int n); Lấy một số nguyên ngẫu nhiên trong khoảng từ 0..n-1.
int rand( ); Lấy một số nguyên ngẫu nhiên trong khoảng từ 0.. RAND_MAX -1.
RAND_MAX=32767. Giống như gọi random(RAND_MAX);
2.3.4 Tệp tiêu đề math.h
int abs(int x); Hàm trị tuyệt đối số nguyên x kiểu int.
double fabs(double x); Hàm trị tuyệt đối số thực x
long labs(long x); Hàm trị tuyệt đối số nguyên x kiểu long
double ceil(double x); Hàm làm tròn trên. Lấy giá trị nguyên nhỏ nhất >=x.
double floor(double x); Hàm làm tròn dưới. Lấy giá trị nguyên lớn nhất <=x.
double sqrt(double x); Hàm căn bậc 2 đối số x, ( x ). y
Các hàm cos(x), sin(x), tg(x), arccos(x), arcsin(x), arctg(x), arctg( ) là x
double cos(double x);
double sin(double x);
double tan(double x);
double acos(double x);
double asin(double x);
double atan(double x);
double atan2(double y, double x);
double exp(double x); Hàm ex
double pow(double x, double y); Hàm xy.
double log(double x); Hàm ln(x).
double log10(double x); Hàm log10(x).
_________________________________________________________________________________ GV: Phan Thanh Tao -2016-
Bài giảng Lập trình C cơ bản -18-
_________________________________________________________________________________
Câu hỏi và bài tập chương 2
1. Nhập vào một số nguyên n (32 n 255) và in ra ký tự có mã ASCII là n.
2. Cho biết kết quả in ra màn hình của lện sau :
printf(“%c, %d, %o, %x, %0.2f ”, 65, 65, 65, 65, 65);
3. Viết chương trình nhập giờ h, phút m và giây s hiện tại và nhập số nguyên dương n. In ra màn
hình giờ, phút, giây sau n giây.
4. Viết chương trình nhập bán kính R và xuất ra màn hình diện tích S và chu vi L của hình tròn.
(diện tích S = R2 và chu vi L = 2R)
5. Viết chương trình nhập bán kính R và xuất ra màn hình thể tích V và diện tích S của hình cầu.
(thể tích V = 4R3/3 và diện tích S = 4R2)
6. Viết chương trình nhập chiều dài L và chiều rộng W và xuất ra màn hình diện tích D và chu vi
C của hình chữ nhật (D = L*W và C = 2(L+W)).
7. Viết chương trình nhập ba số a, b, c là chiều dài của ba cạnh của một tam giác. Tính diện tích
S của tam giác này theo công thức a b c S= p ( p a p )( p )( b )
c , trong đó p là nửa chu vi hay p= 2
8. Viết chương trình nhập số thực x và tính giá trị các hàm một biến sau: 3 x 2 + x5 + ln(x 4 + ) 1 a) f(x)= π x 2 + 4 x 3 + log (| x - 3 | ) 2 + b) g(x)= 5 arctg 2 (x - ) 5 +1
9. Viết chương trình nhập hai số thực x, y và tính giá trị các hàm hai biến sau: 3 x 2 + y2 log (x 2 + y 4 + ) 1 a) f(x,y)= 5 π tg 2 (x + y) + 2 e x+y + ln(| x 2 - y | ) 5 + b) g(x,y)= cos(x + y) - sin(x) + 3
10. Viết chương trình nhập đáy trên a, đáy dưới b và chiều cao h của một hình thang. Tính diện
tích và chu vi của hình thang này.
_________________________________________________________________________________ GV: Phan Thanh Tao -2016-
Bài giảng Lập trình C cơ bản -19-
_________________________________________________________________________________
Chương 3. Lệnh điều kiện 3.1 Lệnh if
Lệnh if là một lệnh điều kiện cơ bản, chúng ta có thể tìm thấy trong tất cả các ngôn ngữ lập trình.
Lệnh if cho phép lựa chọn việc thực thi khối lệnh của một trong hai nhánh tuỳ thuộc vào giá trị đúng hay
sai của biểu thức điều kiện. Cú pháp
if (biểu_thức) lệnh_1; [else lệnh_2;]
Ý nghĩa của câu lệnh
Nếu biểu_thức đúng (có giá trị khác không) thì lệnh_1 được thực hiện; nếu biểu_thức sai (có giá trị
bằng không) thì lệnh_2 được thực hiện.
Trường hợp biểu_thức sai và không có lệnh_2 thì câu lệnh không làm gì.
Sơ đồ khối biểu diễn câu lệnh Bắt đầu Sai Biểu thức Đúng Lệnh 1 Lệnh 2 Bắt đầu
Hình 1. Lưu đồ thuật toán lệnh if
Ví dụ 1: Tính giá trị lớn nhất của hai số nguyên a và b.
/* Chuong trinh tinh gia tri lon nhat cua hai so nguyen a va b */ #include main()
_________________________________________________________________________________ GV: Phan Thanh Tao -2016-
Bài giảng Lập trình C cơ bản -20-
_________________________________________________________________________________ int a, b, max;
printf(“Nhap vao hai so nguyen a va b.\n”); printf(“a = ”); scanf(“%d”, &a); printf(“b = ”); scanf(“%d”, &b); if (a > b) max = a; else max = b;
printf(“max = %d\n”, max);
Ví dụ 2: Kiểm tra một số nhập vào có phải là số âm hay không. #include main() int a; printf(“Nhap a vao:”); scanf(“%d”, &a); if (a < 0)
printf(“Gia tri nhap vao la so am.\n”);
printf(“Ket thuc chuong trinh\n”); Lưu ý:
Cặp ngoặc đơn sau if là bắt buộc.
Cần phân biệt phép so sánh “= =” với phép gán “=”. Ví dụ: a=0; if (a=0) printf(“zero”); else printf(“not zero”);
Kết quả là: not zero
Trong biểu thức ở ví dụ trên, sau if, (a=0) sẽ gán giá trị 0 cho a và biểu thức (a=0) có giá trị 0 là sai
nên lệnh printf(“not zero”); được thực hiện.
3.2 Khối lệnh
Khối lệnh là một nhóm các lệnh được thực hiện cùng nhau ứng với một điều kiện cho trướng. Trong
ngôn ngữ C, các lệnh của khối lệnh được đặt trong cặp ngoặc móc, “{” và “}”.
_________________________________________________________________________________ GV: Phan Thanh Tao -2016-