Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: hàm pow và ép kiểu dữ liệu trên C? Em nhờ các anh chị giúp em với ạ.

  1. #1
    Ngày gia nhập
    07 2011
    Bài viết
    8

    Unhappy hàm pow và ép kiểu dữ liệu trên C? Em nhờ các anh chị giúp em với ạ.

    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <math.h>
    #define in printf
    #define quet scanf
    #define ff fflush(stdin)
    
    
    int gtvt(int vt, int n)
    {
    	return int( ( n/float( pow(10,vt) ) - int( n/pow(10,vt) ) )*10 );
    	////////////////////C1//////////////////////C2////////////////////
    }
    
    int main()
    {
    	int vt;
    	int n;
    	in(" N :");
    	ff;
    	quet("%d", &n);
    	in("VT :");
    	ff;
    	quet("%d", &vt);
    	in("GTVT: %d\n", gtvt(vt,n));
    	in("C1 la : %f\n", n/float(pow(10,vt)));
    	in("C2 la: %d\n", int ( n/pow(10,vt) ));
    	getch();
    }
    đây là code em làm để chạy thử cái hàm gtvt(); Ví dụ Nhập vào số N là 7568 VT la 1, hàm
    gtvt() sẽ tính chữ số ở vị trí vt tức là gtvt(vt,n) = 8. Tuy nhiên nó lại trả lại là 7 . Nếu em thay
    Code:
    return int( ( n/float( pow(10,vt) ) - int( n/pow(10,vt) ) )*10 );
    (gọi là lệnh 1) thành
    Code:
    return int( 10*n/float( pow(10,vt) ) - (int( n/pow(10,vt) ) )*10 );
    (gọi là lệnh 2)
    thì có vẻ ổn. Em thắc mắc, xem xét lệnh 1 và 2 thì :
    +) ở lệnh 1
    Code:
    float( pow(10,vt) )
    ----> n/float( pow(10,vt) ) có kiểu là float.
    Code:
    int( n/pow(10,vt) )
    ----> int( n/pow(10,vt) ) có kiểu là int.
    vậy
    Code:
    ( n/float( pow(10,vt) ) - int( n/pow(10,vt) ) )
    có kiểu float ---->
    Code:
    ( n/float( pow(10,vt) ) - int( n/pow(10,vt) ) )*10
    có kiểu float kết quả cuối cùng: ép float về int.
    +) ở lệnh 2
    Code:
    10*n/float( pow(10,vt) )
    kiểu float.
    Code:
    (int( n/pow(10,vt) ) )*10
    kiểu int
    vậy
    Code:
    10*n/float( pow(10,vt) ) - (int( n/pow(10,vt) ) )*10
    kiểu float.
    kết quả cũng là ép về int.


    Vậy lí giải như thế nào về sự sai khác kết quả khi nhập N = 7568 VT = 1 ??? Với mỗi
    một lệnh lại cho kết quả khác nhau, lệnh 1 cho kết quả là:7 lệnh 2 cho kết quả là:8
    nhờ các anh chị pro giải đáp giúp em với ạ. Em mới học C được 1 tuần, tài liệu thiếu chi tiết quá làm em phải tự thử code,hiz rất khổ X-(, các anh chị có tài liệu về C thì cho em xin,cái nào thật chi tiết vào ạ, trên mạng toàn là C++ ko hà, nhờ các anh chị có kinh nghiệm giúp em với ạ.
    Ah, còn nữa, code trên em không có
    Code:
    return 0;
    thế mà c-free 5 nó không báo lỗi gì cả. Sao lại thế này ạ ?

  2. #2
    Ngày gia nhập
    12 2010
    Nơi ở
    Hanoi, Vietnam, Vietnam
    Bài viết
    687

    có 1 lời khuyên là : down cuốn này về đọc từ từ nhá , cứ ko có sách ngồi học thì chỉ làm dối đầu thôi
    http://forums.congdongcviet.com/showthread.php?t=28930

  3. #3
    Ngày gia nhập
    04 2011
    Nơi ở
    Heaven
    Bài viết
    90

    nhiều quá rối quá mình đọc không nổi, mà mình chỉ muốn nói với bạn là bạn ép kiểu như vậy dễ bị mất dữ liệu lắm có thể kết quả không chính xác

  4. #4
    Ngày gia nhập
    01 2011
    Bài viết
    116

    Kiểu 1: int( ( n/float( pow(10,vt) ) - int( n/pow(10,vt) ) )*10 );

    sao mình ko thấy biểu thức sau dấu - ko fai là int( n/(float((pow(10,vt) )) nhỉ, tương tự với kiểu 2.
    bạn thử lại xem, hiện mình ko có ide nào nên chưa thử đc
    C++ Code:
    1. while ( you_live) {
    2. if (you_failed) try_again();
    3. else if ( you_won) find_new_challenge();
    4. }
    5. system("DEATH");
    6. return HELL;

Các đề tài tương tự

  1. Bài tập C các phép tính trên phân số viết bằng C trên Linux. Mọi người sửa giúp mình với?
    Gửi bởi hxt57 trong diễn đàn Thắc mắc lập trình C/C++ trên Linux
    Trả lời: 2
    Bài viết cuối: 05-10-2011, 06:05 PM
  2. Đoạn code về linked trên C bị lỗi khi build trên Dev C++. Xem giúp mình
    Gửi bởi birthis trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 4
    Bài viết cuối: 06-05-2010, 01:17 PM
  3. return trên C. Trả về giá trị kiểu cấu trúc trên C. Xin chỉ giúp?
    Gửi bởi hoangedward trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 08-01-2010, 09:37 PM
  4. Close console trên C# | Giúp mình về Console Application trên C# với?
    Gửi bởi letheson trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 9
    Bài viết cuối: 15-05-2009, 12:28 AM
  5. interval timer trên C# | Lấy mẫu vẽ đồ thị trên C#. Giúp mình với?
    Gửi bởi mrvui trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 09-05-2009, 10:16 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn