经典程序集
1.求质数
////E-mail:cangzhu@163.com
#include "iostream.h"
#include "stdio.h"
void main()
{
int count=0;
for(int i=100;i<1000;i++)
{
//偶数,就跳过,它肯定不是质数
if(i%2==0)
continue;
//判断3,5,7,9……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.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
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);}
求其最大公约数和最小公倍数
题目:输入两个正整数m和n,
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)/*利用辗除法,直到b为0为止*/
{
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)