#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月28日 星期五
C 泰勒展開式練習
2011年10月17日 星期一
C 梯形法則積分練習(The trapezoidal rule)
新增說明文字 |
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");
}
#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");
}
#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");
}
#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");
}
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");
}
#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");
}
#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的變數值,因為傳指標呼叫,指標變數指向該變數的記憶體位址
在呼叫函數時,只傳引數的"數值"給函式,函式不可能會改變原本呼叫方的引數數值 ,
#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");
}
#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;
}
#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");
}
#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/
*/
陣列模擬簡單兩矩陣相乘 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");
}
#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");
}
#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");
}
訂閱:
文章 (Atom)