-
05-07-2012, 03:46 PM #1Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Cần học lại cho kỹ về các đặc tính sau:
1. Thứ tự thi hành con toán tử và biểu thức
2. Luật ép kiểu tự động (vd int->float)
3. Phép chia số thực
Toán tử / là phép chia. Nhưng vì trong lập trình có phân biệt số nguyên và số thực cho nên tùy theo ngữ cảnh mà trình dịch dùng phép chia số nguyên hay phép chia số thực:
Nếu cả hai số chia và số bị chia cùng là số nguyên thì trình dịch dùng phép chia số nguyên - tức là bỏ phần thập phân lẻ, và kết quả là số nguyên.
Nếu một trong hai vế là số thực thì trình dịch dùng phép chia số thực (nếu vế còn lại là sô nguyên thì nó sẽ được tự động ép kiểu sang thành số thực). Và kết quả là số thực - tức là có giữ phần lẻ thập phân.
Bạn đã sai lầm khi cố gằng ép kiểu như sau:
float(a)
Vì biểu thức nằm bên trong () có thứ tự cao nên nó sẽ được tính trước. Và vì cả hai a và n đều là số nguyên nên phép chia là phép chia số nguyên. Toán tử ép kiểu sang float xảy ra sau khi đã chia và lây kết quả số nguyên.View more random threads:
- Mã Hóa Thông Điệp
- Mọi người test đoạn code này cho mình cái
- đếm số lượng phần tử có trong mảng
- Đường đi ngắn nhất = giải thuật dijkstra trong Dev C,xem & sửa giúp em với..outtime
- Tách xâu!
- Help! Nhập vào ngày tháng năm tìm ngày kề trước, kề sau của nó!
- Hỏi về chuổi
- Hàm không đệ quy | Tính a mũ n. Giúp mình sửa lỗi?
- Giải Thuật Xóa nút trong cây AVL
- Toán tử nhập xuất
-
05-07-2012, 07:05 PM #2Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
cho mình hỏi cái ép kiểu này cái,sao chẳng ép đựoc ấy
Mã:void trungbinhconghoanchinh(int a[][size],int sd,int sc) { int s=0,n=0; for(int i=0;i<sd;i++) { for(int j=0;j<sc;j++) { if(hoanchinh(a[i][j])) { s=s+a[i][j]; n=n+1; } } } printf(" trung binh tong gia tri cac phan tu cua mang = %d",(s)); minh muốn xuất ra giá trị s là số thực ,ma mình ép kiểu float(a) cũng không đúng }
-
05-07-2012, 07:35 PM #3Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
%d là in ra kiểu số nguyên hay kiểu số thực
s là đã "ép kiểu" hay chưa
Mã:void trungbinhconghoanchinh(int a[][size],int sd,int sc){ int s=0,n=0; for(int i=0;i<sd;i++) { for(int j=0;j<sc;j++) { if(hoanchinh(a[i][j])) { s=s+a[i][j]; n=n+1; } } } printf(" trung binh tong gia tri cac phan tu cua mang = %f",((float)s));}
-
06-07-2012, 05:54 PM #4Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
bạn ép float(s) sao được nó sẽ ưu tiên phép chia trước do vậy chia xong được kết quả kiểu int thì ép kiểu float(s) vẫn là kiểu int trừ khi bạn ép kiểu một trong hai số s và n(hoặc cả hai) là float thì kết quả sẽ ổn
(float)s hoặc float(s)//2 cách như nhau
-
06-07-2012, 06:24 PM #5Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi kimchung929
Nếu dùng (float)s thì nó sẽ ưu tiên phép ép kiểu trước. Vì trong C, phép ép kiểu có ưu tiên cao hơn phép chia.
-
07-07-2012, 01:06 PM #6Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi VoTichSu
Thông qua phân tích dữ liệu Google từ 86 quốc gia, mới đây, một công ty tại Anh đã công bố bảng xếp hạng kích tấc "cậu nhỏ" của các nước trên thế giới. Kết quả, hầu hết các nước xếp ở nhóm đầu của...
"Chim" của chàng trai Việt thuộc...