1. 程式人生 > >在面試中,你會經常遇到的10大C語言基礎演算法(下)

在面試中,你會經常遇到的10大C語言基礎演算法(下)

6、檢查一個數能不能表示成兩個質數之和http://www.fdjzxyy.com

原始碼:

#include <stdio.h>

int prime(int n);

int main()

{

   int n, i, flag=0;

   printf("Enter a positive integer: ");

   scanf("%d",&n);

   for(i=2; i<=n/2; ++i)

    {

       if (prime(i)!=0)

       {

           if ( prime(n-i)!=0)

           {

                printf("%d = %d +%d\n", n, i, n-i);

                flag=1;

           }

       }

    }

   if (flag==0)

     printf("%d can't be expressed as sum of two primenumbers.",n);

   return 0;

}

int prime(int n)      /* Function to check prime number */

{

   int i, flag=1;

   for(i=2; i<=n/2; ++i)

      if(n%i==0)

         flag=0;

   return flag;

}

結果輸出:

Enter a positive integer: 34

34 = 3 + 31

34 = 5 + 29

34 = 11 + 23

34 = 17 + 17

7、用遞迴的方式顛倒字串

原始碼:

/* Example to reverse a sentence entered byuser without using strings. */

#include <stdio.h>

void Reverse();

int main()

{

   printf("Enter a sentence: ");

    Reverse();

   return 0;

}

void Reverse()

{

   char c;

   scanf("%c",&c);

   if( c != '\n')

    {

       Reverse();

       printf("%c",c);

    }

}

結果輸出:

Enter a sentence: margorp emosewa

awesome program

8、實現二進位制與十進位制之間的相互轉換

/* C programming source code to converteither binary to decimal or decimal to binary according to data entered byuser. */

#include <stdio.h>

#include <math.h>

int binary_decimal(int n);

int decimal_binary(int n);

int main()

{

  int n;

  char c;

   printf("Instructions:\n");

  printf("1. Enter alphabet 'd' to convert binary todecimal.\n");

  printf("2. Enter alphabet 'b' to convert decimal tobinary.\n");

  scanf("%c",&c);

   if(c =='d' || c == 'D')

   {

      printf("Enter a binary number: ");

      scanf("%d", &n);

      printf("%d in binary = %d in decimal", n, binary_decimal(n));

   }

   if(c =='b' || c == 'B')

   {

      printf("Enter a decimal number: ");

      scanf("%d", &n);

      printf("%d in decimal = %d in binary", n, decimal_binary(n));

   }

  return 0;

}

int decimal_binary(int n)  /* Function to convert decimal to binary.*/

{

   int rem, i=1, binary=0;

   while (n!=0)

    {

       rem=n%2;

       n/=2;

       binary+=rem*i;

       i*=10;

    }

   return binary;

}

int binary_decimal(int n) /* Function toconvert binary to decimal.*/

{

   int decimal=0, i=0, rem;

   while (n!=0)

    {

       rem = n%10;

       n/=10;

       decimal += rem*pow(2,i);

       ++i;

    }

   return decimal;

}

9、使用多維陣列實現兩個矩陣的相加

原始碼:

#include <stdio.h>

int main(){

   int r,c,a[100][100],b[100][100],sum[100][100],i,j;

   printf("Enter number of rows (between 1 and 100): ");

   scanf("%d",&r);

   printf("Enter number of columns (between 1 and 100): ");

   scanf("%d",&c);

   printf("\nEnter elements of 1st matrix:\n");

/* Storing elements of first matrix enteredby user. */

   for(i=0;i<r;++i)

      for(j=0;j<c;++j)

      {

          printf("Enter element a%d%d: ",i+1,j+1);

          scanf("%d",&a[i][j]);

      }

/* Storing elements of second matrixentered by user. */

   printf("Enter elements of 2nd matrix:\n");

   for(i=0;i<r;++i)

      for(j=0;j<c;++j)

      {

          printf("Enter element a%d%d: ",i+1,j+1);

          scanf("%d",&b[i][j]);

      }

/*Adding Two matrices */

  for(i=0;i<r;++i)

      for(j=0;j<c;++j)

          sum[i][j]=a[i][j]+b[i][j];

/* Displaying the resultant sum matrix. */

   printf("\nSum of two matrix is: \n\n");

   for(i=0;i<r;++i)

      for(j=0;j<c;++j)

      {

          printf("%d  ",sum[i][j]);

          if(j==c-1)

               printf("\n\n");

      }

   return 0;

}

10、矩陣轉置

原始碼:

#include <stdio.h>

int main()

{

   int a[10][10], trans[10][10], r, c, i, j;

    printf("Enterrows and column of matrix: ");

   scanf("%d %d", &r, &c);

/* Storing element of matrix entered byuser in array a[][]. */

   printf("\nEnter elements of matrix:\n");

   for(i=0; i<r; ++i)

   for(j=0; j<c; ++j)

    {

       printf("Enter elements a%d%d: ",i+1,j+1);

       scanf("%d",&a[i][j]);

    }

/* Displaying the matrix a[][] */

   printf("\nEntered Matrix: \n");

   for(i=0; i<r; ++i)

   for(j=0; j<c; ++j)

    {

       printf("%d  ",a[i][j]);

       if(j==c-1)

           printf("\n\n");

    }

/* Finding transpose of matrix a[][] andstoring it in array trans[][]. */

   for(i=0; i<r; ++i)

   for(j=0; j<c; ++j)

    {

      trans[j][i]=a[i][j];

    }

/* Displaying the transpose,i.e, Displayingarray trans[][]. */

    printf("\nTransposeof Matrix:\n");

   for(i=0; i<c; ++i)

   for(j=0; j<r; ++j)

    {

       printf("%d ",trans[i][j]);

       if(j==r-1)

           printf("\n\n");

    }

   return 0;

}