Ngôn ngữ C
Ngôn ngữ lập trình CCHƯƠNG I:SƠ LƯỢC VỀ NGÔN NGỮ CI. LỊCH SỬ PHÁP TRIỂN CỦA NGÔN NGỮ CC là một ngôn ngữ lập trình do Dennis M.Ritchie và W. Kernighan viết ra nhằm đáp ứng nhu cầu của những nhà tin học trong việc xây dựng phần mềm hệ thống, hệ điều hành. Nó được phát triển tại phòng thí nghiệm Bell vào những năm 1960 đầu 1970. Năm 1978 cuốn giáo trình “Ngôn ngữ lập trình C” do chính tác giả của ngôn ngữ được xuất bản và phát triển rộng rãi. Lúc đầu ngôn ngữ C được nghiên cứu và thao tác trên hệ điều hành UNIX, nhưng nay đã được phát triển rộng rãi trên các hệ điều hành khác.Thực tế, C đã tổ hợp được các thành tựu tiên tiến của tin học và đã trở thành một chuẩn mặc nhiên trong tin học.Không chỉ có C mà còn có rất nhiều Ngôn ngữ lập trình (NNLT) bậc cao khác, chúng đều có một số nét chung như sau:+ Quy định một số các ký tự dùng để viết chương trình, tập các ký tự này gọi là Bảng chữ cái của ngôn ngữ.+ Quy định một số từ đặc biệt với các chức năng khác nhau gọi là Từ khóa.+ Quy định cấu trúc chung của một chương trình và các giai đoạn khi viết từng phần của chương trình.+ Tổ chứa một thư viện các chương trình con chuẩn hổ trợ người viết chương trình.+ Chương trình dịch.II. BỘ TỪ VỰNG CỦA C1. Bộ ký tự- Gồm bộ chữ cái La Tin từ A(a) đến Z(z).- Ký tự gạch nối: _- Bộ chữ số từ 0 đến 9.- Các ký hiệu toán học: + - * / = <> ( )- Các ký hiệu đặc biệt: . , : ; [] % \ # $,…2. Từ khoáLà các từ dành riêng trong ngôn ngữ, mỗi ngôn ngữ có một bộ từ khoá riêng, mỗi từ có một chức năng nhất định, nghĩa là khi lập trình bằng ngôn ngữ C chúng ta không được sử dụng chúng vào những công việc khác như đặt tên cho biến, hàm, chương trình con …whilechardoexterngotointerruptregistersizeoftypedefbreakconstdoublefarhugelongreturnstaticunioncasecontinueelsefloatifnearshortstructunsigneddefaultenumforintsignedswitchvoidChú ý: Từ khoá phải được viết bằng chữ thường. Ngôn ngữ C phân biệt chữ hoa và chữ thường, có nghĩa là INT sẽ khác với int.3. Tên Tên là một khái niệm rất quan trọng, nó dùng để phân biệt hay xác định các đại lượng trong một chương trình. Chúng ta có tên hằng, tên biến, tên mảng, tên hàm, tên con trỏ, tên cấu trúc, tên nhãn,… Tên phải được đặt theo qui tắc sau:Trang: 1 Ngôn ngữ lập trình C- Tên là một dãy các ký tự: chữ, số và dấu gạch nối ( _ ). Ký tự đầu của tên phải là chữ hoặc là dấu gạch nối. Tên không được đặc trùng với từ khoá. Độ dài cực đại của tên mặc định là 32.- Chú ý: Trong các tên, chữ hoa và chữ thường được xem là khác nhau. Trong C thường dùng chữ hoa để đặt tên cho các hằng và dùng chữ thường để đặt tên cho hầu hết các đại lượng khác như biến, mảng, hàm, cấu trúc. Tuy nhiên đây không phải là điều bắt buộc.Ví dụ:delta, temp, x1, y1 tên đúng3xyz, r#2 tên sai4. Dòng lệnhDòng lệnh là dòng ra lệnh cho chương trình thực hiện công việc mà người lập trình đã định sẵn. Trong một chương trình có thể có một dòng lệnh hoặc nhiều dòng lệnh. Cuối mỗi dòng lệnh phải có dấu chấm phẩy.5. Khối lệnhKhối lệnh là một dãy gồm nhiều dòng lệnh. Những dòng lệnh được bao trong cặp ngoặc móc { }.6. Lời giải thíchChúng ta có thể dùng cặp dấu // hoặc /* <những dòng ghi chú> */ để chen vào những dòng giải thích cho chương trình thêm sáng sủa, rõ ràng mà không ảnh hưởng đến các phần khác và chương trình dịch khi biên dịch cũng bỏ qua những dòng này.III. DẠNG CHUNG CỦA MỘT CHƯƠNG TRÌNH C<khai báo thư viện>[<khai báo các đối dữ liệu ngoài>][<khai báo nguyên mẫu của các hàm>]void main( ){<khai báo biến><các dòng lệnh>}[<Định nghĩa các hàm>]IV. NHỮNG ĐIỀU CẦN BIẾT KHI THỰC HÀNH C1. Khởi động và thoát- Khởi động: Vào chương trình DOS, chuyển đến thư mục chứa tập tin turbo.exe, gõ lệnh turbo ↵ (Enter), cửa sổ của chương trình C xuất hiện.- Thoát: Nhấn tổ hợp phím Alt+X, hoặc chọn menu File\Quit.2. Cách soạn thảo và dịch một chương trình CCác bước thực hiện:- Mở cửa sổ soạn thảo bằng cách gõ phím F10+F, N.- Gõ các lệnh của chương trình.- Nhấn F2 để Save chương trình (tập tin có phần mở rộng .C).- Biên dịch chương trình: Dùng tổ hợp phím Alt+F9. Nếu chương trình có lỗi, những lỗi đó sẽ được hiển thị ở khung Message bên dưới, và dòng lệnh bị lỗi đầu tiên sẽ có một vệt màu xanh chỉ định, gõ phím Enter vệt xanh sẽ biến mất và vị trí con trỏ nằm sát ngay chỗ sai đầu tiên của chương trình. Sau khi sửa sai (nếu có) thì tiến hành biên dịch lại cho tới khi chương trình không còn lỗi.- Chạy chương trình: Dùng tổ hợp phím Ctl+F9.3. Các thao tác cơ bản thường sử dụngF2: Save chương trình.F10+F, N: Mở một cửa sổ soạn thảo mới.F6: di chuyển cửa sổ cuối cùng lên trên cùng.F3: Mở một file đã được save trước đó.Trang: 2 Ngôn ngữ lập trình CF10: Gọi thanh menu.Ctrl+K, B: Định đầu khối.Ctrl+K, K: định cuối khối.Ctrl+K, C: Sao chép một khối.Ctrl+K, V: Di chuyển một khối.Ctrl+K, Y: Xóa một khối.Ctrl+K, H: Bỏ chọn một khốiTrang: 3 Ngôn ngữ lập trình CCHƯƠNG II:HẰNG, BIẾN VÀ MẢNGI. CÁC KIỂU DỮ LIỆUTrong C có các kiểu dữ liệu sau:* Kiểu nguyên:Tên kiểu Kích thước Phạm vichar 1 byte -27 … 27unsigned char 1 byte 0 … 28 – 1int 2 bytes -215 … 215 – 1unsigned int 2 bytes 0 … 216 – 1short 2 bytes 0 … 216 – 1long 4 bytes -231 … 231 – 1unsigned long 4 bytes 0 … 232 - 1* Kiểu dấu phẩy động:Tên kiểu Kích thước Phạm vifloat 4 bytes 3.4E –38 … 3.4E +38double 8 bytes 1.7E –308 … 1.7E +308long double 10 bytes 3.4E –4932 …3.4E +4932II. HẰNGHằng là một đại lượng mà giá trị của nó không thay đổi trong quá trình tính toán. Sau đây là một số loại hằng được sử dụng trong C:1. Hằng số:* Hằng dấu phẩy động (float và double):Thường được viết theo 2 cách:Cách 1 (dạng thập phân): Số gồm phần nguyên và phần phân cách nhau bởi dấu chấm. Phần nguyên và phần phân có thể vắng mặt nhưng dấu chấm thập phân bắt buộc phải có.Ví dụ:123.456 , .34 (=0.34) , 15. (=15.0)Cách 2 (dạng khoa học hay dạng mũ): Số gồm phần định trị và phần bậc hai phần này cách nhau bởi chữ e hoặc E. Phần định trị có thể là một số nguyên hoặc số thực dạng thập phân. Phần bậc phải là một số nguyên.Ví dụ:123.456E-4 (=0.0123456)0.12E3 (=120.0)* Hằng nguyên (int và long):Hằng int là số nguyên có giá trị trong khoảng từ -32768 đến 32767. Nếu số vượt quá miền giá trị này thì nó sẽ thuộc hằng long. Hằng long được viết bằng cách thêm L hoặc l vào cuối số.Ví dụ:-45 , 4007 , 4568946L * Hằng hệ bát phân (hệ 8): Được viết như hằng int với số 0 đứng đầu, dạng như sau: 0c1c2c3… với ci là số nguyên trong khoảng từ 0 đến 7.Ví dụ:0345 (=229 hệ 10)Trang: 4 Ngôn ngữ lập trình C* Hằng thập lục phân (hệ 16):Được viết dưới dạng: 0xc1c2c3… hoặc 0Xc1c2c3… với ci là một trong các ký tự sau: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 và Cách viết Ý nghĩaA hoặc a 10B hoặc b 11C hoặc c 12D hoặc d 13E hoặc e 14F hoặc f 15Ví dụ:0xA9 (=169 hệ 10)2. Hằng ký tự:Là một ký tự riêng biệt được viết trong 2 dấu nháy đơn. Giá trị của hằng ký tự là số thứ tự của ký tự đó trong bảng mã ASCII. Vì vậy hằng ký tự có thể tham gia vào các phép toán như mọi số nguyên khác.Ví dụ:‘0’ (có giá trị 48)‘a’ (có giá trị 65)Đối với một vài hằng ký tự đăc biệt ta cần thêm dấu \ phía trước như sau:Cách viết Ký tự‘\’’ ’‘\”’ ”‘\\’ \‘\n’ chuyển dòng‘\t’ tab‘\b’ backspace‘\r’ CR (về đầu dòng)‘\f’ sang trang‘\0’ nullVí dụ:printf(“\nKý tu can in len man hinh la: ”); in ra một hằng chuỗi ký tựprintf(“%c%c”,65,66); in ra 2 ký tự A, B3. Hằng chuỗi ký tự:Là một dãy ký tự bất kỳ (gồm 0 hoặc nhiều ký tự) được đặt trong 2 dấu nháy kép. Chuỗi ký tự này được lưu trong máy dưới dạng một mảng các ký tự. Trình biên dịch tự động thêm ký tự null (\0) vào cuối mỗi chuỗi để báo hiệu là đã kết thúc chuỗi ký tự.Ví dụ:“Ha Noi”“Hai Phong”“” \\chuỗi rổngChú ý: Cần phân biệt ‘a’ và “a”, ‘a’ là hằng ký tự được lưu trong 1 byte, còn “a” là hằng chuỗi ký tự được lưu trữ trong một mảng hai phần tử gồm ký tự a và ký tự \0.4. Tên hằng:Để định nghĩa một tên hằng ta dùng toán tử #define với cú pháp như sau:#define <tên hằng> <giá trị của hằng>Ví dụ:#define MAX 1000#define KT “Khoa cong nghe thong tin”Trong chương trình nếu chúng ta sử dụng tên MAX thì sẽ được thay bằng giá trị 1000, còn nếu sử dụng tên KT thì sẽ được thay bằng chuỗi “Khoa cong nghe thong tin”. Trang: 5 Ngôn ngữ lập trình CIII. BIẾN1. Khái niệm:- Biến là vùng trống trong bộ nhớ và được đặt tên để tiện tham khảo.- Tên biến phải tuân thủ theo qui tắc đặt tên đã được nêu ở chương 1.- Tên biến thường được viết bằng chữ thường.- Biến ngoài: Là biến được khai báo ngoài tất cả các hàm (kể cả hàm main).2. Khai báo:- Mọi biến cần phải khai báo trước khi sử dụng.- Cú pháp:<tên kiểu> <tên biến 1> [,<tên biến 2>…]Ví dụ:int x, y // khai báo 2 biến có tên x, y có kiểu intchar ch // khai báo biến có tên ch kiểu char.- Vị trí khai báo biến: Các khai báo biến cần đặt ngay sau dấu { đầu tiên của thân hàm (hoặc bắt đầu một khối lệnh) và cần đứng trước mọi câu lệnh khác.Ví dụ:void main(){int a, b, c; // vị trí khai báo đúnga = 35int d; // vị trí khai báo sai…}- Khởi tạo giá trị ban đầu cho biến: Để khởi tạo giá trị cho biến ta phải dùng toán tử gán (=). Chúng ta có thể vừa khai báo, vừa gán trị cho biến hoặc cũng có thể gán trị cho biến sau khi đã khai báo biến.Ví dụ:int x = 20, y = 30 // vừa khai báo vừa gán trịint a, b, ca = 20, b = 30, c = 40 // gán trị sau khi đã khai báo biến- Các biến ngoài khi chưa được gán trị mà được một hàm gọi tới sẽ được gán giá trị là 0.- Lấy địa chỉ của biến: Mỗi biến đều được cấp phát một vùng nhớ gồm một số bytes liên tiếp dựa vào kiểu của biến. Địa chỉ của byte đầu tiên chính là địa chỉ của biến. Để lấy địa chỉ của biến dùng cú pháp sau:&<tên biến>IV. KIỂU ENUM- Kiểu enum giúp chúng ta định nghĩa một tập hợp những hằng có kiểu int, dạng chung như sau:enum [<tên kiểu>] {<tên hằng 1> [=<giá trị 1>],…} [<tên biến 1> [,<tên biến 2>]…];Trong đó:[<tên kiểu>]: Là tên của một kiểu dữ liệu mới.<tên hằng 1> [=<giá trị 1>]: định nghĩa một <tên hằng> mà giá trị của nó sẽ được chỉ ra trong điều khoản <giá trị>. Nếu điều khoản <giá trị> không được sử dụng thì giá trị của <tên hằng> sẽ là <giá trị> của tên hằng đứng trước nó cộng với 1 biết rằng <giá trị> của hằng đầu tiên là 0.[<tên biến 1> [,<tên biến 2>]…]: là danh sách các biến kiểu enum.Ví dụ:enum {T0, T1, T2};enum day {cn, t2, t3, t4, t5, t6, t7} n1, n2;enum hso {h1=30, h2=40, h3, h4} // h3 có giá trị là 41, h4 là 42Trang: 6 Ngôn ngữ lập trình C- Nếu điều khoản <tên kiểu> có tồn tại thì sau này chúng ta có thể sử dụng cụm từ enum <tên kiểu> để khai báo các biến enum theo mẫu:enum <tên kiểu> <danh sách các biến>;Ví dụ:enum day n3, n4;- Biến kiểu enum thực chất là biến nguyên, nó được cấp phát 2 bytes bộ nhớ và nó có thể nhận một giá trị nguyên bất kỳ- Ví dụ:#include <stdio.h>#include <conio.h>void main( ){enum {T0, T1, T2};enum day {cn, t2, t3, t4, t5, t6, t7};enum day n2;int i,j=2000, k =T2;i = t7;n1 = -1000;n2 = j;printf(“\n n1 = %d n2=%d i=%d”, n1, n2, i);printf(“\n k=%d T1=%d”, k, T1);getch( );}V. MẢNG1. Khái niệm:Mảng là một tập hợp các phần tử có cùng kiểu và có chung một tên. Mỗi phần tử mảng chứa đựng một giá trị tùy theo kiểu của mảng. Chúng ta có thể có mảng kiểu float, int, char, có bao nhiêu kiểu biến thì cũng có bấy nhiêu kiểu mảng. 2. Khai báo:- Cú pháp:<kiểu dữ liệu> <tên mảng>[<số phần tử>][[<số phần tử>]…]- Ví dụ:int a[10]; // mảng có tên là a, 1 chiều, có 10 phần tử, // mỗi phần tử có kiểu int và chiếm 2 bytes trong bộ nhớint b[4][2]; // mảng tên là b, 2 chiều, 4 dòng và 2 cột tức có 8 phần tử kiểu int,// mỗi phần tử chiếm 2 bytes trong bộ nhớfloat x[5], y[3][3]; // mảng x là mảng 1 chiều có 5 phần tử kiểu float,// mỗi phần tử chiếm 4 bytes bộ nhớ// mảng b là mảng 2 chiều, có 9 phần tử kiểu float- Chú ý:+ Các phần tử mảng được đánh số từ 0.Ví dụ: int a[3]; // có 3 phần tử: a[0], a[1], a[2]+ Các phần tử mảng được cấp phát các vùng nhớ liên tiếp nhau trong bộ nhớ.+ Các phần tử mảng hai chiều được cấp phát theo hàng.Ví dụ:void main( ){clrscr( );int a[2][2], i, j;for(i=0; i<2; i++)for(j=0; j<2; j++)Trang: 7 Ngôn ngữ lập trình Cprintf(“%ld ”,&a[i][j]);getch( );}3. Truy xuất:- Cú pháp:<tên mảng>[<chỉ số>] [[<chỉ số>]…]- Ví dụ:a[0] // truy xuất phần tử thứ 0 của mảng aa[1] // truy xuất phần tử thứ 1 của mảng ab[0][1] // truy xuất phần tử hàng 0 cột 1 của mảng bvoid main( ){clrscr( );int a[4]={1,2,3,4};for(i=0; i<4; i++)printf(“%d ”, a[i]);getch( );}- Chú ý: Khi chỉ số vượt ra ngoài kích thước mảng (tức truy xuất phần tử nằm ngoài mảng), máy vẫn không báo lỗi, nhưng nó 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.4. Lấy địa chỉ phần tử mảng:- Chúng ta có thể lấy địa chỉ của mảng một chiều nhưng không được phép lấy địa chỉ của mảng nhiều chiều.Ví dụ:&a[i] // chấp nhận&b[i][j] // không chấp nhận- Tên mảng biểu thị địa chỉ đầu của mảng.Ví dụ:a = &a[0]Trang: 8 Ngôn ngữ lập trình CCHƯƠNGIII:BIỂU THỨCI. THẾ NÀO LÀ 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ử để diễn đạt một công thức toán học nào đó và có thể ước tính thành một giá trị. Như vậy hằng, biến, phần tử mảng, hàm cũng được xem là biểu thức. Chúng ta có thể dùng cặp dấu ngoặc tròn ( ) để thể hiện đúng trình tự tính toán trong biểu thức.Ví dụ:P = (a + b + c)/2; \\ bieu thuc tinh nua chu vi tam giacS = a*b \\ bieu thuc tinh dien tich hinh chu nhatII. CÁC PHÉP TOÁN1. Phép toán số họcCác phép toán số học 2 ngôi: Ký hiệu Phép toán+-*/%CộngTrừNhânChia lấy nguyên (không áp dụng cho kiểu float hoặc double)Chia lấy dư (không áp dụng cho kiểu float hoặc double)Ví dụ:25/8 = 825%3 = 1Phép toán số học một ngôi: Là phép toán lấy âm một số ( - ).Ví dụ:-(a + b)2. Các phép thao tác bitCác phép toán sau đây cho phép xử lý đến từng bit của một số nguyên. Các toán tử này không thực hiện trên các kiểu float và double.Phép toán Ý nghĩa Ví dụ&|^<<>>~Phép và (AND) theo bitPhép hoặc (OR) theo bitPhép hoặc loại trừ (XOR) theo bitDịch tráiDịch phảiLấy phần bù theo bita & ba | ba ^ ba << 4a >> 4~aQui tắc:a b a & b a | b a ^ b11001010100011100110a << N = a*2Na >> N = a/2N~1 = 0~0 = 1Trang: 9 Ngôn ngữ lập trình CVí dụ:0xa1b6 & 0xff = 0xb60xa1b6 | 0xff = 0xa1ff0xa1b6 ^ 0xffff = 0x5e490xa1b6 << 8 = 0xb6000xa1b6 >> 8 = 0xa1~0xa1b6 = 0x5e493. Phép toán quan hệ và logicPhép toán quan hệ:Phép toán Ý nghĩa Ví dụ>>=<<== =!=Lớn hơnLớn hơn bằngNhỏ hơnNhỏ hơn bằngBằngKhác3 > 7 trả về 03 >= 8 trả về 19 < 9 trả về 03 <= 10 trả về 13 = = 9 trả về 03 != 9 trả về 1Phép toán logic:Phép toán Ý nghĩa&&||!Phép toán và (AND)Phép toán hoặc (OR)Phép phủ định (NOT)Qui tắc: Trong C không có kiểu boolean (kiểu logic) nên không có giá trị True và False mà thay vào đó ta sử dụng 0 và 1:a b a && b a || b00khác 0khác 00khác 00khác 000010111a ! a0khác 010Ví dụ:3 && 7 \\ trả về giá trị 13 || 7 \\ trả về giá tị 1! 15.6 \\ trả về giá trị 03 && 0 \\ trả về giá trị 04. Phép toán tăng giảm:- C đưa ra hai phép toán 1 ngôi (++ và --) để tăng hoặc giảm các biến (nguyên và thực):a++, ++a : tương đương với a = a+1a--, --a : tương đương với a = a-1- Tuy nhiên, a++ và ++a là khác nhau:a++ : dùng biến rồi mới tăng trị.++a : tăng trị rồi mới dùng biến.- Tương tự cho a-- và --a.Trang: 10 [...]... trinh chinh } Với dòng nhập: abcdef 12 34 56.5 22 222 Kết quả: abcdef gán cho ch 12 gán cho i 34 gán cho j 56.5 gán cho f 22 222 gán cho l - Ví dụ 2: #include #include void main() { //bat dau chuong trinh chinh char ch1 [20 ],ch2 [20 ]; clrscr(); printf("Bat dau nhap du lieu tu ban phim: "); scanf("%[0 123 456789] %[^0 123 456789]",ch1,ch2); printf("\nch1=%s \tch2=%s",ch1,ch2); getch(); //ket... đây là chương trình reo chuông, chỉ kết th c khi nhấn ESC #include void main() { tiep: putch(7); if (!kbhit( )) goto tiep; if (getch( )! =27 ) goto tiep; } Trang: 19 Ngôn ngữ lập trình C CHƯƠNG V: C C CẤU TR C ĐIỀU KHIỂN I C U LỆNH ĐƠN, C U LỆNH GHÉP Chương trình c a C là tập hợp liên tiếp c c câu lệnh đơn C c câu lệnh này đư c máy tính thi hành một c ch tuần tự, c u ghi trư c sẽ đư c th c hiện... c a hàm đư c truyền theo giá trị thì không làm ảnh hưởng gì đến những giá trị c a tham số th c đư c truyền vào từ chương trình chính Khi tham số th c truyền vào cho c c đối tương ứng thì c c đối này sẽ đư c cấp phát bộ nhớ riêng và chúng sẽ bị xoá trư c khi hàm kết th c Như vậy, c c đối chính là bản sao c a c c tham số th c Hàm chỉ làm vi c trên c c đối, t c là chỉ làm vi c trên c c bản sao này C c. .. Nói c ch kh c, khi máy gặp một lời gọi hàm ở một chỗ nào đó c a chương trình, thì máy sẽ tạm rời chỗ đó và chuyển đến hàm tương ứng Quá trình sẽ diễn ra theo trình tự 4 bư c như sau: + C p phát bộ nhớ cho c c đối và c c biến c c bộ + Gán giá trị c a c c tham số th c cho c c đối tương ứng + Th c hiện c c câu lệnh trong thân hàm + Khi gặp c u lệnh return ho c } cuối c ng c a thân hàm thì máy sẽ xoá c c. .. để chứa địa chỉ c c biến kiểu int, con trỏ kiểu float dùng để chứa địa chỉ c c biến kiểu float,… Kích thư c của biến con trỏ không phụ thu c vào biến mà nó trỏ tới là kiểu gì Kích thư c của biến con trỏ luôn là 2 bytes do c ch dùng 2 bytes để lưu địa chỉ c a MS_DOS - Khai báo: *; - Ví dụ: int *px; char *ch; 3 Qui t c sử dụng con trỏ trong c c biểu th c - Sử dụng tên con trỏ: Con... name[40]; char s[]; - Th c chất, chuỗi ký tự là một mảng chứa c c ký tự Khi gặp một chuỗi ký tự, máy sẽ c p phát một khoảng nhớ cho một mảng kiểu char đủ lớn để chứa c c ký tự c a chuỗi và chứa thêm ký tự \0 Mỗi ký tự c a chuỗi đư c chứa trong một phần tử c a mảng - M c kh c, chuỗi ký tự đư c đặt trong dấu nháy kép c ng là một hằng địa chỉ biểu thị địa chỉ đầu c a mảng chứa nó Vì vậy, nếu chúng ta khai... đư c th c hiện sau khi th c hiện C pháp do – while bao giờ c ng th c hiện ít nhất 1 lần - Ví dụ: #include #include void main() { int cr, cd, dt; char ch; clrscr(); do { printf("Nhap chieu rong: "); scanf("%d",&cr); printf("\nNhap chieu dai: "); scanf("%d",&cd); dt=cd*cr; printf("\nDien tich la: %d", dt); printf("\nCo muon tiep tuc hay khong ?c/ k: "); ch = getch();... Rõ ràng địa chỉ c a hai biến kiểu int liên tiếp c ch nhau 2 bytes, địa chỉ c a hai biến kiểu float liên tiếp c ch nhau 4 bytes,… Vì vậy máy sẽ phân biệt c c kiểu địa chỉ dựa vào c c kiểu dữ liệu: địa chỉ kiểu int, kiểu float,… Phép toán: &x cho ta địa chỉ c a biến x 2 Con trỏ Con trỏ là biến chứa địa chỉ c a một biến kh c Vì c nhiều loại địa chỉ nên c ng c nhiều kiểu con trỏ tương ứng Con trỏ kiểu... đư c xuất, khi c lỗi hàm trả về EOF 2 C c hàm nhập a Hàm scanf: - C pháp: int scanf (control, agr1, agr2,…) - Ý nghĩa: Hàm scanf c nhiều ch c năng tương tư như hàm printf nhưng theo chiều ngư c lại Nó đ c thông tin từ thiết bị vào chuẩn (bàn phím), chuyển dịch chúng (thành số nguyên, số th c, …) và lưu trữ vào bộ nhớ theo c c địa chỉ mà chúng ta chỉ định Trang: 15 Ngôn ngữ lập trình C - Giải thích:... #include void main() { //bat dau chuong trinh chinh int ch; clrscr(); ch = getchar(); putchar(ch); getch(); //ket thuc chuong trinh chinh } II .C C HÀM NHẬP, XUẤT TRONG CONIO.H 1 Hàm putch: - C pháp: int putch (int ch); - Ý nghĩa: Xuất ký tự ch lên c a sổ văn bản màn hình Ký tự sẽ đư c hiển thị theo màu x c định trong hàm textcolor Đây là sự kh c nhau với hàm putchar Hàm putchar luôn . 0xc 1c2 c3… ho c 0Xc 1c2 c3… với ci là một trong c c ký tự sau: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 và C ch viết Ý nghĩaA ho c a 10B ho c b 1 1C ho c c 12D ho c d. %[^0 123 456789]",ch1,ch2);printf(" ch1=%s ch2=%s",ch1,ch2);getch();//ket thuc chuong trinh chinh}Với dòng nhập: 123 4 abcdef12Kết quả: 123 4 gán cho ch1abcdef gán cho ch2b. Hàm