经典程序摘录

 

经典程序集

1.求质数... 1

素数... 1

分解质因数... 1

求其最大公约数和最小公倍数... 2

实现字符串拷贝函数strcpy() 2

实现内存拷贝函数memcpy() 2

 

1.求质数

////E-mail:[email protected]

#include "iostream.h"
#include "stdio.h"

void main()
{
 int count=0;
 for(int i=100;i<1000;i++)
 {
  //
偶数,就跳过,它肯定不是质数
  if(i%2==0)
   continue;
  //
判断3579……i/2是否有i的因子
  int j=3;
  while(j<=i/2&&i%j!=0)
   j+=2;
  //
若上述数都不是i的因子,则i是质数
  if(j>i/2)
  { 

//每行输出 8 个数,每8个数输出一回车键
   if(count%8==0)
    cout<<endl;
   //
输出质数
   cout<<i<<"  ";
   count++;
  }
 }
 cout<<endl;
}

素数

题目:判断101-200之间有多少个素数,并输出所有素数。
1.
程序分析:判断素数的方法:用一个数分别去除2sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。       
2.
程序源代码:
#include "math.h"
main()
{
 int m,i,k,h=0,leap=1;
 printf("\n");
 for(m=101;m<=200;m++)
  { k=sqrt(m+1);
   for(i=2;i<=k;i++)
     if(m%i==0)
      {leap=0;break;}
   if(leap) {printf("%-4d",m);h++;
        if(h%10==0)
        printf("\n");
        }
   leap=1;
  }
 printf("\nThe total is %d",h);
}

分解质因数

题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)
如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)
如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,
 重复执行第一步。
(3)
如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
2.
程序源代码:
/* zheng int is divided yinshu*/
main()
{
int n,i;
printf("\nplease input a number:\n");
scanf("%d",&n);
printf("%d=",n);
for(i=2;i<=n;i++)
 {
  while(n!=i)
  {
   if(n%i==0)
   { printf("%d*",i);
    n=n/i;
   }
   else
    break;
  }
}
printf("%d",n);}

求其最大公约数和最小公倍数

题目:输入两个正整数mn
1.
程序分析:利用辗除法。
2.
程序源代码:
main()
{
 int a,b,num1,num2,temp;
 printf("please input two numbers:\n");
 scanf("%d,%d",&num1,&num2);
 if(num1  { temp=num1;
  num1=num2; 
  num2=temp;
 }
a=num1;b=num2;
while(b!=0)/*
利用辗除法,直到b0为止*/
 {
  temp=a%b;
  a=b;
  b=temp;
 }
printf("gongyueshu:%d\n",a);
printf("gongbeishu:%d\n",num1*num2/a);
}

题目:字符串排序
1.
程序分析:
2.
程序源代码:
main()
{
char *str1[20],*str2[20],*str3[20];
char swap();
printf("please input three strings\n");
scanf("%s",str1);
scanf("%s",str2);
scanf("%s",str3);
if(strcmp(str1,str2)>0) swap(str1,str2);
if(strcmp(str1,str3)>0) swap(str1,str3);
if(strcmp(str2,str3)>0) swap(str2,str3);
printf("after being sorted\n");
printf("%s\n%s\n%s\n",str1,str2,str3);
}
char swap(p1,p2)
char *p1,*p2;
{
char *p[20];
strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p);
}

实现字符串拷贝函数strcpy()

#include <iostream>
using namespace std;

char* strcpy(char* dest, const char *src )
{
// char* pdest = static_cast<char*>(dest);
// const char* psrc = static_cast<const  char*>(src);
if((dest==NULL)||(src==NULL))
throw"error";
char* strdest = dest;
while((*dest++ = *src++)!='\0');
return strdest;
}


int main()
{
 char* sdest = (char*)malloc(strlen(str));
 char str[] = "0123456789";
 strcpy( sdest, str);
 cout<< sdest<<endl;
 return 0;
 free(sdest);
}

 

实现内存拷贝函数memcpy()

#include <iostream>

using namespace std;

void* memcpy(void * dest, const void *src, size_t count )
{
 char* pdest = static_cast<char*>(dest);
 const char* psrc = static_cast<char*>(src);
 if(pdest>psrc && pdest<psrc+count)
 {
  for(size_t i=count-1; i!=1; --i)
   pdest[i] = psrc[i];
 }
 else
 {
  for(size_t i=0; i<count; ++i)
   pdest[i]=psrc[i];
 }
 return dest;
}
int main()
{
 char src[]= "0123456789";
 memcpy( str+1; str+0; 9);
 cout<< str<<endl;
 return 0;
}

 

二、编写一函数实现子字符串查找
char *strstr(char* str, char * substr)

 

main()
{
 char b[]="0123456789ABCDEF";
 int c[64],d,i=0,base=16;
 long n;
 scanf("%ld",&n);
 do{
   c[i]=   ;i++;n=n/base;
 }while(n!=0);
  for(--i;i>=0;--i)
  {d=c[i];printf("%c",b[d]);}
  getch();
}
int AnsiString::Pos(const AnsiString& subStr)
{
 int len=subStr.Length();
 int p=0;
 for(int i=0;i<DataLen;i++)
 {
  if(i+1+len<=DataLen)
  {
   if(SubString(i+1,len)==subStr)
   {
    p=i+1;
    break;   
   }
  }
  else
  {
   break;
  }
 }
 return p;
}

 

AnsiString AnsiString::SubString(int index, int count)
{
 index--;
 if(index+count>DataLen)
 {
  count=DataLen-index;
 }
 char* tmp=new char[count+1];
 memcpy(tmp,Data+index,count);
 tmp[count]=0;
 AnsiString Result=tmp;
 delete []tmp;
 return Result;
}

 

if((fp=fopen("A","r"))==NULL)

 

 

 

你可能感兴趣的:(程序)