Lập trình C: Bài 2 – Các thành phần trong C
Nội dung
1. Các ký tự điều khiển
- \n : Nhảy xuống dòng kế tiếp canh về cột đầu tiên.
- \t : Tab ngang.
- \r : Nhảy về đầu hàng, không xuống hàng.
- \a : Tiếng kêu bip.
- \\ : In ra dấu \
- \” : In ra dấu “
- \’ : In ra dấu ‘
- %%: In ra dấu %
Đây chỉ là một số ký tự điểu khiển quen thuộc, hay dùng, ngoài ra còn một só ký tự điều khiển khác các bạn có thể xem thêm trong các tài liệu khác. Để hiểu rõ về các ký tự điều khiển các bạn hãy chạy thử chương trình sau và tự rút ra nhận xét cho riêng mình.
#include <stdio.h> int main() { printf("\a"); printf("Hinh nhu vua co tieng gi keu @@\n"); printf("Ban dang o dong thu 2\nBay gio xuong dong 3 roi ne ^^\n"); printf("\tDong nay cach ra 1 tab thi phai?\n"); printf("\t\t\t\t\t\tCach ra nhieu tab qua \rVe dau dong thoi\n"); printf("Dau \\ \nDau \'\nDau \" \nDau %%\n"); // day la mot dong ghi chu va chi co tac dung chu thich khi viet code cho de hieu /* Day la mot doan ghi chu Doan ghi chu nay co 2 dong */ return 0; }
2. Bộ chữ viết
Bộ chữ viết trong ngôn ngữ C bao gồm những ký tự, ký hiệu sau: (phân biệt chữ in hoa và in thường):
- 26 chữ cái latinh hoa A,B,C…Z
- 26 chữ cái latinh thường a,b,c …z.
- 10 chữ số thập phân 0,1,2…9.
- Các ký hiệu toán học: +, -, *, /, =, <, >, (, )
- Các ký hiệu đặc biệt: :. , ; ” ‘ _ @ # $ ! ^ [ ] { } …
- Dấu cách hay khoảng trống, xuống hàng (\n) và tab (\t)
3. Từ khóa
Là các từ mà ngôn ngữ C đã xây dựng sẵn và có những chức năng nhất định, sau này làm nhiều các bạn sẽ biết dần dần. Chúng ta không nên định nghĩa lại những từ khóa này.
asm • auto • break • case • cdecl • char • class • const • continue • _cs • default • delete • do double • _ds • else • enum • _es • extern • _export • far • _fastcall • float • for •friend • goto • huge • if • inline • int • interrupt • _loadds • long • near • new • operator • pascal • private • protected • public • register • return • _saveregs • _seg • short •signed • sizeof • _ss • static • struct • switch • template • this • typedef • union • unsigned • virtual • void • volatile • while
4. Kiểu dữ liệu
Trong cuộc sống có nhiều loại vật dụng để chứa đựng các thứ khác nhau như Rổ để đựng rau, Cốc (ca) để đựng nước. Cũng giống vậy, trong lập trình có các kiểu dữ liệu để có thể biểu diễn (lưu trữ) các thành phần tương ứng.
Mỗi kiểu dữ liệu sẽ có kích thước (chiếm diện tích), loại giá trị và miền giá trị khác nhau trong bộ nhớ máy tính khi sử dụng. Dưới đây là một số kiểu dữ liệu cơ bản hay dùng trong C.
Loại dữ liệu | Kiểu dữ liệu | Kích thước (byte) | Miền giá trị |
---|---|---|---|
Kiểu Ký tự | char | 1 | -128 đến 127 |
unsigned char | 1 | 0 đến 255 | |
Kiểu Số nguyên | short | 2 | -32768 đến 32767 |
int | 4 | -2147483648 đến 2147483647 | |
long | 4 | -2147483648 đến 2147483647 | |
long long | 8 | -9223372036854775808 đến 9223372036854775807 | |
Kiểu Số thực | float | 4 | 1.175494-38 đến 3.40282338 |
double | 8 | 2.225074308 đến 1.797693308 | |
long double | 12 | 3.362103-4932 đến 1.1897314932 |
Lưu ý:
- Trên đây là bảng thông tin của một số kiểu dữ liệu thông dụng hay dùng. Còn khá nhiều kiểu dữ liệu khác nhưng tôi không đưa vào, các bạn có thể tham khảo tại đây cho Kiểu số nguyên, đây cho kiểu số thực
- Do C (hoặc C++) có nhiều phiên bản khác nhau và dùng trên các hệ điều hành khác nhau nên có thể giá trị và kích thức các kiểu dữ liệu cũng khác nhau. Bảng trên là tôi kiểm tra trên win 7, Dev-C 5.11.
Các bạn có thể dùng chương trình sau chạy và kiểm tra kết quả:
#include <stdio.h> #include <limits.h> // limits for interger #include <float.h> // limits for float int main() { printf("TYPE %6s %20s %20s\n", "SIZE", "MIN VALUE", "MAX VALUE"); printf("char: %6ld byte %20d %20d\n", sizeof(char), CHAR_MIN, CHAR_MAX); printf("unsigned char: %6ld byte %20d %20d\n", sizeof(unsigned char), 0, UCHAR_MAX); printf("short: %6ld byte %20d %20d\n", sizeof(short), SHRT_MIN, SHRT_MAX); printf("int: %6ld byte %20d %20d\n", sizeof(int), INT_MIN, INT_MAX); printf("long: %6ld byte %20ld %20ld\n", sizeof(long), LONG_MIN, LONG_MAX); printf("long long: %6ld byte %20lld %20lld\n", sizeof(long long), LLONG_MIN, LLONG_MAX); printf("float: %6ld byte %20e %20e\n", sizeof(float), FLT_MIN, FLT_MAX); printf("double: %6ld byte %20e %20e\n", sizeof(double), DBL_MIN, DBL_MAX); printf("long double: %6ld byte %20Le %20Le\n", sizeof(long double), LDBL_MIN, LDBL_MAX); return 0; }
5. Tên
Mỗi chúng ta ai cũng có tên, do vậy trong lập trình C các thành phần cũng sẽ có tên. Ví dụ như tên hàm, tên biến, tên hằng số, tên nhãn,…
Tên hợp lệ là một chuỗi liên tiếp gồm ký tự chữ, số hoặc dấu gạch dưới. Tên phân biệt chữ hoa chữ thường và không trùng với từ khóa.
- Tên phân biệt chữ hóa chữ thường nên: a khác A, quan khác Quan.
- VD Các tên đúng: a, quan, nguyenvanquan7826, quan_7826, _7826, _nhung, _123huong.
- **VD Các tên sai: **
Tên sai | Nguyên nhân |
---|---|
1 | Bắt đầu bằng số |
1a | Bắt đầu bằng số |
quan 7826 | Chứa dấu cách |
quan-7826 | Chứa dấu gạch ngang |
f(x) | Chứa dấu ngoặc nhọn |
int | Trùng với từ khóa |
6. Biến
Tương ứng với mỗi kiểu dữ liệu chúng ta có các biến thuộc các kiểu đó và có miền giá trị tương ứng như trên dùng để lưu giá trị. Các bạn cần phân biệt kiểu và biến.
VD cái rổ A để đựng rau muống, cái rổ B để đựng rau cần và chúng cùng là rổ, thì tương ứng biến a lưu giá trị số 5, còn biến b lưu giá trị số 9 mặc dù chúng cùng kiểu số nguyên.
Biến có thể thay đổi giá trị trong quá trình chạy chương trình.
6.1 Khai báo biến
Để khai báo biến ta dùng cú pháp:
Kiểu_dữ_liệu Danh_sách_tên_biến;
Lý thuyết thì hơi dài, các bạn xem và chạy chương trình sau sẽ thấy cụ thể hơn:
#include <stdio.h> int main() { int a, b; // khai bao 2 bien kieu so nguyen float c; // khai bao 1 bien kieu so thuc // Gan gia tri cho cac bien a = 1; b = 2; c = 3.4; // vua khai bao bien vua gan gia tri int e = 4, f = 6; printf("a = %d; b = %d\n", a, b); printf("c = %f\n", c); printf("e = %d; f = %d\n", e, f); return 0; }
Như trên các bạn thấy cấu trúc khai báo rồi đó. Còn về lệnh xuất ra màn hình các giá trị thì có một số điều khác đó là cách sử dụng %d, %f . Cái này mình sẽ nói cụ thể ở phần sau, đến đây các bạn cứ viết theo để thấy được cách khai báo biến là ok roài. !
6.2 Phạm vi của biến
Khi lập trình, bạn phải nắm rõ phạm vi của biến. Nếu khai báo và sử dụng không đúng, không rõ ràng sẽ dẫn đến sai sót khó kiểm soát được, vì vậy bạn cần phải xác định đúng vị trí, phạm vi sử dụng biến trước khi sử dụng biến.
Mỗi biến được khai báo ở đâu thì sẽ được dùng và có phạm vi hoạt động tương ứng từ nơi nó khai báo đến dấu đóng ngoặc nhọn } ngang cấp với nó.
Ví dụ chương trình sau.
#include <stdio.h> int a = 1, b = 5; // khai bao bien toan cuc, no se duoc dung o bat ky dau ke tu dong nay. int main() { // khai bao 2 bien trong ham main, no se duoc dung trong toan bo ham main ke tu dong nay int c = 4, d = 6; if(c < d) { int e = 6, d = 8; // khai bao bien e va d, no duoc dung trong doan nay. c = 7; printf("gia tri cac bien trong khoi:\n"); printf("e = %d \t d = %d \t c = %d\n", e, d, c); } // den day bien e, d vua khai bao khong con hoat dong nua. // printf("gia tri bien e = %d\n", e); // lenh nay sai vi bien e khong con ton tai nua printf("gia tri cac bien trong ham main:\n"); printf("c = %d \t d = %d\n", c, d); printf("gia tri cac bien toan cuc:\n"); printf("a = %d \t b = %d\n", a, b); return 0; }
Các bạn chạy chương trình, xem kết quả và tự rút ra nhận xét nhá.
Trong này có một lời giải thích nhỏ với các bạn sau khi chạy chương trình là chúng ta có khai báo 2 biến d, và 2 biến d này do nằm trong 2 khối lệnh khác nhau (1 cái nằm trong hàm main, 1 cái nằm trong đoạn lệnh if ) nên chúng hoàn toàn khác nhau, không ảnh hưởng gì đến nhau. Nhưng biến c thì chỉ khai báo 1 lần, nên khi dùng c trong đoạn lệnh if thì chính là dùng biến c của hàm main đã khai báo và biến c đã được thay đổi giá trị.
7. Hằng
Hằng cũng giống như biến nhưng không thể thay đổi giá trị. Nếu bạn cố tình gán giá trị mới cho hằng thì sẽ bị sai.
Tên hằng thường viết in hoa để dễ nhận biết và phân biệt với biến.
Cú pháp khai báo hằng: #define TÊN_HẰNG giá_trị (Lưu ý không có dấu chấm phẩy ở cuối).
Các bạn chạy và xem kết quả của ví dụ sau:
#include <stdio.h> #define AGE_MAX 150 // hang so #define C 'a' // hang ky tu #define NICK_NAME "nguyenvanquan7826" // hang chuoi int main() { printf("hang AGE_MAX = %d\n", AGE_MAX); printf("hang C = %c\n", C); printf("hang NICK_NAME = %s\n", NICK_NAME); // AGE_MAX = 10; // lenh nay sai vi hang khong the thay doi duoc gia tri return 0; }
Bài tập: Các bạn chạy các ví dụ ở trong bài và suy nghĩ rút ra nhận xét của riêng mình.
trong phần 6.2 ấy ạ.có lệnh if(c<d) có tác dụng gì ko ạ, em thử xóa nó đi rồi chạy chương trình thì ko có gì thay đổi cả
Ah đấy là lệnh kiểm tra xem c có nhỏ hơn d không. Cái đó tạo ta nhằm mục đích tạo khối lệnh bằng cặp dấu {}. Do trong này c luôn nhỏ hơn d nên ko vấn đề gì nếu vẫn còn khối lệnh {}
em thử đổi dấu if(c > d) chương trình cẫn ra kết quả nhu vậy ạ
a ơi e mới học lập trình nên a có thể giải thích cho e hiểu printf và scanf có tác dụng gì và %d, dấu & nữa ạ?
printf là lệnh in ra màn hình
scanf là lệnh nhập vào từ bàn phím
%d, & là quy tắc viết. Hiện tại bạn chỉ cần hiểu vậy. Chi tiết sẽ có ở các bài sau.
Ad cho em hỏi mấy cái %d %f là cái gì vậy ạ
Với lại học ký hiệu ấy ở đâu ạ
Đó là các chuỗi định dạng. Em xem trong bài 3 nhé.
Anh cho em hỏi là nếu cần in ra các phần tử của mảng 2 chiều thì lệnh thế nào ạ?
thưa thầy cho em hỏi:
1. miền -32768 đến 32767 có phải khoảng giá trị Kiểu Số nguyên short thể hiện được không?
2.tại sao với kích thước 2 byte lại thể hiện khoảng giá trị -32768 đến 32767
Đúng rồi em. 2 byte = 16 bit. Nên biểu diễn được các số từ 0 đến 2^16-1 = 65535, nếu dùng để biểu diễn số âm thì được từ -32768 đến 32767
Mục 6.2
Dòng 21 tại sao không phải in ra c=4 ạ, anh giải thích hộ em
Ở trên mình đã giải thích rồi nhé. Biến c thì chỉ khai báo 1 lần, nên khi dùng c trong đoạn lệnh if thì chính là dùng biến c của hàm main đã khai báo và biến c đã được thay đổi giá trị.
các bài tập ở cuối mỗi bài thì nộp ở đâu để chấm vậy anh ?
Ah bạn có thể vào https://chamcode.net để làm và nộp các bài tập nhé.
cho em hỏi ở phần chương trình ở mục 4
%61d có khác j vs %d ko ạ và mục đích sử dụng %61d là làm gì
là 6ld nhé, ld là số long, 6 là số khoảng trống để biểu diễn. Bạn nên dọc hết một lượt để hiểu hơn (trong bài 3 cũng có nói)
cảm ơn anh
Dạ em chào anh !
Em mới học code từ blog này, có vấn đề với file exe.
Trong thư mục chứa file gốc, nếu e mở file .c bằng Code::Blocks thì chạy chương trình được, nhưng mở file exe thì chỉ nhá lên rồi tắt mà không chạy được. Làm sao để chạy được file này vậy anh ?
Vì em cần làm bài tập lớn nộp GV, gửi file matlab hoặc file exe để chạy
Cảm ơn anh
Bạn cần có lệnh dừng màn hình ở cuối chương trình nhé. system(“pause”);
Đọc lại đoạn cuối bài 1 sẽ có.
Cho em hỏi có lệnh gọi là getchar là s v ạ . Em ko hiểu lệnh đó làm gì
đọc 1 ký tự nhé.
phần 7 ví dụ không chạy được ạ
Nó báo lỗi gì bạn?