chương trình, dữ liệu cơ sở và phép toán, đôi chút về float và double
-đầu tiên chúng ta tìm hiểu về header file(tệp tiêu đề) tệp tiêu đề là tệp chứa khai báo C và định nghĩa macro(Macro - một cái tên...
-đầu tiên chúng ta tìm hiểu về header file(tệp tiêu đề)
tệp tiêu đề là tệp chứa khai báo C và định nghĩa macro(Macro - một cái tên nghe khá hổ báo, được dùng để chỉ những hàm được viết ở phần Preprocessor, thay vì đặt nó vào trong phần thực thi của file nguồn, Ngoài ra khi nói đến macro có 1 nghĩa khác nữa, ám chỉ đến tất cả những phần định nghĩa được viết trong phần Preprocessor
Cả tệp người dùng và tệp tiêu đề hệ thống đều được bao gồm bằng cách sử dụng lệnh #include tiền xử lý . Nó có hai hình thức sau -
#include
Hình thức này được sử dụng cho các tập tin tiêu đề hệ thống. Nó tìm kiếm một tệp có tên 'file' trong một danh sách tiêu chuẩn của các thư mục hệ thống. Bạn có thể thêm các thư mục vào danh sách này với tùy chọn -I trong khi biên dịch mã nguồn của bạn.
#include "file"
Biểu mẫu này được sử dụng cho các tệp tiêu đề của chương trình của riêng bạn. Nó tìm kiếm một tệp có tên 'file' trong thư mục chứa tệp hiện tại. Bạn có thể thêm các thư mục vào danh sách này với tùy chọn -I trong khi biên dịch mã nguồn của bạn.
#include
Khi chúng ta include 1 file header thì tại giai đoạn preprocessing của quá trình compile,
compiler sẽ copy nội dung của file header này và paste vào dòng #include.
Và tất nhiên quá trình copy/paste này là đệ quy cho đến khi copy xong tất cả file header mà nó include và các file header khác được include tại các file nó include. (hơi xoắn)
compiler sẽ copy nội dung của file header này và paste vào dòng #include.
Và tất nhiên quá trình copy/paste này là đệ quy cho đến khi copy xong tất cả file header mà nó include và các file header khác được include tại các file nó include. (hơi xoắn)
Khi đấy preprocessor sẽ duyệt file FirstFile.h và copy nội dung của SecondFile.h vào FirstFile.h.
Khi duyệt file SecondFile.h lại copy/paste nội dung của file FirstFile.h.
Vấn đề này được gọi là recursive include.
Khi duyệt file SecondFile.h lại copy/paste nội dung của file FirstFile.h.
Vấn đề này được gọi là recursive include.
#import
Trong Objective-C để tránh vấn đề recursive include như trên thì chúng ta thường dùng #import.
Khi dùng #import thì trước khi include 1 file header, preprocessor sẽ kiểm tra xem file đấy đã được include chưa,
nếu đã include rồi thì sẽ không include nữa.
Tương tự trong C chúng ta cũng tránh recursive include bằng việc kiểm tra file header đã được include chưa như sau:
Khi dùng #import thì trước khi include 1 file header, preprocessor sẽ kiểm tra xem file đấy đã được include chưa,
nếu đã include rồi thì sẽ không include nữa.
Tương tự trong C chúng ta cũng tránh recursive include bằng việc kiểm tra file header đã được include chưa như sau:
#ifndef MYFILE_H
#define MYFILE_H
// Some code
#endif
#define MYFILE_H
// Some code
#endif
float và double
f là kiểu float, ta thấy giá trị nhập vào là 123.456, tuy nhiên giá trị in ra lại là 123.456001. Lý do bởi vì float là số thực, trong C số thực gọi là Single-precision floating-point 19. Ta có thể hiểu “sơ sơ” là số thực không phải là một con số chính xác. Khi sử dụng float thì C sẽ tự động “nâng cấp” float thành double. Double có độ chính xác gấp đôi float. Do việc chuyển đổi này sẽ phát sinh sai số, dẫn đến lòi ra số 1 ở cuối. Để giải quyết vấn đề này ta có hai giải pháp.
- Khai báo f ở dạng double ngay từ đầu: double f;
- Chỉ in ra 4 số lẻ ở phía sau (hoặc tổng phần chẵn và phần lẻ tầm 7 số thôi)
- printf("\n f = %.4f; i = %d",f,i);
a=a+b;
b=a-b;
a=a-b;
b=a-b;
a=a-b;

Khoa học - Công nghệ
/khoa-hoc-cong-nghe
Bài viết nổi bật khác
- Hot nhất
- Mới nhất