c++程序实例

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

C++程序设计实例【例3.12】用下面公式求π的近似值。π/4≈1-1/3+1/5-1/7+…直到最后一项的绝对值小于10-7为止。根据给定的算法很容易编写程序如下:.#includeiostream.#includeiomanip.#includecmath.usingnamespacestd;.intmain().{.ints=1;.doublen=1,t=1,pi=0;.while((fabs(t))1e-7).{.pi=pi+t;.n=n+2;.s=-s;.t=s/n;.}.pi=pi*4;.coutpi=setiosflags(ios::fixed)setprecision(6)piendl;.return0;.}运行结果为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个月后每个月又生一对兔子,假设所有兔子都不死,问每个月的兔子总数为多少?根据给出的每月兔子总数的关系,可编写程序如下:.#includeiostream.#includeiomanip.usingnamespacestd;.intmain().{.longf1,f2;.inti;.f1=f2=1;.for(i=1;i=20;i++).{.coutsetw(12)f1setw(12)f2;.//设备输出字段宽度为12,每次输出两个数.if(i%2==0)coutendl;.//每输出完4个数后换行,使每行输出4个数.f1=f1+f2;.//左边的f1代表第3个数,是第1、2个数之和.f2=f2+f1;.//左边的f2代表第4个数,是第2、3个数之和.}.return0;.}【例3.14】找出100~200间的全部素数。编写程序如下:.#includeiostream.#includecmath.#includeiomanip.usingnamespacestd;.intmain().{.intm,k,i,n=0;.boolprime;//定义布尔变量prime.for(m=101;m=200;m=m+2)//判别m是否为素数,m由101变化到200,增量为2.{.prime=true;//循环开始时设prime为真,即先认为m为素数.k=int(sqrt(m));//用k代表根号m的整数部分.for(i=2;i=k;i++)//此循环作用是将m被2~根号m除,检查是否能整除.if(m%i==0)//如果能整除,表示m不是素数.{.prime=false;//使prime变为假.break;//终止执行本循环.}.if(prime)//如果m为素数.{.coutsetw(5)m;//输出素数m,字段宽度为5.n=n+1;//n用来累计输出素数的个数.}.if(n%10==0)coutendl;//输出10个数后换行.}.coutendl;//最后执行一次换行.return0;.}【例3.15】译密码。为使电文保密,往往按一定规律将电文转换成密码,收报人再按约定的规律将其译回原文。例如,可以按以下规律将电文变成密码:将字母A变成字母E,a变成e,即变成其后的第4个字母,W变成A,X变成B,Y变成C,Z变成D。见图3.20,字母按上述规律转换,非字母字符不变,如Wonderful!转换为Asrhivjyp!。输入一行字符,要求输出其相应的密码。图3.20程序如下:.#includeiostream.usingnamespacestd;.intmain().{.charc;.while((c=getchar())!='\n').{.if((c='a'&&c='z')||(c='A'&&c='Z')).{.c=c+4;.if(c'Z'&&c='Z'+4||c'z').c=c-26;.}.coutc;.}.coutendl;.return0;.}运行结果如下: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'”即可。计算拉格朗日插值的源程序#includestdio.h#includeconio.h#includestdlib.h//#includealloc.hfloatLagrange(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++源程序#includeiostream.h#includefstream.h#includestdlib.h#includestdio.h#includestring.h#includeconio.h#includeprocess.h/*头文件*/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;i32;i++)outfilekey[i]endl;outfile.close();outfile.open(Limit.txt,ios::out);for(j=0;j38;j++)outfilelimit[j]endl;c=;outfilec;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;/*若找到,返回在相应表中的序号*/}elseoutfile.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;}outfilebuf;outfile.close();returnnumber+1;}voidintdeal(char*buffer){fstreamoutfile;intresult

1 / 16
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功