c++程序实例Word格式文档下载.docx
《c++程序实例Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《c++程序实例Word格式文档下载.docx(16页珍藏版)》请在冰豆网上搜索。
第1、2个数为1、1。
从第3个数开始,每个数是其前面两个数之和。
即:
F1=1
(n=1)
F2=1
(n=2)
Fn=Fn-1+Fn-2(n≥3)
这是一个有趣的古典数学问题:
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第3个月后每个月又生一对兔子,假设所有兔子都不死,问每个月的兔子总数为多少?
根据给出的每月兔子总数的关系,可编写程序如下:
3.using
4.int
5.{
6.long
f1,f2;
i;
8.f1=f2=1;
9.for(i=1;
i<
=20;
i++)
11.cout<
setw(12)<
f1<
f2;
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个数之和
20.return
21.}
【例3.14】找出100~200间的全部素数。
编写程序如下:
m,k,i,n=0;
8.bool
prime;
//定义布尔变量prime
9.for(m=101;
m<
=200;
m=m+2)
//判别m是否为素数,m由101变化到200,增量为2
11.prime=true;
//循环开始时设prime为真,即先认为m为素数
12.k=int(sqrt(m));
//用k代表根号m的整数部分
13.for(i=2;
=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<
setw(5)<
m;
//输出素数m,字段宽度为5
22.n=n+1;
//n用来累计输出素数的个数
23.}
24.if(n%10==0)
//输出10个数后换行
25.}
26.cout<
//最后执行一次换行
27.return
28.}
【例3.15】译密码。
为使电文保密,往往按一定规律将电文转换成密码,收报人再按约定的规律将其译回原文。
例如,可以按以下规律将电文变成密码:
将字母A变成字母E,a变成e,即变成其后的第4个字母,W变成A,X变成B,Y变成C,Z变成D。
见图3.20,字母按上述规律转换,非字母字符不变,如"
Wonderful!
转换为"
Asrhivjyp!
。
输入一行字符,要求输出其相应的密码。
图3.20
程序如下:
2.using
3.int
4.{
5.char
c;
6.while
((c=getchar(
))!
='
\n'
7.{
8.if((c>
a'
&
c<
z'
)
||
(c>
A'
Z'
))
9.{
10.c=c+4;
11.if(c>
'
+4
c>
12.c=c-26;
13.}
14.cout<
16.cout<
17.return
运行结果如下:
IamgoingtoBeijing!
↙
MeqksmrkxsFimnmrk!
while语句中括号内的表达式有3个作用:
∙从键盘读入一个字符,这是用getchar函数实现的;
∙将读入的字符赋给字符变量c;
∙判别这个字符是否为'
(即换行符)。
如果是换行符就执行while语句中的复合语句(即花括号内的语句),对输入的非换行符的字符进行转换处理。
按前面分析的思路对输入的字符进行处理,有一点请读者注意,内嵌的if语句不能写成:
if(c>
||c>
c=c-26;
因为所有小写字母都满足“c>
”条件,从而也执行“c=c-26;
”语句,这就会出错。
因此必须限制其范围为“c>
&
c<
+4”,即原字母为'
W'
到'
,在此范围以外的不是原大写字母W~Z,不应按此规律转换。
请考虑:
为什么对小写字母不按此处理,即写成c>
+4而只须写成“c>
”即可。
计算拉格朗日插值的源程序
#include<
stdio.h>
conio.h>
stdlib.h>
//#include<
alloc.h>
floatLagrange(float*x,float*y,floatxx,intn)
{
inti,j;
float*a,yy=0.0;
a=(float*)malloc(n*sizeof(float));
for(i=0;
=n-1;
a[i]=y[i];
for(j=0;
j<
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<
iostream.h>
fstream.h>
string.h>
process.h>
/*头文件*/
voidinit();
char*DchangeB(char*buf);
intsearch(char*buf,inttype,intmand);
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);
32;
outfile<
key[i]<
outfile.close();
Limit.txt"
ios:
38;
limit[j]<
c="
bsf.txt"
cs.txt"
output.txt"
char*DchangeB(char*buf)
inttemp[20];
char*binary;
intvalue=0,i=0,j;
buf[i]!
/0'
value=value*10+(buf[i]-48);
/*将字符转化为十进制数*/
if(value==0)
{
binary=newchar[2];
binary[0]='
0'
binary[1]='
return(binary);
i=0;
while(value!
=0)
temp[i++]=value%2;
value/=2;
temp[i]='
binary=newchar[i+1];
=i-1;
binary[j]=(char)(temp[i-j-1]+48);
binary[i]='
return(binary);
/*十进制转化为二进制*/
intsearch(char*buf,inttype,intmand)
{intnumber=0;
fstreamoutfile;
charch;
chartemp[30];
inti=0;
switch(type)
case1:
outfile.open("
in);
break;
case2:
case3:
case4:
limit.txt"
}
outfile.get(ch);
while(ch!
=EOF){
while(ch!
/n'
temp[i++]=ch;
outfile.get(ch);
temp[i]='
i=0;
number++;
if(strcmp(temp,buf)==0)
{
outfile.close();
returnnumber;
/*若找到,返回在相应表中的序号*/
else
}
//结束外层while循环
if(mand==1)
outfile.close();
return0;
/*找不到,当只需查表,返回0,否则还需造表*/
switch(type)
buf;
returnnumber+1;
voidintdeal(char*buffer){
intresult;
result=search(buffer,1,1);
/*先查关键字表*/
app);
if(result!
outfile<
buffer<
result<
/*若找到,写入输出文件*/
result=search(buffer,2,2);
/*若找不到,则非关键字,查标识符表,还找不到则造入标识符表*/
}
/*写入输出文件*/
voidchardeal(char*buffer)
voiderrordeal(charerror,intlineno)
cout<
/nerror:
error<
line"
lineno;
voidscanner()
fstream
infile,outfile;
charfilename[20];
interr=0;
inti=0,line=1;
intcount,result,errorno=0;
chararray[30];
char*word;
/npleaseinputthefilescannername:
);
scanf("
%s"
filename);
err=1;
infile.open(filename,ios:
nocreate|ios:
while(!
infile)
cannotopenfile"
printf("
pleaseinput
thefile
nameagain:
/n"
scanf("
err++;
if(err==3)
{cout<
SORROYYOUCAN'
TVUEWTHEPRGARME/n"
TANKEYOUVIEW"
exit(0);
infile.get(ch);
=EOF)
/*按字符依次扫描源程序,直至结束*/
if(((ch>
)&
(ch<
))||((ch>
))||(ch=='
_'
/*以字母开头*/
while(((ch>
)||((ch>
9'
)))
array[i++]=ch;
word=newchar[i+1];
memcpy(word,array,i);
word[i]='
intdeal(word);
if(ch!
infile.seekg(-1,ios:
cur);
elseif(ch>
ch<
/*以数字开头*/
while(ch>
elseif((ch=='
'
)||(ch=='
/t'
/*消除空格符和水平制表符*/
elseif(ch=='
line++;
/*消除回车并记录行数*/
/'
/*消除注释*/
infile.get(ch);
if(ch=='
/*判断是否为‘/=’符号*/
noreplace|ios:
/=/t/t/t4/t/t/t32/n"
elseif(ch!
*'
/*若为除号,写入输出文件*/
//t/t/t4/t/t/t13/n"
outfile.seekg(-1,ios:
/*若为注释的开始,消除包含在里面的所有字符*/
count=0;
while(count!
=2)
/*当扫描到‘*’且紧接着下一个字符为‘/’才是注释的结束*/
count=0