c++程序实例资料.docx

上传人:b****1 文档编号:23043626 上传时间:2023-04-30 格式:DOCX 页数:16 大小:31.27KB
下载 相关 举报
c++程序实例资料.docx_第1页
第1页 / 共16页
c++程序实例资料.docx_第2页
第2页 / 共16页
c++程序实例资料.docx_第3页
第3页 / 共16页
c++程序实例资料.docx_第4页
第4页 / 共16页
c++程序实例资料.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

c++程序实例资料.docx

《c++程序实例资料.docx》由会员分享,可在线阅读,更多相关《c++程序实例资料.docx(16页珍藏版)》请在冰豆网上搜索。

c++程序实例资料.docx

c++程序实例资料

C++程序设计实例

【例3.12】用下面公式求π的近似值。

π/4≈1-1/3+1/5-1/7+…直到最后一项的绝对值小于10-7为止。

根据给定的算法很容易编写程序如下:

1.#include 

2.#include 

3.#include 

4.using namespace std;

5.int main( )

6.{

7.int s=1;

8.double n=1,t=1,pi=0;

9.while((fabs(t))>1e-7)

10.{

11.pi=pi+t;

12.n=n+2;

13.s=-s;

14.t=s/n;

15.}

16.pi=pi*4;

17.cout<<"pi="<

:

fixed)<

18.return 0;

19.}

运行结果为

pi=3.141592

注意:

不要把n定义为整型变量,否则在执行“t=s/n;”时,得到t的值为0(原因是两个整数相除)。

【例3.13】求Fibonacci数列前40个数。

这个数列有如下特点:

第1、2个数为1、1。

从第3个数开始,每个数是其前面两个数之和。

即:

  F1=1 (n=1)

  F2=1 (n=2)

  Fn=Fn-1+Fn-2(n≥3)

这是一个有趣的古典数学问题:

有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第3个月后每个月又生一对兔子,假设所有兔子都不死,问每个月的兔子总数为多少?

根据给出的每月兔子总数的关系,可编写程序如下:

1.#include 

2.#include 

3.using namespace std;

4.int main( )

5.{

6.long f1,f2;

7.int i;

8.f1=f2=1;

9.for(i=1;i<=20;i++)

10.{

11.cout<

12.//设备输出字段宽度为12,每次输出两个数

13.if(i%2==0) cout<

14.//每输出完4个数后换行,使每行输出4个数

15.f1=f1+f2;

16.//左边的f1代表第3个数,是第1、2个数之和

17.f2=f2+f1;

18.//左边的f2代表第4个数,是第2、3个数之和

19.}

20.return 0;

21.}

【例3.14】找出100~200间的全部素数。

编写程序如下:

1.#include 

2.#include 

3.#include 

4.using namespace std;

5.int main( )

6.{

7.int m,k,i,n=0;

8.bool prime;//定义布尔变量prime

9.for(m=101;m<=200;m=m+2) //判别m是否为素数,m由101变化到200,增量为2

10.{

11.prime=true;//循环开始时设prime为真,即先认为m为素数

12.k=int(sqrt(m)); //用k代表根号m的整数部分

13.for(i=2;i<=k;i++) //此循环作用是将m被2~根号m除,检查是否能整除

14.if(m%i==0) //如果能整除,表示m不是素数

15.{

16.prime=false; //使prime变为假

17.break; //终止执行本循环

18.}

19.if (prime)//如果m为素数

20.{

21.cout<

22.n=n+1; //n用来累计输出素数的个数

23.}

24.if(n%10==0) cout<

25.}

26.cout<

27.return 0;

28.}

【例3.15】译密码。

为使电文保密,往往按一定规律将电文转换成密码,收报人再按约定的规律将其译回原文。

例如,可以按以下规律将电文变成密码:

将字母A变成字母E,a变成e,即变成其后的第4个字母,W变成A,X变成B,Y变成C,Z变成D。

见图3.20,字母按上述规律转换,非字母字符不变,如"Wonderful!

"转换为"Asrhivjyp!

"。

输入一行字符,要求输出其相应的密码。

图3.20

程序如下:

1.#include 

2.using namespace std;

3.int main( )

4.{

5.char c;

6.while ((c=getchar( ))!

='\n')

7.{

8.if((c>='a' && c<='z') || (c>='A' && c<='Z'))

9.{

10.c=c+4;

11.if(c>'Z' && c<='Z'+4 || c>'z')

12.c=c-26;

13.}

14.cout<

15.}

16.cout<

17.return 0;

18.}

运行结果如下:

IamgoingtoBeijing!

MeqksmrkxsFimnmrk!

while语句中括号内的表达式有3个作用:

∙从键盘读入一个字符,这是用getchar函数实现的;

∙将读入的字符赋给字符变量c;

∙判别这个字符是否为'\n'(即换行符)。

如果是换行符就执行while语句中的复合语句(即花括号内的语句),对输入的非换行符的字符进行转换处理。

按前面分析的思路对输入的字符进行处理,有一点请读者注意,内嵌的if语句不能写成:

  if(c>'Z'||c>'z') c=c-26;

因为所有小写字母都满足“c>'Z'”条件,从而也执行“c=c-26;”语句,这就会出错。

因此必须限制其范围为“c>'Z'&&c<='Z'+4”,即原字母为'W'到'Z',在此范围以外的不是原大写字母W~Z,不应按此规律转换。

请考虑:

为什么对小写字母不按此处理,即写成c>'z'&&c<='z'+4而只须写成“c>'z'”即可。

 

计算拉格朗日插值的源程序

#include

#include

#include

//#include

floatLagrange(float*x,float*y,floatxx,intn)

{

inti,j;

float*a,yy=0.0;

a=(float*)malloc(n*sizeof(float));

for(i=0;i<=n-1;i++)

{

a[i]=y[i];

for(j=0;j<=n-1;j++)

if(j!

=i)a[i]*=(xx-x[j])/(x[i]-x[j]);

yy+=a[i];

}

free(a);

returnyy;

}

voidmain()

{

floatx[4]={0.56160,0.56280,0.56401,0.56521};

floaty[4]={0.82741,0.82659,0.82577,0.82495};

floatxx=0.5635,yy;

floatLagrange(float*,float*,float,int);

yy=Lagrange(x,y,xx,4);

//clrscr();

printf("x=%f,y=%f/n",xx,yy);

getch();

}

 

编译原理词法分析器c++源程序

#include

#include

#include

#include

#include

#include

#include/*头文件*/

  voidinit();

     char*DchangeB(char*buf);

  intsearch(char*buf,inttype,intcommand);

     voidintdeal(char*buffer);

     voidchardeal(char*buffer);

  voiderrordeal(charerror,intlineno);

  voidscanner();

voidinit()

{     char*key[]={"","auto","break","case","char","const","continue","default","do","double",

                "else","enum","extern","float","for","goto","if","int","long","register",

                "return","short","signed","sizeof","static","struct","switch","typedef",

                "union","unsigned","void","volatile","while"};    /*C语言所有关键字/

   char*limit[]={"","(",")","[","]","->",".","!

","++","--","&","~",

                  "*","/","%","+","-","<<",">>","<","<=",">",">=","==","!

=","&&","||",

                 "=","+=","-=","*=","/=",",",";","{","}","#","_","'"};/*运算、限界符*/

 fstreamoutfile;

   inti,j;

 char*c;

 outfile.open("key.txt",iOS:

:

out);

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

  outfile<

 outfile.close();

 outfile.open("Limit.txt",ios:

:

out);

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

  outfile<

 c="";

 outfile<

 outfile.close();

 outfile.open("bsf.txt",ios:

:

out);

 outfile.close();

 outfile.open("cs.txt",ios:

:

out);

 outfile.close();

 outfile.open("output.txt",ios:

:

out);

 outfile.close();

}

char*DchangeB(char*buf)

{

       

   inttemp[20];

 char*binary;

 intvalue=0,i=0,j;

 for(i=0;buf[i]!

='/0';i++)

  value=value*10+(buf[i]-48);      /*将字符转化为十进制数*/

   if(value==0)

   {

  binary=newchar[2];

  binary[0]='0';

  binary[1]='/0';

  return(binary);

 }

 i=0;

 while(value!

=0)

   {

  temp[i++]=value%2;

  value/=2;

 }

 temp[i]='/0';

 binary=newchar[i+1];

 for(j=0;j<=i-1;j++)

      binary[j]=(char)(temp[i-j-1]+48);

   binary[i]='/0';

   return(binary); /*十进制转化为二进制*/

}

intsearch(char*buf,inttype,intcommand)

{intnumber=0;

   fstreamoutfile;

   charch;

   chartemp[30];

   inti=0;

   switch(type)

   {

 case1:

outfile.open("key.txt",ios:

:

in);break;

   case2:

outfile.open("bsf.txt",ios:

:

in);break;

   case3:

outfile.open("cs.txt",ios:

:

in);break;

   case4:

outfile.open("limit.txt",ios:

:

in);break;

   }

 outfile.get(ch);

 while(ch!

=EOF){

    while(ch!

='/n')

       {

           temp[i++]=ch;

           outfile.get(ch);

       }

       temp[i]='/0';

       i=0;

       number++;

       if(strcmp(temp,buf)==0)

       {  

     outfile.close();

   returnnumber;       /*若找到,返回在相应表中的序号*/

       }

       else

         outfile.get(ch);

 }                          //结束外层while循环

    if(command==1)

    {   

     outfile.close(); 

  return0;               /*找不到,当只需查表,返回0,否则还需造表*/

     

 }

switch(type)

   {

 case1:

outfile.open("key.txt",ios:

:

in);break;

   case2:

outfile.open("bsf.txt",ios:

:

in);break;

   case3:

outfile.open("cs.txt",ios:

:

in);break;

   case4:

outfile.open("limit.txt",ios:

:

in);break;

   }

outfile<

outfile.close();

 returnnumber+1;

}

voidintdeal(char*buffer){

 fstreamoutfile;

   intresult;

   result=search(buffer,1,1);          /*先查关键字表*/

   outfile.open("output.txt",ios:

:

app);

   if(result!

=0)

      outfile<

   else

   {

       result=search(buffer,2,2);      /*若找不到,则非关键字,查标识符表,还找不到则造入标识符表*/

       outfile<

   }                                /*写入输出文件*/

   outfile.close();

}

voidchardeal(char*buffer)

{   fstreamoutfile;

   intresult;

   result=search(buffer,1,1);          /*先查关键字表*/

 outfile.open("output.txt",ios:

:

app);

   if(result!

=0)

      outfile<

   else

   {

       result=search(buffer,2,2);      /*若找不到,则非关键字,查标识符表,还找不到则造入标识符表*/

      outfile<

   }                                /*写入输出文件*/

   outfile.close();

}

voiderrordeal(charerror,intlineno)

{ cout<<"/nerror:

"<

}

voidscanner()

{  fstream infile,outfile;

   charfilename[20];

   charch;

 interr=0;

   inti=0,line=1;

   intcount,result,errorno=0;

 chararray[30];

   char*word;

 printf("/npleaseinputthefilescannername:

");

   scanf("%s",filename); 

   err=1;

   infile.open(filename,ios:

:

nocreate|ios:

:

in);

   while(!

infile)

   {

       cout<<"cannotopenfile"<

       printf("pleaseinput thefile nameagain:

/n");

  scanf("%s",filename);

       infile.open(filename,ios:

:

nocreate|ios:

:

in);

       err++;

  if(err==3)

  {cout<<"SORROYYOUCAN'TVUEWTHEPRGARME/n";

       cout<<"TANKEYOUVIEW"<

  exit(0);}

   }

   infile.get(ch);

   while(ch!

=EOF)

   {                /*按字符依次扫描源程序,直至结束*/

       i=0;

       if(((ch>='A')&&(ch<='Z'))||((ch>='a')&&(ch<='z'))||(ch=='_'))

       {          /*以字母开头*/

           while(((ch>='A')&&(ch<='Z'))||((ch>='a')&&(ch<='z'))||(ch=='_')||((ch>='0')&&(ch<='9')))

           {

               array[i++]=ch;

               infile.get(ch);

           }

           word=newchar[i+1];

   memcpy(word,array,i);

   word[i]='/0';

           intdeal(word);

           if(ch!

=EOF)

    infile.seekg(-1,ios:

:

cur);

       }

       elseif(ch>='0'&&ch<='9')

       {         /*以数字开头*/

           while(ch>='0'&&ch<='9')

           {

               array[i++]=ch;

               infile.get(ch);

           }

           word=newchar[i+1];

   memcpy(word,array,i);

   word[i]='/0';

           intdeal(word);

           if(ch!

=EOF)

    infile.seekg(-1,ios:

:

cur);

       }

       elseif((ch=='')||(ch=='/t'))

   ;          /*消除空格符和水平制表符*/

  elseif(ch=='/n')

   line++;          /*消除回车并记录行数*/

  elseif(ch=='/')

       {                /*消除注释*/

   infile.get(ch);

   if(ch=='=')

   {             /*判断是否为‘/=’符号*/

    outfile.open("output.txt",ios:

:

noreplace|ios:

:

app);

    outfile<<"/=/t/t/t4/t/t/t32/n";

               outfile.close();

   }

   elseif(ch!

='*')

           {             /*若为除号,写入输出文件*/

               outfile.open("output.txt",ios:

:

noreplace|ios:

:

app);

    outfile<<"//t/t/t4/t/t/t13/n";

               outfile.close();

    outfile.seekg(-1,ios:

:

cur);

   }

   elseif(ch=='*')

   {             /*若为注释的开始,消除包含在里面的所有字符*/

    count=0;

   infile.get(ch);

    while(count!

=2)

               {         /*当扫描到‘*’且紧接着下一个字符为‘/’才是注释的结束*/

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 调查报告

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1