2011年10月28日 星期五

C 泰勒展開式練習

#include <stdio.h>
#include <stdlib.h>
double myexp(double x);

int main()
{
   double x;
   printf("         x     myexp(x)       exp(x)\n");
   for(x=0;x<=40;x=x+10)
       printf("%5.1f%14.6g%14.6g\n",x,myexp(x),exp(x));  
       
  system("pause");   
}

double myexp(double x)
{
    double EPS = 1e-08;
    double s = 1.0,e=1.0,d=1.0;
    int k ;
    for(k=1;k<=200;k++)
    {
        d=s;
        e=e*x/k;
        s=s+e;
          if(fabs(s-d)<EPS*fabs(d))
            return s;                 
    }       
    return 0.0;  
}






                                   

2011年10月17日 星期一

C 梯形法則積分練習(The trapezoidal rule)

新增說明文字

#include <stdio.h>
#include <stdlib.h>

#define F(x) (1/(x*x +x))
#define n 3  //a~b 間的分割數

/****************************************************
   a
 S   (1/x*x+x) dx
   b
******************************************************/
int main()
{
  int i;
  int a,b;
  double x;
  double s;
  double sum=0;
  double width=0;
  printf("please input two numbers :the area from a to b\t");
  scanf("%d %d",&a,&b);
 
  for(i=a;i<=b;i++)
  { 
    x = i;            
    sum  = (double)F(x);
    printf("test %6.4f \t",sum);
    if((i!=a)&&(i!=b))
    {
     sum = sum*2;
     }
    s =s+sum;
   
  }
  width = (double)((b-a)/n); 
  printf("width =%6.4f\t",width);
  sum = (double)(width/2)*s;
  printf("sum =%6.4f",sum);
   
system("pause");   
}

C 質因數分解練習 (prime factor )

#include <stdio.h>
#include <stdlib.h>
int main()
{
  int  div = 2;
  int number;
  int times =0;
  printf("please input a number:");
  scanf("%d",&number);

  while (number >= div*div)
  {
     if(number%div == 0)
     {
        printf("%d*",div);
        number = number/div;
        times ++;
     }
     else
         div++;
  }
  if(times)
     printf("%d\n",number);
  else
     printf("Prime\n");
 
  printf("compare times =%d",times);
  system("pause");   
}

2011年10月16日 星期日

C 輾轉相除法練習 (GCD)

#include <stdio.h>
#include <stdlib.h>

int GCD(int big, int small)
{
  int remainder = 1;
  while(remainder !=0)
   {

      remainder = big % small;
      big = small;
      small = remainder;      

   }
   return big;
}

int main()
{
  int a,b;
  int rval;
  printf("please input two number\t"); 
  scanf("%d %d",&a,&b);
    rval = GCD(a,b);
 
  printf("The GCD is %d",rval);
  system("pause");   
}

C 質數檢查(Is Prime check )

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int isPrime(int number)
{ 
     int i;
     for(i=2;i<number;i++)    // for(i=2;i<=((int)(sqrt(number)));i++)
     {
       if((number % i == 0 ))
         return number;                   
     }
     return -1;
}
int main()
{
  
     int number ; 
     int rval;
     printf("please input a number\n ");
     scanf("%d",&number);
     rval = isPrime(number);
     if(rval == -1)
       printf(" %d is a prime\n",number);
     else 
       printf(" %d is not a prime\n",number);
     system("pause");  
}

2011年10月15日 星期六

C 費氏數列練習 (Fibonancci Recursive & Non_Recursive)

/*********************************************
 Fibonacci :
  fn = fn-1 + fn-2     if n > 1
  fn = n        if n = 0, 1                                      
*********************************************/

//Recursive

#include <stdio.h>
#include <stdlib.h>

int fib_fun(int fib)
{ 
    if(( fib == 0) || (fib == 1 ))
        return 1;
    else   
        return fib_fun(fib-1)+ fib_fun(fib-2);
}

int main()
{
   int fib,sum; 
   printf("pleae input a number\t");
   scanf("%d",&fib);
   if(fib < 0)
     printf("Input Wrong\n ");
   else   
     {
        sum = fib_fun(fib);
        printf("Answer is %d",sum);
     }
  system("pause");  
}

//Non_Recursive

#include <stdio.h>
#include <stdlib.h>

int main()
{
   int fib;
   int sum =1;
   int i;
   int a =1,b=1;
   printf("pleae input a number \t");
   scanf("%d",&fib);
   if(fib < 0)
     printf("Input Wrong\n ");
   else   
     {
        if((fib ==0) || (fib ==1))
          sum =1;
        else
        {     
            for(i=2;i<=fib;i++)
            {    
              sum =a+b;
              a = b;
              b = sum;
            }
        }
      printf("Answear =%d \n " , sum);
     }
  system("pause");  
}

C 二分搜尋法練習(Binary Search)

#include <stdio.h>
#include <stdlib.h>

//compare to sequential search, binary search data      must have been sorted!  

int bin_search(int number,int *number_data,int index)
{
  int low =0;
  int upper = index;
  int middle;

  while(low <= upper)
  {
    middle =(low+upper)/2 ;
    printf("low = %d\t",low);
    printf("middel = %d \n",middle);       
    if(number == number_data[middle])  
       return middle ;
    else
    {
     if(number > number_data[middle])
        low = middle + 1;
     else
        upper = middle - 1;  
    }     
  }
  return -1;    
}


int main()
{
  int number;
  int rval = 0;
  int number_data[]={11,22,33,44,55,66};
  printf("please input a number :\t");
  scanf("%d",&number);
  rval = bin_search(number,number_data,6);
  if(rval == -1)
    printf("Not Find Number\n ");  
  else
    printf("Find Number %d at position %d \n", number,(rval+1));       
 
  system("pause");
 
}