c++程序实例参考模板_第1页
c++程序实例参考模板_第2页
c++程序实例参考模板_第3页
c++程序实例参考模板_第4页
c++程序实例参考模板_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C+程序设计实例【例3.12】用下面公式求的近似值。/41-1/3+1/5-1/7+直到最后一项的绝对值小于10-7为止。根据给定的算法很容易编写程序如下:. #include <iostream>. #include <iomanip>. #include <cmath>. using namespace std;. int main( ). . int s=1;. double n=1,t=1,pi=0;. while(fabs(t)>1e-7). . pi=

2、pi+t;. n=n+2;. s=-s;. t=s/n;. . pi=pi*4;. cout<<"pi="<<setiosflags(ios:fixed)<<setprecision(6)<<pi<<endl;. return 0;. 运行结果为pi=3.141592注意:不要把n定义为整型变量,否则在执行“t=s/n;”时,得到t的值为0(原因是两个整数相除)。【例3.13】求Fibonacci数列前40个数。这个数列有如下特点:第1、2个数为1、1。从第3个数开始,每个数是其前面两个数之和。即:

3、60;   F1=1  (n=1)    F2=1  (n=2)    Fn=Fn-1+Fn-2(n3)这是一个有趣的古典数学问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第3个月后每个月又生一对兔子,假设所有兔子都不死,问每个月的兔子总数为多少?根据给出的每月兔子总数的关系,可编写程序如下:1 / 17. #include <iostream>. #include <iomanip>. using namespace std;. int&#

4、160;main( ). . long f1,f2;. int i;. f1=f2=1;. for(i=1;i<=20;i+). . cout<<setw(12)<<f1<<setw(12)<<f2;. /设备输出字段宽度为12,每次输出两个数. if(i%2=0) cout<<endl;. /每输出完4个数后换行,使每行输出4个数. f1=f1+f2;. /左边的f1代表第3个数,是第12个数之和. f2=f2+f1;. /左边的f2代表第4个数,是第23个数之和. . return&#

5、160;0;. 【例3.14】找出100200间的全部素数。编写程序如下:. #include <iostream>. #include <cmath>. #include <iomanip>. using namespace std;. int main( ). . int m,k,i,n=0;. bool prime;/定义布尔变量prime. for(m=101;m<=200;m=m+2) /判别m是否为素数,m由101变化到200,增量为2. .

6、 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为素数. . cout<<setw(5)<<m; /输出素数m,字段宽度为5. n=n+1; /n用

7、来累计输出素数的个数. . if(n%10=0) cout<<endl; /输出10个数后换行. . cout<<endl;/最后执行一次换行. return 0;. 【例3.15】译密码。为使电文保密,往往按一定规律将电文转换成密码,收报人再按约定的规律将其译回原文。例如,可以按以下规律将电文变成密码:将字母A变成字母E,a变成e,即变成其后的第4个字母,W变成A,X变成B,Y变成C,Z变成D。见图3.20,字母按上述规律转换,非字母字符不变,如"Wonderful!"转换为"Asrhivjyp!"

8、。输入一行字符,要求输出其相应的密码。图 3.20程序如下:. #include <iostream>. using namespace std;. int main( ). . char c;. while (c=getchar( )!='n'). . if(c>='a' && c<='z') | (c>='A' && c<

9、='Z'). . c=c+4;. if(c>'Z' && c<='Z'+4 | c>'z'). c=c-26;. . cout<<c;. . cout<<endl;. return 0;. 运行结果如下:I am going to Beijing!M eq ksmrk xs Fimnmrk!while语句中括号内的表达式有3个作用:· 从键盘读入一个字符,这是用getchar函数实现的;· 将读入的字符赋

10、给字符变量c;· 判别这个字符是否为'n'(即换行符)。如果是换行符就执行while语句中的复合语句(即花括号内的语句),对输入的非换行符的字符进行转换处理。按前面分析的思路对输入的字符进行处理,有一点请读者注意,内嵌的if语句不能写成:    if (c>'Z'| c>'z')  c=c-26;因为所有小写字母都满足“c>'Z'”条件,从而也执行“c=c-26;”语句,这就会出错。因此必须限制其范围为“c>'Z' && c<=&

11、#39;Z'+4”,即原字母为'W'到'Z',在此范围以外的不是原大写字母WZ,不应按此规律转换。请考虑:为什么对小写字母不按此处理,即写成c>'z' && c<='z'+4而只须写成“c>'z'”即可。 计算拉格朗日插值的源程序#include <stdio.h>#include <conio.h>#include <stdlib.h>/#include <alloc.h>float Lagrange(float

12、*x,float *y,float xx,int n)int i,j;float *a,yy=0.0;a=(float *)malloc(n*sizeof(float);for(i=0;i<=n-1;i+)ai=yi;for(j=0;j<=n-1;j+)if(j!=i)ai*=(xx-xj)/(xi-xj);yy+=ai;free(a);return yy;void main()float x4=0.56160,0.56280,0.56401,0.56521;float y4=0.82741,0.82659,0.82577,0.82495;float xx=0.5635,yy;fl

13、oat Lagrange(float *,float *,float,int);yy=Lagrange(x,y,xx,4);/clrscr();printf("x=%f,y=%f/n",xx,yy);getch(); 编译原理词法分析器c+源程序#include<iostream.h>#include<fstream.h>#include<stdlib.h>#include<stdio.h>#include<string.h>#include<conio.h>#include<proce

14、ss.h> /*头文件*/   void init();      char *DchangeB(char *buf);   int search(char *buf,int type,int command);      void intdeal(char *buffer);      void chardeal(char *buffer);   void errordeal(c

15、har error,int lineno);   void scanner();void init()      char *key="","auto","break","case","char","const","continue","default","do","double",    

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

17、;        "return","short","signed","sizeof","static","struct","switch","typedef",                 "u

18、nion","unsigned","void","volatile","while"     /*C语言所有关键字/    char *limit=" ","(",")","","","->",".","!","+","-",&quo

19、t;&","",                   "*","/","%","+","-","<<",">>","<","<=",">",

20、">=","=","!=","&&","|",                  "=","+=","-=","*=","/=",",","",""

21、,"","#","_","'"/*运算、限界符*/ fstream outfile;    int i,j; char *c; outfile.open("key.txt",iOS:out); for(i=0;i<32;i+)  outfile<<keyi<<endl; outfile.close(); outfile.open("Limi

22、t.txt",ios:out); for(j=0;j<38;j+)  outfile<<limitj<<endl; c="" outfile<<c; outfile.close(); outfile.open("bsf.txt",ios:out); outfile.close(); outfile.open("cs.txt",ios:out); outfile.close();

23、0;outfile.open("output.txt",ios:out); outfile.close();char *DchangeB(char *buf)           int temp20; char *binary; int value=0,i=0,j; for(i=0;bufi!='/0'i+)  value=value*10+(bufi-48);   &

24、#160;   /*将字符转化为十进制数*/    if(value=0)      binary=new char2;  binary0='0'  binary1='/0'  return(binary);  i=0; while(value!=0)      tempi+=value%2;  value

25、/=2;  tempi='/0' binary=new chari+1; for(j=0;j<=i-1;j+)       binaryj=(char)(tempi-j-1+48);    binaryi='/0'    return(binary);  /*十进制转化为二进制*/int search(char *buf,int type,int command) int number=0

26、;    fstream outfile;    char ch;    char temp30;    int i=0;    switch(type)     case 1: outfile.open("key.txt",ios:in);break;    case 2: outfile.open("bsf.txt",ios:in);

27、break;    case 3: outfile.open("cs.txt",ios:in);break;    case 4: outfile.open("limit.txt",ios:in);break;     outfile.get(ch); while(ch!=EOF)     while(ch!='/n')      

28、              tempi+=ch;            outfile.get(ch);                tempi='/0'     

29、;   i=0;        number+;        if(strcmp(temp,buf)=0)                outfile.close();   return number;     &#

30、160;  /*若找到,返回在相应表中的序号*/                else          outfile.get(ch);                  &#

31、160;         /结束外层while循环     if(command=1)              outfile.close( );    return 0;             

32、   /*找不到,当只需查表,返回0,否则还需造表*/       switch(type)     case 1: outfile.open("key.txt",ios:in);break;    case 2: outfile.open("bsf.txt",ios:in);break;    case 3: outfile.open("cs.txt",i

33、os:in);break;    case 4: outfile.open("limit.txt",ios:in);break;    outfile<<buf;outfile.close(); return number+1;void intdeal(char *buffer)  fstream outfile;    int result;    result=search(buffer,1,1);  

34、;         /*先查关键字表*/    outfile.open("output.txt",ios:app);    if(result!=0)       outfile<<buffer<<result<<endl;  /*若找到,写入输出文件*/    else  

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

36、                         /*写入输出文件*/    outfile.close();void chardeal(char *buffer)    fstream outfile;    int result;   

37、 result=search(buffer,1,1);           /*先查关键字表*/ outfile.open("output.txt",ios:app);    if(result!=0)       outfile<<buffer<<result<<endl;   /*若找到,写入输出文件*/ &

38、#160;  else            result=search(buffer,2,2);       /*若找不到,则非关键字,查标识符表,还找不到则造入标识符表*/       outfile<<buffer<<result<<endl;        

39、;                             /*写入输出文件*/    outfile.close();void errordeal(char error,int lineno)  cout<<"/nerror: "<<

40、error<<" ,line"<<lineno;void scanner()   fstream  infile,outfile;    char filename20;    char ch; int err=0;    int i=0,line=1;    int count,result,errorno=0; char array30;    ch

41、ar *word; printf("/n please input the file scanner name:");    scanf("%s",filename);     err=1;    infile.open(filename,ios:nocreate|ios:in);    while(! infile)         &

42、#160;  cout<<"cannot open file"<<endl;        printf("please input  the file  name again:/n");  scanf("%s",filename);        infile.open(filename,ios:nocreate|ios:

43、in);        err+;  if(err=3)  cout<<"SORROY YOU CAN'T VUEW THE PRGARME/n"        cout<<"TANKE YOU VIEW"<<endl;    exit(0);     &

44、#160;  infile.get(ch);    while(ch!=EOF)                     /*按字符依次扫描源程序,直至结束*/        i=0;        if(ch>='

45、A')&&(ch<='Z')|(ch>='a')&&(ch<='z')|(ch='_')                   /*以字母开头*/            while(ch>=&#

46、39;A')&&(ch<='Z')|(ch>='a')&&(ch<='z')|(ch='_')|(ch>='0')&&(ch<='9')                        &#

47、160;   arrayi+=ch;                infile.get(ch);                        word=new chari+1;  

48、60;memcpy(word,array,i);   wordi='/0'            intdeal(word);            if(ch!=EOF)    infile.seekg(-1,ios:cur);     &#

49、160;          else if(ch>='0'&&ch<='9')                  /*以数字开头*/            while(ch>='

50、;0'&&ch<='9')                            arrayi+=ch;                infi

51、le.get(ch);                        word=new chari+1;   memcpy(word,array,i);   wordi='/0'          

52、60; intdeal(word);            if(ch!=EOF)    infile.seekg(-1,ios:cur);                else if(ch=' ')|(ch='/t')    

53、0;         /*消除空格符和水平制表符*/  else if(ch='/n')   line+;           /*消除回车并记录行数*/  else if(ch='/')           

54、0;             /*消除注释*/   infile.get(ch);   if(ch='=')                 /*判断是否为/=符号*/    outfile.open(&

55、quot;output.txt",ios:noreplace|ios:app);    outfile<<"/=/t/t/t4/t/t/t32/n"                outfile.close();      else if(ch!='*')   

56、                       /*若为除号,写入输出文件*/                outfile.open("output.txt",ios:noreplace|ios:app); &

57、#160;  outfile<<"/t/t/t4/t/t/t13/n"                outfile.close();    outfile.seekg(-1,ios:cur);      else if(ch='*')    

58、;             /*若为注释的开始,消除包含在里面的所有字符*/    count=0;   infile.get(ch);    while(count!=2)                 &

59、#160;        /*当扫描到*且紧接着下一个字符为/才是注释的结束*/     count=0;     while(ch!='*')      infile.get(ch);     count+;      infile.get(ch);&

60、#160;    if(ch='/')      count+;     else      infile.get(ch);           else if(ch='"')     &

61、#160;             /*消除包含在双引号中的字符串常量*/   outfile.open("output.txt",ios:noreplace|ios:app);      outfile<<ch<<"/t/t/t4/t/t/t37/n"   outfile.close(); &

62、#160; while(ch!='"')   infile.get(ch);            infile<<ch<<"/t/t/t4/t/t/t37/n"   infile.close();    else         

63、;        /*首字符为其它字符,即运算限界符或非法字符*/            array0=ch;            infile.get(ch);       /*再读入下一个字符,判断是否为双字符运算、限界符*/ 

64、60;          if(ch!=EOF)                       /*若该字符非文件结束符*/               

65、; array1=ch;    word=new char3;    memcpy(word,array,2);    word2='/0'                result=search(word,4,1);      /*先检索是否为双字符运算、限界

66、符*/    if(result=0)                               /*若不是*/            &

67、#160;       word=new char2;     memcpy(word,array,1);     word1='/0'     result=search(word,4,1);      /*检索是否为单字符运算、限界符*/     if(result=0

68、)                                               /*若还不是,则为非法字符*/  

69、    errordeal(array0,line);      errorno+;      infile.seekg(-1,ios:cur);                         &#

70、160;              else          /*若为单字符运算、限界符,写入输出文件并将扫描文件指针回退一个字符*/      outfile.open("output.txt",ios:noreplace|ios:app);      outfile<<word<<"/t/t/t4/t/t/t"<<result<<"/t"<<endl;      outfile.close();     

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论