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

GIÁO TRÌNH NGÔN NGỮ C/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 (1.1 MB, 120 trang )

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƢỜNG ĐẠI HỌC LẠC HỒNG

GIÁO TRÌNH
NGƠN NGỮ C/C++


CHƢƠNG 1:

CÁC PHẦN TỬ CƠ BẢN CỦA NGÔN NGỮ C ........................................8

1.1

MỘT SỐ CHƢƠNG TRÌNH ĐẦU TIÊN BẰNG C .................................................8

1.2

CÁC TỪ KHÓA ......................................................................................................10

1.3

TÊN VÀ CÁCH ĐẶT TÊN .....................................................................................10

1.4

CÁCH GHI LỜI GIẢI THÍCH ................................................................................11

1.5

CÂU LỆNH VÀ DẤU CHẤM CÂU ......................................................................11


1.6

CẤU TRÚC CHUNG CỦA CHƢƠNG TRÌNH .....................................................11

1.7

MỘT SỐ QUI TẮC VIẾT CHƢƠNG TRÌNH ........................................................12

CHƢƠNG 2:

CÁC KIỂU DỮ LIỆU CƠ SỞ ...................................................................13

2.1

KHÁI NIỆM VỀ KIỂU DỮ LIỆU ..........................................................................13

2.2

KIỂU SỐ NGUYÊN ................................................................................................14

2.3

KIỂU SỐ THỰC ......................................................................................................15

2.4

KIỂU KÍ TỰ ............................................................................................................15

2.5


KIỂU XÂU KÍ TỰ...................................................................................................16

2.6

KIỂU BOOLEAN ....................................................................................................16

2.7

BIẾN VÀ HẰNG .....................................................................................................16

2.7.1

Biến ............................................................................................................................ 16

2.7.2

Khai báo biến ............................................................................................................ 16

2.7.3

Hằng ........................................................................................................................... 17

Bài tập tại lớp .................................................................................................................18
CHƢƠNG 3:
3.1

CÁC PHÉP TOÁN & HÀM CƠ BẢN ......................................................19

CÁC PHÉP TỐN ..................................................................................................19


3.1.1

Các phép tốn số học ............................................................................................... 19

Bài tập tại lớp: (Sinh viên làm bài và sửa tại lớp)..........................................................22
3.1.2

Các toán tử quan hệ và logic ................................................................................... 24

3.1.3

Phép toán ? ................................................................................................................ 27

3.1.1

Phép toán phẩy ......................................................................................................... 27

3.1.2

Phép toán Xử lý Bit: ................................................................................................ 27

3.1.3

Thứ tự ƣu tiên của các toán tử: ............................................................................... 28
2


Bài tập tại lớp .................................................................................................................29
3.2


MỘT SỐ HÀM CƠ BẢN: .......................................................................................31

3.2.1

Hàm đại số: ............................................................................................................... 31

3.2.2

Hàm lƣợng giác: ....................................................................................................... 31

3.2.3

Hàm xử lý ký tự <CTYPE.H> ................................................................................ 32

Câu hỏi trắc nghiệm .......................................................................................................32
CHƢƠNG 4:
4.1

LỆNH NHẬP XUẤT DỮ LIỆU CƠ BẢN ................................................34

XUẤT DỮ LIỆU RA MÀN HÌNH: ........................................................................34

4.1.1

Lệnh printf................................................................................................................. 34

4.1.2

Lệnh puts : ................................................................................................................. 35


4.2

XUẤT KẾT QUẢ RA MÁY IN: .............................................................................35

4.3

NHẬP GIÁ TRỊ CHO BIẾN: ..................................................................................35

4.3.1

Toán tử gán và biểu thức gán.................................................................................. 35

4.3.2

Hàm scanf()............................................................................................................... 36

4.3.3

Hàm getchar() ........................................................................................................... 37

4.3.4

Hàm getch() .............................................................................................................. 37

4.3.5

Hàm gets() ................................................................................................................. 37

4.4


TRÌNH BÀY MÀN HÌNH: .....................................................................................37

4.4.1

Lệnh gotoxy(int x, int y): ........................................................................................ 37

4.4.2

Lệnh clrscr() .............................................................................................................. 37

4.4.3

Lệnh textcolor(màu chữ) ......................................................................................... 37

4.4.4

Textbackground(màu nền) ...................................................................................... 38

4.4.5

Window(int x1,int y1,int x2,int y2) ....................................................................... 38

4.5

TẠO SỐ NGẪU NHIÊN .........................................................................................38

Câu hỏi trắc nghiệm .......................................................................................................38
Bài tập tại lớp .................................................................................................................39
Bài tập về nhà .................................................................................................................40
CHƢƠNG 5:

5.1

CÁC CẤU TRÚC ĐIỀU KIỆN..................................................................45

CẤU TRÚC CHỌN .................................................................................................45

5.1.1

Cấu trúc chọn với if: ................................................................................................ 45

5.1.2

Cấu trúc chọn với if/else: ........................................................................................ 47

5.2

CẤU TRÚC CHỌN VỚI SWITCH .........................................................................49
3


Bài tập tại lớp(Sinh viên làm bài và sửa tại lớp) ............................................................51
Câu hỏi trắc nghiệm .......................................................................................................52
CHƢƠNG 6:
6.1

CẤU TRÚC LẶP .......................................................................................56

VÒNG LẶP XÁC ĐỊNH FOR ................................................................................56

Bài tập tại lớp .................................................................................................................58

6.2

VÒNG LẶP KHƠNG XÁC ĐỊNH .........................................................................59

6.2.1

Vịng lặp khơng xác định While ............................................................................. 59

6.2.2

Vịng lặp khơng xác định với điều kiện sau: do .. while ..................................... 61

Bài tập tại lớp .................................................................................................................62
6.3

CÁC CÂU LỆNH RẼ NHÁNH VÔ ĐIỀU KIỆN ...................................................63

6.3.1

Lệnh break................................................................................................................. 63

6.3.2

Lệnh continue ........................................................................................................... 63

6.3.3

Lệnh goto .................................................................................................................. 64

Câu hỏi trắc nghiệm .......................................................................................................65

Bài tập tại lớp .................................................................................................................65
Bài tập về nhà: ................................................................................................................66
CHƢƠNG 7:

CHƢƠNG TRÌNH CON – HÀM ...............................................................70

7.1

TẠI SAO PHẢI DÙNG CHƢƠNG TRÌNH CON? ................................................70

7.2

PHÂN LOẠI HÀM ..................................................................................................71

7.3

KHAI BÁO MẪU HÀM .........................................................................................72

7.4

ĐỊNH NGHĨA HÀM ...............................................................................................72

7.5

GỌI HÀM ................................................................................................................73

7.6

THAM SỐ HÌNH THỨC – THAM SỐ THỰC SỰ ................................................73


7.7

BIẾN TỒN CỤC – BIẾN CỤC BỘ ......................................................................73

7.7.1

Biến tồn cục ............................................................................................................ 73

7.7.2

Biến cục bộ (biến địa phƣơng) ............................................................................... 73

7.8

KHAI BÁO HÀM VÀ CÁC VÍ DỤ:.......................................................................73

Bài tập tại lớp .................................................................................................................75
7.9

TRUYỀN THAM SỐ CHO HÀM ...........................................................................75

7.9.1

Truyền tham trị ......................................................................................................... 76

7.9.2

Truyền tham chiếu ................................................................................................... 76

7.10


ĐỆ QUI: ................................................................................................................76
4


Câu hỏi trắc nghiệm .......................................................................................................78
Bài tập về nhà .................................................................................................................79
CHƢƠNG 8:

CHƢƠNG 8: KIỂU MẢNG (ARRAY) .....................................................81

8.1

KHÁI NIỆM: ...........................................................................................................81

8.2

MẢNG MỘT CHIỀU: .............................................................................................82

8.2.1

Khai Báo Biến Mảng 1 Chiều: ............................................................................... 82

8.2.2

Khai Báo Kiểu Mảng: .............................................................................................. 83

8.2.3

Một Số Thao Tác Trên Mảng 1 Chiều: ................................................................. 83


8.2.4

Truyền tham số Mảng một chiều: .......................................................................... 85

8.3

MẢNG HAI CHIỀU: ...............................................................................................86

8.3.1

KHÁI NIỆM: ............................................................................................................ 86

8.3.2

KHAI BÁO VÀ SỬ DỤNG MẢNG HAI CHIỀU: ............................................. 87

8.3.3

THAO TÁC TRÊN MẢNG 2 CHIỀU: ................................................................. 87

8.3.4

TRUYỀN THAM SỐ TRÊN MẢNG 2 CHIỀU:................................................. 89

8.4

MẢNG NHIỀU CHIỀU:..........................................................................................89

8.4.1


Khái niệm: ................................................................................................................. 89

8.4.2

Khai báo mảng: ........................................................................................................ 89

8.4.3

Truy xuất phần tử mảng: ......................................................................................... 89

8.4.4

Thao tác trên mảng n chiều: .................................................................................... 89

Câu hỏi trắc nghiệm .......................................................................................................89
Bài tập tại lớp .................................................................................................................90
Bài tập về nhà .................................................................................................................91
CHƢƠNG 9:

CHUỖI KÝ TỰ ..........................................................................................94

9.1

KHÁI NIỆM: ...........................................................................................................94

9.2

KHAI BÁO BIẾN CHUỖI: .....................................................................................94


9.3

KHAI BÁO KIỂU CHUỖI: .....................................................................................95

9.4

CÁC THAO TÁC TRÊN KIỂU CHUỖI: ...............................................................95

9.4.1

Nhập chuỗi ký tự: ..................................................................................................... 95

9.4.2

Xuất chuỗi: ................................................................................................................ 96

9.4.3

Truy xuất đến từng ký tự trong chuỗi: biếnchuỗi[chỉsố] ................................... 96

9.5

MẢNG CÁC CHUỖI: .............................................................................................97

9.6

CON TRỎ VÀ CHUỖI KÝ TỰ: .............................................................................98
5



9.6.1

Khai báo con trỏ ....................................................................................................... 98

9.6.2

Gán địa chỉ vùng nhớ của biến chuỗi cho biến con trỏ ....................................... 98

9.6.3

Gán hằng chuỗi cho biến con trỏ............................................................................ 98

9.7 CẤP PHÁT ĐỘNG 1 VÙNG NHỚ CHỨA DỮ LIỆU VÀ GHI ĐịA CHỈ
VÀO BIẾN CON TRỎ: .....................................................................................................98
9.8

HÀM TỰ TẠO VÀ KIỂU CHUỖI: ........................................................................99

9.9

Các hàm xử lý chuỗi strong STRING.H: .................................................................99

9.9.1

Xác định chiều dài thật sự của chuỗi: .................................................................... 99

9.9.2

Đổi chữ thƣờng thành chữ hoa và ngƣợc lại: ..................................................... 100


9.9.3

Nối 2 chuỗi: ............................................................................................................ 100

9.9.4

Nối n ký tự của chuỗi nguồn vào sau chuỗi đích: .............................................. 101

9.9.5

Sao chép chuỗi: ...................................................................................................... 102

9.9.6

Sao chép n ký tự từ chuỗi nguồn sang chuỗi đích: ............................................ 103

9.9.7

So sánh 2 chuỗi theo thứ tự từ điển: .................................................................... 103

9.9.8

Tìm kiếm: ................................................................................................................ 105

9.9.9

Các hàm chuyển đổi kiểu stdlib.h ........................................................................ 105

Câu hỏi trắc nghiệm .................................................................................................... 106
Bài tập tại lớp .............................................................................................................. 107

Bài tập về nhà .............................................................................................................. 107
CHƢƠNG 10:

KIỂU CẤU TRÚC (STRUCTURE) ....................................................... 109

10.1

KHÁI NIỆM: ..................................................................................................... 109

10.2

ĐỊNH NGHIÃ KIỂU CẤU TRÚC MỚI: .......................................................... 109

10.3

KHAI BÁO BIẾN KIỂU CẤU TRÚC:............................................................. 110

10.4

CÁC THAO TÁC TRÊN BIẾN MẪU TIN: ..................................................... 110

10.4.1 Gán 2 biến cấu trúc có cùng kiểu cấu trúc. ......................................................... 110
10.4.2 Truy xuất giá trị từng mục dữ liệu trong 1 biến kiểu cấu trúc: ........................ 111
10.4.3 Địa chỉ của biến cấu trúc và mục dữ liệu: ........................................................... 111
10.5

CON TRỎ CỦA KIỂU CẤU TRÚC: ............................................................... 111

10.5.1 Khai báo con trỏ kiểu cấu trúc: ............................................................................ 111
10.5.2 Gán địa chỉ vùng nhớ của 1 biến cấu trúc cho biến con trỏ:............................. 111

10.5.3 Truy xuất giá trị 1 thành phần của biến cấu trúc bằng biến con trỏ: ............... 111
10.6

HÀM VÀ KIỂU CẤU TRÚC: .......................................................................... 112
6


10.6.1 Đối số của hàm có thể là: ...................................................................................... 112
10.6.2 Hàm có thể trả về: .................................................................................................. 112
10.7

MẢNG CẤU TRÚC: ......................................................................................... 113

Câu hỏi trắc nghiệm .................................................................................................... 117
Bài tập tại lớp .............................................................................................................. 117
Bài tập về nhà .............................................................................................................. 117
TÀI LIỆU THAM KHẢO .................................................................................................. 120

7


CHƢƠNG 1: CÁC PHẦN TỬ CƠ BẢN CỦA NGÔN NGỮ C
Yêu cầu:
Sau khi học xong bài này, sinh viên phải hiểu và vận dụng các kiến thức, kĩ năng cơ
bản sau:
 Hiểu biết về các ƣu điểm của ngôn ngữ C và một số đặc điểm chính của nó.
 Nắm vững các thành phần chính trong một chƣơng trình C
 Nắm vững qui tắc viết chƣơng trình.
Số tiết lên lớp: 2
Bảng phân chia thời lƣợng:

STT

NỘI DUNG

SỐ TIẾT

1

Giới thiệu chƣơng trình C

1/2

2

Cấu trúc chƣơng trình C

1

3

Một số qui tắc viết chƣơng trình

1/2

Trọng tâm bài giảng:
 Nắm vững cấu trúc của một chƣơng trình C

1.1 MỘT SỐ CHƢƠNG TRÌNH ĐẦU TIÊN BẰNG C
Ví dụ 1: In ra màn hình 2 dịng chữ:
DAY LA CHUONG TRINH C

CHAO CAC BAN
/* Chƣơng trình in 2 dịng chữ*/
#include “stdio.h”

void main() /* hàm chính */
{

#include “conio.h”

printf(“DAY LA CHUONG TRINH C”);
printf(“\nCHAO CAC BAN”);
getch();
}

Giải thích:
 /* ... */ : dịng ghi chú sẽ khơng đƣợc biên dịch.
Mỗi chương trình nên bắt đầu bằng một ghi chú nói rõ mục đích của nó
 Chỉ thị #include : dùng nạp header file chứa các hàm thƣ viện sử dụng trong
chƣơng trình:
- File stdio.h: chứa các hàm nhập xuất trên dòng nhập xuất gián tiếp (printf )
8


- File conio.h: chứa các hàm nhập xuất trực tiếp từ bàn phím, màn hình (getch).
Khi sử dụng một hàm chuẩn cần biết nó nằm trong tập tin header nào và phải dùng
lệnh #include để nạp tập tin đó vào chương trình.
#include <[path]filename> : mặc định sẽ tìm trong thƣ mục chỉ định trong
OptionsDirectoriesINCLUDE Directories
#include “[path]filename” : mặc định tìm ở thƣ mục hiện hành, nếu khơng tìm thấy
sẽ tìm trong thƣ mục INCLUDE.

Thơng báo lỗi nếu khơng tìm thấy: Unable to open include file ‘[path]filename’
 Dòng main() : là bắt buộc đối với tất cả các chƣơng trình C. Dấu () sau từ khóa
main cho biết main là 1 khối chƣơng trình gọi là hàm (function).
Khối thân hàm đƣợc xác định bằng cặp ký hiệu:
{ /* bắt đấu phần thân */
} /* kết thúc phần thân */
 Một câu lệnh đƣợc viết trên 1 hay nhiều dòng nhƣng phải kết thức bởi dấu ;
Ví dụ 2: Chƣơng trình tính chu vi và diện tích hình trịn theo giá trị bán kính r nhập
vào từ bàn phím.
#include “stdio.h”

else

#include <conio.h>

{

#define

Pi

cv = 2 * PI * r;

3.14

main()

dt = PI * r * r;

{

float r, cv, dt; /*Khai báo 3 biến kiểu
thực*/

printf(“\nKet Qua:”);
printf(“\n\t Chu vi = %10.2f \n\t
Dien tich = %10.2f”, cv, dt );

printf(“\nNhap ban kinh r = “);
scanf(“%f”, &r);

}

if (r <= 0)

getch();

printf(“\a\aBan kinh <= 0 khong
tinh“);

}

Chú ý : Một chƣơng trình C có thể chứa 1 hay nhiều hàm, trong đó, bắt buộc phải có 1 hàm
main và phải nằm trên tất cả những hàm khác (nếu có). hàm này đƣợc tự động thực
hiện đầu tiên khi chạy chƣơng trình.

9


Ví dụ 3: Viết chƣơng trình tính bán kính hình trịn
#include “stdio.h”

#include <conio.h>
#define

Pi

3.14

float r ; /*biến ngồi*/
void NhapBanKinh( );
void main()
{
float cv, dt; /*Khai báo 2 biến cục bộ*/
printf(“\nChƣơng trình tính diện tích và chu vi hình trịn\n”);
NhapBanKinh;
if (r <= 0)
printf(“\a\aBan kinh <= 0 khong tinh“);
else
{

cv = 2 * PI * r; dt = PI * r * r;
printf(“\nKet Qua:”);
printf(“\n\t Chu vi = %10.2f \n\t Dien tich = %10.2f”, cv, dt );

}
getch();
}
void NhapBanKinh( )
{

printf(“\nNhap ban kinh hinh tron r = “);

scanf(“%f”, &r);

}
Chú thích: có thể sử dụng hằng M_PI đã định nghiã trong math.h

1.2 CÁC TỪ KHĨA ([3] trang 10)
-Từ khóa (keyword) là các từ dùng riêng của C và mỗi từ khóa có tác dụng và ý nghĩa
riêng.
-Từ khóa khơng thể định nghĩa lại.
-Không đƣợc đặt tên hằng, tên biến, tên hàm, tên chƣơng trình trùng với từ khóa.
-Một vài từ khóa thơng dụng: conts, define, include, void, …

1.3 TÊN VÀ CÁCH ĐẶT TÊN ([3] trang 12)
-Tên chƣơng trình, tên biến, tên hàm, tên hằng số,…đều phải đƣợc khai báo trƣớc khi sử
dụng.
-Tên không đƣợc bắt đầu bằng số, không đƣợc chứa khoảng trắng và các kí tự đặc biệt nhƣ
dấu chấm, dấu *,…


Ví dụ cách đặt tên sai:
3PI: bắt đầu bằng số
PI$: chứa kí hiệu $
Bien 1 : chứa khảong trắng
Char: trùng từ khóa
“pi”: dùng dấu “
-Lƣu y: C là ngơn ngữ phân biệt chữ hoa, chữ thƣờng, do đó biến Ketqua khác với ketqua
cũng nhƣ KETQUA.
-Nên đặt tên sao cho gợi nhớ.

1.4 CÁCH GHI LỜI GIẢI THÍCH([3] trang 12-13)

-Lời giải thích dùng để thuyết minh, giúp chƣơng trình sáng sủa, dễ hiểu.
-Lời giải thích khơng tạo ra mã chƣơng trình.
-Nếu lời giải thích nằm trên một dịng, sử dụng hai dấu gạch chéo:
Ví dụ: // day la phan giai thich
-Nếu lời giải thích nằm trên nhiều dịng, sử dụng cặp kí hiệu /* và */
Chú ý: Nếu viết các chú thích trong chƣơng trình mà khơng sử dụng các dấu // hoặc /* hay
*/, trình dịch sẽ coi chúng nhƣ là các lệnh C++ và sẽ hiển thị các lỗi.

1.5 CÂU LỆNH VÀ DẤU CHẤM CÂU
-Mỗi câu lệnh trong chƣơng trình đƣợc kết thúc bằng dấu chấm phẩy
-Dấu chấm phẩy đƣợc dùng để ngăn cách các câu lệnh.
-Một số trƣờng hợp khơng dùng dấu chấm phẩy:
+Sau void main()
+Sau #include<…>

1.6 CẤU TRƯC CHUNG CỦA CHƢƠNG TRÌNH
 Các #include: dùng nạp header file chứa các hàm thƣ viện sử dụng trong chƣơng
trình:
 Các #define: dùng tạo các macro thay thế.
 Khai báo các đối tƣợng dữ liệu ngoài (biến, mảng, cấu trúc, hợp...)
 Khai báo trƣớc đặc trƣng các hàm tự tạo (nếu có).
 Hàm main
 Phần định nghiã các hàm tự tạo
Chú ý: Hàm main có thể đặt sau hoặc xen vào giữa các hàm khác, nhưng được tự động gọi
thực hiện đầu tiên trong chương trình.
#include<…>

//khai báo thƣ viện



#define
//định nghĩa kiểu dữ liệu

typedef
kiểu dữ liệu

tên hàm (các tham số)

//khai báo nguyên mẫu hàm

khai báo các biến toàn cục

void main()

//hàm chính, bắt buộc có

{

//bắt đầu hàm chính
//Các lệnh của hàm chính
//dừng chƣơng trình xem kết quả

getch();
}
//Khai báo các hàm, có thể có hoặc khơng
kiểu dữ liệu

tên hàm (các tham số)

{

//Các lệnh của hàm
return ();

//trả lại giá trị cho hàm

}

1.7 MỘT SỐ QUI TẮC VIẾT CHƢƠNG TRÌNH
-Chƣơng trình viết phải rõ ràng, thẩm mỹ
-Phải có các lời giải thích hợp lí mơ tả về chƣơng trình, cách sử dụng hoặc các biến quan
trọng.
-Cách bố trí câu lệnh hợp lí.
+Mỗi câu lệnh chiếm 1 dịng
+Các lệnh cùng nhóm phải thẳng hàng
+Các câu lệnh viết theo phân cấp
-Chƣơng trình nên đặt tên dễ hiểu, mang tính gợi nhớ
-Các biến đặt ngắn gọn, gọi nhớ chức năng.


CHƢƠNG 2: CÁC KIỂU DỮ LIỆU CƠ SỞ
Yêu cầu:
Sau khi học xong bài này, sinh viên phải hiểu và vận dụng các kiến thức, kĩ năng cơ bản
sau:
 Các kiểu dữ liệu.
 Cách đặt tên và khai báo biến.
 Cách đặt tên và khai báo hàm.
 Phạm vi sử dụng biến.
 Cách sử dụng một số hàm cơ bản.
Số tiết lên lớp: 2
Bảng phân chia thời lƣợng:

STT

NỘI DUNG

SỐ TIẾT

1

KiỂu dữ liệu sơ cấp

1

2

Biến-Hằng

1/2

3

Bài tập thảo luận

1/2

Trọng tâm bài giảng:
 Nắm vững các kiểu dữ liệu cơ bản của C
 Cách khai báo biến và hằng.

2.1


KHÁI NIỆM VỀ KIỂU DỮ LIỆU ([3] trang 20-22)

-Dữ liệu (DATA) là tất cả những gì đƣợc máy tính xử lí.
-Kiểu dữ liệu (DATA TYPE) đƣợc định nghĩa với 2 điểm chính:
+Một tập hợp các giá trị mà một biến thuộc kiểu đó có thể nhận đƣợc
+Trên đó xác định một số phép tốn.
-Dữ liệu đƣợc chứa trong bộ nhớ máy tính với một số lƣợng ô nhớ nhất định tính theo đơn
vị byte.


Các kiểu số nguyên
Các kiểu số thực
Kiểu kí tự
Kiểu logic Boolean

Kiểu cơ sở
Kiểu vô
hƣớng

Kiểu vô hƣớng do
ngƣời dùng định nghĩa

DATA
TYPE

Kiểu liệt kê

Kiểu mảng (array)
Kiểu cấu trúc (struct)
Kiểu tập tin (file)


Kiểu có
cấu trúc

Kiểu con trỏ
Hình 2.1: Tổng quan phân loại các kiểu dữ liệu

2.2

KIỂU SỐ NGUYÊN

Các số nguyên đƣợc viết ra bằng các dãy chữ số 0,1,2,…,9 với chữ đầu có thể là dấu +, dấu
– hoặc khơng có dấu.
Kiểu int là thơng dụng nhất. Tuy nhiên trong C cịn có nhiều kiểu số nguyên khác với các
dải giá trị khác nhau.
Kiểu char thực chất là kí tự song C cho phép cùng kiểu kí tự này nhƣ là một số ngun. Khi
tính tốn trong biểu thức số học thì kiểu chat đƣợc sử dụng nhƣ là số nguyên, khi tính tốn
trong biểu thức kí tự thì đây là kiểu kí tự.
Bảng 2.1 : Các kiểu dữ liệu khai báo cho biến số nguyên
Kiểu biến

Từ khóa

số byte

dải giá trị

character

char


1

-127 đến 128

integer

int

2

-32768 đến 32767

long integer

long

4

-2 tỉ đến 2 tỉ

unsigned character

unsigned char

1

0 đến 255

unsigned integer


unsigned int

2

0 đến 65535

unsigned long integer

unsigned long

4

0 đến 4 tỉ

Chú ý : Khi thực hiện phép tính số học đối với số nguyên, cần hết sức thận trọng xem các
phép tốn có cho kết quả vƣợt ra khỏi phạm vi biểu diễn của máy không, ta gọi là hiện
tƣợng tràn số.
Ví dụ : 32000+800-2000=29200
Máy tính sẽ xử lí sai vì lúc làm phép cộng 32000 với 800 đã cho ra kết quả trung gian là
32800, vƣợt quá giới hạn 32767 của máy.
Ví dụ 4: Khai báo biến số nguyên và tính tổng 2 số


//ví dụ về khai báo biến số nguyên và tính tổng của chúng
//khai báo hàm thƣ viện

#include <stdio.h>
#include <conio.h>
void main()

{

//khai báo 3 biến thuộc kiểu integer

int a,b,c;
a=5;
b=10;
c=a+b;

printf(“Tong la %d=”,c);
getch() ;
}

2.3

KIỂU SỐ THỰC

Trong máy tính, số thực đƣợc biểu diễn dƣới 2 dạng: dạng bình thƣờng và dạng có số mũ
-Dạng thập phân bình thƣờng: 3.14

3.0

-24.123456 -0.0002

-Dạng có số mũ hay còn gọi là dạng viết khoa học: gồm 2 phần: phần định trị và phần mũ
viếtt sau chữ E để biểu diễn số mũ của cơ số 10.
Ví dụ: 678.12345= 6.7812345*102 sẽ đƣợc biểu diễn là 6.7812345E+02
-0.001234= -1.234*10-3 sẽ đƣợc biểu diễn là -1.234E-03
Bảng 2.2 : Các kiểu dữ liệu khai báo cho biến số thực
Kiểu biến


Từ khóa

số byte

dải giá trị

số thực với độ chính xác đơn

float

4

1.2E-38 đến 3.4E38
độ chính xác 7 chữ số

số thực với độ chính xác kép

double

8

2.2E-308 đến 1.8E308
độ chính xác 15 chữ số

số thực với độ chính xác kép – độ long
dài lớn
double

2.4


10

3.4E-4932 đến 3.4E4932
độ chính xác 19 chữ số

KIỂU KÍ TỰ

Kí tự là tất cả các chữ viết mà ta thƣờng dùng nhƣ các chữ cái a,b,c, …chữ số 0,1,…,9, các
dấu ;,.!@*…
Kiểu kí tự đƣợc định nghĩa trong C bằng từ khóa char
Một hằng kí tự đƣợc biểu diễn bằng chữ viết đó nằm giữa hai dấu nháy đơn
„a‟, „A‟, „0‟,‟*‟,…
Mỗi hằng kí tự đƣợc lƣu trữ đúng 1 byte ô nhớ.


Bộ mã kí tự đƣợc dùng phổ biến là bộ mã ASCII (American Standard Code for Information
Interchange)

KIỂU XÂU KÍ TỰ

2.5

Xâu kí tự là dãy nhiều kí tự đƣợc đặt trong 2 dấu nháy kép
Ví dụ: “Lap trinh”
Xâu kí tự khơng viết đƣợc trong biểu thức số học.

KIỂU BOOLEAN

2.6


Kiểu Boolean là kiểu chỉ có 2 giá trị: Đúng (True) hoặc sai (False)
Ví dụ: 3<1 là một mệnh đề có giá trị sai
-Trong C, một số nguyên có giá trị bằng 0 là false, cịn các số ngun khác (thơng thƣờng
là số 1) là giá trị true.
Kết quả tính ra thì true luôn là giá trị 1.

BIẾN VÀ HẰNG

2.7

Dữ liệu đƣợc chứa trong máy tính có thể là biến hoặc hằng.

2.7.1 Biến
Biến là đại lƣợng có thể thay đổi đƣợc giá trị.
Biến đƣợc lƣu trữ trong bộ nhớ và đƣợc đặt tên để dễ sử dụng.
Biến là 1 vùng nhớ Ram dùng lƣu trữ dữ liệu tạm thời trong quá trình thực hiện chƣơng
trình. Việc truy xuất đến giá trị đƣợc lƣu trữ trong vùng nhớ đƣợc thực hiện thông qua tên
biến.

2.7.2 Khai báo biến
Muốn sử dụng biến, bắt buộc phải khai báo trƣớc.
Kiểudữliệu tênbiến1[= giátrị] , tênbiến2[=giátrị];
Tên (identifier): là 1 chuỗi tối đa 32 ký tự gồm chữ cái, số, dấu gạch dƣới. Trong đó
ký tự đầu tiên khơng phải là số. C phân biệt chữ hoa và chữ thƣờng. Có thể chỉ
định chiều dài tối đa của tên bằng chức năng:
OptionsCompilerSourceIdentifier length.
Biến phải gắn liền với 1 kiểu dữ liệu cụ thể.
Ví dụ 5: Khai báo một số biến thuộc các kiểu đã học
int a;


//khai báo 1 biến a thuộc kiểu integer

float dtb;

//khai báo 1 biến dtb thuộc kiểu số thực

char lop;

//khai báo 1 biến lop thuộc kiểu kí tự

unsigned int tuoi; //khai báo 1 biến tuổi thuộc kiểu số ngun khơng dấu.

2.7.2.1.

Vị trí khai báo

Vị trí khai báo biến sẽ qui định phạm vi hoạt động của biến.


 Khai báo bên trong khối lệnh: (Biến cục bộ)
-

Phải đƣợc khai báo sau dấu {, đầu khối và trƣớc tất cả các câu lệnh khác trong khối.

-

Phạm vi hoạt động: Các biến này chỉ đƣợc sử dụng bên trong khối lệnh đó.

-


Thời gian tồn tại: Khi thực hiện xong khối lệnh, thì vùng nhớ cấp phát cho các
biến này sẽ xóa (ngoại trừ trƣờng hợp có sử dụng từ khóa static).

-

Giá trị ban đầu: Nếu khơng gán giá trị khởi đầu thì giá trị của các biến cục bộ chƣa
đƣợc xác định. Trƣờng hợp có sử dụng từ khóa Static: thì các biến này có giá trị khởi
đầu mặc định là 0 và chỉ đƣợc gán giá trị khởi đầu khi thực hiện lần đầu tiên, các lần
sau sẽ sử dụng giá trị hiện đang lƣu trử.

-

Tên các biến trong cùng 1 khối lệnh không đƣợc trùng nhau nhƣng có thể trùng tên
với biến nằm ngồi khối lệnh.

Ví dụ 6: Lệnh và khối lệnh
{
int a =5, b =2;
{
int a=4;
b = a+b;
printf(“\n In trong khối a = %d, b = %d, a, b);
}
printf(“\n In ngoài khối a = %d, b = %d, a, b);
}
Kết quả:

In trong khối a = 4, b = 6
In ngoài khối a = 5, b = 6


 Khai báo bên ngoài các hàm:(gọi là Biến ngoài)
-

Phạm vi sử dụng của biến ngồi là từ vị trí khai báo của nó cho đến cuối chƣơng
trình. Nó có thể sử dụng cho các chƣơng trình khác nhờ khai báo extern viết trên các
file này.

-

Giá trị ban đầu: Khi chƣa đƣợc khởi đầu thì giá trị của biến ngồi = 0.

-

Thời gian tồn tại: cho đến khi kết thúc chƣơng trình.

2.7.2.2.

Lấy địa chỉ của biến

Mỗi biến đƣợc cấp phát trong bộ nhớ gồm một hay nhiều byte liên tiếp tùy thuộc vào kiểu
dữ liệu. Địa chỉ của byte đầu tiên là địa chỉ của biến.
Phép toán:

&tênbiến

trả về địa chỉ của biến.

2.7.3 Hằng
Hằng là những giá trị cố định thuộc phạm vi của một kiểu dữ liệu, không bị thay đổi khi

thực hiện chƣơng trình.


Khai báo hằng
Muốn sử dụng hằng ta cũng phải khai báo trƣớc với từ khóa const.
Const Kiểu dữ liệu tên hằng=giá trị hằng
Ví dụ 7: Khai báo hằng
Const int tigia=16000;
const float pi=3.14;
Bài tập tại lớp
Câu 1. Chọn tƣơng ứng cho cột A và B:
Cột A

Cột B

8

Tên định danh sai

10.34

Hằng số nguyên

ABC

Hằng ký tự

abc

Double


23

Số chấm động

12112134.86868686886

Tên định danh đúng

_A1
$abc
„A‟
Hƣớng dẫn: Nhiều mục trên cột A có thể tƣơng ứng tới một mục đơn tại cột B.
Câu 2. Tính giá trị của các biến sau mỗi câu lệnh dƣới đây:
int a = 4^4
int a = 23.34
a = 10
b = a + a++
a = -5
b = -a


CHƢƠNG 3: CÁC PHÉP TOÁN & HÀM CƠ BẢN
Yêu cầu:
Sau khi học xong bài này, sinh viên phải hiểu và vận dụng các kiến thức, kĩ năng cơ bản
sau:
 Hiểu đƣợc Toán tử gán
 Hiểu đƣợc biểu thức số học
 Nắm đƣợc toán tử quan hệ (Relational Operators) và toán tử luận lý (Logical
Operators)

 Hiểu toán tử luận lý nhị phân (Bitwise Logical Operators) và biểu thức
(Expressions)
 Hiểu khái niệm ép kiểu
 Hiểu độ ƣu tiên của các toán tử.
Số tiết lên lớp: 2
Bảng phân chia thời lƣợng:
STT

NỘI DUNG

SỐ TIẾT

1

Các phép tốn cơ bản

½

2

Chuyển đổi kiểu dữ liệu

½

3

Các hàm cơ bản và cách sử dụng

½


4

Bài tập thảo luận

½

Trọng tâm bài giảng:
 Nắm vững các phép toán cơ bản, chuyển kiểu dữ liệu
 Cách sử dụng một số hàm thông dụng

3.1

CÁC PHÉP TỐN
3.1.1 Các phép tốn số học:(Arithmetic Operators)[2]

C có 7 tốn tử số học gồm
a) 5 tốn tử 2 ngơi:
Bảng 3.1: Bảng mơ tả các phép tốn 2 ngơi
Phép tốn Ký hiệu

Ví dụ

Phép tốn


hiệu

Ví dụ

Cộng


+

a+b

Nhân

*

a*b

Trừ

-

a-b

Chia

/

a/b

Lấy phần dƣ

%

n%m



 Phép chia trên 2 số nguyên cho kết quả là 1 số nguyên, cắt bỏ phần thập phân
không làm trịn số.
Ví dụ: 19 / 5 = 3 cắt bỏ 0.8
 Phép chia lấy phần dƣ chỉ đƣợc dùng trên 2 tốn hạng kiểu số ngun (nếu khơng
sẽ sinh lỗi cú pháp)

Ví dụ: 19 % 5 = 4

 Thứ tự thực hiện các toán tử trong một biểu thức tƣơng tự nhƣ trong Pascal
Ví dụ 8: Error! đƣợc viết (b*b - 4*a*c)/(2*d) hay (b*b - 4*a*c)/2/d
b) Hai toán tử 1 ngôi: Dùng tăng giảm các biến nguyên hay thực 1 đơn vị
Tốn tử tăng (++) :

++biến; hay biến++;

Ví dụ 9: ++n; hay n++ <==> n = n+1;
Toán tử giảm (--): --biến; hay biến--;
Ví dụ 10: --n; hay n--; <==> n = n -1;
Chú ý: Trƣờng hợp sử dụng toán tử này trong một biểu thức thì việc đặt trƣớc hay sau sẽ
ảnh hƣởng đến kết quả bài toán:
Đặt trƣớc: nếu muốn thay đổi giá trị cho n trƣớc khi sử dụng n
Đặt sau: nếu muốn thay đổi giá trị cho n sau khi sử dụng n xong.
Ví dụ 11: Tiền
tăng

Ví dụ 12: Hậu
tăng

tố


B=3;
A=++B;
// A bằng 4, B bằng 4

tố

B=3;
A=B++;
// A bằng 3, B bằng 4

Ví dụ 13: Với n = 4. Lệnh x = ++n sẽ gán 5 cho x. Lệnh x = n++ sẽ gán 4 cho x
Ví dụ 14: Với x = 10 và y =11 thì:
printf(“%d %d %d“, x--*--y, x-- - --y, x++ + ++y);
Cho kết quả: 120 0 22
Nhƣng nếu tách thành 3 lệnh printf:
printf(“%d “, x--*--y); printf(“%d”, x-- - --y); printf(“%d “, x++ + ++y);
Cho kết quả: 120 -2 20
 Độ ƣu tiên:Toán tử 1 ngơi có độ ƣu tiên cao hơn tốn tử 2 ngơi.
Ví dụ 15: Chƣơng trình myProgram
1. Gọi trình soạn thảo để nhập những câu lệnh cho chƣơng trình C.
2. Tạo ra một tập tin mới.
3. Nhập vào đoạn mã sau:
#include <stdio.h>
void main()
{


int principal, period;
float rate, si;
principal = 1000;

period = 3;
rate = 8.5;
si = principal * period * rate / 100;
printf(“%f”, si);
}
Ðể thấy kết quả ở đầu ra, thực hiện tiếp các bƣớc sau:
4. Lƣu tập tin với tên myprogramI.C.
5. Biên dịch tập tin myprogramI.C.
6. Thực thi chƣơng trình myprogramI.C.
7. Trở về trình soạn thảo.
Mẫu kết xuất cho chƣơng trình trên nhƣ hình sau:

Hình 3.1:Kết quả của myprogramI.C
Ví dụ 16: Chƣơng trình myprogram2
1. Tạo một tập tin mới.
2. Gõ vào mã sau:
#include <stdio.h>
void main()
{
int a, b, c, sum;
printf(“\nEnter any three numbers: ”);
scanf(“%d %d %d”, &a, &b, &c);
sum = a + b + c;
printf(“\n Sum = %d”, sum);
}


3. Lƣu tập tin với tên myprogramII.C.
4. Biên dịch tập tin myprogramII.C.
5. Thực thi chƣơng trình myprogramII.C.

6. Trở về trình soạn thảo.
Mẫu kết quả ở đầu ra của chƣơng trình trên nhƣ hình sau:

Hình 3.2:Kết quả của myprogramII.C
Bài tập tại lớp:
Câu 3. Viết một chƣơng trình nhập vào một số và tính bình phƣơng của số đó.
Hƣớng dẫn: Thực hiện theo các bƣớc sau:
a. Nhập vào một số.
b. Nhân số đó với chính nó và hiển thị kết quả đó.
Câu 4. Viết chƣơng trình tính diện tích và chu vi của một vòng tròn.
Hƣớng dẫn: Thực hiện theo các bƣớc sau:
c. Nhập vào 1 số thực r (bán kính hình trịn).
d. Chu vi= 2 * π * r, diện tích = π * r * r với π=3.14 hoặc dùng hằng M_PI có sẵn
trong C
Câu 5. Viết chƣơng trình nhập lƣơng và tuổi của một ngƣời và hiển thị các số vừa nhập đó
ra màn hình.
Hƣớng dẫn: Thực hiện theo các bƣớc sau:
e. Nhập vào 1 số thực (lƣơng) và một số nguyên (tuổi)
f. Dùng hàm in ra màn hình

3.1.1 Phép chuyển đổi kiểu dữ liệu
Việc chuyển đổi kiểu dữ liệu thƣờng đƣợc diễn ra tự động trong 2 trƣờng hợp:
 Khi 2 toán hạng trong 1 phép toán khác kiểu thì:
-

Kiểu thấp hơn sẽ đƣợc nâng thành kiểu cao hơn trƣớc khi thực hiện phép
tốn.

-


Giá trị thu đƣợc có kiểu cao hơn

Ví dụ 3.10 : 1.5 * (5/2)
1.5 * 5/2

---> 1.5 * 2 = 3.00

---> 7.5 / 2 = 3.75


1.5 * (5/2F) ---> 1.5 * 2.5= 3.75
 Khi gán giá trị kiểu này cho 1 biến kiểu kia: Giá trị của biểu thức vế phải đƣợc
chuyển sang kiểu của vế trái và đó là kiểu kết quả.
Ví dụ 17: Gán giá trị khác kiểu
int n;
n = 10.5; ---> n = 10
Trong một số trƣờng hợp bạn cần sử dụng phép chuyển kiểu:
(type)expression
Phép chuyển kiểu cho ra giá trị thuộc kiểu type chỉ định. Bản thân của expression thì
khơng thay đổi kiểu.
Ví dụ 18: Đổi số thực sang số nguyên có làm trịn số
int a; float x;
a = (int)( x + 0.5);
x = (float)a / 2; /*nếu a=5 ==> x = 2.5*/
 Độ ƣu tiên của toán tử ép kiểu cùng cấp với tốn tử một ngơi.
Ví dụ 19: Ép kiểu
Trong biểu thức đầu tiên, tất cả đều là số nguyên „int‟ 40 / 17 * 13 / 3 sẽ có kết quả là 8 (40
/ 17 làm trịn ra 2, 2 * 13 = 26, 26 / 3 làm tròn ra 8)
Biểu thức thứ hai nhƣ sau:
1.


Ðịnh giá trị: 40 / 17 * 13 / 3.0

2.

40 / 17 làm trịn kết quả là 2

3.

2 * 13 = 26

4.

Nhƣng vì có số 3.0 đã ép kiểu phép chia cuối cùng thành số kiểu double, vì
vậy 26.0 / 3.0 = 8.666667

Trong biểu thức thứ ba:
Nếu chúng ta di chuyển dấu chấm thập phân sang số 13 (40 / 17 * 13.0 / 3), kết quả vẫn sẽ
là 8.666667 bởi vì:
1.

40 / 17 làm tròn là 2

2.

Số 13.0 ép kiểu dữ liệu phép nhân thành double nhƣng kết quả vẫn là 26 vì
2.0 * 13.0 = 26.0

3.


Và 26.0 ép phép chia cuối cùng thành kiểu double, vì vậy 26.0 / 3.0 =
8.666667

Trong biểu thức cuối:
nếu chúng ta di chuyển dấu chấm thập phân sang số 17 (40 / 17.0 * 13 / 3), kết quả bây giờ
sẽ là 10.196078 bởi vì:
1. 17.0 ép kiểu của phép chia đầu thành kiểu double và 40.0 / 17.0 = 2.352941


2. 2.352941 * 13.0 = 30.588233
3. và 30.588233 / 3.0 = 10.196078
1. Tạo một tập tin mới.
2. Gõ đoạn mã sau vào „Edit window‟:
#include <stdio.h>
#include <conio.h>
void main()
{
clrscr();
printf(“40/17*13/3 = %d”, 40/17*13/3);
printf(“\n\n40/17*13/3.0 = %lf”, 40/17*13/3.0);
printf(“\n\n40/17*13.0/3 = %lf”, 40/17*13.0/3);
printf(“\n\n40/17.0*13/3 = %lf”, 40/17.0*13/3);
}
3. Lƣu tập tin với tên type.c.
4. Biên dịch tập tin type.c.
5. Thực thi chƣơng trình type.c.
6. Trở về trình soạn thảo.
Kết quả xuất:
40/17*13/3 = 8
40/17*13/3.0 = 8.666667

40/17*13.0/3 = 8.666667
40/17.0*13/3 = 10.196078

3.1.2 Các toán tử quan hệ và logic: (Ralational & logical operators)
Các phép toán quan hệ và logic cho kết quả là 1 (Đúng) | 0 (Sai). Đƣợc dùng tạo các
biểu thức điều kiện cho việc chọn lựa công việc cần thực hiện.

3.1.1.1.

Kiểu logic

C khơng có kiểu logic cụ thể nhƣ Pascal, mà xem:
Số <> 0 là True;

3.1.1.2.

Số = 0 là False.

Toán tử quan hệ
Bảng 3.2: Các toán tử quan hệ

Phép so sánh Ký
hiệu

Ví dụ

Phép so sánh

Bằng


a == b

Lớn

==

hơn


hiệu

hoặc >=

Ví dụ
a >= b


bằng
Khác

!=

a != b

Nhỏ hơn

Lớn hơn

>


a>b

Nhỏ

hơn

<
hoặc <=

aa <= b

bằng
Độ ƣu tiên:
 Hai phép tốn đầu có cùng độ ƣu tiên. Bốn phép toán sau cũng cùng độ ƣu tiên
nhƣng cao hơn 2 phép tốn đầu.
 Phép tốn so sánh có độ ƣu tiên thấp hơn so với các phép toán số học.
Ví dụ 20: Độ ƣu tiên tốn tử
a < b + c <==> a < (b + c)

3.1.1.3.

Các phép toán Logic:

Các phép tốn logic có thể thực hiện trên các toán hạng nguyên hay thực.
* Phép phủ định: ! * Phép Và: &&

* Phép Hoặc ||

Ví dụ 21: Các phép toán logic

3 && 7 ---> 1

!1.2 ---> 0

3 || 7 ---> 1

Độ ƣu tiên:Các phép tốn so sánh có độ ưu tiên nhỏ hơn phép phủ định nhưng lớn hơn
phép && và ||.
Ví dụ 22: Độ ƣu tiên cua phép so sánh
(a < b) && (c > d) <==>

a < b && c > d

Ví dụ 23: Các phép tốn
Ba biến số nguyên tên là a, b và c đƣợc khai báo trong chƣơng trình này. Các giá trị gán
cho biến nhƣ sau: a = 5, b = 6 & c = 7.
Xét những dòng mã sau:
1. a + b >= c;
Ðầu tiên, a+b sẽ đƣợc tính (tốn tử số học có độ ƣu tiên cao hơn tốn tử so sánh), kết quả là
11. Kế đến giá trị 11 đƣợc so sánh với c. Kết quả là 1(true) bởi vì 11 > 7.
2. Xét biểu thức khác:
a > 10 && b <5;
Tính tốn đầu tiên sẽ là a> 10 và b<5, bởi vì tốn tử so sánh (> <) có quyền ƣu tiên cao hơn
toán tử luận lý AND (&&). Tính tốn theo sau:
1. 5 > 10 && 6<5
2. FALSE && FALSE
3. FALSE tức là, 0
1. Tạo một tập tin mới.
2. Gõ đoạn mã sau vào „Edit window‟:



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×