Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 6 của 6
  1. #1
    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.

  2. #2
    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
    }
    mình muốn tinh trung bình của tổng số hoàn chỉnh, ma trung bình tổng thì phải là kiểu float,con s với n la kiểu int ,minh muốn s la float hic hic ko chạy đúng

  3. #3
    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));}

  4. #4
    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

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi kimchung929
    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
    Bạn nói vậy là sai. Sau khi ép kiểu sang float dùng dạng hàm hay dạng cast thì kết quả đều là float. Trong biểu thức float(s), nó không ưu tiên phép chia trước. Thực tế là nó ưu tiên biểu thức nằm trong ngoặc () trước. Và biểu thức ấy là biểu thức phép chia kiểu int.

    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.

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi VoTichSu
    Bạn nói vậy là sai. Sau khi ép kiểu sang float dùng dạng hàm hay dạng cast thì kết quả đều là float. Trong biểu thức float(s), nó không ưu tiên phép chia trước. Thực tế là nó ưu tiên biểu thức nằm trong ngoặc () trước. Và biểu thức ấy là biểu thức phép chia kiểu int.

    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.
    các bạn kiến thức chuẩn quá ,^^^^^,cảm ơn nhìu

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •