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

Đề tài: Giải thích tính giai thừa trong C như thế nào?

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

    Thumbs down Giải thích tính giai thừa trong C như thế nào?

    em mới học hàm , không hiểu đoạn code này
    C Code:
    1. #include"stdio.h"
    2. long double gt(int i);
    3. main()
    4.   {
    5.     int i,n;
    6.      float p;
    7.      clrscr();
    8.      printf("\n        TINH GIAI THUA");
    9.      printf("\n   (cua n so nguyen dau tien)");
    10.      printf("\n    Nhap vao so can tinh : ");
    11.      scanf("%d",&n);
    12.      [B]p=1;
    13.      for (i=1;i<=n;++i)
    14.         ;
    15.         p=p*gt(i);[/B]     
    16.                      printf("\nGiai thua cua %d = %11.9f",n,p);
    17.         getch();
    18.   }
    19.   long double gt(int i)
    20.   {
    21.      long double tam;
    22.      int k;
    23.      tam = 1;
    24.      for (k=1;k<i;k++)
    25.         tam=tam*k;
    26.         return(tam);
    27.    }
    em chưa hiểu đoạn in đậm em đã học qua pascal ...em thấy rằng hàm đã tính toán chi mình cả rồi..mình chỉ cần nhập n và tính gt(n) là xong tại sao có thêm câu lệnh for rỗng và p đó nữa làm gì...

  2. #2
    Ngày gia nhập
    02 2008
    Bài viết
    66

    C Code:
    1.      p=1;
    2.      for (i=1;i<=n;++i)//
    3.         ;//Đoạn này có ; thì thành ra chẳng có vòng for thì kết quả vẫn vậy
    4.         p=p*gt(i);
    Mình nghĩ là code không đúng lắm hoặc muốn dừng ở đó một chút.
    Nếu bỏ dấu ; đi thì thành tính tích 1!2!...n!.
    Nếu thế này thì sẽ in ra 1!, 2! ... n!
    C Code:
    1. for (i=1;i<=n;i++)
    2. {
    3.      p=gt(i);
    4.      printf("\nGiai thua cua %d = %ld",i,p);
    5. }

    Mà đoạn này sai rồi:
    C Code:
    1.   long double gt(int i)
    2.   {
    3.      long double tam;
    4.      int k;
    5.      tam = 1;
    6.      for (k = 1 ; k < i ; k++) //Làm như thế thì nó tính (n-1)!
    7.         tam=tam*k;
    8.         return(tam);
    9.    }
    Sửa lại:
    C Code:
    1.   long double gt(int i)
    2.   {
    3.      long double tam;
    4.      int k;
    5.      tam = 1;
    6.      for (k = 1 ; k++ < i;)
    7.         tam=tam*k;
    8.         return(tam);
    9.    }
    Hoặc:
    C Code:
    1.   long double gt(int i)
    2.   {
    3.      long double tam;
    4.      int k;
    5.      tam = 1;
    6.      for (k = 1 ; k <= i; k++)
    7.         tam=tam*k;
    8.         return(tam);
    9.    }
    Đã được chỉnh sửa lần cuối bởi mushu : 02-08-2008 lúc 05:43 PM. Lý do: Bổ xung chút ít!

  3. #3
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Đoạn code của bạn không biết là viết vì mục đích gì, có thể là một ví dụ để giải thích. Chứ mình nghĩ không ai làm bài tập tính giai thừa mà làm kiểu này. Không bàn đúng sai, mình giải thích đoạn in đậm
    C Code:
    1. #include"stdio.h"
    2. long double gt(int i);
    3. main()
    4.   {
    5.     int i,n;
    6.      float p;
    7.      clrscr();
    8.      printf("\n        TINH GIAI THUA");
    9.      printf("\n   (cua n so nguyen dau tien)");
    10.      printf("\n    Nhap vao so can tinh : ");
    11.      scanf("%d",&n);
    12.      p=1;                  //gán giá trị ban đâu cho biến float p=1; để thực phép nhân mà không thay đổi kết quả
    13.      for (i=1;i<=n;++i)  //Tăng giá trị của biến i lên từng đơn vị
    14.         ;                  //Kết thúc vòng lặp i=n
    15.         p=p*gt(i);      //gt(i) chính là gt(n) kiểu long double
    16. //gán như trên sẽ cho p=n! nhưng giá trị có kiểu float              
    17.                      printf("\nGiai thua cua %d = %11.9f",n,p);
    18.         getch();
    19.   }
    20.   long double gt(int i)
    21.   {
    22.      long double tam;
    23.      int k;
    24.      tam = 1;
    25.      for (k=1;k<i;k++)
    26.         tam=tam*k;
    27.         return(tam);
    28.    }

  4. #4
    Ngày gia nhập
    07 2008
    Bài viết
    30

    đây là code của mình...sai cái gì nhỉ stress rồi...sao đơn giản mà cứ sai là sao nhỉ
    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. long double gt(int i);
    4. main()
    5.     {
    6.       int i,n;
    7.       float p;
    8.       clrscr();
    9.       printf("\n Tinh giai thua cua n ");
    10.       scanf("%d",&n);
    11.  
    12.       p=1;
    13.  
    14.       p=p*gt(n);
    15.       printf("\ngia tri cua giai thua= %f",p);
    16.       getch();
    17.     }
    18.     long double gt(int i)
    19.       {
    20.        int k;
    21.        long double p;
    22.        p=1;
    23.        for(k=1;k<=i;k++)
    24.        p=p*k;
    25.        return(p);
    26.        }
    điên mất rùi

  5. #5
    Ngày gia nhập
    02 2008
    Bài viết
    66

    Mất chữ void rồi.
    C Code:
    1. void main()
    Còn cho cái vào mình chưa bao giờ chạy được.
    clrscr();

  6. #6
    Ngày gia nhập
    07 2008
    Bài viết
    30

    Mặc định Giải thích tính giai thừa trong C như thế nào?

    cũng thê cả thui bạn test bài của mình đi..sao cứ nhập 3 vào nó lại ra -2 mình điên mất rồi hichic

  7. #7
    Ngày gia nhập
    04 2008
    Bài viết
    336

    Bạn làm đúng rồi mà ko sai đâu có điều tính thêm trg` hợp 0! nữa thôi

  8. #8
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Mình nhâp 3 vào nó ra 6.000000
    Bạn đang dùng trình compile là gì thế, có thể lỗi ở đó.

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

  1. Tính giai thừa trong C sử dụng hàm như thế nào?
    Gửi bởi tuutac0511 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 20
    Bài viết cuối: 27-10-2015, 07:30 PM
  2. Giảm đau cho bệnh nhân ung thư gan giai đoạn cuối
    Gửi bởi quynhcute trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 04-09-2012, 07:54 PM
  3. Tính giai thừa của số lớn | Cách giải quyết trên C như thế nào?
    Gửi bởi tung061288 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 24-07-2009, 09:02 AM
  4. Giai thừa, Tính toán giai thừa trong lập trình C
    Gửi bởi congthao trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 11
    Bài viết cuối: 14-07-2009, 01:12 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