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

KỸ THUẬT LẬP TRÌNH NGÔN 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 (505.58 KB, 16 trang )

KIẾN THỨC CƠ BẢN VỀ NGƠN NGỮ LẬP TRÌNH C

KỸ THUẬT LẬP TRÌNH

NGƠN NGỮ LẬP TRÌNH C

TÀI LIỆU THAM KHẢO
ƒ

Phạm Văn Ất, Kỹ thuật lập trình C cơ sở và nâng cao,
NXB KH&KT, 1999.

ƒ

Qch Tuấn Ngọc, Ngơn ngữ lập trình C, NXBGD, 1998.

ƒ

Giới thiệu ngôn ngữ C

ƒ

Cấu trúc cơ bản của một chương trình C. Ví dụ một
chương trình C đơn giản

ƒ

Các khái niệm cơ bản: Biến, hằng, Kiểu dữ liệu, Toán tử

ƒ


Các lệnh vào ra cơ bản

ƒ

Cấu trúc điều khiển

0

Giới thiệu về ngơn ngữ lập trình C
ƒ

1

Giới thiệu về ngơn ngữ lập trình C

Ngơn ngữ C

ƒ

Đặc điểm
• C là ngơn ngữ mạnh và mềm dẻo: sử dụng lập trình hệ điều hành, các
giải thuật phức tạp, chương trình soạn thảo, các trình điều khiển, đồ
hoạ...

• Do Dennis Ritchie phát triển (1972) tại phịng thí nghiệm Bell
Telephone – AT&T-USA trên cơ sở 2 ngơn ngữ lập trình trước
đó: BCPL và B




Ngơn ngữ cho người lập trình chun nghiệp: nhiều nhà tin học sử
dụng, mang tính phổ biến



Khả năng độc lập về phần cứng (khả chuyển): chạy trên các máy tính
và hệ điều hành khác nhau.



Ít từ khố: Các từ khố dùng riêng cho ngơn ngữ khi lập trình.



Ngơn ngữ lập trình cấu trúc



C là ngơn ngữ bậc trung: có các tính năng ngơn ngữ bậc cao và ngơn
ngữ bậc thấp (xử lý bít, byte và địa chỉ ơ nhớ).

• Được sử dụng để phát triển UNIX
• Được sử dụng để viết các hệ điều hành
• Đến năm 1978, C thực sự phát triển
ƒ

Chuẩn hố
• Nhiều biến đổi nhỏ từ C ban đầu và khơng tương thích
• Chuẩn hố ngơn ngữ trên cơ sở khả năng độc lập với phần
cứng.


- C là ngơn ngữ cơ sở để phát triển lập trình hướng đối tượng (C++,
Java,...).

• Chuẩn C ban hành 1989, được cập nhật năm 1999.
2

3


Cấu trúc cơ bản của một chương trình C
#include <...>
#define
typedef

Ví dụ chương trình C đơn giản

/* 1. Các hàm thư viện */
/* 2. Định nghĩa hằng */
/* 3. Định nghĩa kiểu dữ liệu */

1
2
3
4
5
6
7
8
9

10
11
12

/* 4. Khai báo nguyên mẫu các hàm */
function prototype

/* Fig. 2.1: fig02_01.c
A first program in C */
#include <stdio.h>
/* function main begins program execution */
int main()
{
printf( "Welcome to C!\n" );
return 0; /* indicate that program ended successfully */
} /* end function main */

Comments: Giải thích

/* 5. Khai báo các biến toàn cục */
int main (void)
/* 6. “Chương trình chính” */
{ Khai báo các biến;

Welcome to C!

ƒ

Các ký tự nằm trong cặp /* */ là chú thích
• Sử dụng để mơ tả, giải thích trong chương trình


Tập lệnh;

ƒ

}
/* 7. “Các chương trình con”- các hàm */

#include <stdio.h>
• Chỉ thị tiền xử lý: tải nội dung của một file thư viện vào chương
trình
• <stdio.h> cho phép thực hiện các thao tác input/output chuẩn.

4

Ví dụ chương trình C đơn giản

5

Mơi trường lập trình C

int main()

• Phases of C Programs:

9 Một chương trình C có thể có 1 hoặc một số function,
nhưng chỉ có duy nhất 1 hàm là main

1. Edit


9 int có nghĩa là hàm main trả về một giá trị nguyên

2. Preprocess

9 Cặp “{ }” thể hiện một khối, đoạn chương trình

3. Compile

9 Phần thân của tất cả các hàm phải nằm trong cặp “{}”

4. Link

9 Có thể sử dụng: void main(void) và không cần câu
lệnh return ở cuối hàm

5. Load

9 Kết thúc lệnh bởi dấu ;

Disk

Preprocessor

Disk

Compiler

Disk

Compiler creates

object code and stores
it on disk.

Disk

Linker links the object
code with the libraries

Linker

Primary Memory

Loader
Disk

6. Execute

Loader puts program
in memory.
..
..
..

Primary Memory

CPU

6

Program is created in

the editor and stored
on disk.
Preprocessor program
processes the code.

Editor

..
..
..

CPU takes each
instruction and
executes it, possibly
storing new data
values as the program
7
executes.


Các khái niệm cơ bản

Từ khóa
ƒ

Những từ trong ngơn ngữ được dành riêng cho một ý
nghĩa xác định (tên kiểu dữ liệu, tốn tử, câu lệnh)

ƒ


Từ khóa

ƒ

Hằng

• Khơng dùng từ khóa để đặt tên cho hằng, biến, hàm,…

ƒ

Kiểu dữ liệu

• Phân biệt chữ hoa và chữ thường

ƒ

Biến

ƒ

Biểu thức

ƒ

Các từ khóa cơ bản trong ngôn ngữ C

8

Kiểu dữ liệu trong C
ƒ


9

Hằng

Kiểu dữ liệu cơ sở

ƒ

Là đại lượng mà giá trị không đổi trong q trình tính
tốn

ƒ

Hằng số: 100, 10L, 10U, 0x10,…

ƒ

Hằng kí tự: ‘A’, ‘a’,…

ƒ

Hằng xâu kí tự: “A”

ƒ

Lưu ý: phân biệt hằng kí tự và hằng xâu kí tự

• Kí tự (char, unsigned char)
• Số nguyên (int, unsigned int, long (int), unsigned long (int))

• Số thực, độ chính xác đơn (float)
• Số thực, độ chính xác kép (double)
• Lưu ý: Kích thước và phạm vi biểu diễn của các kiểu dữ liệu
ƒ

Kiểu enum

ƒ

Kiểu mảng (array)

ƒ

Kiểu cấu trúc (struct)

9

KIểm tra kích thước của kiểu dữ liệu: dùng tốn tử
sizeof(), ví dụ: sizeof(int),…
10

ƒ

• Lưu trữ ‘A’ (1 byte)

A

• Lưu trữ “A” (2 byte)

A


\0

Hằng biểu thức
11


Biến
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.

Biến

/*Ví dụ chương trình C: Cộng hai số ngun*/
#include <stdio.h>
#include <conio.h>
/* function main begins program execution */
int main()
{
int integer1; /* first number to be input by user */

int integer2; /* second number to be input by user */
int sum;
/* variable in which sum will be stored */
clrscr();
printf( "Enter first integer\n" ); /* prompt */
scanf( "%d", &integer1 );
/* read an integer */

14.

printf( "Enter second integer\n" ); /* prompt */
scanf( "%d", &integer2 );
/* read an integer */

15.

sum = integer1 + integer2;

13.

17.
18.
19.

• Mỗi biến gồm: một tên, kiểu dữ liệu, kích thước và giá trị
• Mỗi khi giá trị mới được gán cho biến thì giá trị trước đó sẽ được
thay thế (xố mất). Chẳng hạn khi sử dụng lệnh scanf để đọc giá
trị biến.
• Đọc các biến từ bộ nhớ giá trị của nó khơng thay đổi
ƒ


Mơ tả trực giác về biến trong bộ nhớ
integer1

45

ƒ

Khai báo biến trước khi sử dụng

ƒ

Đặt tên biến đúng quy tắc (trong C, phân biệt chữ hoa và
chữ thường)

12

13

Các tốn tử (phép tính)
ƒ

Khái niệm Biến:
• Tên biến tương ứng với vị trí xác định trong bộ nhớ máy tính

/* assign total to sum */

printf( "Sum is %d\n", sum );
/* print sum */
getch();

return 0; /* indicate that program ended successfully */
} /* end function main */

16.

ƒ

Các toán tử

Các phép tính số học và thứ tự ưu tiên

ƒ

• 1 - Thứ nhất, thực hiện biểu thức, toán tử trong cặp “()”, nếu
đồng cấp, thực hiện từ trái qua phải.
• 2 - Thứ hai: thực hiện phép *, / hoặc %, nếu đồng cấp thực hiện
từ trái qua phải.
• 3 - Cuối cùng: phép +,-, nếu đồng cấp thực hiện từ trái qua phải

Phép so sánh

Standard algebraic equality
operator or relational operator

C equality or
Example of C
relational operator condition

Meaning of C condition


=

==

x == y

x is equal to y



!=

x != y

x is not equal to y

Equality Operators

Relational Operators

Coperation

Arithmetic operator Algebraic expression Cexpression

>

>

x >y


x is greater than y

Addition

+

f +7

f+7

<

<

x
x is less than y

Subtraction

-

p–c

p-c

>=

>=


x >= y

x is greater than or equal to y

Multiplication

*

bm

b*m

<=

<=

x <= y

x is less than or equal to y

Division

/

x/ y

x/y

Modulus


%

r mod s

r%s

14

15


Các tốn tử

Các tốn tử
ƒ

Phép gán và tốn tử gán
• Biến = Biểu thức

ƒ

ƒ

Ví dụ về tốn tử gán
d -= 4

(d = d - 4)

e *= 5


(e = e * 5)

f /= 3

(f = f / 3)

g %= 9

(g = g % 9)

Toán tử tăng (++) và Toán tử giảm (−−)
• c ++ sử dụng thay cho c += 1
• c−− sử dụng thay cho c −= 1
• Tốn tử đặt trước biến: biến thay đổi giá trị trước khi biểu thức sử dụng
nó được tính tốn
• Tốn tử đặt sau biến: biến thay đổi giá trị sau khi biểu thức sử dụng nó
được tính tốn

16

Các lệnh vào/ra cơ bản
ƒ

Ví dụ: In số nguyên
1.

Hàm printf(): in kết quả ra màn hình

2.
3.


printf(“Xâu_điều_khiển_khn_dạng”, Danh_sách_tham_số_được_in);
ƒ

17

4.
5.

Hàm scanf(): nhập dữ liệu vào từ bàn phím

6.
7.

scanf(“Xâu_điều_khiển_khn_dạng”, Danh_sách_địa_chỉ_biến);

8.
9.
10.
11.

Bài tập 1.

12.

Tìm hiểu Help, trình bày chi tiết cú pháp sử dụng hàm và cho ví dụ:

13.

+ Xuất dữ liệu: printf, putchar, puts


15.

14.
16.

+ Nhập dữ liệu: scanf, getchar, getch, gets

17.
18.

18

#include <stdio.h>
#include <conio.h>
int main()
{
printf( "%d\n", 455 );
printf( "%i\n", 455 ); /* i same as d in printf */
printf( "%d\n", +455 );
printf( "%d\n", -455 );
printf( "%hd\n", 32000 );
printf( "%ld\n", 2000000000 );
printf( "%o\n", 455 );
printf( "%u\n", 455 );
printf( "%u\n", -455 );
printf( "%x\n", 455 );
printf( "%X\n", 455 );
getch();
return 0; /* indicates successful termination */

} /* end main */

Kết quả:

455
455
455
-455
32000
2000000000
707
455
4294966841
1c7
1C7

19


Ví dụ: In số thực

Ví dụ: In kí tự, xâu kí tự

1.

#include <stdio.h>

1.

#include <stdio.h>


2.

#include <conio.h>

2.

#include <conio.h>

3.
4.
5.

int main()

3.

{

4.

clrscr();

6.

printf( "%e\n", 1234567.89 );

7.

printf( "%e\n", +1234567.89 );


8.

printf( "%e\n", -1234567.89 );
printf( "%E\n", 1234567.89 );

9.
10.

printf( "%f\n", 1234567.89 );

11.

printf( "%g\n", 1234567.89 ); //so thuc mu e

12.

printf( "%G\n", 1234567.89 ); // so thuc mu E

13.

getch();

14.

return 0; /* indicates successful termination */

15.

1.234568e+006

1.234568e+006
-1.234568e+006
1.234568E+006
1234567.890000
1.23457e+006
1.23457E+006

char character = 'A'; /* initialize char */

6.

char string[] = "This is a string"; /* initialize char array */

7.

const char *stringPtr = "This is also a string"; /* char pointer */

8.

clrscr();

9.

printf( "%c\n", character );

10.

printf( "%s\n", "This is a string" );

11.


printf( "%s\n", string );

12.

printf( "%s\n", stringPtr );

13.

getch();

15.

return 0; /* indicates successful termination */
} /* end main */

} /* end main */

Ví dụ: In giá trị con trỏ

printf( "Total characters printed on this line:%n", &y );
printf( " %d\n\n", y );

14.
15.

y = printf( "This line has 28 characters\n" );
printf( "%d characters were printed\n\n", y );

A

This is a string
This is a string
This is also a string

21

In giá trị con trỏ

#include <stdio.h>
#include <conio.h>
int main()
{
int *ptr;
/* define pointer to int */
int x = 12345; /* initialize int x */
int y;
/* define int y */
clrscr();
ptr = &x;
/* assign address of x to ptr */
printf( "The value of ptr is %p\n", ptr );
printf( "The address of x is %p\n\n", &x );

12.
13.

16.
17.
18.
19.


{

5.

14.

20

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.

int main()

ƒ

Kết quả thực hiện chương trình

The value of ptr is 0012FF78
The address of x is 0012FF78
Total characters printed on this line: 38

This line has 28 characters
28 characters were printed
Printing a % in a format control string

printf( "Printing a %% in a format control string\n" );
getch();
return 0; /* indicates successful termination */
} /* end main */
22

23


Ví dụ: In số thực
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.

17.

#include <stdio.h>
#include <conio.h>

ƒ

Kết quả thực hiện chương trình

int main()
{
int i = 873;
/* initialize int i */
double f = 123.94536;
/* initialize double f */
char s[] = "Happy Birthday"; /* initialize char array s */
clrscr();
printf( "Using precision for integers\n" );
printf( "\t%.4d\n\t%.9d\n\n", i, i );

Using precision for integers
0873
000000873
Using precision for floating-point numbers
123.945
1.239e+002
124
Using precision for strings
Happy Birth


printf( "Using precision for floating-point numbers\n" );
printf( "\t%.3f\n\t%.3e\n\t%.3g\n\n", f, f, f );
printf( "Using precision for strings\n" );
printf( "\t%.11s\n", s );
getch();
return 0; /* indicates successful termination */
} /* end main */
24

Ví dụ: Sử dụng hàm scanf
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.

25

Cấu trúc điều khiển trong C

#include <stdio.h>
#include <conio.h>

int main()
{
int x; /* define x */
int y; /* define y */
clrscr();
printf( "Enter a six digit integer: " );
scanf( "%2d%d", &x, &y );

ƒ

Cấu trúc tuần tự

ƒ

Cấu trúc lựa chọn: if, if…else, switch

ƒ

Cấu trúc lặp: for, while, do …while

printf( "The integers input were %d and %d\n", x, y );
getch();
return 0; /* indicates successful termination */
} /* end main */

26

27



Cấu trúc điều khiển trong C

Cấu trúc điều khiển trong C

Cấu trúc lựa chọn
if statement
(single selection)
T

Seq uenc e

F

Cấu trúc lặp

if…else statement
(double selection)
T
Lặp với điều kiện trước

F

Lặp với điều kiện sau

Lặp với số lần lặp cho trước

đa lựa chọn
(multiple selection)
T


T
F

F

.
.
.

T

T

T

F

F

F
.
.
.

while statement

T

do while statement


for statement

F

28

29

Cấu trúc lựa chọn trong C
ƒ

Ví dụ: if ( grade >= 60 )

ƒ

printf( "Passed\n" );

Ví dụ:
if ( grade >= 60 )
printf( "Passed\n");
else
printf( "Failed\n");

grade >= 60

true

print “Passed”

false

false

true
grade >= 60

print “Failed”

30

print “Passed”

31


Lệnh lặp while trong C
ƒ

int product = 2;

Sử dụng Toán tử điều kiện (?:)

while ( product <= 1000 )
product = 2 * product;

• Thể hiện ba tham số (điều kiện, giá trị nếu true, giá
trị nếu false)
• Có thể viết lệnh thực hiện, như sau:
printf( "%s\n", grade >= 60 ? "Passed" : "Failed" );

• Hoặc có thể viết dưới dạng:

true

grade >= 60 ? printf( “Passed\n” ) : printf( “Failed\n” );

product <= 1000

product = 2 * product

false

32

33

1

/* Fig. 3.8: fig03_08.c

2
3

Class average program with sentinel-controlled repetition */
#include <stdio.h>

4

ƒ

Lặp được kiểm soát bằng biến đếm (Counter)


5

/* function main begins program execution */

6

int main()

7

{

8

int counter;

/* number of grades entered */

9

int grade;

/* grade value */

• Số lần lặp xác định: số lần lặp biết trước

10

int total;


/* sum of grades */

• Ví dụ: Tính điểm trung bình của 10 sinh viên (giả sử điểm là số
nguyên trong khoảng từ 0 đến 100).

12
14

/* initialization phase */

• Viết giả lệnh: Đọc vào từ bàn phím 10 số nguyên mơ tả điểm của sinh
viên và tính trung bình cộng

15

total = 0;

/* initialize total */

16

counter = 0;

/* initialize loop counter */

• Lặp đến khi “biến đếm” đạt được giá trị định trước

11
float average; /* number with decimal point for average */


13

17

Đặt total bằng 0
Đặt biến đếm counter bằng 1
While counter nhỏ hơn hoặc bằng 10
Input điểm của sinh viên tiếp theo
Cộng điểm vừa đọc vào total
Tăng biến counter lên 1

18

/* processing phase */

19

/* get first grade from user */

20

printf( "Enter grade, -1 to end: " );

/* prompt for input */

21

scanf( "%d", &grade );

/* read grade from user */


22

Tính điểm trung bình: lấy total chia cho 10
Print kết quả điểm trung bình

23

/* loop while sentinel value not yet read from user */

24

while ( grade != -1 ) {

25

total = total + grade;

/* add grade to total */

26

counter = counter + 1;

/* increment counter */

27

34



28

printf( "Enter grade, -1 to end: " ); /* prompt for input */

29

scanf("%d", &grade);

30

/* read next grade */

Enter
Enter
Enter
Enter
Enter
Enter
Enter
Enter
Enter
Class

} /* end while */

31
32

/* termination phase */


33

/* if user entered at least one grade */

34

if ( counter != 0 ) {

35
36

/* calculate average of all grades entered */

37

average = ( float ) total / counter;

38
39

75
94
97
88
70
64
83
89
-1


Program Output

Enter grade, -1 to end: -1
No grades were entered

/* display average with two digits of precision */

40

grade, -1 to end:
grade, -1 to end:
grade, -1 to end:
grade, -1 to end:
grade, -1 to end:
grade, -1 to end:
grade, -1 to end:
grade, -1 to end:
grade, -1 to end:
average is 82.50

printf( "Class average is %.2f\n", average );

41

} /* end if */

42

else { /* if no grades were entered, output message */


43

printf( "No grades were entered\n" );

44

} /* end else */

45
46

return 0; /* indicate program ended successfully */

47
48 } /* end function main */

Viết giả lệnh với 3 pha: Khởi tạo, Nhập và tính tổng điêm, Tính và in giá
trị trung bình
Gán cho total giá trị 0; Gán cho biến đếm counter giá trị 0

Lặp kiểm sốt bởi biến điều khiển (cờ):
ƒ

Ví dụ vấn đề đặt ra là:
• Viết chương trình tính điểm trung bình của một lớp học mà số điểm đưa
vào là tuỳ ý và khác nhau mỗi khi chạy chương trình.
• Khơng biết trước số sinh viên
• Làm thế nào để biết chương trình sẽ kết thúc ?


ƒ

Sử dụng giá trị điều khiển (lính gác)

Input điểm đầu tiên ( có thể là cờ)
While người dùng chưa dựng cờ
Cộng điểm vào biến total
Tăng biến đếm lần nhập điểm lên 1
Input điểm của sinh viên tiếp theo (có thể là cờ)

• Cũng có thể gọi là giá trị tín hiệu, giá trị cờ (flag)
• Thể hiện “kết thúc lặp, tính tốn xong.”
• Kết thúc lặp khi người dùng nhập vào đúng giá trị cờ
• Giá trị cờ là giá trị được chọn trước, ngồi phạm vi các giá trị vào thơng
thường, chẳng hạn giá trị cờ đặt là: -1 thì kết thúc lặp.

38

If counter khác 0
Tính giá trị trung bình, chia total cho biến counter
Hiển thị giá trị trung bình
else
Hiển thị “Bạn đã không vào điểm”

39


1

/* Fig. 3.8: fig03_08.c


2
3

Class average program with sentinel-controlled repetition */
#include <stdio.h>

28

printf( "Enter grade, -1 to end: " ); /* prompt for input */

29

4

scanf("%d", &grade);

30

/* read next grade */

} /* end while */

5

/* function main begins program execution */

31

6


int main()

32

/* termination phase */

7

{

33

/* if user entered at least one grade */
if ( counter != 0 ) {

8

int counter;

/* number of grades entered */

34

9

int grade;

/* grade value */


35

10

int total;

/* sum of grades */

36

/* calculate average of all grades entered */

37

average = ( float ) total / counter;

11
12

float average; /* number with decimal point for average */

13

38
39

/* display average with two digits of precision */

14


/* initialization phase */

40

15

total = 0;

/* initialize total */

41

} /* end if */

16

counter = 0;

/* initialize loop counter */

42

else { /* if no grades were entered, output message */

17

printf( "Class average is %.2f\n", average );

43


18

/* processing phase */

19

/* get first grade from user */

20

printf( "Enter grade, -1 to end: " );

/* prompt for input */

46

21

scanf( "%d", &grade );

/* read grade from user */

47

printf( "No grades were entered\n" );

44

} /* end else */


45

22

return 0; /* indicate program ended successfully */

48 } /* end function main */

23

/* loop while sentinel value not yet read from user */

24

while ( grade != -1 ) {

25

total = total + grade;

/* add grade to total */

26

counter = counter + 1;

/* increment counter */

27


Enter
Enter
Enter
Enter
Enter
Enter
Enter
Enter
Enter
Class

grade, -1 to end:
grade, -1 to end:
grade, -1 to end:
grade, -1 to end:
grade, -1 to end:
grade, -1 to end:
grade, -1 to end:
grade, -1 to end:
grade, -1 to end:
average is 82.50

75
94
97
88
70
64
83
89

-1

Enter grade, -1 to end: -1
No grades were entered

Bản chất của việc lặp được kiểm soát bởi biến đếm:
ƒ

Các yêu cầu lặp kiểm soát bởi biến đếm Counter

• Tên của biến kiểm sốt (hoặc đếm số lần lặp)
• Giá trị đầu tiên của biến kiểm sốt
• Với mỗi lần lặp thì biến kiểm sốt sẽ thay đổi giá trị
và có thể tăng lên hoặc giảm xuống
• Cần điều kiện để kiểm tra giá trị cuối của biến kiểm
soát

43


Lệnh lặp for trong C

ƒ

Lệnh lặp For có thể được viết thành lặp while như sau:
Khởi tạo ban đầu;
while ( Kiểm tra điều kiện tiếp tục lặp ) {
Các lệnh;
tăng biến điều khiển (biến đếm);
}


ƒ

Khởi tạo ban đầu và việc thay đổi biến đếm
• Sử dụng dấu “,” trong danh sách biến điều khiển
• Ví dụ:
for (int i = 0, j = 0;

j + i <= 10; j++, i++)

printf( "%d\n", j + i );
Trong đó: i, j cùng được khởi tạo ban đầu, làm điều kiện thốt khỏi vịng
lặp for, và được tăng giá trị sau mỗi lần lặp.
44

45

Lệnh đa lựa chọn switch
ƒ

Các biểu thức số học

ƒ

• Khởi tạo ban đầu, tiếp tục lặp lại, và việc thay đổi biến điều
khiển có thể là các biểu thức số học. Nếu x = 2 và y = 10
for ( j = x; j <= 4 * x * y; j += y / x )

Cú pháp
• Dãy các nhãn case và một trường hợp default khi value nằm ngoài tập

giá trị.

for ( j = 2; j <= 80; j += 5 )

ƒ

• Được sử dụng khi một biến hoặc biểu thức được kiểm tra tất cả các
giá trị có thể, mỗi giá trị tương ứng với những hành động khác nhau.
ƒ

thì viết tương đương:

switch

switch ( value ){

Lưu ý về lệnh for :

case '1':
Câu lệnh; break;

• Thay đổi biến điều khiển: tăng hoặc giảm.

case '2':

• Nếu điều kiện tiếp tục lặp ngay từ ban đầu nhận giá trị false

Câu lệnh; break;

– Khối lệnh trong vịng lặp khơng được thực hiện


default:

– Cần kiểm soát xử lý với các lệnh tiếp sau lệnh for

Câu lệnh; break;
}


46

break; thốt khỏi lệnh
47


1

/* Fig. 4.7: fig04_07.c

2
3

Counting letter grades */
#include <stdio.h>

4

true
case a


case a action(s)

break

false

true
case b

case b action(s)

break

5

/* function main begins program execution */

6

int main()

7

{

8

int grade;

9


int aCount = 0; /* number of As */

10

int bCount = 0; /* number of Bs */

11

int cCount = 0; /* number of Cs */

12

int dCount = 0; /* number of Ds */

13

int fCount = 0; /* number of Fs */

/* one grade */

14

false

15

printf(

"Enter the letter grades.\n"


16

printf(

"Enter the EOF character to end input.\n"

);
);

17

.
.
.

18

/* loop until user types end-of-file key sequence */

19

while ( ( grade = getchar() ) != EOF ) {

20

true
case z

case z action(s)


break

21

/* determine which grade was input */

22

switch ( grade ) { /* switch nested in while */

23

false

default action(s)

48

24

case 'A':

/* grade was uppercase A */

25

case 'a':

/* or lowercase a */


26

++aCount; /* increment aCount */

27

break;

/* necessary to exit switch */

28

29

case 'B':

/* grade was uppercase B */

54

30

case 'b':

/* or lowercase b */

55

default:


/* catch all other characters */

printf( "Incorrect letter grade entered." );

31

++bCount; /* increment bCount */

56

printf( " Enter a new grade.\n" );

32

break;

57

break;

58

} /* end switch */

/* exit switch */

33
34


case 'C':

/* grade was uppercase C */

59

35

case 'c':

/* or lowercase c */

60

/* optional; will exit switch anyway */

} /* end while */

36

++cCount; /* increment cCount */

61

37

break;

62


/* output summary of results */

63

printf( "\nTotals for each letter grade are:\n" );

64

printf( "A: %d\n", aCount ); /* display number of A grades */

65

printf( "B: %d\n", bCount ); /* display number of B grades */

66

printf( "C: %d\n", cCount ); /* display number of C grades */

67

printf( "D: %d\n", dCount ); /* display number of D grades */

68

printf( "F: %d\n", fCount ); /* display number of F grades */

/* exit switch */

38
39


case 'D':

/* grade was uppercase D */

40

case 'd':

/* or lowercase d */

41

++dCount; /* increment dCount */

42

break;

/* exit switch */

43
44

case 'F':

/* grade was uppercase F */

45


case 'f':

/* or lowercase f */

69

46

++fCount; /* increment fCount */

70

47

break;

71

/* exit switch */

72 } /* end function main */

48
49

case '\n':

/* ignore newlines, */

50


case '\t':

/* tabs, */

51

case ' ':

52

break;

53

return 0; /* indicate program ended successfully */

/* and spaces in input */
/* exit switch */


Lệnh lặp do…while trong C
Enter the letter grades.
Enter the EOF character to end input.
a
b
c
C
A
d

f
C
E
Incorrect letter grade entered. Enter a new grade.
D
A
b
^Z

ƒ

Lệnh lặp do…while

• Điều kiện lặp sẽ được kiểm tra sau khi khối lệnh lặp
được thực hiện.
– Tất cả các hành động (lệnh) trong khối lặp được thực hiện
ít nhất một lần.

• Cú pháp:

Totals for each letter grade are:
A: 3
B: 2
C: 3
D: 2
F: 1

action(s)

do {

Câu lệnh;

true
condition

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

53

Các lệnh break và continue
ƒ

Ví dụ
1

break
• Tác dụng thốt ngay lập tức khỏi các lệnh
do…while hoặc lệnh switch

/* Fig. 4.9: fig04_09.c

2
3

ƒ

Using the do/while repetition statement */

while, for,


#include <stdio.h>

• Chương trình sẽ thực hiện từ lệnh đầu tiên sau vòng lặp

4
5

/* function main begins program execution */

6

int main()

7

{

8

• Sử dụng lệnh break

int counter = 1; /* initialize counter */

– Thoát sớm khỏi vòng lặp

9
10

do {


11

printf( "%d

12

– Bỏ qua những giá trị còn lại trong lệnh switch

", counter ); /* display counter */

} while ( ++counter <= 10 ); /* end do...while */

13
14

return 0; /* indicate program ended successfully */

15
16 } /* end function main */

1

2

3

4

5


6

7

8

9

10

54

55


1

/* Fig. 4.11: fig04_11.c

2
3

ƒ

Using the break statement in a for statement */
#include <stdio.h>

4


continue
• Bỏ qua những lệnh cịn lại trong khối lệnh lặp while, for hoặc
do…while

5

/* function main begins program execution */

6

int main()

7

{

8

int x; /* counter */

9

– Tiếp tục quá trình với lần lặp tiếp theo của lệnh lặp
• while và do…while

10

/* loop 10 times */

11


for ( x = 1; x <= 10; x++ ) {

12

– Kiểm tra việc tiếp tục lặp ngay sau khi lệnh continue được thực
hiện

13

/* if x is 5, terminate loop */

14

if ( x == 5 ) {

15
16

break; /* break loop only if x is 5 */
} /* end if */

17

• for

18
19

– Biểu thức tăng giá trị biến điều khiển được thực hiện sau đó kiểm

tra việc tiếp tục lặp được tiến hành

printf( "%d ", x ); /* display value of x */
} /* end for */

20
21

printf( "\nBroke out of loop at x == %d\n", x );

22
23

return 0; /* indicate program ended successfully */

24
25 } /* end function main */

1 2 3 4
Broke out of loop at x == 5

56

1

/* Fig. 4.12: fig04_12.c

2
3


Using the continue statement in a for statement */
#include <stdio.h>

Các toán tử Logic

4
5

/* function main begins program execution */

6

int main()

7

{

8

ƒ

• Cho giá trị true nếu tất cả các điều kiện đều true

int x; /* counter */

9
10

/* loop 10 times */


11

for ( x = 1; x <= 10; x++ ) {

ƒ

/* if x is 5, continue with next iteration of loop */

14

if ( x == 5 ) {

15
16

ƒ

19

• Đảo ngược giá trị đúng/sai của biểu thức điều kiện

continue; /* skip remaining code in loop body */

• Có một tốn hạng
printf( "%d ", x ); /* display value of x */
} /* end for */

20
21


printf( "\nUsed continue to skip printing the value 5\n" );

22
23

! ( logic NOT)

} /* end if */

17
18

|| ( logic OR )
• Cho giá trị true nếu một trong các điều kiện có giá trị true

12
13

&& ( logic AND )

return 0; /* indicate program ended successfully */

24
25 } /* end function main */

ƒ

Sử dụng làm điều kiện trong vòng lặp
Biểu thức


Kết quả

true && false
true || false

false
true

!false

true

1 2 3 4 6 7 8 9 10
Used continue to skip printing the value 5

59


Nhầm lẫn toán tử (==) và (=)

BÀI TẬP 1.1
ƒ

ƒ

Lỗi trầm trọng: nếu lỗi cú pháp thì chương trình biên dịch sẽ thơng báo.

ƒ


Lỗi về logic: chương trình dịch khơng thơng báo

Viết chương trình:
• Nhập vào số ngun N, N > 0, N là một số chẵn. Khi nhập vào
một số N khơng thỏa mãn điều kiện trên thì in ra thông báo và
yêu cầu nhập lại nếu muốn tiếp tục chương trình.

• Ví dụ: sử dụng ==

• Tính tổng S = 22 − 42 + 62 − 82 + …. + (−1)k+1 N2, N = 2k.

if ( payCode == 4 )
printf( "You get a bonus!\n" );
– Kiểm tra điều kiện payCode, nếu payCode = 4 thì nhận thưởng
– Nếu thay == bằng dấu =
if ( payCode = 4 )
printf( "You get a bonus!\n" );
– payCode được gán bằng 4, 4 # 0, do đó biểu thức là true, nhận
thưởng được thực hiện
• Sai Logic, khơng sai cú pháp nên trình biên dịch không thông báo
60

61



×