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");
 
}

C 簡單循序搜尋練習(Simple Sequentail Ssearch)

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

int seq_search(int number,int *number_data,int index)
{
  int i ;  
  for(i=1;i<=index;i++)
  {                   
     if(number == number_data[i-1])
         return i;                   
  }  
  return 0;
}


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 = seq_search(number,number_data,6);
  if(rval)
   printf("Find Number %d at position %d \n", number,rval);
  else
   printf("Not Find Number\n ");        
 
  system("pause");
 
}

C 傳址呼叫 (pass by value) & 傳指標呼叫(pass by pointer)

傳值呼叫(pass by value):
在呼叫函數時,只傳引數的"數值"給函式,函式不可能會改變原本呼叫方的引數數值 ,

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

void func1(int a,int b)
{
  a=a+10;
  b=b+20;
  printf(" %d,",a);
  printf(" %d ",b);     
}

int main()
{
  int x=1;
  int y =2;
  func1(x,y);  
  printf(" %d,",x);
  printf(" %d ",y); 
  system("pause"); 
  
}

RESULT:11,22,1,2

傳指標呼叫(pass by pointer):
仍是傳值呼叫的一種,不過傳入的是引數的記憶體位址,函式會改變原本呼叫方的引數數值,不會改變該引數在記憶體裡的位址

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

void func1(int *a,int b)
{
  *a=*a+10;
  b=b+20;
  printf(" %d,",*a);
  printf(" %d ",b);    
}

int main()
{
  int x=1;
  int y =2;
  func1(&x,y); 
  printf(" %d,",x);
  printf(" %d ",y);
  system("pause");
 
}
 RESULT:11,22,11,2
//pass by pointer 會改變Caller的變數值,因為傳指標呼叫,指標變數指向該變數的記憶體位址

C 帕斯卡三角形練習 (Pascal Triangle)

#include <stdio.h>
#include <stdlib.h>
int main()
{

  int trangle_level=0;
  printf("please intput a mumber between 1  to 10:");
  scanf("%d",&trangle_level);
  int trangle1[11]={0};
  int trangle2[11]={0}; //temp_array
  int i,j,k;
  trangle2[1]=1;
  for(i =1;i<=trangle_level;i++)
  {
               
     for(j=1;j<=i;j++)
        trangle1[j]= trangle2[j]+trangle2[j-1];
     for(j=1;j<=trangle_level;j++)
        trangle2[j] = trangle1[j]; //copy array
       
     for(j=1;j<=(trangle_level-i);j++)
      printf("%c",32);
     for(j=1;j<=i;j++)
      printf("%c%d",32,trangle1[j]);
     
    printf("\n"); 
  }
 
   
  system("pause");   
}

C 矩陣相乘-使用thread(轉貼)

#include <windows.h>
#include <stdio.h>
#define M 3
#define K 2
#define N 3

// structure for passsing data to therads
struct v
{
  int i; // row
  int j; // column     
};
     
int A[M][K] = { {1,4},{2,5},{3,6} };
int B[K][N] = { {8,7,6},{5,4,3} };
int C[M][N];
int i,j;
DWORD WINAPI multiplyThread(LPVOID Param )
{
        // Create structure and assign data from param to it.
        struct v threadVal = *(struct v*)Param;

        int a = threadVal.i;
        int b = threadVal.j;
      
        // cout << a << ' ' << b << endl;
        //Perform the matrix multiplication
        C[a][b]=0;
        for(i =0;i < K; i++)
        C[a][b]+=A[a][i]*B[i][b];
      
        return 0;
}

int main()
{
   DWORD ThreadId;
   HANDLE ThreadHandle;
 
   // printf array A
   printf("Array A is\n");
   for( i= 0; i < M; i++ )
   {
     for( j = 0; j < K; j++ )
        printf("%d ",A[i][j]);
   
     printf("\n");
   }
 
   printf("\n\n");
 
   // printf array B
   printf("Array B is\n");
   for(i= 0; i < K; i++ )
   {
     for(  j = 0; j < N; j++ )
        printf("%d ",B[i][j]);
   
     printf("\n");
   } 
 
   // create M * N worker threads
   for( i= 0; i < M; i++ )
   {
     for(j = 0; j < N; j++ )
     {
       struct v *data = (struct v *) malloc(sizeof(struct v) ); // allocate memory
       data ->i = i;
       data ->j = j;
      // Create Thread to calculate value of matrix at row column
       ThreadHandle = CreateThread(
         NULL, // default security attributes
         0, // default stack size
         multiplyThread, // thread function
         data, // parameter to thread function
         0, // default creation flags
         &ThreadId); // returns the thread identifier
    
      /*
       if ( ThreadHandle != NULL )
       {
         // now wiat for the thread to finish
         WaitForSingleObject(ThreadHandle,INFINITE);
      
         // close the thread handle
         CloseHandle(ThreadHandle);
       }
      
       */      
     }
     printf("\n");
   }
 
   printf("Array A * B is\n");
   for( i= 0; i < M; i++ )
   {
     for(  j = 0; j < N; j++ )
        printf("%d ",C[i][j]);
   
     printf("\n");
   }
 
   printf("\n");
       
   system( "pause" );
   return 0;
}

C 泡沫排序練習-遞減 (Bubble sort -decrease)

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

int main()
{
    int lotta[7]={42,47,6,3,22,9};
    int time = 1;
    int k = 0;
    int temp;
    int i,j;
   
    int compare_times =0;
   
    while(time!=0)
    {
      for(i=0; i <= 6;i++)
      {
         if(lotta[i]<=lotta[i+1])
         {
            temp = lotta[i];
            lotta[i] = lotta[i+1];
            lotta[i+1]=temp;
            k=k+1;
            compare_times ++;
         }                  
      }             
     time = k;    
     k=0;       
    }
   
    for(j=1;j<=6;j++)
    {
        printf("%d\t",lotta[j]);       
    }
   
    printf("\n");
    printf("compare_times =%d",compare_times);
    system("pause");
}

C 矩陣相乘練習 (Matrix Multiplication)

/*
陣列模擬簡單兩矩陣相乘 A[](mxn)、B[](nxp)
為了驗算數學而寫
使用DOS命令更改視窗大小標題及色彩
*/

#include <stdio.h>
#include <stdlib.h>
int m,n,p,i,j,k,l;

int main()
{
  system("title 矩陣乘法計算  By 彩");
  system("mode con cols=75 lines=30");
  system("color 8F");
  while(1)
  {
    printf("\n\n輸入矩陣A之列數m、行數及矩陣B之行數p\n");
    scanf("%d",&m);
    scanf("%d",&n);
    scanf("%d",&p);
    float a[m][n],b[n][p],c[m][p];
  
    printf("\n輸入A\n");
    for(i=0;i<m;i++)
    {
      for(j=0;j<n;j++)
      {  scanf("%f",&a[i][j]);  }
    }
  
    printf("\n輸入 B\n");
    for(i=0;i<n;i++)
    {
      for(j=0;j<p;j++)
      {  scanf("%f",&b[i][j]);  }
    }
  
    for(i=0;i<m;i++)
    {
      for(j=0;j<p;j++)
      {
        c[i][j]=0;
        for(k=0;k<n;k++)
        {  c[i][j]+=a[i][k]*b[k][j];  }
      }
    }
  
    printf("===============\n");
    for(i=0;i<m;i++)
    {
      for(j=0;j<p;j++)
      {  printf("%.1f   ",c[i][j]);  }
      printf("\n");
    }
  }
}
/*
轉用請附來源說明
以歌者之名流浪
http://jaacnaett.pixnet.net/blog/
*/

C  二維矩陣練習

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

int main()
{
  char array[][20]={"bear","032125678",
                    "ss","0226713456",
                    "yy","075534321"};

  char scan_string[10];   
  int i=0;
  int j=0;
  int rval;
              
  printf("Please input name : ");
  scanf("%s",scan_string);
  for(i=0;i<=6;i++)
  {
     rval = strcmp(scan_string,array[i]);
    
     if(rval ==0)
        printf("%s phone number is %s",array[i],array[i+1]);
  }
 
 system("pause");  
}

C  轉置矩陣練習 (Transpose Matrix)

轉置矩陣練習:

#include <stdio.h>
#include <stdlib.h>
int main()
{
  int x,y;
  int i,j;

  printf("please input the row of matrix :");
  scanf("%d",&x);
  printf("\n");
  printf("please input the column of matrix : ");
  scanf("%d",&y);
  printf("\n");
  int matrix[x+1][y+1];
  int t_matrix[y+1][x+1];
  for(i=0;i<=(x-1);i++)
  {
     for(j=0;j<=(y-1);j++)
     {
        printf("please int the value of matrix[%d][%d]:\t",i,j);
        scanf("%d",&matrix[i][j]);
        printf("\n");                    
     }                    
  }  
 
  printf("The original matrix[%d][%d] is:\n",x,y);
  for(i=0;i<=(x-1);i++)
  {
     for(j=0;j<=(y-1);j++)
     {
        t_matrix[j][i]= matrix[i][j];
        printf("%d\t",matrix[i][j]);
                        
     }
     printf("\n");                      
  }  

 
  printf("The transverse matrix[%d][%d] is:\n",y,x);
  for(i=0;i<=(y-1);i++)
  {
     for(j=0;j<=(x-1);j++)
     {
        printf("%d\t",t_matrix[i][j]);
                        
     }
     printf("\n");                      
  }  
 
 
   system("pause");
}