1 BÀI TẬP LỚN Môn họcMô đun KIẾN TRÚC MÁY TÍNH Ngành Công nghệ thông tin SINH VIÊN THỰC HIỆN ĐẶNG THỊ NGỌC HÀ (20012030117) CHU THỊ HUYỂN (20012030124) LỚP K20 IT03 GV HƯỚNG DẪN THẦY VIỆT MÔN HỌC KIẾ.
BÀI TẬP LỚN Mơn học/Mơ đun: KIẾN TRÚC MÁY TÍNH Ngành: Công nghệ thông tin SINH VIÊN THỰC HIỆN: ĐẶNG THỊ NGỌC HÀ (20012030117) CHU THỊ HUYỂN (20012030124) LỚP: K20_IT03 GV HƯỚNG DẪN: THẦY VIỆT MÔN HỌC: KIẾN TRÚC MÁY TÍNH MỤC LỤC Giới thiệu Một số khái niệm Bộ ký tự Từ khóa Kiểu liệu 4 Tên, Biến, Biểu thức 10 III Cấu trúc chương trình đơn giản .15 Cấu trúc chung .15 Khai báo sử dụng thư viện .16 Khai báo hằng, biến, kiểu 16 Một số lệnh đơn 16 Chú thích .16 Chương trình 17 IV Nhập/Xuất liệu 17 Nhập liệu từ bàn phím – Hàm scanf() 17 Xuất liệu hình - Hàm printf() 19 Ví dụ 22 Bài tập nhà hướng dẫn thực hành - MƠI TRƯỜNG LẬP TRÌNH 23 VÀ CÁC LỆNH VÀO/RA .23 A Làm quen môi trường Dev-C++ 23 Khởi động Dev-C++ .23 Giao diện 24 B Bài tập làm theo yêu cầu 24 Nhập ký tự Hãy in mã ASCII dạng nhị phân 24 LỜI MỞ ĐẦU Ngơn ngữ lập trình C ngôn ngữ mệnh lệnh phát triển đầu thập niên 1970 Dennis Ritchie để dùng hệ điều hành UNIX Từ ngơn ngữ lan rộng nhiều hệ điều hành khác trở thành nhìu ngơn ngữ phổ dụng C ngơn ngữ có hiệu ưa chuộng để viết phần mềm hệ thống, dùng viết ứng dụng Ngoài C dùng làm phương tiện giảng dạy khoa học máy tính ngơn ngữ khơng thiết kế cho người nhập môn C ngôn ngữ tương đối nhỏ gọn vận hành gần giống với phần cứng giống ngơn ngữ Assambler hầu hết ngôn ngữ bậc cao Hơn C đánh có khả di động, cho thấy khác với ngơn ngữ bậc thấp Assambler, việc mã C dịch thi hành hầu hết máy tính Hơn hẳn ngơn ngữ Assambler chạy số máy tính đặc biệt, lý C xem ngơn ngữ bậc trung C tạo với mục tiêu làm cho thuận tiện để viết chương trình lớn với số lỗi mẫu hình lập trình kỹ tục mà khơng đặt lên vai người viết trình dịch C, người bề bộn với đặt tả phức tạp ngôn ngữ Mặc dù C cịn thiếu nhìu chức hữu lý quan trọng để C chấp nhận cho phép trình dịch đc tạo cách nhanh chóng tảng cho phép người lập trình dễ kiểm sốt mà chương trình (do họ viết) thực thi Đây điểm làm cho mã C chạy hiệu ngơn ngữ khác Thường có ngơn ngữ ASM chỉnh tay chạy nhanh (ngôn ngữ C), ASM kiểm sốt tồn máy Mặc dù với phát triển trình dịch C, với phức tạp CPU đại với tốc độ cao, C dần thu nhỏ khác biệt tốc độ Một lý làm cho C ứng dụng rộng rãi trình dịch, thư viện phần mềm thơng dịch ngôn ngữ bậc cao khác lại tạo nên từ C Giới thiệu - C ngơn ngữ lập trình cấp cao, sử dụng phổ biến để lập trình hệ thống với Assembler phát triển ứng dụng - Vào năm cuối thập kỷ 60 đầu thập kỷ 70 kỷ XX, Dennish Ritchie (làm việc phịng thí nghiệm Bell) phát triển ngơn ngữ lập trình C dựa ngôn ngữ BCPL (do Martin Richards đưa vào năm 1967) ngôn ngữ B (do Ken Thompson phát triển từ ngôn ngữ BCPL vào năm 1970 viết hệ điều hành UNIX máy PDP-7) cài đặt lần hệ điều hành UNIX máy DEC PDP-11 - Năm 1978, Dennish Ritchie B.W Kernighan cho xuất “Ngôn ngữ lập trình C” phổ biến rộng rãi đến - Lúc ban đầu, C thiết kế nhằm lập trình mơi trường hệ điều hành Unix nhằm mục đích hỗ trợ cho cơng việc lập trình phức tạp Nhưng sau, với nhu cầu phát triển ngày tăng công việc lập trình, C vượt qua khn khổ phịng thí nghiệm Bell nhanh chóng hội nhập vào giới lập trình để cơng ty lập trình sử dụng cách rộng rãi Sau đó, cơng ty sản xuất phần mềm đưa phiên hỗ trợ cho việc lập trình ngơn ngữ C chuẩn ANSI C khai sinh từ - Ngơn ngữ lập trình C ngơn ngữ lập trình hệ thống mạnh “mềm dẻo”, có thư viện gồm nhiều hàm (function) tạo sẵn Người lập trình tận dụng hàm để giải tốn mà khơng cần phải tạo Hơn nữa, ngơn ngữ C hỗ trợ nhiều phép tốn nên phù hợp cho việc giải toán kỹ thuật có nhiều cơng thức phức tạp Ngồi ra, C cho phép người lập trình tự định nghĩa thêm kiểu liệu trừu tượng khác Tuy nhiên, điều mà người vừa học lập trình C thường gặp “rắc rối” “hơi khó hiểu” “mềm dẻo” C Dù vậy, C phổ biến rộng rãi trở thành cơng cụ lập trình mạnh, sử dụng ngôn ngữ lập trình chủ yếu việc xây dựng phần mềm - Ngơn ngữ C có đặc điểm sau: o Tính đọng (compact): C có 32 từ khóa chuẩn 40 tốn tử chuẩn, hầu hết biểu diễn chuỗi ký tự ngắn gọn o Tính cấu trúc (structured): C có tập hợp thị lập trình cấu trúc lựa chọn, lặp… Từ chương trình viết C tổ chức rõ ràng, dễ hiểu o Tính tương thích (compatible): C có tiền xử lý thư viện chuẩn vô phong phú nên chuyển từ máy tính sang máy tính khác chương trình viết C hồn tồn tương thích o Tính linh động (flexible): C ngôn ngữ uyển chuyển cú pháp, chấp nhận nhiều cách thể hiện, thu gọn kích thước mã lệnh làm chương trình chạy nhanh o Biên dịch (compile): C cho phép biên dịch nhiều tập tin chương trình riêng rẽ thành tập tin đối tượng (object) liên kết (link) đối tượng lại với thành chương trình thực thi (executable) thống Một số khái niệm Bộ ký tự Bộ chữ viết ngôn ngữ C bao gồm ký tự, ký hiệu sau: (phân biệt chữ in hoa in thường): - 26 chữ latinh lớn A,B,C Z ; 26 chữ latinh nhỏ a,b,c z ; 10 chữ số thập phân 0,1,2 ; 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 Từ khóa Từ khóa từ dành riêng (reserved words) C với mục đích xác định trước Ví dụ: - Từ khóa int dùng để khai báo biến hàm với kiểu liệu số nguyên; - Từ khóa if dùng để xây dựng câu lệnh cấu trúc chọn; - Từ khóa for dùng để xây dựng câu lệnh cấu trúc lặp Danh sách từ khóa: Lưu ý: khơng dùng từ khóa vào mục đích khác, đặt tên đối tượng (biến, hằng, tên hàm ) trùng với từ khóa Các từ khóa Turbo C 3.0 bao gồm: Kiểu liệu Các kiểu liệu sơ cấp chuẩn C chia làm dạng : kiểu số nguyên, kiểu số thực Kiểu số nguyên Kiểu số nguyên kiểu liệu dùng để lưu giá trị nguyên hay gọi kiểu đếm Kiểu số nguyên C chia thành kiểu liệu con, kiểu có miền giá trị khác Kiểu số nguyên byte (8 bits): Kiểu số nguyên byte gồm có kiểu sau: ST T Kiểu liệu Miền giá trị (Domain) unsigned Từ đến 255 (tương đương 256 ký tự bảng mã char ASCII) char Từ -128 đến 127 Kiểu unsigned char: lưu số nguyên dương từ đến 255 Để khai báo biến kiểu ký tự ta khai báo biến kiểu unsigned char Mỗi số miền giá trị kiểu unsigned char tương ứng với ký tự bảng mã ASCII Kiểu char: lưu số nguyên từ -128 đến 127 Kiểu char sử dụng bit trái để làm bit dấu Nếu gán giá trị > 127 cho biến kiểu char giá trị biến số âm (?) Kiểu số nguyên bytes (16 bits): Kiểu số nguyên bytes gồm có kiểu sau: ST T Kiểu liệu Miền giá trị (Domain) Từ -32,768 đến 32,767 unsigned int Từ đến 65,535 Từ -32,768 đến Short int 32,767 Từ -32,768 đến int 32,767 Kiểu enum, short int, int : Lưu số nguyên từ -32768 đến 32767 Sử dụng bit bên trái để làm bit dấu Nếu gán giá trị >32767 cho biến có kiểu giá trị biến số âm enum Kiểu unsigned int: Kiểu unsigned int lưu số nguyên dương từ đến 65535 Kiểu số nguyên byte (32 bits): Kiểu số nguyên bytes hay gọi số nguyên dài (long) gồm có kiểu sau: ST T Kiểu liệu unsigned long Miền giá trị (Domain) Từ đến 4,294,967,295 Từ -2,147,483,648 đến 2,147,483,647 Kiểu long : Lưu số nguyên từ -2147483658 đến 2147483647 Sử dụng bit bên trái để làm bit dấu Nếu gán giá trị >2147483647 cho biến có kiểu long giá trị biến số âm long Kiểu unsigned long: Kiểu unsigned long lưu số nguyên dương từ đến 4294967295 Kiểu số thực Kiểu số thực dùng để lưu số thực hay số có dấu chấm thập phân gồm có kiểu sau: ST T Kiểu liệu float Kích thước (Size) Miền giá trị (Domain) bytes Từ 3.4 * 10-38 đến 3.4 * 1038 Từ 1.7 * 10-308 đến 1.7 * double bytes 10308 Từ 3.4 *10-4932 đến 1.1 long double 10 bytes *104932 Mỗi kiểu số thực có miền giá trị độ xác (số số lẻ) khác Tùy vào nhu cầu sử dụng mà ta khai báo biến thuộc kiểu Ngoài ta cịn có kiểu liệu void, kiểu mang ý nghĩa kiểu rỗng khơng chứa giá trị Tên, Biến, Tên Tên hay gọi danh biểu (identifier) dùng để đặt cho chương trình, hằng, kiểu, biến, chương trình Tên có hai loại tên chuẩn tên người lập trình đặt - Tên chuẩn tên C đặt sẵn tên kiểu: int, char, float,…; tên hàm: sin, cos - Tên người lập trình tự đặt để dùng chương trình Sử dụng chữ cái, chữ số dấu gạch (_) để đặt tên, phải tuân thủ quy tắc: - Bắt đầu chữ dấu gạch dưới; Khơng có khoảng trống tên; Không trùng với từ khóa; Độ dài tối đa tên khơng giới hạn, nhiên có 31 ký tự có ý nghĩa; - Khơng cấm việc đặt tên trùng với tên chuẩn ý nghĩa tên chuẩn khơng cịn giá trị Ví dụ: tên người lập trình đặt: Chieu_dai, Chieu_Rong, Chu_Vi, Dien_Tich Tên không hợp lệ: Do Dai, 12A2,… Biến Biến đại lượng người lập trình định nghĩa đặt tên thông qua việc khai báo biến Biến dùng để chứa liệu trình thực chương trình giá trị biến bị thay đổi trình Mỗi biến phải thuộc kiểu liệu xác định có miền giá trị thuộc kiểu Cú pháp khai báo biến: dụ: Danh sách tên biến cách dấu phẩy; Ví 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*/ float nua_chu_vi; /*Biến nua_chu_vi có kiểu float*/ double dien_tich; /*Biến dien_tich có kiểu double*/ Lưu ý: Để kết thúc lệnh phải có dấu chấm phẩy (;) cuối lệnh Vị trí khai báo biến C Trong ngơn ngữ lập trình C, ta phải khai báo biến vị trí Nếu khai báo (đặt biến) khơng vị trí dẫn đến sai sót ngồi ý muốn mà người lập trình khơng lường trước (hiệu ứng lề) Chúng ta có cách đặt vị trí biến sau: - Khai báo biến ngoài: Các biến đặt bên tất hàm có tác dụng hay ảnh hưởng đến tồn chương trình (cịn gọi biến tồn cục), ví dụ : int i; /*Bien ben ngoai */ float pi; /*Bien ben ngoai*/ int main() {…} - Khai báo biến trong: Các biến đặt bên hàm, chương trình hay khối lệnh Các biến có tác dụng hay ảnh hưởng đến hàm, chương trình hay khối lệnh chứa Khi khai báo biến, phải đặt biến đầu khối lệnh, trước lệnh gán, … Ví dụ 1: #include #include int bienngoai; /*khai bao bien ngoai*/ int main () { int j,i; /*khai bao bien ben chuong trinh chinh*/ i=1; j=2; bienngoai=3; printf("\n Gia tri cua i la %d",i); /*%d số nguyên, biết sau */ printf("\n Gia tri cua j la %d",j); printf("\n Gia tri cua bienngoai la %d",bienngoai); getch(); return 0; } Ví dụ 2: #include #include int main () { int i, j; /*Bien ben trong*/ i=4; j=5; printf("\n Gia tri cua i la %d",i); printf("\n Gia tri cua j la %d",j); if(j>i) { int hieu=j-i; /*Bien ben */ 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; } Hằng Là đại lượng không đổi suốt trình thực thi chương trình Cú pháp: const = Giá_trị; Ví dụ: const int heso=10; Hằng số thực Số thực bao gồm giá trị kiểu float, double, long double thể theo cách sau: - Cách 1: Sử dụng cách viết thông thường mà sử dụng mơn Tốn, Lý, …Điều cần lưu ý sử dụng dấu thập phân dấu chấm (.); 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 tách làm phần, cách ký tự e hay E Phần giá trị: số nguyên hay số thực viết theo cách Phần mũ: số nguyên Giá trị 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 ( -123.45 *104) Hằng số nguyên Số nguyên gồm kiểu int (2 bytes) , long (4 bytes) thể theo cách sau : - Hằng số nguyên bytes (int) hệ thập phân: Là kiểu số mà sử dụng thông thường, hệ thập phân sử dụng ký số từ đến để biểu diễn giá trị nguyên Ví dụ: 123, -242 - Hằng số nguyên byte (int) hệ bát phân: Là kiểu số nguyên sử dụng ký số từ đến để biểu diễn số nguyên Cách biểu diễn: 0 Ví dụ : 0345, -020 (số 345, -20 hệ bát phân) - Hằng số nguyên byte (int) hệ thập lục phân: Là kiểu số nguyên sử dụng 10 ký số từ đến ký tự A, B, C, D, E ,F để biểu diễn số nguyên Cách biểu diễn: 0x - Hằng số nguyên byte (long): Số long (số nguyên dài) biểu diễn số int hệ thập phân kèm theo ký tự l L Một số nguyên nằm miền giá trị số int ( bytes) số long ( bytes) Ví dụ: 45345L hay 45345l hay 45345 - Các số lại: Viết cách viết thơng thường (khơng có dấu phân cách số) Hằng ký tự Hằng ký tự ký tự riêng biệt viết cặp dấu nháy đơn (‘) Mỗi ký tự tương ứng với giá trị bảng mã ASCII Hằng ký tự xem trị số nguyên Ví dụ: ‘a’, ‘A’, ‘0’, ‘9’ Chúng ta thực phép tốn số học ký tự (thực chất thực phép toán giá trị ASCII chúng) Hằng chuỗi ký tự Hằng chuỗi ký tự chuỗi hay xâu ký tự đặt cặp dấu nháy kép (“) Ví dụ: “Ngon ngu lap trinh C”, “Khoa CNTT-HVKTQS” Lưu ý: - Một chuỗi khơng có nội dung “” gọi chuỗi rỗng; - Khi lưu trữ nhớ, chuỗi kết thúc ký tự NULL (‘\0’: mã Ascii 0); - Để biểu diễn ký tự đặc biệt bên 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\”“ Biểu thức Biểu thức kết hợp toán tử (operator) toán hạng (operand) theo trật tự định Mỗi toán hạng hằng, biến biểu thức khác Trong trường hợp, biểu thức có nhiều tốn tử, ta dùng cặp dấu ngoặc đơn () để định tốn tử thực trước Ví dụ: Biểu thức nghiệm phương trình bậc hai: (-b + sqrt(Delta))/(2*a) Trong hằng; a, b, Delta biến Các tốn tử số học Trong ngơn ngữ C, toán tử +, -, *, / làm việc tương tự chúng làm việc ngôn ngữ khác Ta áp dụng chúng cho đa số kiểu liệu có sẵn 10 cho phép C Khi ta áp dụng phép / cho số nguyên hay ký tự, phần dư bị cắt bỏ Chẳng hạn, 5/2 phép chia nguyên Toán tử Ý nghĩa + Cộng - Trừ * Nhân / Chia % Chia lấy phần dư Giảm đơn vị ++ Tăng đơn vị Tăng giảm (++ & ) Toán tử ++ thêm vào tốn hạng -– trừ bớt Nói cách khác: x = x + giống ++x x = x – giống x— Cả toán tử tăng giảm tiền tố (đặt trước) hay hậu tố (đặt sau) tốn hạng Ví dụ: x = x + viết x++ (hay ++x) Tuy nhiên tiền tố hậu tố có khác biệt sử dụng biểu thức Khi toán tử tăng hay giảm đứng trước tốn hạng nó, C thực việc tăng hay giảm trước lấy giá trị dùng biểu thức Nếu toán tử sau toán hạng, C lấy giá trị toán hạng trước tăng hay giảm Tóm lại: x = 10 y = + +x //y = 11 Tuy nhiên: x = 10 y = x++ //y = 10 Thứ tự ưu tiên toán tử số học: ++ sau * / % đến + - Các toán tử quan hệ toán tử Logic Ý tưởng tốn tử quan hệ tốn tử Logic sai Trong C giá trị khác gọi đúng, sai Các biểu thức sử dụng toán tử quan hệ Logic trả sai trả Toán tử Ý nghĩa Các toán tử quan hệ > Lớn >= Lớn 11 < Nhỏ 1+ 12 xem 10 > (1 + 12) kết sai (0) Ta kết hợp vài tốn tử lại với thành biểu thức sau: 10>5&&!(10= < > Dịch phải ? 100 : 200 Thì Y gán giá trị 100, X nhỏ Y nhận giá trị 200 Đoạn mã tương đương cấu trúc if sau: X = 10 if (X < 9) Y = 100 else Y = 200 Toán tử trỏ & * Một trỏ địa nhớ biến Một biến trỏ biến khai báo riêng để chứa trỏ đến đối tượng kiểu Ta 13 tìm hiểu kỹ trỏ chương trỏ Ở đây, đề cập ngắn gọn đến hai toán tử sử dụng để thao tác với trỏ Toán tử thứ &, toán tử quy ước trả địa nhớ hệ số Ví dụ: m = &count Đặt vào biến m địa nhớ biến count Chẳng hạn, biến count vị trí nhớ 2000, giả sử count có giá trị 100 Sau câu lệnh m nhận giá trị 2000 Toán tử thứ hai *, bổ sung cho &; toán tử quy ước trả giá trị biến cấp phát địa theo sau Ví dụ: q = *m Sẽ đặt giá trị count vào q Bây q có giá trị 100 100 lưu trữ địa 2000 Toán tử dấu phẩy , Toán tử dấu , sử dụng để kết hợp biểu thức lại với Bên trái tốn tử dấu , ln xem kiểu void Điều có nghĩa biểu thức bên phải trở thành giá trị tổng biểu thức phân cách dấu phẩy Ví dụ: x = (y=3,y+1); Trước hết gán cho y gán cho x Cặp dấu ngoặc đơn cần thiết tốn tử dấu , có độ ưu tiên thấp tốn tử gán Dấu ngoặc đơn dấu ngoặc vng Trong C, cặp dấu ngoặc đơn toán tử để tăng độ ưu tiên biểu thức bên Các cặp dấu ngoặc vng thực thao tác truy xuất phần tử mảng Cách viết tắt C Có nhiều phép gán khác nhau, đơi ta sử dụng viết tắt C Chẳng hạn: x = x + 10 viết thành x +=10 Tốn tử += báo cho chương trình dịch biết để tăng giá trị x lên 10 Cách viết làm việc tất toán tử nhị phân (phép tốn hai ngơi) C Tổng qt: (Biến) = (Biến) (Tốn tử) (Biểu thức) viết: (Biến) (Toán tử)= (Biểu thức) Tổng kết độ ưu tiên Cao & () [] ! ~ ++ (Kiểu) * 14 */% +> < >= & ^ | && || ?: = += -= *= /= Thấp , III Cấu trúc chương trình đơn giản Cấu trúc chung Chương trình sau viết C, cho phép người sử dụng nhập vào số in kết tổng số Xét chương trình sau: /* Khai bao su dung thu vien*/ #include #include #include /* Khai bao Kieu du lieu*/ // se de cap o bai sau /* Khai bao hang */ #define heso 10 /* Khai bao bien */ int a, b; /* Chuong trinh chinh */ int main() { /* Chuong trinh cho phep nhap vao hai so a b, Tinh va in tong hai so */ float ketqua; // Khai bao bien ketqua system("cls"); // Xoa man hinh printf("Nhap vao A va B:"); // Hien thi thong bao huong dan nhap lieu scanf("%d %d",&a,&b); // Nhap cac gia tri cho a va b tu ban phim ketqua =float((a+b))/heso; 15 printf("Tong %d va %d la %0.1f\n",a,b,ketqua); // Hien thi ket qua man hinh printf("Nhan phim bat ky de ket thuc!"); getch(); // Doi nhan phim bat ky de tiep tuc return 0; } Kết thực chương trình hình sau: Về C không qui định cách chặt chẽ cấu trúc chương trình; C qui định chương trình phải có hàm main, đồng thời chương trình chương trình Thơng thường chương trình C gồm phần: - Khai báo thư viện; - Khai báo biến; hằng; - Chương trình chính; Khai báo sử dụng thư viện Phần khai báo sử dụng thư viện: Cú pháp: #include -> Hoặc #include “tên thư viện” -> Ví dụ: #include #include #include Xem Help để biết danh sách include file Khai báo hằng, biến, kiểu Khai báo (định nghĩa) Hằng Cú pháp: #define Tên_Hằng Giá_tri Ví dụ: 16 #define heso 10 Khai báo (định nghĩa) Biến Cú phú: Kiểu_Dữ_liệu Danh_sách_Tên_Biến; Ví dụ: int a, b; Một số lệnh đơn - Lệnh gán - Lệnh xóa hình - Lệnh dừng chương trình Chú thích Tất dịng bắt đầu hai dấu sổ (//) coi chút thích mà chúng khơng có ảnh hưởng đến hoạt động chương trình Chúng lập trình viên dùng để giải thích hay bình phẩm bên mã nguồn chương trình Trong trường hợp này, dịng thích giải thích ngắn gọn mà chương trình làm Trong ngơn ngữ lập trình C, nội dung thích phải viết cặp dấu /* */ Chương trình int main () Dòng tương ứng với phần bắt đầu khai báo hàm main Hàm main điểm mà tất chương trình C++ bắt đầu thực Nó khơng phụ thuộc vào vị trí hàm (ở đầu, cuối hay mã nguồn) mà nội dung ln thực chương trình bắt đầu Thêm vào đó, ngun nhân nói trên, chương trình C++ phải tồn hàm main int main() { ………… return 0; } Theo sau main cặp ngoặc đơn hàm Trong C++, tất hàm mà sau cặp ngoặc đơn () có nghĩa có khơng có 17 tham số (không bắt buộc) Nội dung hàm main tiếp sau phần khai báo thức bao ngoặc nhọn ( { } ) ví dụ return 0; Lệnh return kết thúc hàm main trả mã sau nó, trường hợp Đây kết thúc bình thường chương trình khơng có lỗi trình thực Như bạn thấy ví dụ tiếp theo, cách phổ biến để kết thúc chương trình C++ IV Nhập/Xuất liệu Nhập liệu từ bàn phím – Hàm scanf() Là hàm cho phép đọc liệu từ bàn phím gán cho biến chương trình chương trình thực thi Trong ngơn ngữ C, hàm scanf nằm thư viện stdio.h Cú pháp: scanf(“Chuỗi định dạng”, địa biến); Giải thích: - Chuỗi định dạng: dùng để qui định kiểu liệu, cách biểu diễn, độ rộng, số chữ số thập phân Một số định dạng nhập kiểu số nguyên, số thực, ký tự Định dạng Ý nghĩa %[số chữ số]d Nhập số nguyên có tối đa %[số chữ số] f Nhập số thực có tối đa tính dấu chấm %c Nhập ký tự Ví dụ: %d Nhập số nguyên %4d Nhập số nguyên tối đa ký số, nhập nhiều ký số nhận ký số %f Nhập số thực %6f Nhập số thực tối đa ký số (tính ln dấu chấm), nhập nhiều ký số nhận ký số (hoặc ký số với dấu chấm) - Địa biến: địa (&) biến mà cần nhập giá trị cho Được viết sau: & Ví dụ: scanf(“%d”,&bien1);/*Doc gia tri cho bien1 co kieu nguyen*/ scanf(“%f”,&bien2); /*Doc gia tri cho bien2 co kieu thưc*/ scanf(“%d%f”,&bien1,&bien2); /*Doc gia tri cho bien1 co kieu nguyen, bien2 co kieu thuc*/ scanf(“%d%f%c”,&bien1,&bien2,&bien3); /*bien3 co kieu char*/ Lưu ý: 18 - Chuỗi định dạng phải đặt cặp dấu nháy kép (“”) Các biến (địa biến) phải cách dấu phẩy (,) Có biến phải có nhiêu định dạng ; Thứ tự định dạng phải phù hợp với thứ tự biến ; Để nhập giá trị kiểu char xác, nên dùng hàm fflush(stdin) để loại bỏ ký tự nằm vùng đệm bàn phím trước hàm scanf() ; - Để nhập vào chuỗi ký tự (không chứa khoảng trắng hay kết thúc khoảng trắng), phải khai báo kiểu mảng ký tự hay trỏ ký tự, sử dụng định dạng %s tên biến thay cho địa biến ; - Để đọc vào chuỗi ký tự có chứa khoảng trắng (kết thúc phím Enter) phải dùng hàm gets() Một số ví dụ khác: int biennguyen; float bienthuc; char bienchar; char chuoi1[20], *chuoi2; Lệnh: scanf(“%3d”,&biennguyen); Nếu ta nhập 1234455 giá trị biennguyen ký số (123) Các ký số lại nằm lại vùng đệm Lệnh: scanf(“%5f”,&bienthuc); Nếu ta nhập 123.446 giá trị bienthuc 123.4, ký số lại nằm vùng đệm Lệnh: scanf(“%2d%5f”,&biennguyen, &bienthuc); Nếu ta nhập liên tiếp số cách khoảng trắng: 1223 3.142325 : a ký số (12) đọc vào cho biennguyen ; b ký số trước khoảng trắng (23) đọc vào cho bienthuc Lệnh:scanf(“%2d%5f%c”,&biennguyen,&bienthuc,&biench ar); Nếu ta nhập liên tiếp số cách khoảng trắng: 12345 3.142325 : a ký số (12) đọc vào cho biennguyen ; b ký số trước khoảng trắng (345) đọc vào cho bienthuc ; c Khoảng trắng đọc cho bienchar Nếu ta nhập số gồm nhiều ký số sau: 123456789: d ký số (12) đọc vào cho biennguyen ; e ký số (34567) đọc vào cho bienthuc ; f bienchar có giá trị ký số ‘8’ Lệnh: scanf(“%s”,chuoi1); scanf(“%s”,chuoi2); Nếu ta nhập chuỗi sau: Nguyen Van Huynh ↵ giá trị biến chuoi1 hay chuoi2 Nguyen Lệnh: scanf(“%s%s”,chuoi1, chuoi2); Nếu ta nhập chuỗi sau: Duong Van Hieu ↵ giá trị biến chuoi1 Duong giá trị biến chuoi2 Van 19 Vì vậy? C đọc từ đầu đến gặp khoảng trắng gán giá trị cho biến đầu tiên, phần lại sau khoảng trắng giá trị biến gets(chuoi1); Nếu nhập chuỗi : Nguyen Van Lai ↵ giá trị biến chuoi1 Nguyen Van Lai Xuất liệu hình - Hàm printf() Hàm printf (nằm thư viện stdio.h) dùng để xuất giá trị biểu thức lên hình Cú pháp: printf(“Chuỗi định dạng ”[, Các biểu thức]); Giải thích: - Chuỗi định dạng: dùng để qui định kiểu liệu, cách biểu diễn, độ rộng, số chữ số thập phân Một số định dạng số nguyên, số thực, ký tự Định dạng Ý nghĩa %d Xuất số nguyên %[.số chữ số thập phân] f Xuất số thực có theo quy tắc làm tròn số %o Xuất số nguyên hệ bát phân %x Xuất số nguyên hệ thập lục phân %c Xuất ký tự %s Xuất chuỗi ký tự %e %E %g %G Xuất số nguyên dạng khoa học (nhân 10 mũ x) Ví dụ %d In số nguyên %4d In số nguyên tối đa ký số, số cần in nhiều ký số in hết %f In số thực %6f In số thực tối đa ký số (tính ln dấu chấm), số cần in nhiều ký số in hết %.3f In số thực có số lẻ, số cần in có nhiều số lẻ làm tròn - Các biểu thức: biểu thức mà cần xuất giá trị lên hình, biểu thức phân cách dấu phẩy (,) Ví dụ 1: #include #include int main() 20 { int bien_nguyen=1234, i=65; float bien_thuc=123.456703; printf("Gia tri nguyen cua bien nguyen =%d\n",bien_nguyen); printf("Gia tri thuc cua bien thuc =%f\n",bien_thuc); printf("Truoc lam tron=%f \n Sau lam tron=%.2f",bien_thuc, bien_thuc); getch(); return 0; } Kết in sau: Lưu ý: Đối với ký tự điều khiển, ta sử dụng cách viết thông thường để hiển thị chúng Ký tự điều khiển ký tự dùng để điều khiển thao tác xuất, nhập liệu; số ký tự điều khiển mô tả bảng sau: Ký tự điều khiển Giá trị thập lục phân Ký tự hiển thị Ý nghĩa \a 0x07 BEL Phát tiếng chuông \b 0x08 BS Di chuyển trỏ sang trái ký tự xóa ký tự bên trái (backspace) \f 0x0C FF Sang trang \n 0x0A LF Xuống dòng \r 0x0D CR Trở đầu dòng \t 0x09 HT Tab theo cột (giống gõ phím Tab) \\ 0x5C \ Dấu \ \’ 0x2C ‘ Dấu nháy đơn (‘) \” 0x22 “ Dấu nháy kép (“) \? 0x3F ? Đấu chấm hỏi (?) \ddd ddd Ký tự có mã ACSII hệ bát phân số ddd \xHHH Ví dụ 2: oxHHH Ký tự có mã ACSII hệ thập lục phân HHH 21 #include #include int main () { printf("\n Tieng Beep \ a"); printf("\n Doi tro sang trai ky tu\b"); printf("\n Dau Tab \tva dau backslash \\"); printf("\n Dau nhay don \' va dau nhay kep \""); printf("\n Dau cham hoi \?"); printf("\n Ky tu co ma bat phan 101 la \101"); printf("\n Ky tu co ma thap luc phan 41 la \x041"); printf("\n Dong hien tai, xin go enter"); getch(); printf("\rVe dau dong"); getch(); return 0; } Ví dụ Ví dụ 1: Viết chương trình cho phép nhập vào số a b, trình bày kết phương pháp cơng số theo hình thức sau (với a=876 b=7655): + 876 7655 = 8531 #include #include #include // Chuong trinh chinh int main() { int a,b,tong; system("cls"); printf("Nhap vao a va b:"); scanf("%d %d",&a,&b); printf("Ket qua theo phuong 22 } phap cong\n\n"); tong=a+b; printf("%20d\n",a); printf("%10s\n","+"); printf("%20d\n",b); printf("%20s\n"," "); printf("%20d\n\ n",tong); printf("Nhan phim bat ky de ket thuc!"); getch(); return 0; Kết thực Bài tập nhà hướng dẫn thực hành - MƠI TRƯỜNG LẬP TRÌNH VÀ CÁC LỆNH VÀO/RA A Làm quen mơi trường Dev-C++ Khởi động Dev-C++ Kích đúp vào biểu tượng hình 23 Giao diện B Bài tập làm theo yêu cầu Nhập ký tự Hãy in mã ASCII dạng nhị phân Ví dụ: Ký tự A, Mã ASCII dạng nhị phân là: 0100 0001 Soạn thảo văn chương trình sau: /* Vi du – Nhập ký tự in mã ASCII dạng nhị phân */ #include #include #include int main() { char c; printf(“Nhap vap ki tu: “); scanf(“%c”, &c); char unsigned value = c; printf(“Dang nhi phan:”); for (int bit = 8; bit; bit) { putchar(value & (1