Chương 02 CẤU TRÚC VÀ CÁC THÀNH PHẦN CHƯƠNG TRÌNH C Lê Thành Sách Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ Nội dung n n n n n Chương trình C đơn giản Phong cách lập trình Rèn luyện việc xuất hình Đọc liệu từ bàn phím Xử lý đơn giản Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ Chương trình C đơn giản #include #include /* This is a simple program The objective of this program is to print the following information on different lines University's name Course's name */ void main(){ // "printf" is a function, which is defined in printf("Ho Chi Minh city University of Technology\n"); printf("Programming Fundamentals"); // "pause" causes the program pause before executing the next statement // “system" is a function, which is defined in system("pause"); } Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ Chương trình C đơn giản Các thành phần n Khai báo thư viện sử dụng n Chỉ thị #include: n n n n Hàm main có sử dụng (gọi) đến hai hàm printf system Hàm printf khai báo thư viện stdio, cụ thể tập tin Hàm system khai báo thư viện stdlib, cụ thể tập tin Do đó, cần dùng thị #include với hai thư viện nói để biên dịch không báo lỗi Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 #include #include void main(){ printf(" "); printf(" "); system("pause"); } Lập trình C/C++ Chương trình C đơn giản Các thành phần n Lệnh thực thi n n Lệnh sau hàm main() Mỗi chương trình viết C phải có hàm có tên main void main(){ Dấu “{“ đánh dấu bắt đầu phần thân hàm main } Dấu “}“ đánh dấu điểm kết thúc phần thân hàm main Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ Chương trình C đơn giản Các thành phần n Lệnh thực thi n n Lệnh sau hàm main() Mỗi chương trình viết C phải có hàm có tên main int main(){ } Nơi xác định kiểu trả hàm (main) int: Hàm main trả mã trạng thái: = lỗi; = có lỗi EXIT_SUCCESS = 0; EXIT_FAILURE = Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ Chương trình C đơn giản Các thành phần n Chú thích n n n Chú thích văn không cần có văn phạm C Chú thích chèn vào nhằm giải thích, ghi chú, đánh dấu, hay lập tài liệu cho phần tử C Hai dạng thích: n Chú thích gồm nhiều dòng, nằm cặp đánh dấu “/*” “*/” n Chú thích đến cuối dòng, đánh dấu “//” Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 #include #include /* The objective of This is */ void main(){ printf(" "); // "printf" is printf(" "); system("pause"); // "pause" causes } Lập trình C/C++ Phong cách lập trình n n n Chương trình văn ngôn ngữ tự nhiên Do đó, cần viết cho dễ đọc, dễ hiểu, dễ phát sai sót Trong dự án lớn, phong cách lập trình quan trọng nhằm n n n Dễ dàng phối hợp thành viên phát triển Dễ dàng phát sai sót Dễ dàng bảo trì nâng cấp Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ Phong cách lập trình n n n n Danh sách chủ đề xem chi tiết trang sau Sinh viên phải rèn luyện phong cách suốt trình học, thông qua thực hành Tất nộp cho giảng viên xem phải tuân thủ hầu hết gợi ý Xem thêm: http://users.ece.cmu.edu/~eno/coding/CCodingStandard.html http://www.cs.swarthmore.edu/~newhall/unixhelp/c_codestyle.html Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ Phong cách lập trình Các gợi ý n Về quy cách đặt tên: n Hàm n Bắt đầu động từ (verb), hàm đơn vị xử lý (i.e., thực thi hành động) n Tên phải nêu bật tính hàm Ví dụ: Nên dùng: check_for_errors() Thay cho: error_checking() hay dump_data_to_file() Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 10 Dữ liệu kết xuất C n Kiểu ký tự n n n #include #include Tên kiểu: “char”, nói sâu chương sau void main(){ printf("%c\n", 'A'); Giá trị ghi code printf("%3c\n", 'A'); (literal constant): printf("%03c\n", 'A'); n Ví dụ: ‘A’, ‘a’, etc system("pause"); Sử dụng đặc tả “%c” } printf ví dụ bên n Câu hỏi: “%3c” hình bên nghĩa gì? n Câu hỏi: “%03c” hình bên nghĩa gì? Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 22 Dữ liệu kết xuất C n Kiểu chuỗi (string) n n n #include #include C không hổ trợ “string” trực main(){ tiếp Thay vào “string” void printf("%s\n", "01234567890123456789"); thực kiểu printf("%s\n", "University"); printf("%20s\n", "University"); mảng (array), nói sâu printf("%020s\n", "University"); chương array system("pause"); } Giá trị ghi code (literal constant): n Ví dụ: “Programming Fundamentals”, “Computer”, etc Sử dụng đặc tả “%s” printf ví dụ bên Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 23 Dữ liệu kết xuất C n Tổng kết hàm printf Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 24 Dữ liệu kết xuất C Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 25 Dữ liệu kết xuất C Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 26 Nhập liệu C n Nguyên tắc n Trong C, đọc liệu từ bàn phím, giá trị đọc phải lưu vào vùng nhớ có kiểu tương thích với kiểu ghi hàm đọc Sinh viên tạm thời chấp nhận hai khái niệm sau: Vùng nhớ đặt tên (còn gọi biến) Ví dụ: int x; Cách lấy địa vùng nhớ Ví dụ: &x (sử dụng dấu & trước tên vùng nhớ) Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 27 Nhập liệu C n Hàm thư viện n n scanf Cú pháp: scanf( _, _) Phần đặc tả kiểu mong muốn đọc Phần liệt kê địa vùng nhớ tương ứng với kiểu mong muốn Dùng dấu phẩy (,) để phân cách địa có nhiều Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 28 Nhập liệu C n Kiểu số nguyên n Sử dụng đặc tả “%d” scanf ví dụ sau #include #include void main(){ int x; printf("%s", "Please enter x: "); scanf("%d", &x); printf("%s %d\n", "x =", x); system("pause"); } Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 29 Nhập liệu C n Kiểu số nguyên n Sử dụng đặc tả “%d” scanf ví dụ sau Cửa sổ ban đầu: #include #include void main(){ int x; printf("%s", "Please enter x: "); scanf("%d", &x); printf("%s %d\n", "x =", x); system("pause"); (chương trình chờ người dùng nhập vào số nguyên) } Cửa sổ sau nhập giá trị 123 nhấn phím ENTER: Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 30 Nhập liệu C n Chương trình đọc hai số nguyên Cửa sổ ban đầu: Sau nhập giá trị 123 nhấn phím ENTER: Sau nhập giá trị 456 nhấn phím ENTER: Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 31 Nhập liệu C n Chương trình đọc hai số nguyên #include #include void main(){ int x; int y; printf("%s", "Please enter x: "); scanf("%d", &x); printf("%s", "Please enter y: "); scanf("%d", &y); printf("%s %d\n", "x =", x); printf("%s %d\n", "y =", y); system("pause"); } Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 32 Nhập liệu C n Chương trình ngắn có tính n n n n Hai vùng nhớ khai báo dòng Hàm scanf đọc hai giá trị x y lần gọi Hàm printf in hai giá trị x y lần gọi Sử dụng ký tự điều khiển \n chổ #include #include void main(){ int x, y; printf("%s", "Please enter x and y: "); scanf("%d %d", &x, &y); printf("x = %d\ny = %d\n", x, y); system("pause"); } Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 33 Nhập liệu C n Bảng đặc tả đọc liệu theo kiểu liệu Kiểu Đặc tả đọc liệu hàm scanf int %d %u (số không dấu, unsigned int) float %f, %e, %E, %g, %G double %lf, %le, %lE, %lg, %lG char %c string %s Xem chi tiết: http://www.tutorialspoint.com/c_standard_library/c_function_fscanf.htm http://www.cplusplus.com/reference/cstdio/printf/ Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 34 Xử lý đơn giản Yêu cầu chương trình: n n n Đọc hai số x y tọa độ không gian 2D Tính in khoảng cách từ tâm hệ trục tọa độ đến điểm (x,y) #include #include #include void main(){ float x, y; printf("%s", "Please enter coordinates x and y: "); scanf("%f%f", &x, &y); printf("(x,y) = (%5.2f,%5.2f)\n", x, y); printf("Distance to the origin = %5.2f\n", sqrt(x*x + y*y)); system("pause"); } Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 35 Xử lý đơn giản Dùng thư viện toán học, cần chèn tập tin sqrt(.): tính bậc hai giá trị truyền vào trả kết n n #include #include #include void main(){ float x, y; printf("%s", "Please enter coordinates x and y: "); scanf("%f%f", &x, &y); printf("(x,y) = (%5.2f,%5.2f)\n", x, y); printf("Distance to the origin = %5.2f\n", sqrt(x*x + y*y)); system("pause"); } Trường Đại Học Bách Khoa Trung Tâm Kỹ Thuật Điện Toán © 2016 Lập trình C/C++ 36