// khơng hợp lệ vì tín có chữ số đứng đầu // khơng hợp lệ vì có kí tự -
// họp lệ
Ngược lại với hằng khi đê khai bâo thì giâ trị của hằng sẽ tồn tại
trong suốt vòng đời của hằng đó thì biến ln có thể được gân giâ trị mới
trong vịng đời của biến đó.
Ví dụ 2.1.6
const int x=2, y = 3;// khai bâo hai hăng X vă y
int z; // khai bâo biến z
z = X + y // tính tổng X, y rồi gân cho z z ++; // tăng z lín một
X = z; /* Trình dịch bâo lỗi. Khơng gân biến cho hằng */ y = 5; /* Trình dịch bâo lỗi. Không gân giâ trị cho hằng*/ Khi khai bâo biến, chương trình dịch sẽ cấp phât một vùng nhớ băng
với kích cỡ kiểu biến. Nếu có giâ trị khởi đầu thì gân giâ trị khen đầu cho biến.
Vị trí khai bâo biến: Đầu chương trình sau khi khai bâo tiền xử lý,
đầu của thđn hăm hoặc đầu khối lệnh. Vị trí khai bâo biến quyết định đến vịng đời, phạm vi hoạt động của biến.
o Nếu biến khai bâo ngoăi mọi hăm, dưới khai bâo tiền xử lý thì biến
lă biến toăn cục. Phạm vi hoạt động của biến sẽ lă từ vị trí của nó được khai bâo cho tới hết chương trình.
oNếu biến khai bâo trong một hăm thì biến lă biến cục bộ vă vịng
đồi chỉ trong hăm đó. Vị trí khai bâo của biến cục bộ phải ở câc dòng đầu
của hăm, trín tất cả câc cđu lệnh điều khiển, câc phĩp tôn.
Ví dụ 2.1.7
#include <stdio.h>
#include <conio.h>
ỉnt X=1; // biến X lă biến toăn cục
int test 0;
int main(int argc, char *argv[J)
{ int y = 5; printf("%d", test()); printf("%d",y); getch(); return 0; } int test 0 { return X *2; }
=>Chạy chương trình năy kết quả in ra fren măn hình sẽ lă: 2 5
Nếu sửa hăm test thănh:
int test_() {
return y*2;
Trình biín dịch sẽ bâo lỗi vì biến y chi có phạm vi trong hăm main.
Ví dụ sau cũng cho kết quả tương tự như ví dụ trín dù biến toăn cục X được đặt ở vị trí khâc minh hoạ phạm vi hoạt động của biến toăn cục:
Ví dụ 2.1.8
^include <stdio.h>
#include <conio.h>
int test ();
int main(int argc, char *argv[]) {
inty = 5;
printf("%d", test());
printf("\n%d",y);
getch(); //Hăm dừng măn hình để xem kết quă, khi nhấn một phím
bất kỳ thì chuyển //về măn hình soạn thảo return 0; } int x=l; int test 0 { return X *2; }
Nhưng nếu đổi lại ví trí khai bâo biến X vă định nghĩa hăm test như
sau, thì chương trình sẽ bị bâo lỗi: #include <stdio.h>
#include <conio.h> int test 0;
int main(int argc, char *argv[])
{
int y — 5;
printf("%d", testO);
getch(); return 0; } int test 0 { return X *2; } int x=l;
Chú ý: Nín gân giâ trị khởi đầu phù hợp cho biến. Ví dụ chương
trình sau khi viết sẽ khơng bâo lỗi nhưng chạy ra kết quả sai.
Ví dụ 2.1.9
#include <stdio.h> #include <conio.h> int test 0;
int main(int argc, char *argv[J)
{ int y; int X = 5; y = y*x; printf("\n%d",y); getch(); return 0; }
Ngun nhđn của việc chạy sai nói trín lă do biến y chưa được gân
giâ trị khởi đầu nín phĩp tôn y=y*x sẽ cho ra một kết quả khơng kiểm sôt được.
Chú ý tiếp theo đó lă khi thật sự cần thiết thì ta mới cần khai bâo vă sử dụng biến toăn cục bời vì khai bâo biến địa phương để giảm không
2.1.7. Biểu thức
Biểu thức lă sự kết hợp giữa câc toân hạng vă toân tử theo một câch
phù hợp để diễn đạt một cơng thức tôn học năo đó. Câc tôn hạng có thể lă hằng, biến hay lời gọi hăm hoặc lă một biểu thức con năo đó. Câc tôn tử phụ thuộc văo tập câc tôn tử mă ngơn ngữ hỗ trợ.
Một biểu thức có thể ước lượng được vă trả về giâ trị thuộc một kiểu
dữ liệu năo đó. Giâ trị đó được gọi lă giâ trị biểu thức. Kiểu được trả về được gọi lă kiểu cùa biểu thức. Ví dụ một biểu thức sau khi ước lượng tră lại một số ngun thì biểu thức đó có kiểu ngun hay nói ngắn gọn lă biểu thức ngun.
Biểu thức logic trong C: Trong c khơng có kiểu dữ liệu logic như một số ngơn ngữ lập trình khâc. Ngôn ngữ c sừ dụng số để diễn đạt cấ
giâ trị logic. Biểu thức sau khi ước lượng trả về một giâ trị lă 0 thì biểu
thức sai vă giâ trị 1 lă biểu thức đúng. Ví dụ: (5= =3) lă biểu thức sai, giâ
trị trả về của biểu thức lă 0. Biểu thức (5>3) lă biểu thức đúng, vì thế nó sẽ ưả lại một số ngun có giâ trị lă 1. Biểu thức có thể thấy trong bất kì
một cđu lệnh năo của c. Ví dụ như:
- vế phải của một cđu lệnh gân: ví dụ: X = 5*a + sqrt(y); - Lăm tham số thực sự cùa hăm: ví dụ: sqrt(y)
- Lăm chỉ số: ví dụ: x[++i]
-Trong cđu lệnh điều kiện if, for
2.1.7. L Cđu lệnh
Cđu lệnh chính lă một chỉ thị cho mây tính để lăm một cơng việc năo
đó. Trong chương trình có thể có nhiều cđu lệnh, vă cđu lệnh có thể viết
trín 1 dịng hoặc ưín nhiều dịng (trừ xđu kí tự vă macro) sau đó kết thúc
bằng dấu chấm phẩy;. Cũng có thể viết nhiều lệnh trín một dịng (với trường hợp của macro bắt buộc phải viết cđu lệnh trín một dịng). Đổi với xđu kí tự, nếu nhất thiết phải viết trín nhiều dịng thi phải thím kí tự \ văo cuối dịng để bâo chương trình dịch nối nội dung dịng trín với dịng dưới đỏ.
Ví dụ 2.1.10
#include <stdio.h>
//include <conio.h>
int main() {
printf("Xin chao tat ca cac ban! Day la mot chng trình viet
bang ngon ngu\
lap trinh C");
getch();
return 0; }
Ví dụ 2.1.11.Cấu trúc điều khiển if...else được viết dưới đđy không
bâo lỗi cú phâp nhưng chương trình chạy sai
int x;
printf (“Nhap gia tri cho x:”); scanf(“%d”, &x);
if(x= =0);
printf(“Số bạn vừa nhập lă số 0”);
Nội dung của đoạn mê trín lă nhập văo số X, sau đó kiểm fra xem nếu biểu thức x=0 cho giâ trị 1 thì X sẽ lă sổ 0 vă in ra dòng “Số bạn vừa nhập lă số 0”. Nhưng do sau cđu lệnh if đê đặt ngay một dấu; trình
biín dịch hiểu rằng tính giâ trị của biểu thức x= =0, vă nếu x= =0 lă đúng thì khơng thực hiện gì cả. Mây tính sẽ thực hiện tới cđu lệnh tiếp theo lă in ra dòng chữ “Số bạn vừa nhập lă số 0”. Như vậy kết quả chương trình
năy lă người dùng có nhập văo số năo thì nó cũng in ra dịng thơng bâo trín.
Khi người sử dụng muốn viết nhiều cđu lệnh trong một chương trình
để thực hiện một hay nhiều cơng việc đồng thời (ví dụ như thực hiện cơng việc sau khi thỏa măn điều kiện của cđu lệnh IF) thì câc cđu lệnh đó phải được viết trong cặp {} để trở thănh khối lệnh.
2.1.7.2. Phĩp toân
Đi cùng với phĩp toân lă câc toân tử vă toân hạng, câc tôn tử chính lă câc kí hiệu để thể hiện phĩp toân vă sẽ thực hiện với câc toân hạng năo.