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

Đề tài: Các bài tập giả lập các hàm trong C.

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

    Mặc định Các bài tập giả lập các hàm trong C.

    Mình hôm nay sẽ làm hàm tính a lủy thừa n của 1 số:
    Code:
    #include<stdio.h>
    
    double LuyThua(double a,int n) //hàm tính a mũ n.
    {
    	double kq=1, gt=a;
    	while(n)
    	{
    		if(n%2==1) kq=kq*gt;
    		gt=gt*gt;
    		n=n/2;
    	}
    	return kq;
    }
    
    int main()
    {
    	printf("%f",GiaiThua(2,3));
    return 0;
    }
    Bạn chú ý chương trình này số lần lặp tối đa chỉ là sizeof(n)*8; nhanh rất nhiều.
    ví dụ n=128 thì vòng lặp chỉ thực hiện 8 lần. Còn nếu bạn viết theo kiểu đệ quy là 128 lần.
    Tiếp tục nếu số n của bạn là 2 mũ 10000 thì thì viết theo đệ quy là lặp 2 mũ 10000 lần lặp đến sáng. còn theo chương trình trên là 10000 lần lặp trong 30s hihi.
    Đã được chỉnh sửa lần cuối bởi shinichi_haha : 27-11-2006 lúc 06:02 PM.

  2. #2
    Ngày gia nhập
    07 2006
    Bài viết
    121

    Giả lập hàm strlen trong C.
    Code:
    #include<stdio.h>
    int m_strlen(const char *p)
    {
    	int i=0;
    	while(p[i++]!=0);
    	return i-1;
    }
    
    int main()
    {
    	printf("%d",m_strlen(""));
    	printf("\n%d",m_strlen("123456789"));
    return 0;
    }

  3. #3
    Ngày gia nhập
    07 2006
    Bài viết
    121

    Hàm m_strdup tạo một chuổi mới có nội dung hoàn toàn giống chuổi ban đầu.
    Code:
    char *m_strdup(const char *s)
    {
    	char *dup;
    	int i=0,len=m_strlen(s); //Hàm m_strlen(s) lấy độ lớn của chuổi s được giả lập ở trên.
    	dup=(char*)malloc(len+1);
    	while(dup[i++]=*s++);
    	return dup;
    }
    Ở đây mình cũng có câu hỏi cho các cậu chú ý câu lệnh while(dup[i++]=*s++); dòng này dùng để chép chuổi s qua chuổi dup tại sao mình lại không dùng như sau while(*dup++=*s++) như đoạn code copy chuổi sau:http://forums.congdongcviet.com/showthread.php?t=833.
    Đã được chỉnh sửa lần cuối bởi shinichi_haha : 30-11-2006 lúc 06:23 PM.

  4. #4
    Ngày gia nhập
    08 2006
    Nơi ở
    Chương Mỹ-Hà Tây
    Bài viết
    27

    hay was không biết còn có nhiểu bài nữa không nhỉ.?

    tiện đây các bác cho em hỏi c++: dó là viết mọt hàm sau đó có từ const ở cuối ten hàm nghĩa là thế nào thế
    ví dụ : int luythu const (int a) cái gì đó em không nhớ nữa
    có thể giải thích cho không??
    abc345

  5. #5
    Ngày gia nhập
    07 2006
    Bài viết
    121

    Trích dẫn Nguyên bản được gửi bởi tuyetton
    hay was không biết còn có nhiểu bài nữa không nhỉ.?

    tiện đây các bác cho em hỏi c++: dó là viết mọt hàm sau đó có từ const ở cuối ten hàm nghĩa là thế nào thế
    ví dụ : int luythu const (int a) cái gì đó em không nhớ nữa
    có thể giải thích cho không??
    hàm int luythu(int a) const;
    Từ khóa const ở đây báo cho trình biên dịch biết rằng đối tượng this truy cập tới hàm này là đối tượng hằng. Các biến thành viên trong this sẽ không được thay đổi.
    nếu trong hàm lủy thừa của bạn có đoạn mã thay đổi giá trị của this thì trình biên dịch sẽ báo lỗi cụ thể VC++ là: l-value specifies const object

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

    Mặc định Các bài tập giả lập các hàm trong C.

    Hàm char *m_strcpy(char *d,const char *s);

    Code:
    char *m_strcpy(char *d,char *s)
    {
         char *tmp=s;
          while(*d++=*s++);
         return tmp;
    
    }
    Đã được chỉnh sửa lần cuối bởi shinichi_haha : 02-12-2006 lúc 03:00 PM.

  7. #7
    Ngày gia nhập
    09 2006
    Bài viết
    12

    Trích dẫn Nguyên bản được gửi bởi shinichi_haha
    Ở đây mình cũng có câu hỏi cho các cậu chú ý câu lệnh while(dup[i++]=*s++); dòng này dùng để chép chuổi s qua chuổi dup tại sao mình lại không dùng như sau while(*dup++=*s++) như đoạn code copy chuổi sau:http://forums.congdongcviet.com/showthread.php?t=833.
    vì bạn không muốn trả về '\0'

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

    @def: hix đúng rồi.

  9. #9
    Ngày gia nhập
    07 2006
    Bài viết
    121

    Lâu rồi chưa post bài sợ nguội nên post bài nhỏ chơi.
    Chương trình giả lập lệnh cat trong Unix.
    /*Ghi chú: chương trình này có thể biên dịch bằng các trình biên dịch cùng họ với c có thể test trên windows */
    Code:
    #include<stdio.h>
    
    #include<stdio.h>
    
    int main(int ac,char **agrs)
    {
         int ch,i=1;
         FILE *pf;
         pf=stdin;
         do
        {
              if(ac>1&&(pf=fopen(agrs[i],"r"))==NULL)
    		  {
    			  fprintf(stderr,"loi mo tap tin: %s \n",agrs[i]);
    			  continue;
    		  }
    		  while((ch=getc(pf))!=EOF)
    		  {
    			  putc(ch,stdout);
    		  }
    	printf("\n");
        }while(++i<ac);
    	return 0;
    
    }

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

  1. Giải Thích Về Phương Thức windowClosing() trong Giao Diện WindowListener
    Gửi bởi toilatoi1992 trong diễn đàn Nhập môn lập trình Java
    Trả lời: 2
    Bài viết cuối: 06-10-2013, 07:18 PM
  2. Trả lời: 0
    Bài viết cuối: 04-11-2011, 03:38 PM
  3. Xóa file trong win ! Nan giải quá , nghĩ cả ngày nay chưa giải quyết được.
    Gửi bởi megaboyvn trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 08-10-2009, 02:21 AM
  4. Hàm trong C++ không nằm trong main vẫn chạy đúng. Giải thích giúp?
    Gửi bởi tuvan1011 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 15
    Bài viết cuối: 02-09-2009, 12:58 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