Tải bản đầy đủ (.pdf) (64 trang)

pdf bài giảng lập trình 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 (423.23 KB, 64 trang )

24/09/2016

Giảng viên:

TS. Cao Thanh Sơn
Khoa CNTT - Trường Đại học Vinh

(Dựa theo bài giảng của NCS. Trần Thị Kim Oanh
Phó trưởng khoa CNTT - Trường Đại học Vinh)
0

Tài liệu
Bài giảng điện tử
Trần Thị Kim Oanh, Cao Thanh Sơn, Giáo trình Ngôn
ngữ lập trình C, NXB Đại học Vinh, 2015

1

Nội dung
Chương 1: Các kiến thức bổ trợ
Chương 2: Một số khái niệm cơ bản của NNLT C
Chương 3: Các cấu trúc lập trình
Chương 4: Con trỏ và mảng
Chương 5: Hàm
Chương 6: Dữ liệu kiểu cấu trúc
Chương 7: Dữ liệu kiểu tệp
2

1



24/09/2016

Chương 1

Các kiến thức bổ trợ
Khái niệm Thông tin - Tin học
Đơn vị đo thông tin
Các hệ cơ số đếm
Thuật toán - Biểu diễn thuật toán
Khái niệm ngôn ngữ lập trình
Khái niệm chương trình
Lỗi lập trình
Tự học
3

Khái niệm Thông tin – Tin học
Khái niệm thông tin: Là những yếu tố mang đến cho ta sự hiểu
biết về một đối tượng nào đó.
Tính chất của thông tin: Tính quy luật, tính tổ chức, tính mới
mẻ, tính thời sự, tính bất ổn định.
Khái niệm tin học: Là bộ môn khoa học chuyên nghiên cứu
cách thu thập, tổ chức, lưu trữ và xử lý thông tin bằng các thiết
bị tự động mà chủ yếu là bằng máy tính.

4

Các đơn vị đo thông tin
+ bit: Một vị trí chiếm chỗ của ký hiệu 0 hoặc 1 trong dòng
thông tin được gọi là 1 bit.
+ Byte = 8 bits

+ KB (Kilo Byte) = 1024 Bytes (210 Byte)
+ MB (Mega Byte) = 1024 KBs (210 KB)
+ GB (Giga Byte) = 1024 MBs
+ TB (Tera Byte) = 1024 GBs

5

2


24/09/2016

Các hệ cơ số đếm
Hệ cơ số 2: Sử dụng 2 ký hiệu 0, 1 để biểu diễn các số
Hệ cơ số 8: Sử dụng 8 ký hiệu 0, 1, 2, 3, 4, 5, 6, 7 để biểu diễn
các số
Hệ cơ số 10: Sử dụng 10 ký hiệu 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 để
biểu diễn các số
Hệ cơ số 16: Sử dụng 16 ký hiệu 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A,
B, C, D, E, F để biểu diễn các số
6

Các hệ cơ số đếm
Dạng tổng quát:
anan-1...a1a0. a-1a-2...a-m

Dạng khai triển:
an *Xn + an-1*Xn-1 +...+a1*X1 +a0*X0 + a-1*X-1 + a-2 *X-2 +...+a-m*X-m

X là cơ số.


7

Chuyển đổi giữa các hệ cơ số đếm
Chuyển đổi các số từ hệ cơ số 10 sang hệ cơ số 2, 8, 16
Chuyển đổi số từ hệ cơ số 2, 8, 16 sang hệ cơ số 10
Các phép toán trên các hệ cơ số đếm

8

3


24/09/2016

Thuật toán
Thuật toán được hiểu là một dãy hữu hạn các thao tác để giải
quyết một lớp các bài toán sao cho khi có dữ liệu vào xác định
thì cho kết quả ra xác định.
Có nhiều cách biểu diễn thuật toán nhưng cách trực quan nhất là
sử dụng lưu đồ thuật toán, nghĩa là sử dụng các khối để biểu
diễn thuật toán.

9

Thuật toán
Các khối dùng trong lưu đồ:
Khối bắt đầu/kết thúc
Khối nhập/xuất dữ liệu
Khối tính toán

Khối gọi chương trình con
Điều
kiện

Khối điều kiện

đúng

sai

Mũi tên liên kết các khối
10

Thuật toán
Ví dụ: Biểu diễn thuật toán giải phương trình bậc nhất ax + b = 0
Bắt đầu
Nhập a, b
a=0
sai
x=-b/a

đúng

b=0

đúng

sai
Thông báo ptvn


Kết thúc

Thông báo ptvsn

11

4


24/09/2016

Chương trình
Ngôn ngữ dùng để mô tả thuật toán sao cho máy tính có thể hiểu
được thì gọi là ngôn ngữ lập trình.
Dùng ngôn ngữ lập trình để diễn tả thuật toán thì được chương
trình, chương trình này được gọi là chương trình nguồn. Chương
trình dịch sẽ phải dịch chương trình nguồn ra chương trình mã
máy.
Chương trình dịch
Chương trình nguồn
Chương trình mã mãy
12

Lỗi lập trình
Khi biên dịch và chạy chương trình có thể xuất hiện 2 loại lỗi là Lỗi
cú pháp và Lỗi thuật toán.
Lỗi cú pháp (Syntax Error): Lỗi thuộc quy định về mặt cú
pháp của ngôn ngữ lập trình: lỗi về từ khoá, lỗi về tên, lỗi về cấu
trúc lệnh, lỗi về kiểu dữ liệu,…Tất cả những lỗi này sẽ được
máy phát hiện khi dịch chương trình.

Lỗi thuật toán (Logic Error): Là những lỗi thuộc trách nhiệm
của người lập trình mà máy không thể phát hiện được. Do vậy,
yêu cầu khi chương trình chạy và cho kết quả, người lập trình
phải biện luận lại kết quả xem đã chính xác hay chưa.

13

Tự học
1. Chuyển số thực từ hệ đếm cơ số 10 sang hệ đếm cơ số 2, 8, 16.
2. Chuyển trực tiếp một số từ hệ đếm cơ số 2 sang hệ đếm cơ số 8,
16; hệ đếm cơ số 8, 16 sang hệ đếm cơ số 2 không thông qua
trung gian hệ 10.
3. Phép nhân, chia các số ở hệ đếm cơ số 2, 8, 16.
4. Vẽ lưu đồ một số thuật toán: Giải phương trình bậc hai, tìm
max, min hai số, tìm max, min ba số.
5. Tìm hiểu bảng mã chuẩn ASCII.
14

5


24/09/2016

Chương 2

Một số khái niệm cơ bản của NNLT C
Giới thiệu NNLT C
Ký pháp NNLT C
Cấu trúc chương trình viết bằng NNLT C
Một số ví dụ đơn giản

Soạn thảo, dịch và chạy chương trình viết bằng NNLT C
Các kiểu dữ liệu cơ sở
Biến - Hằng - Lệnh gán đơn giản
Biểu thức và các phép toán
Khối lệnh
Một số hàm số học xây dựng sẵn
15
Các hàm xuất/nhập dữ liệu

Giới thiệu ngôn ngữ lập trình C
Lịch sử ra đời:
- Ngôn ngữ lập trình C do Dennis Ritchie đưa ra vào năm
1972.
- Ông đã tham khảo nhiều ngôn ngữ B, do đó ông đặt tên
ngôn ngữ lập trình của ông là ngôn ngữ lập trình C.

16

Giới thiệu ngôn ngữ lập trình C
Đặc điểm của ngôn ngữ C:
- NNLT C là ngôn ngữ mạnh và linh hoạt, được sử dụng trong
nhiều dự án khác nhau.
- NNLT C có khả năng tương thích trên nhiều loại máy khác
nhau.
- Cú pháp của NNLTC ngắn gọn, súc tích.
- NNLT C là ngôn ngữ lập trình có cấu trúc.
17

6



24/09/2016

Giới thiệu ngôn ngữ lập trình C
- Là ngôn ngữ lập trình bậc cao nhưng NNLT C lại có những
đặc điểm của ngôn ngữ lập trình bậc thấp Assembly và chạy
nhanh gần bằng Assembly.
- NNLT C có rất nhiều hàm xây dựng sẵn, được khai báo trong
các thư viện chuẩn.

18

Ký pháp ngôn ngữ lập trình C
Bộ ký tự:
- 26 chữ cái in hoa A .. Z, 26 chữ cái in thường a .. z
- 10 chữ số từ 0 .. 9
- Các ký hiệu toán học + - * / = >

<( )

- Ký tự gạch nối _
- Các ký tự đặc biệt . , ; : [ ] { } | ! \ & % # $ ' “ ? ~ ^

19

Ký pháp ngôn ngữ lập trình C
Các từ khoá:
asm, break, case, char, const, continue, default, do, double,
else, enum, extern, far, float, for, goto, huge, if, int, long, near,
pascal, register, return, short, static, struct, signed, nzeof, switch,

typedef, union, unsigned, void, volatile, while, include, define, ...
Lưu ý:
Trong chương trình từ khoá luôn luôn phải viết thường.
Ngôn ngữ lập trình C phân biệt chữ hoa và chữ thường.
20

7


24/09/2016

Ký pháp ngôn ngữ lập trình C
Tên:
Tên dùng để đặt cho biến, hằng, hàm, mảng, con trỏ, tệp...
Quy tắc đặt tên:
• Là một dãy các ký tự có thể bao gồm chữ cái, chữ số và dấu
gạch nối.
• Ký tự đầu tiên của tên phải là chữ cái hoặc dấu gạch nối.
• Tên không được trùng với từ khoá.
Ví dụ về cách đặt tên:
- Các tên đúng: x1, a_1, delta, _delta
- Các tên sai: 3x, r#3, f(x), case, del ta

21

Ký pháp ngôn ngữ lập trình C
Câu lệnh:
- Câu lệnh đơn
- Câu lệnh ghép
- Câu lệnh có cấu trúc

Dấu chấm phẩy (;):
Dấu chấm phẩy dùng để ngăn cách giữa các câu lệnh
Lời giải thích:
Lời giải thích được đặt giữa cặp dấu /* và */
// giải thích đến hết dòng

22

Cấu trúc của chương trình viết bằng NNLT C
Cấu trúc của một chương trình C bao gồm 4 phần sau:
<1> Khai báo các thư viện
<2> Định nghĩa các kiểu, biến tổng thể
<3> Định nghĩa các hàm
<4> Định nghĩa hàm main
Tất cả các chương trình viết bằng NNLT C đều được xây dựng
từ các chương trình con.
Các chương trình con này được gọi là các hàm.
Số lượng các hàm trong một chương trình là không hạn chế
nhưng bắt buộc phải có một hàm chính với tên quy định là main.
23

8


24/09/2016

Cấu trúc của chương trình viết bằng NNLT C
Lưu ý:
Đối với những chương trình đơn giản thì phần <2> và phần
<3> có thể không có nhưng phần <1> và phần <4> luôn

luôn phải có trong bất cứ chương trình nào.
Việc khai báo các thư viện thường đặt ở đầu chương trình
theo cú pháp: #include <tên thư viện>
Thư viện chuẩn là các tệp *.h

24

Một số ví dụ đơn giản đầu tiên
Ví dụ 1:

In ra màn hình câu chào Hello

#include <stdio.h>
#include <conio.h>
int main()
//ham chinh
{
printf("hello"); //ham xuat du lieu ra man hinh
getch();
//ham dung man hinh ket qua
return 0; //lenh tra ve gia tri cho ham main
}

25

Môi trường lập trình
Microsoft Visual C++ 2010 Express
Dev C++

26


9


24/09/2016

Các kiểu dữ liệu cơ bản
Kiểu ký tự
TT
Tên kiểu
1 char (signed char)
2

unsigned char

Số byte
Miền giá trị
1
-128 .. 127
1

0 .. 255

Kiểu số nguyên
TT
1
2
3
4


Tên kiểu
int
unsigned int
long (long int)
unsigned long

Số byte
2
2
4
4

Miền giá trị
-32768 .. 32767
0 .. 65535
-2147483648 .. 2147483647
27
0.. 4294967295

Các kiểu dữ liệu cơ bản
Kiểu số thực
TT
Tên kiểu
1 float
2 double
3 long double

Số byte
Miền giá trị
4

3.4e-38 .. 3.4e+38
8
1.7e-308 .. 1.7e+308
10
3.4e-4932 .. 1.1e+4932

28

Biến - Hằng - Lệnh gán đơn giản
Biến: Biến là một cấu trúc ghi nhớ dữ liệu
Cách khai báo:

Kiểu

Ví dụ:

int n;

Danh sách biến;

float a, b, c;
Có thể vừa khai báo vừa khởi tạo giá trị ban đầu cho biến
Ví dụ:

int n = 10;
float a=3.14, b=123.45, c;
29

10



24/09/2016

Biến - Hằng - Lệnh gán đơn giản
Biến có thể được khai báo ở một trong ba vị trí sau trong
chương trình:
• Ngoài tất cả các hàm (kể cả hàm main) và được gọi là biến
tổng thể.
• Trong một hàm nào đó (kể cả hàm main) và được gọi là biến
địa phương.
• Làm tham số hình thức cho hàm.

30

Biến - Hằng - Lệnh gán đơn giản
Hằng: Hằng là đại lượng mà giá trị của nó không thay đổi
trong quá trình tính toán.
• Hằng số nguyên: Các hằng loại này có thể khai báo dưới
dạng cơ số 2, cơ số 8, cơ số 10 hay cơ số 16.
• Hằng số thực:
- Cách 1: Dạng thập phân
chẳng hạn: 3.14; -123.4
- Cách 2: Dạng dấu phẩy động
chẳng hạn: 314E-2; -1234E-1;
31

Biến - Hằng - Lệnh gán đơn giản
• Hằng ký tự:
• Một số hằng ký tự đặc biệt:
- Là một ký tự được viết trong

Hằng
Ý nghĩa
cặp dấu nháy đơn, chẳng hạn
'\''
'
'\"'
"
'a'.
'\\'
\
- Giá trị của hằng ký tự chính
'\n'
Xuống dòng
là mã ASCII của ký tự đó.
'\t'
Tab
- Hằng ký tự có thể tham gia
'\b'
BackSpace
vào các phép toán như mọi
'\r'
Về đầu dòng
số nguyên khác.
'\f'

Sang trang

'\0'

NULL

32

11


24/09/2016

Biến - Hằng - Lệnh gán đơn giản
• Hằng xâu ký tự:
Là dãy ký tự bất kỳ đặt trong cặp dấu nháy kép.
Chẳng hạn:
"Nguyen Van An"
"" /*xâu rỗng*/
Xâu ký tự được lưu trữ trong máy dưới dạng một mảng một
chiều, mỗi phần tử là một ký tự của xâu. Trình biên dịch tự động
thêm ký tự NULL vào cuối mỗi xâu để báo hiệu kết thúc xâu.
Lưu ý: Cần phân biệt giữa 'a' và "a"
'a' : Là hằng ký tự được lưu trữ trong 1 byte.
"a": Là hằng xâu ký tự được lưu trữ trong 2 bytes.
33

Biến - Hằng - Lệnh gán đơn giản
• Khai báo hằng:
#define tên_hằng giá _trị
Ví dụ:
#define
max 1000
#define
xau "hello"
Lệnh gán đơn giản:

tên_biến = biểu_thức;
Ví dụ:
char ch;
int x;

ch = 'A';
x = 100;
34

Biểu thức và các phép toán
Biểu thức:
Là sự kết hợp giữa phép toán và toán hạng nhằm diễn đạt một
công thức toán học nào đó. Trong đó, toán hạng có thể là biến,
hằng, hàm, phần tử mảng hay biểu thức.
Các phép toán:
• Các phép toán số học:
+ * / %
Lưu ý:
Nếu số bị chia và số chia đều là số nguyên thì phép chia
(/) trở thành phép chia nguyên.
35
Phép chia dư ( %) chỉ dùng cho số nguyên.

12


24/09/2016

Biểu thức và các phép toán
• Các phép toán quan hệ:


>

>=

<

<=

== !=

Các phép toán quan hệ dùng để tạo các biểu thức quan hệ.
Nếu biểu thức đúng thì giá trị của biểu thức là 1, ngược lại, giá trị
của biểu thức là 0.
Ví dụ:

a = (5>10) /* a == 0 */
b = (4>-1)

/* b == 1*/

Lưu ý: Các biểu thức quan hệ có thể tham gia vào các phép
toán đối với số nguyên.
36

Biểu thức và các phép toán
• Các phép toán logic:
&& (phép Và); || (phép Hoặc), ! (phép Phủ định)
Ý nghĩa:
a

Khác 0
Khác 0
Bằng 0
Bằng 0

b
Khác 0
Bằng 0
Khác 0
Bằng 0

Ví dụ:

a && b
1
0
0
0

a = (7>5) && (9>-10)
b = 3 && 8
c = !6

a || b
1
1
1
0

!a

0
0
1
1

/* a==1*/
/* b==1*/
/* c==0*/

37

Biểu thức và các phép toán
• Các phép thao tác bit:
&
|
^
~
<<
>>

Phép Và theo bit
Phép Hoặc theo bit
Phép Hoặc loại trừ theo bit
Phép Lấy phần bù theo bit
Phép Dịch trái
Phép Dịch phải

Ý nghĩa:
1&1=1
1&0=0

0&1=0
0&0=0

1|1=1
1|0=1
0|1=1
0|0=0

1^1=0
1^0=1
0^1=1
0^0=0

~1 = 0
~0 = 1

a << n = a * 2n
a >> n = a / 2n
38

13


24/09/2016

Biểu thức và các phép toán
Ví dụ:

unsigned char a, b;
a = 10

0 0 0
b=4
0 0 0
a&b
0 0 0
a|b
0 0 0
a^b
0 0 0
~a
1 1 1
a<<1
0 0 0
a>>1
0 0 0

0
0
0
0
0
1
1
0

1
0
0
1
1

0
0
0

0
1
0
1
1
1
1
1

1
0
0
1
1
0
0
0

0
0
0
0
0
1
0
1

39

Biểu thức và các phép toán
• Các phép chuyển đổi kiểu giá trị:
- Phép chuyển đổi kiểu trong biểu thức:
Hai toán hạng trong một phép toán có kiểu khác nhau thì kiểu
thấp hơn sẽ chuyển thành kiểu cao hơn và đó chính là kiểu kết quả.
Ví dụ:
1.5 * (8/3) == 3.0
- Phép chuyển đổi kiểu thông qua phép gán:
Giá trị vế phải được chuyển sang kiểu của vế trái, đó là kiểu
kết quả.
Ví dụ:
int n = 3.14; /* n==3*/
40

Biểu thức và các phép toán
- Phép ép kiểu:
(kiểu)biểu_thức;
Ví dụ:
float a;
(int)a sẽ có giá trị nguyên
a = (float)8/3; /* a==2.666667 */
• Các phép toán tăng giảm:
Để tăng biến a lên 1 đơn vị ta viết

:

a++ hoặc ++a


Để giảm biến a xuống 1 đơn vị ta viết:

a-- hoặc --a
41

14


24/09/2016

Biểu thức và các phép toán
Lưu ý:
a++: Sử dụng a sau đó mới tăng a 1 đơn vị
++a: Tăng a lên 1 đơn vị rồi mới sử dụng
a--: Sử dụng a sau đó mới giảm a 1 đơn vị
--a: Giảm a xuống 1 đơn vị rồi mới sử dụng
Ví dụ:

int a =6, x;
Nếu gán x = a++; /* x == 6; a == 7 */
Nếu gán x = ++a; /* x == 7; a == 7 */
42

Biểu thức và các phép toán
• Các phép gán mở rộng: += -= *= /= %= <<= >>= &= |= ^=
Biểu thức gán đơn giản
x=x+y

Biểu thức gán mở rộng
x += y


x=x–y

x -= y

x=x*y

x *= y

x=x/y

x /= y

x=x%y

x %= y

x = x << y

x <<= y

x = x >> y

x >>= y

x=x&y

x &= y

x=x|y


x |= y

x=x^y

x ^= y

43

Biểu thức và các phép toán
Dạng
Gán chuyền
Gán gộp

Câu lệnh gán

Câu lệnh gán

đơn giản

mở rộng

a = 2; b = 2; c = 2;

a = b = c = 2;

a = 2; b = 3; c = a* b;

c = (a = 2) * (b = 3);


44

15


24/09/2016

Biểu thức và các phép toán
• Biểu thức điều kiện:
Cú pháp: biến = điều kiện? biểu thức 1: biểu thức 2;
Ý nghĩa:
- Nếu điều kiện đúng thì biến nhận giá trị của biểu thức 1.
- Ngược lại, biến nhận giá trị của biểu thức 2.
Ví dụ:

Tìm max 2 số a, b
max = a > b?a : b;
Tìm max 3 số a, b, c
max1=a > b? a : b;
max = max1 > c? max1: c;

45

Thứ tự ưu tiên của các phép toán
TT ưu tiên
1
2
3
4
5

6
7
8
9
10
11
12
13
14
15

Các phép toán
() [] -> .
! * & ~ ++ -- + - (type) sizeof
*/%
+<< >>
< <= > >=
== !=
&
^
|
&&
||
? :
= *= /= %= += -= <<= >>= &= |= ^=
,

Thứ tự kết hợp
trái qua phải
phải qua trái

trái qua phải
trái qua phải
trái qua phải
trái qua phải
trái qua phải
trái qua phải
trái qua phải
trái qua phải
trái qua phải
trái qua phải
phải qua trái
phải qua trái 46
trái qua phải

Khối lệnh
Là dãy các lệnh được đặt giữa cặp dấu ngoặc nhọn { và }

47

16


24/09/2016

Một số hàm số học xây dựng sẵn
Stt

Hàm

Ý nghĩa


Thư viện

Cho giá trị tuyệt đối của số

stdlib.h

1

int abs(int a)

2

double exp(double x)

Cho ex

math.h

3

doulbe log(double x)

Cho lnx

math.h

4

doulbe sqrt(double x)


Cho căn bậc hai của x

math.h

5

doulbe sin(double x)

Cho sinx

math.h

6

doulbe cos(double x)

Cho cosx

math.h

7

doulbe tan(double x)

Cho tgx

math.h

nguyên a


48

Các hàm xuất / nhập dữ liệu
Hàm printf: Xuất dữ liệu ra màn hình, thuộc thư viện stdio.h
Cú pháp:
printf("tham số định dạng", các mục cần đưa ra màn hình);
Trong đó:
- Tham số định dạng có thể bao gồm các mã định dạng và các
đoạn văn bản. Đoạn văn bản dùng để làm sáng tỏ ý nghĩa kết quả
hiện ra. Mã định dạng dùng để xác định số mục và cách biểu thị giá
trị các mục này lên màn hình.
- Các mục cần đưa ra màn hình có thể là một hay nhiều mục
cách nhau dấu phẩy, mỗi mục có thể là các biến, hằng, hàm, phần tử
49
mảng hoặc biểu thức.

Các hàm xuất / nhập dữ liệu
Các mã định dạng:

STT

Kiểu

Mã định dạng

1

char


2

unsigned char

%c
%c

3

int

%d

4

unsigned int

%u

5

long

%ld

6

unsigned long

%lu


7

float

%f

8

double

%f

9

long double

%lf

10

xâu ký tự

%s

50

17



24/09/2016

Các hàm xuất / nhập dữ liệu
Cách viết có quy cách:
• Đối với kiểu ký tự, số nguyên, xâu ký tự
%mmã

Canh lề phải

%-mmã

Canh lề trái

• Đối với kiểu số thực
%m.nmã

Canh lề phải

%-m.nmã

Canh lề trái

trong đó: m, n là các số nguyên dương
51

Các hàm xuất / nhập dữ liệu
Ví dụ:
int n = 4;
float x = 3.16;
printf("So nguyen n = %5d\nSo thuc x = %5.2f",n,x);


Kết quả hiện lên màn hình
So nguyen n = 4
So thuc x = 3.16

52

Các hàm xuất / nhập dữ liệu
Hàm scanf: Nhập dữ liệu vào từ bàn phím, thuộc thư viện
stdio.h
Cú pháp:
scanf("các mã định dạng", địa chỉ các biến);
Trong đó:
- Các mã định dạng có thể gồm một hay nhiều mã viết sát
nhau.
- Địa chỉ các biến có thể là một hay nhiều địa chỉ cách nhau
dấu phẩy.
Ví dụ: int n; float x; scanf("%d%f", &n,&x);
53

18


24/09/2016

Các hàm xuất / nhập dữ liệu
Hàm getchar: Nhập một ký tự từ bàn phím, ký tự được nhập
hiển thị lên màn hình, thuộc thư viện stdio.h
Cú pháp:


getchar();

Ý nghĩa: Hàm cho giá trị bằng mã ASCII của ký tự nhập vào
Ví dụ:

int c;
c = getchar();

/*Nếu ta nhập vào ký tự A thì c == 65*/

54

Các hàm xuất / nhập dữ liệu
Hàm getch: Nhập một ký tự từ bàn phím, ký tự được nhập
không hiển thị lên màn hình, thuộc thư viện conio.h
Cú pháp: getch();
Ý nghĩa:
Tương tự hàm getchar chỉ khác ký tự đưa vào bằng
hàm getch không cho hiện lên màn hình
Ví dụ:
c = getch();
/* Nếu ta nhập vào ký tự A thì A không hiển thị màn
hình và c == 65 */

55

Tự học
1. Viết chương trình nhập vào từ bàn phím số thực dương r. Hãy
tính và in ra màn hình chu vi và và diện tích hình tròn có bán
kính là r.

2. Viết chương trình nhập vào từ bàn phím 2 số thực a và b. Hãy
tính và in ra màn hình chu vi và diện tích hình chữ nhật có chiều
rộng và chiều dài là a và b.

56

19


24/09/2016

Chương 3

Các cấu trúc lập trình
Cấu trúc tuần tự
Cấu trúc rẽ nhánh
• Rẽ nhánh dạng khuyết
• Rẽ nhánh dạng đủ
Cấu trúc tuyển chọn
Cấu trúc lặp
• Câu lệnh lặp for
• Câu lệnh lặp while
• Câu lệnh lặp do while
Câu lệnh nhảy không điều kiện
57

Cấu trúc tuần tự

A


B

C
Ví dụ:

int a, b, c;
a = 1; b = 2;
c = a + b;

58

Cấu trúc rẽ nhánh
Câu lệnh rẽ nhánh dạng khuyết
đúng

Cú pháp:

điều kiện

sai

if (điều kiện)
công việc;

công việc

Sơ đồ hoạt động:
Ví dụ: Tìm max 3 số a, b, c.
Thuật toán
Chương trình


59

20


24/09/2016

Cấu trúc rẽ nhánh
Thuật toán tìm max 3 số
max=a

Mô tả bằng câu lệnh if
max=a;
if (maxmax=b;
if (maxmax=c;
printf("%5.2f", max);

đúng

max
max=b

sai
đúng

max


max=c

sai
Thông báo max

60

Cấu trúc rẽ nhánh
Câu lệnh rẽ nhánh dạng đủ
Cú pháp:
if (điều kiện)
công việc1;
else
công việc 2;

đúng

điều kiện

công việc 1

sai

công việc 2

Sơ đồ hoạt động:
Ví dụ: Kiểm tra 3 số thực a, b, c có thể là độ dài 3 cạnh của một tam
giác hay không. Nếu đúng tính chu vi, diện tích tam giác đó,
ngược lại có thông báo.

61

Cấu trúc rẽ nhánh
Thuật toán kiểm tra tạo tam giác
đúng

tính chu vi, diện tích

điều kiện

sai

Thông báo không tạo tam giác

Trong đó, điều kiện = ((a+b>c) && (b+c>a) && (a+c>b))
62

21


24/09/2016

Cấu trúc rẽ nhánh
Ví dụ:

Giải phương trình ax + b = 0
Nhập a, b
đúng

a=0


đúng

b=0

sai

sai
Thông báo ptvn

x=-b/a

Thông báo ptvsn

63

Cấu trúc tuyển chọn
Cú pháp:
switch (bt)
{
case n1: công việc 1; break;
case n2: công việc 2; break;
...
case nk: công việc k; break;
[default: công việc k+1;]
}

64

Cấu trúc tuyển chọn

Sơ đồ hoạt động:
bt=n1

sai

đúng
công việc 1

bt=n2

sai

đúng
công việc 2

sai

bt=nk

sai

đúng
công việc k công việc k+1

Trong đó:
• bt có kiểu đếm được, sắp thứ tự
• ni là hằng nguyên hoặc hằng ký tự
• thành phần default: công việc k+1; có thể có hoặc không
65
• sau mỗi công việc i đều phải có câu lệnh break;


22


24/09/2016

Cấu trúc tuyển chọn
Ví dụ: Cho biết số ngày của một tháng bất kỳ của một năm bất kỳ
Quy luật tính số ngày của một năm bất kỳ:
• Các tháng 1, 3, 5, 7, 8, 10, 12 có 31 ngày;
• Các tháng 4, 6, 9, 11 có 30 ngày;
• Tháng 2:
+ Nếu năm đó chia hết cho 4 thì có 29 ngày (trừ
những năm chia hết cho 100 nhưng không chia hết cho 400)
+ Ngược lại có 28 ngày. Những năm chia hết
100 nhưng không chia hết cho 400, chẳng hạn như năm 1700, 1800,
1900, 2100 có 28 ngày.
66

Cấu trúc tuyển chọn
Thuật toán
nhập t, n

t=1,3,5,7,8,10,12
đúng
songay=31

sai

t=4,6,9,11

đúng
songay=30

sai

t=2

sai

đúng
®iÒu kiÖn

sai

songay=29

đúng
songay=28

Trong đó:
điều kiện = (n mod 4 <>0) hoặc ((n mod 100 = 0) và (n mod 400 <>670))

Câu lệnh lặp for
Cú pháp:
for(phần 1; phần 2; phần 3)
công việc; /*Thân câu lệnh lặp*/
Trong đó:
• phần 1: gồm các phép gán để tạo giá trị ban đầu cho các biến
điều khiển. Biến điều khiển là biến mà giá trị của nó quyết
định đến việc câu lệnh lặp tiếp tục lặp hay dừng lại.

• phần 2: gồm các biểu thức kiểm tra điều kiện kết thúc câu
lệnh lặp.
• phần 3: gồm các phép gán nhằm thay đổi giá trị cho các biến
68
điều khiển.

23


24/09/2016

Câu lệnh lặp for
Sơ đồ hoạt động:

phần 1

phần 2
lặp

sai

đúng
công việc

phần 3
69

Câu lệnh lặp for
Một số chú ý quan trọng:
Bất kỳ phần nào trong ba phần trên đều có thể vắng mặt nhưng phải giữ

dấu chấm phẩy.
Khi phần 2 vắng mặt thì nó luôn có giá trị bằng 1. Trong trường hợp
này việc ra khỏi câu lệnh lặp phải nhờ vào một trong các câu lệnh
break, goto, return trong thân câu lệnh lặp.
Mỗi phần trong ba phần trên có thể có một biểu thức hoặc nhiều biểu
thức cách nhau bởi dấu phẩy. Các biểu thức trong mỗi phần được tính
từ trái qua phải.
Biến điều khiển của câu lệnh lặp có thể có kiểu ký tự, kiểu số nguyên
hoặc kiểu số thực.
Biển điều khiển có thể được thay đổi bởi một giá trị tùy ý.
Đối với những câu lệnh lặp for có thân đơn giản, ta có thể kết hợp thân
vào phần 3 để tạo câu lệnh lặp for rỗng. Lúc này phải có dấu chấm
70
phẩy ngay sau tiêu đề câu lệnh lặp.

Câu lệnh lặp for
Ví dụ: Tính tổng s = 1 + 2 + … + n theo các cách sau:
Cách 1: Sử dụng câu lệnh lặp for đầy đủ
Cách 2: Sử dụng câu lệnh lặp for rỗng
Cách 3: Sử dụng câu lệnh lặp for khuyết một phần
Cách 4: Sử dụng câu lệnh lặp for khuyết hai phần
Cách 5: Sử dụng câu lệnh lặp for khuyết cả ba phần

71

24


24/09/2016


Câu lệnh lặp while
Cú pháp:
while (điều kiện)
công việc; /*Thân câu lệnh lặp*/

Trong đó:
• điều kiện: có thể gồm một hay nhiều điều kiện cách nhau dẩu
phẩy.
• Thứ tự của các điều kiện được tính từ trái qua phải.
72

Câu lệnh lặp while
Sơ đồ hoạt động:
điều kiện

sai

lặp
công việc

Ví dụ: Tính tổng s = 2 + 4 + 6 + …+ 2*n, với n nguyên dương nhập
vào từ bàn phím.
73

Câu lệnh lặp do while
Cú pháp:
do
{
công việc;


/*Thân câu lệnh lặp*/

}
while (điều kiện);

74

25


×