MỤC LỤC
BÀI MỞ ĐẦU. 3
1. Lịch sử phát triển ngôn ngữ lập trình C. 3
2. Một số khái niệm dùng trong ngôn ngữ lập trình C. . 4
2.1 Tập kí tự dùng trong ngôn ngữ C. . 4
2.2 Tên, từ khóa. . 4
BÀI 1: TỔNG QUAN VỀ NGÔN NGỮ C . 6
1. Các thao tác cơ bản . 6
1.1 Khởi động và thoát khỏi môi trường C. 6
1.2 Lưu và Mở file. 7
1.3 Dịch , chạy chương trình. 9
1.4 Sử dụng menu Help. . 9
2. Cấu trúc của một chương trình C. . 10
2.1.Tiền xử lý và biên dịch. 10
2.2 Cấu trúc một chương trình C. 10
2.3 Các tập tin thư viện thông dụng. 11
2.4 Cú pháp khai báocác phần bên trong một chương trình C. 12
3.Câu lệnh nhập và xuất dữ liệu. 13
3.1 Xuất dữ liệu lên màn hình. 13
3.2 Đưa dữ liệu vào từ bàn phím. 16
4. Một vài chương trình đơn giản. . 18
5. Thực hành . 20
5.1 Mục đích, yêu cầu. 20
5.2 Nội dung thực hành . 20
BÀI 2: HẰNG,BIẾN VÀ MẢNG. 21
1. Kiểu dữ liệu. 21
1.1 Kiểu số nguyên. 21
1.2 Kiểu số thực . 22
1.3 Kiểu luận lý . 22
1.4 Kiểu ký tự. 22
2. Hằng . 22
2.1 Hằng số thực . 22
2.2 Hằng số nguyên. . 23
2.3 Hằng ký tự. 24
2.4 Hằng chuỗi ký tự . 24
3. Biến . 24
3.1 Cú pháp khai báo biến: . 24
3.2 Vị trí khai báo. 25
3.3 Việc khởi tạo đầu cho các biến. . 25
3.4 Lấy địa chỉ của biến. . 25
4. Khối lệnh . 26
4.1 Định nghĩa. 26
4.2 Một số chú ý quan trọng khi viết chương trình. 26
4.3 Khai báo ở đầu khối lệnh. . 26
4.4 Sự lồng nhau của các khối lệnh. 26
5. Mảng. 27
5.1 Khái niệm về mảng, cách khai báo. 27
5.2 Chỉ số mảng . 28
5.3 Lấy địa chỉ phần tử mảng. 29
5.4 Địa chỉ đầu của mảng . 29
6. Các loại biến và mảng . 29
6.1 Biến , mảng tự động . 29
6.2 Biến, mảng ngoài. 30
6.4 Biến tĩnh, mảng tĩnh . 31
6.5 Bài tập áp dụng. 32
7. Thực hành . 34
7.1 Mục đích yêu cầu:. 34
7.2 Nội dung thực hành . 34
BÀI 3: BIỂU THỨC. 35
1. Các phép toán. 35
1.1 Phép toán số học . 35
1.2 Phép toán quan hệ và logic. 35
1.3 Chuyển đổi kiểu gía trị. 36
1.4 Phép toán Tăng và giảm (++ & --) . 36
2. Câu lệnh gán và biểu thức. 37
2.1 Biểu thức . 37
2.2 Câu lệnh gán. 37
3. Biểu thức điều kiện. 38
4. Môt số Ví dụ . 39
4.1 Phép toán số học . 39
4.2 Phép toán gán . 40
4.3 Phép toán logic . 40
4.4 Các ví dụ về biểu thức . 42
4.5 Phép toán tăng hoặc giảm . 43
5. Thực hành . 43
5.1 Mục đích, yêu cầu:. 43
5.2 Nội dung thực hành . 43
Bài 4. CÁC CÂU LỆNH ĐIỀU KHIỂN . 49
1. Câu lệnh rẽ nhánh. 49
1.1. Câu lệnh if . 49
1.2. Câu lệnh switch . 50
1.3. Ví dụ . 51
2. Câu lệnh lặp . 56
2.1 Câu lệnh For . 56
2.2 Câu lệnh while . 58
2.3 Câu lệnh do while . 58
2.4 Ví dụ . 59
3. Câu lệnh dừng vòng lặp . 61
3.1 Câu lệnh break, continue. 61
3.2 Câu lệnh goto. 62
4. Thực hành . 63
4.1. Mục đích yêu cầu. 63
4.2 Nội dung thực hành . 63
BÀI 5: HÀM . 64
1. Khái niệm hàm trong ngôn ngữ C . 64
1.1. Hàm thư viện . 65
1.2. Hàm người dùng . 65
2. Xây dựng hàm . 65
2.1 Định nghĩa hàm . 65
2.2 Sử dụng hàm. 66
2.3 Nguyên tắc hoạt động của hàm . 67
3. Truyền tham số. 67
4. Các lệnh đơn nhằm kết thúc hàm và nhận giá trị trả về cho tên hàm. 69
5. Một số bài tập áp dụng . 70
6. Thực hành . 71
6.1 Mục đích yêu cầu. 71
6.2 Nội dung thực hành . 71
72 trang |
Chia sẻ: maiphuongdc | Lượt xem: 3957 | Lượt tải: 5
Bạn đang xem trước 20 trang tài liệu Tài liệu về Ngôn ngữ lập trình C, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
…);
getch();
}
BÀI 2: HẰNG,BIẾN VÀ MẢNG
Mục tiêu:
- Trình bày được các kiểu dữ liệu và so sánh được phạm vi biểu diễn của các kiểu dữ
liệu;
- Vận dụng được các loại biến, hằng biểu thức cho từng chương trình cụ thể;
- Biết, hiểu và so sánh được các lệnh, khối lệnh;
- Viết được các chương trình đơn giản với các hằng, biến và mảng;
1. Kiểu dữ liệu
1.1 Kiểu số nguyên
Đây là các kiểu dữ liệu mà giá trị của nó là số nguyên. Dữ liệu kiểu số nguyên lại chia ra
thành hai loại như sau:
Các số nguyên có dấu (signed) để chứa các số nguyên âm hoặc dương.
Nghề: Tin học văn phòng (MĐ13) Tài liệu giảng dạy môn: Lập trình căn bản
22
Các số nguyên không dấu (unsigned) để chứa các số nguyên dương (kể cả số 0)
1.2 Kiểu số thực
Đây là các kiểu dữ liệu mà giá trị của nó là số thực. Trong C
định nghĩa các kiểu số thực chuẩn như sau:
Kiểu
Độ lớn (Byte) Miền giá trị (Range)
loat 4 3.4*10-38 ... 3.4*1038
double 8 1.7*10
-308
... 1.7*10
308
Kiểu float là kiểu số thực có độ chính xác đơn (single-
precision floating-point), kiểu double là kiểu số thực có độ chính xác kép (double-
precision floating-point).
1.3 Kiểu luận lý
Trong C không hỗ trợ kiểu luận lý tường minh mà chỉ ngầm hiểu một cách không
tường minh như sau:
false (sai) là giá trị 0.
true (đúng) là giá trị khác 0, thường là 1.
1.4 Kiểu ký tự
Đây chính là kiểu dữ liệu số nguyên char có độ lớn 1 byte và miền giá trị là 256 ký
tự trong bảng mã ASCII.
2. Hằng.
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 chuỗi ký tự, một ký tự, một con số xác định. Chúng có thể
được biểu diễn hay định dạng với nhiều dạng thức khác nhau.
2.1 Hằng số thực
Số thực bao gồm các giá trị kiểu float, double, long double được thể hiện theo 2 cách
sau:
- Cách 1: Sử dụng cách viết thông thường mà chúng ta đã sử dụng trong các
môn Toán, Lý, …Điều cần lưu ý là sử dụng dấu thập phân là dấu chấm (.);
Nghề: Tin học văn phòng (MĐ13) Tài liệu giảng dạy môn: Lập trình căn bản
23
Ví dụ: 123.34 -223.333 3.00 -56.0
- Cách 2: Sử dụng cách viết theo số mũ hay số khoa học. Một số thực được
tách làm 2 phần, cách nhau bằng ký tự e hay E
Phần giá trị: là một số nguyên hay số thực được viết theo cách 1.
Phần mũ: là một số nguyên
Giá trị của số thực là: Phần giá trị nhân với 10 mũ phần mũ.
Ví dụ: 1234.56e-3 = 1.23456 (là số 1234.56 * 10-3)
-123.45E4 = -1234500 ( là -123.45 *104)
2.2 Hằng số nguyên.
Số nguyên gồm các kiểu int (2 bytes) , long (4 bytes) được thể hiện theo những
cách sau.
- Hằng số nguyên 2 bytes (int) hệ thập phân: Là kiểu số mà chúng ta sử dụng
thông thường, hệ thập phân sử dụng các ký số từ 0 đến 9 để biểu diễn một giá trị
nguyên.
Ví dụ: 123 ( một trăm hai mươi ba), -242 ( trừ hai trăm bốn mươi hai).
- Hằng số nguyên 2 byte (int) hệ bát phân: Là kiểu số nguyên sử dụng 8 ký số
từ 0 đến 7 để biểu diễn một số nguyên.
Cách biểu diễn: 0 Ví dụ : 0345 (số 345 trong hệ bát phân)
-020 (số -20 trong hệ bát phân)
Cách tính giá trị thập phân của số bát phân như sau:
Số bát phân : 0dndn-1dn-2…d1d0 ( di có giá trị từ 0 đến 7)
=> Giá trị thập phân= d i* 8i
0345=229 , 020=16
- Hằng số nguyên 2 byte (int) hệ thập lục phân: Là kiểu số nguyên sử dụng 10
ký số từ 0 đến 9 và 6 ký tự A, B, C, D, E ,F để biểu diễn một số nguyên.
Ký tự giá trị
A 10
B 11
C 12
D 13
E 14
F 15
Cách biểu diễn: 0x
Ví dụ:
0x345 (số 345 trong hệ 16)
0x20 (số 20 trong hệ 16)
0x2A9 (số 2A9 trong hệ 16)
Cách tính giá trị thập phân của số thập lục phân như sau:
Số thập lục phân : 0xdndn-1dn-2…d1d0 ( di từ 0 đến 9 hoặc A đến F)
=> Giá trị thập phân= in
i i
d 16*
0
Nghề: Tin học văn phòng (MĐ13) Tài liệu giảng dạy môn: Lập trình căn bản
24
- Hằng số nguyên 4 byte (long): Số long (số nguyên dài) được biểu diễn như số
int trong hệ thập phân và kèm theo ký tự l hoặc L. Một số nguyên nằm ngoài miền giá
trị của số int ( 2 bytes) là số long ( 4 bytes).
Ví dụ: 45345L hay 45345l hay 45345
- Các hằng số còn lại: Viết như cách viết thông thường (không có dấu phân cách
giữa 3 số)
Ví dụ:
12 (mười hai)
12.45 (mười hai chấm 45)
1345.67 (một ba trăm bốn mươi lăm chấm sáu mươi bảy)
2.3 Hằng ký tự
Hằng ký tự là một ký tự riêng biệt được viết trong cặp dấu nháy đơn (‘). Mỗi
một ký tự tương ứng với một giá trị trong bảng mã ASCII. Hằng ký tự cũng được xem
như trị số nguyên.
Ví dụ: ‘a’, ‘A’, ‘0’, ‘9’
Chúng ta có thể thực hiện các phép toán số học trên 2 ký tự (thực chất là thực hiện
phép toán trên giá trị ASCII của chúng)
2.4 Hằng chuỗi ký tự
Hằng chuỗi ký tự là một chuỗi hay một xâu ký tự được đặt trong cặp dấu nháy kép
(“).
Ví dụ: “Ngon ngu lap trinh C”, “Khoa CNTT-TCDTNTAG”, “NVA-DVB”
Chú ý:
1. Một chuỗi không có nội dung “” được gọi là chuỗi rỗng.
2. Khi lưu trữ trong bộ nhớ, một chuỗi được kết thúc bằng ký tự NULL (‘\0’: mã Ascii là
0).
3. Để biểu diễn ký tự đặc biệt bên trong chuỗi ta phải thêm dấu \ phía trước.
Ví dụ: “I’m a student” phải viết “I\’m a student”
“Day la ky tu “dac biet”” phải viết “Day la ky tu \”dac biet\”“
3. Biến
Biến là một đại lượng được người lập trình định nghĩa và được đặt tên thông
qua việc khai báo biến. Biến dùng để chứa dữ liệu trong quá trình thực hiện chương
trình và giá trị của biến có thể bị thay đổi trong quá trình này. Cách đặt tên biến giống
như cách đặt tên đã nói trong phần trên.
Mỗi biến thuộc về một kiểu dữ liệu xác định và có giá trị thuộc kiểu đó.
3.1 Cú pháp khai báo biến:
Danh sách các tên biến cách nhau bởi dấu phẩy;
Ví dụ:
Nghề: Tin học văn phòng (MĐ13) Tài liệu giảng dạy môn: Lập trình căn bản
25
Main()
{
int a, b, c; /*Ba biến a, b,c có kiểu int*/
long int chu_vi; /*Biến chu_vi có kiểu long*/
char beta, alfa; /* khai báo biến kiểu char*/
float nua_chu_vi; /*Biến nua_chu_vi có kiểu float*/
double dien_tich; /*Biến dien_tich có kiểu double*/
‘
.
.
}
Biến kiểu int chỉ nhận được các ía trị kiểu int. Các biến khác cùng có ý nghĩa tương tự,
chẳng hạn biến kiểu chả chỉ chứa được một ký tự. Để lưu trữ một xâu kí tự cần sử dụng một
mảng kiểu char.
3.2 Vị trí khai báo
Các khai báo cần đặt ngay sau dấu ‘{ đầu tiên của thân hàm và cần đứng trước mọi câu
lệnh khác. Như vậy, sau một câu lệnh gán chẳng hạn thì không được khai báo nữa. Sau đây
là một ví dụ sai về vị trí của khai báo.
main()
{
int a, b,c;
a=35;
int d; /*Vị trí khai báo sai*/
.
.
}
3.3 Việc khởi tạo đầu cho các biến.
Nếu trong khia báo, ngay sau tên biến ta đặt dấu = và một giá trị nào đó thì đây chính là
cách vừa khai báo vừa khởi đầu cho 1 biến. Ví dụ:
int a,b =20, c,d =40;
float e= -35.1, x =23.0, y,z t =36.1;
Tất nhiên điều này có thể đạt được nhờ toán tử gán và về thực tế hai cách này là
tươn đơn g. vậy để đạt được ý định như ví dụ trên ta có thể dùng các câu lệnh:
int a, b,c,d;
float e,x,y,z,t;
b =20; d=40; e = -35.1; x= 23.0; t =36.1;
3.4 Lấy địa chỉ của biến.
Mỗi biến được cấp phát một vùng nhớ gồm một số byte liên tiếp. Số hiệu của byte
đầu chính là địa chỉ của biến. Địa chỉ biến dùng trong một số hàm như scanf. Để nhận địa
chỉ biến ta dùng phép toán: &tên_biến
Nghề: Tin học văn phòng (MĐ13) Tài liệu giảng dạy môn: Lập trình căn bản
26
4. Khối lệnh
4.1 Định nghĩa
Khối lệnh là một dãy các câu lệnh được bao bởi các dấu {và }. Ví dụ;
{
A=2; b=3;
Printf(“\n%6d%6d”,a,b);
}
4.2 Một số chú ý quan trọng khi viết chương trình
Turbo C xem một khối lệnh cũng như một câu lệnh riêng lẻ. Nói cách khác chỗ nào viết
được một câu lệnh thì ở đó cũng có quyền đặt một khối lệnh.
4.3 Khai báo ở đầu khối lệnh.
Các khai báo biến, mảng chẳng những có thể đặt ở đầu của một hàm mà còn có thể viết ở
đầu khối lệnh, Ví dụ:
{
int a,b,c[50];
float x,y,z,t[20][30];
a=b=3;/*gán 3 cho a và b*/
x=5.7; y=a*x;
z=b*x;
printf(“\n y=%8.2f\nz=%8.2f”,y,z);
}
4.4 Sự lồng nhau của các khối lệnh.
Bên trong một khối lệnh lại có thể viết các khối lệnh khác. Sự lồng nhau theo cách như vậy
là không hạn chế. Ta thấy một điều thú vị là: Thân hàm cũng là một khối lệnh. Đó là khối
lệnh cực đại theo nghĩa nó chứa nhiều khối lệnh khác bên trong và không khối lệnh nào chứa
nó.
Về các khối lệnh lồng nhau:
Giả sự cùng một tên biến hay tên mảng lại được khai báo ở cả hai khối lệnh lồng nhau theo
cách
{
int a;
.
.
{
int a;
.
.
}
Nghề: Tin học văn phòng (MĐ13) Tài liệu giảng dạy môn: Lập trình căn bản
27
.
.
}
Khi đó làm thế nào để phân biệt được biến a trong và biến a ngoài. Về thực chất ở đây ta
có hai đại lượng khác nhau cho hai biến này, phạm vi hoạt động và thời gian tồn tại của
chúng cũng khác nhau. Biến a trong có phạm vi hoạt động tại các câu lệnh của khối lệnh
trong và nó chỉ tồn tại trong thời gian máy làm việc với khối lệnh này. Còn phạm vi hoạt
động của biến a ngoài bao gồm các câu lệnh bên trongkhoois lệnh ngoài nhưng không
thuộc khối lệnh trong. Ta cũng lưu ý là: Sự thay đổi ía trị của biến a ngoài không có ảnh
hưởng gì tới biến a trong và ngược lại. Ví dụ xét đoạn chương trình.
{
int a=5, b=2;
{
int a=4;
b=a+b;
printf(“\na=%3d b=%3d”,a,b);
}
printf(“\na=%3d b=%d”,a,b);
}
Trong chương trình trên có sử dụng hai câu lệnh printf hoàn toàn giống nhau về mặt hình
thức, nhưng thực chất chúng sẽ cho các kết quả khác nhau. Biến a ở câu lệnh printf thứ
nhất có giá trị bằng 4 (biến a trong ), còn biến a ở câu lệnh printf thứ 2 có giá trị là 5 (biến
a ngoài ). Biến b có cùng một ý nghĩa như nhau trong cả hai câu lệnh, nó có giá trị bằng 6.
Về mặt hình thức thì chương trình trên có hai biến là a và b. Nhưng thực chất tồn tại ba
biến khác nahu: a ngoài, a trong và b.
Như vậy đoạn chương trình trên sẽ có hiện trên màn hình hai dòng như sau:
a=4 b=6
a=5 b=6
5. Mảng
5.1 Khái niệm về mảng, cách khai báo.
Mảng có thể hiểu là một tập hợp nhiều phân tử có cùng một kiểu giá trị và có chung
một tên. Mỗi phần tử mảng có vai trò như một biến và chứa được một giá trị. Có bao nhiêu
kiểu biến thì cũng có bấy nhiêu kiểu mảng.
Mảng cần được khai báo để định rõ:
Kiểu mảng (int, float, double,…)
Tên mảng,
Số chiều và kích thước mỗi chiều.
Nghề: Tin học văn phòng (MĐ13) Tài liệu giảng dạy môn: Lập trình căn bản
28
Khái niệm về kiểu mảng và tên mảng cũng giống như khai niệm kiểu biến và tên
biến, điều này đã nói ở các mục trên. Ta sẽ giải thích khái niệm số chiều và kích thước mỗi
chiều thông qua các ví dụ sau. Các khai báo:
int a[10],b[4][2];
float x[],y[3][3];
Sẽ xác định 4 mảng: a, b,x và y. Ý nghĩa của chúng như sau:
- Đối với mảng thứ nhất thì kiểu int, tên là a, số chiều là môt, kích thước bằng 10. Mảng có 10
phần tử được đánh số như sau: a[0],a[1], a[2],…,a[9]. Mỗi phần tử a[1] chứa được một giá trị
kiểu int và mảng a có thể biểu diễn được một dãy 10 số nguyên.
- Đối với mảng thứ hai thì kiểu là int, tên là b số chiều là 2, kích thước của các chiều là 4 và 2.
Mảng có 8 phần tử, chúng được đánh số và được sắp xếp như sau:
b[0][0] b[0][1]
b[1][0] b[1][1]
b[2][0] b[2][1]
b[3][0] b[3][1]
Mỗi phần tử b[i][j] chứa được một giá trị kiểu int, mảng b có thể biểu diễn được một
bảng số nguyên 4 dòng, 2 cột
- Đối với mảng thứ ba thì kiểu là float, tên là x, số chiều là một, kích thước bằng 5. mảng
có 5 phần tử được đánh số như sau:
x[], x[1],x[2],x[3],x[4]
Mỗi phần tử x[i] chứa được một giá trị kiểu float, và mảng x có thể biểu diễn được
một dãy 5 số thực.
- Đối với mạng thứ 4 thì kiểu là float, tên y, số chiều là 2, kích thước của các chiều là 3.
Mảng có 9 phần tử , chúng được đánh số và được sắp xếp như sau;
y[0][0] y[0][1] y[0][2]
y[1][0] y[1][1] y[1][2]
y[2][0] y[2][1] y[2][2]
Mỗi phần tử y[i][j] chứa được một giá trị kiểu float, và mảng y có thể biểu diễn
được một bảng số thực 3 dòng, 3 cột.
Chú ý
Các phần tử của mảng được cấp phát các khoảng nhớ liên tiếp nhau trong bộ nhớ. Nói
cách khác, các phần tử mảng có địa chỉ liên tiếp nhau.
Trong bộ nhớ, các phần tử của mảng hai chiều được sắp xếp theo hàng.
5.2 Chỉ số mảng
Một phần tử cụ thể của mảng được xác định nhờ các chỉ số của nó. Chỉ số của mảng phải
có giá trị int không vượt quá kích thước của chiều tương ứng. Số chỉ số phải bằng số chiều
của mảng.
Giả sử a,b,x,y đã được khai báo như trên và giả sử i, j là các biến nguyên trong đó i=2,
j=1.
Khi đó:
a[j+i-1] là a[2]
b[j+i][2-1] là b[3][0]
Nghề: Tin học văn phòng (MĐ13) Tài liệu giảng dạy môn: Lập trình căn bản
29
x[j/i] là x[0]
y[i][j] là y[2][1]
Các cách viết sau là sai:
y[j] vì y là mảng hai chiều, cần hai chỉ số .
b[i][j][1] vì b là mảng hai chiều, chỉ cần hai chỉ số.
Chú ý về chỉ số:
Biểu thức dùng làm chỉ số có thể thực.
Khi đó phần nguyên của biểu thức thực sẽ là chỉ số mảng
Ví dụ:
a[2.4]=a[2]
a[1.9]=a[1]
Khi chỉ số vượt ra ngoài kích thước mảng, máy vẫn không báo lỗi, nhưng sẽ truy nhập đến
một vùng nhớ bên ngoài mảng và có thể làm rối loạn chương trình.
5.3 Lấy địa chỉ phần tử mảng
Dưới đây khi nói mảng ta hiểu là mảng một chiều. Mảng có từ hai chiều trở lên ta
nói mảng kèm số chiều. Có một vài hạn chế trên các mảng nhiều chiều. chẳng hạn, có thể
lấy địa chỉ phần tử mảng một chiều, nhưng nói chung không cho phép lấy địa chỉ phần tử
mảng nhiều chiều.
Như vậy máy sẽ chấp nhận phép tính: &a[i] nhưng không chấp nhận phép tính &y[i][j].
5.4 Địa chỉ đầu của mảng
Một chú ý quan trọng là: Tên mảng biểu thị địa chỉ đầu của mảng.
Như vậy ta có: a= &a[0].
6. Các loại biến và mảng
6.1 Biến , mảng tự động
6.1.1 Định nghĩa:
Các biến khai báo bên trong thân của một hàm (kể cả hàm main) gọi là biên (mảng
) tự động hay cục bộ.
Các đối số của hàm cũng được xem là biến tự động.
Do thân hàm cũng là một khối lệnh, nên từ những qui định chung về khối lệnh đã nói trong
mục trên có thể rút ra những điều sau:
+ Phạm vi hoạt động: Các biến (mảng ) tự động chỉ có tác dụng bên trong thân của hàm mà
tại đó chúng được khai báo.
+ Thời gian tồn tại: Các biến (mảng) tự động của một hàm sẽ tồn tại (được cấp phát bộ
nhớ) trong khoảng thời gian từ khi máy bắt đầu làm việc với hàm đến khi máy ra khỏi hàm.
+ Nhận xét:
Do chương trình bắt đầu làm việc từ câu lệnh đầu tiên của hàm main ( ) và khi máy ra khỏi
hàm main() thi chương tình kết thúc, nên các biến , mảng khai báo trong hàm main( ) sẽ
tồn tại trong suốt thời gian làm việc của chương trình.
6.1.2 Khởi đầu
Chỉ có thể áp dụng cơ chế khởi đầu(khởi đầu trong khai báo) cho biến tự động .
Muốn khởi đầu cho một mảng tự động ta phải sử dụng toán tử gán.
Ví dụ:
Đoạn chương trình
Nghề: Tin học văn phòng (MĐ13) Tài liệu giảng dạy môn: Lập trình căn bản
30
main()
{
float a[4]={3.2,1.5,3.6,2.8};
}
Sai ở chỗ đã sử dụng cơ chế khởi đầu cho mảng tự động a.
Biến, mảng tự động chưa khởi đầu thì giá trị của chúng là hoàn toàn là không xác
định.
Là vô nghĩa và không thể làm việc được, vì nó thực hiện ý định đưa ra màn hình giá
trị của biến a và phần tử mảng b[1] trong khi cả hai đều chưa được khởi đầu.
6.2 Biến, mảng ngoài
+ Định nghĩa: biến, mảng khai báo bên ngoài các hàm gọi là biến, mảng ngoài.
+ Thời gian tồn tại: BIến, mảng ngoài sẽ tồn tại (được cáp phát bộ nhớ) trong suốt
thời gian làm việc của chương trình.
+ Phạm vi sử dụng: Phạm vi hoạt động của biến, mảng ngoài là từ vị trí khai báo của chúng
cho đến cuối tệp chương trình. Như vậy, nếu một biến, mảng ngoài được khai báo ở đầu
chương trình (đứng trước tất cả các hàm ) thì nó có thể được sử dụng trong bất kỳ hàm nào
miễn là hàm đó không có các biến tự động trùng tên với biến mảng ngoài này.
Chú ý: Nếu chương trình trình viết trên nhiều tập tin và các tập tin được dịch độc lập, thì
phạm vi sử dụng của biến mảng ngoài có thể mở rộng từ tập tin này sang tập tin khác bằng
từ khóa extern.
+ Các qui tắc khởi đầu
1/ Các biến, mảng ngoài có thể khởi đầu (1 lần) vào lúc dịch chương trình bằng cách sử
dụng các biểu thức hằng. Nếu không được khởi đầu, máy sẽ gán cho chúng giá trị không.
Ví dụ:
char sao=’*’;
int a=6*365;
long b 34*3*2467;
float x=32.5;
float y[6]= {3.2,0,5.1,23,0,41};
int z[3][2]={
{25,31},
{46,54},
{93,81}
};
main()
{
.
.
}
2/ Khi khởi dầu mảng ngoài có thể không cần chỉ ra kích thước (số PT) của nó. Khi đó,
máy sẽ dành cho mảng một khoảng nhớ đủ để thu nhận danh sách giá trị khởi đầu.
Ví dụ:
float a[]={2.6,3,15};
int t[][4]={
{6,7,8,9},
{3,12,4,14};
};
Nghề: Tin học văn phòng (MĐ13) Tài liệu giảng dạy môn: Lập trình căn bản
31
3/ Khi chỉ ra kích thước của mảng, thì kích thước này cần không nhỏ hơn kích thước của bộ
khởi đầu.
Ví dụ:
float h[6][3] = {
{4, 3, 2}, {6, 1,9},
{0.5.2}
};
4/ Đối với mảng 2 chiều có thể khởi đầu theo các cách sau ( Số giá trị khởi đầu trên mỗi
hàng có thể khác nhau)
Ví dụ: float a[][3]= {
{0},
{2.5, 3.6,8},
{-6.3}
};
5/ Bộ khởi đầu của một mảng char có thể:
Hoặc là danh sách của hằng kí tự,
Hoặc là một hằng xâu kí tự.
Ví dụ:
char name[] = {‘H’, ‘a’, ‘n’, ‘g’, ‘\0’”};
char name[] = “Hang”;
6.4 Biến tĩnh, mảng tĩnh
Để khai báo một biến, mảng tĩnh ta viết thêm từ khóa static vào đằng trước.
Ví dụ:
static int a, b, c[10];
static float x,y[10][6];
Các khai báo dạng trên có thể đặt bên trong hoặc bên ngoài các hàm. Nếu đặt bên
trong ta có các biến , mảng tĩnh trong, đặt bên ngoài ta có các biến, mảng tĩnh ngoài.
Các biến, mảng tĩnh ( trong và ngoài ) giống biến mảng ngoài ở chỗ:
+ Chúng được cấp phát bộ nhớ trong suốt thời gian hoạt động của chương trình, do
đó, giá trị của chúng được lưu trữ từ đầu đến cuối chương trình.
+ Chúng có thể khởi đầu một lần khi dịch chương trình nhờ các biểu thức hằng. Các
qui tắc khởi đầu đối với biến, mảng ngoài áp dụng được đối với biến, mảng tĩnh. Sự khác
nhau giữa biến, mảng ngoài với biến mảng tĩnh chỉ phạm vi hoạt động sử dụng.
Nghề: Tin học văn phòng (MĐ13) Tài liệu giảng dạy môn: Lập trình căn bản
32
+ Các biến mảng tĩnh trong chỉ được sử dụng bên trong thân của hàm mà tại đó
chúng được khai báo.
+ Phạm vi sử dụng của các biến mảng tĩnh ngoài được tính từ khi chúng khai báo
đến cuối tệp gốc chứa chúng.
Trong trường hợp chương trình đặt trên một tệp, hoặc chương trình đặt trên nhiều
tệp nhưng dùng toán tử #include để kết nối các tệp với nhau thì các biến, mảng tĩnh ngoài
có cùng phạm vi sử dụng như các biến, mảng ngoài.
Ví dụ:
/* chuong trinh minh hoa cach khoi dau bien, mang tinh ngoai*/
#include
static int a=41, t[][3]= {
{25, 30, 40},
{145,83,10}
};
static float y[8]= {-45.8,32.5};
static float x[10][2] ={
{-125.3,48.9},
{145.6,83.5}
};
static char n1[]={‘T’, ‘h’, ‘u’, ‘\0’};
static char n2= “Thu”;
static char n3[10] = ‘T’, ‘h’, ‘u’, ‘\0’};
static char n4[10]= “Thu”;
main()
{
fprintf(stdprn “\na=%6d, t(1,2) =%6d, t(1,1)=%6d”,a, t[1][2],t[1][1]);
fprintf(stdprn,”\n\nx(1,1) =%8.2f, x(2,0)=%8.2f”,x[1][1],x[2][0]);
fprintf(stdprn, “\n\n%8s%8s%8s”,n1,n2,n3,n4);
}
Kết quả thực hiện chương trình:
a=41, t(1,2)=10, t(1,1)=83
x(1,1)=83.50, x(2,0)=0.00
Thu Thu Thu Thu
6.5 Bài tập áp dụng
Ví dụ:
Int i; /*bien ben trong*/
Float pi; /*bien ben ngoia*/
Int main()
{….
Nghề: Tin học văn phòng (MĐ13) Tài liệu giảng dạy môn: Lập trình căn bản
33
}
Ví dụ 2:
#include
#include
Int main( )
{int i, j;
clrscr();
i =4; j=5;
printf (“Gia tri cua I la %d”,i);
printf(“Gia tri cua j la %d”,j);
ì f (j>i)
{
int hieu=j-i; /*bien ben trong*/
printf(“\n hieu so cua j tru i la %d”, hieu);
}
else
{ int hieu =i-j /*bien ben trong*/
printf(“\n Gia tri cua i tru j la %d”, hieu);
}
getch( );
return 0;
}
Ví dụ 3:
Viết chương trình nhập vào n số nguyên. Tính và in ra trung bình cộng.
/* Tinh trung binh cong n so nguyen */
#include
#include
void main(void)
{
int ia[50], i, in, isum = 0;
printf("Nhap vao gia tri n:
"); scanf("%d", &in);
//Nhap du lieu vao mang
for(i = 0; i < in; i++)
{
printf("Nhap vao phan tu thu %d: ", i + 1);
scanf("%d", &ia[i]); //Nhap gia tri cho phan tu thu i
}
//Tinh tong gia tri cac phan
tu for(i = 0; i < in; i++)
isum += ia[i]; //cong don tung phan tu vao isum
printf("Trung binh cong: %.2f\n", (float) isum/in);
getch();
}
Nghề: Tin học văn phòng (MĐ13) Tài liệu giảng dạy môn: Lập trình căn bản
34
7. Thực hành
7.1 Mục đích yêu cầu:
Làm quen và nắm vững các cách khai báo biến, các kiểu dữ liệu.
Viết được các chương trình đơn giản với các hằng, biến và mảng.
7.2 Nội dung thực hành
Bài 1: Viết chương trình nhập vào bán kính của hình tròn. Tính chu vi à sdieenj tích của hình tròn
theo công thức:
Chu vi CV= 2*pi*r
Diện tích S= pi*r*r
In kết quả ra màn hình.
Bài 2: Viết chương trình nhập vào các giá trị điện trở R1, R2, của một mạch điện: tính tổng trở
theo công thức:
2
1
1
11
RRR
Bài 3: Viết chương trình nhập vào điểm ba môn Toán, Lý, Hóa của một học sinh. In ra điểm
trung bình của học sinh đó với hai số lẻ thập phân.
Bài 4: Viết chương trình nhập vào ngày, tháng, năm. In ra ngày tháng năm theo dạng dd/mm/yy.
Ví dụ 20/11/99.
Bài 5: Viết chương trình nhập vào 1 dãy số dương rồi in tổng các số dương đó.
Nghề: Tin học văn phòng (MĐ13) Tài liệu giảng dạy môn: Lập trình căn bản
35
BÀI 3: BIỂU THỨC
1. Các phép toán
1.1 Phép toán số học
Trong ngôn ngữ C, các toán tử +, -, *, / làm việc tương tự như khi chúng làm
việc trong các ngôn ngữ khác. Ta có thể áp dụng chúng cho đa số kiểu dữ liệu có sẵn
được cho phép bởi C. Khi ta áp dụng phép / cho một số nguyên hay một ký tự, bất kỳ
phần dư nào cũng bị cắt bỏ. Chẳng hạn, 5/2 bằng 2 trong phép chia nguyên.
Toán tử Ý nghĩa
+ Cộng
- Trừ
* Nhân
/ Chia
% Chia lấy phần dư
-- Giảm 1 đơn vị
+
+
Tăng 1 đơn vị
1.2 Phép toán quan hệ và logic
Ý tưởng chính của toán tử quan hệ và toán tử Logic là đúng hoặc sai. Trong C mọi
giá trị khác 0 được gọi là đúng, còn sai là 0. Các biểu thức sử dụng các toán tử quan hệ và
Logic trả về 0 nếu sai và trả về 1 nếu đúng.
Toán tử Ý nghĩa
Các toán tử quan hệ
> Lớn hơn
>= Lớn hơn hoặc bằng
< Nhỏ hơn
<= Nhỏ hơn hoặc bằng
== Bằng
!= Khác
Các toán tử Logic
&& AND
|| OR
! NOT
Bảng chân trị cho các toán tử Logic:
P q p&&q p||
q
!p
0 0 0 0 1
0 1 0 1 1
1 0 0 1 0
1 1 1 1 0
Các toán tử quan hệ và Logic đều có độ ưu tiên thấp hơn các toán tử số học. Do
đó một biểu thức như: 10 > 1+ 12 sẽ được xem là 10 > (1 + 12) và kết quả là sai
(0).
Nghề: Tin học văn phòng (MĐ13) Tài liệu giảng dạy môn: Lập trình căn bản
36
Ta có thể kết hợp vài toán tử lại với nhau thành biểu thức như sau:
10>5&&!(10<9)||3<=4 Kết quả là đúng
Thứ tự ưu tiên của các toán tử quan hệ là Logic
Cao nhất: !
> >= < <=
== !=
&& Thấp nhất: ||
1.3 Chuyển đổi kiểu gía trị
Các toán tử Bitwise ý nói đến kiểm tra, gán hay sự thay đổi các Bit thật sự trong 1 Byte
của Word, mà trong C chuẩn là các kiểu dữ liệu và biến char, int. Ta không thể sử dụng
các toán tử Bitwise với dữ liệu thuộc các kiểu float, double, long double, void hay các
kiểu phức tạp khác.
Toán tử Ý nghĩa
& AND
| OR
^ XOR
~ NOT
>> Dịch phải
<< Dịch trái
Bảng chân trị của toán tử ^ (XOR)
p q p^q
0 0 0
0 1 1
1 0 1
1 1 0
1.4 Phép toán Tăng và giảm (++ & --)
Toán tử ++ thêm 1 vào toán hạng của nó và – trừ bớt 1. Nói cách khác:
x = x + 1 giống như ++x x = x – 1 giống như x—
Cả 2 toán tử tăng và giảm đều có thể tiền tố (đặt trước) hay hậu tố (đặt sau) toán hạng.
Ví dụ: x = x + 1 có thể viết x++ (hay ++x)
Tuy nhiên giữa tiền tố và hậu tố có sự khác biệt khi sử dụng trong 1 biểu thức. Khi 1
toán tử tăng hay giảm đứng trước toán hạng của nó, C thực hiện việc tăng hay giảm
trước khi lấy giá trị dùng trong biểu thức. Nếu toán tử đi sau toán hạng, C lấy giá trị
toán hạng trước khi tăng hay giảm nó. Tóm lại:
x = 10
y = ++x //y = 11
Nghề: Tin học văn phòng (MĐ13) Tài liệu giảng dạy môn: Lập trình căn bản
37
Tuy nhiên:
x = 10
y = x++; //y = 10
Thứ tự ưu tiên của các toán tử số học:
++ -- sau đó là * / % rồi mới đến + -
2. Câu lệnh gán và biểu thức.
2.1 Biểu thức
Biểu thức là một sự kết hợp giữa các toán tử (operator) và các toán hạng
(operand) theo đúng một trật tự nhất định.
Mỗi toán hạng có thể là một hằng, một biến hoặc một biểu thức khác.
Trong trường hợp, biểu thức có nhiều toán tử, ta dùng cặp dấu ngoặc đơn () để
chỉ định toán tử nào được thực hiện trước.
Ví dụ: Biểu thức nghiệm của phương trình bậc hai:
(-b + sqrt(Delta))/(2*a)
Trong đó 2 là hằng; a, b, Delta là biến.
2.2 Câu lệnh gán
Lệnh gán (assignment statement) dùng để gán giá trị của một biểu thức cho một
biến.
Cú pháp: =
Ví dụ:
int main() {
int x,y;
x =10; /*Gán hằn
Các file đính kèm theo tài liệu này:
- tailieu_c_1981.pdf