-
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:
- Vấn đề về struct
- Lỗi khi dùng chung graphics.h với clrscr();
- Cần giúp đỡ về sắp xếp tăng dần trong mảng 2 chiều cho chuỗi ký tự
- Hỏi về tạo mảng có số phần tử 1 triệu
- Bài tập kế thừa, đa hình.=>lỗi, ko sửa được
- tìm số thứ tự bắt đầu và kết thúc
- [ Solved ]Lỗi về con trỏ
- viết chương trình thi trắc nghiệm bằng C++
- Chat qua cổng com dùng c#
- Sao em không chạy được thuật toán prim & kruskal nhờ các bác giúp em!!!
-
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
Không chỉ dừng lại ở việc sử dụng nguyên liệu cao cấp, mỗi công trình còn được "chăm sóc" bằng 4 dịch vụ xuất sắc của Tre Nghệ. Từ việc tư vấn, thiết kế đến thi công và hoàn thiện, mọi quy trình đều...
Chất Lượng và Sáng Tạo: Kiến Trúc...