资源描述
编译原理实验
《添加新的程序语句》
学生姓名 徐超、吕吉龙、陈浩
张小龙、 刘涛、 王闪闪
所属学院 信息工程学院
专 业 计算机科学与技术
班 级 12-2 、 12-3
指导教师 史召峰
塔里木大学教务处制
1.实验目的
掌握另一种添加语句功能的方法。
2. 实验要求
通过深入的了解语句的内在功能,利用等价的方法实现语句的编译过程。
3. 实验内容
将repeat语句等价变换用while语句实现repeat语句。本次实验利用C++语言实现。
4. 实验程序
#include "stdafx.h"
#include<iostream>
using namespace std;
#define NAME "Ant" //宏定义
void guess_number(); //以下四句是函数的声明,以便主函数的调用
void guess_name();
int factorial();
void wqnum();
int main()
{
cout<<"----------------------------do_while()结构测试程序-------------------------- \n";
cout<<"-------------------------1:Guess my favorite number -----------------------\n";
cout<<"-------------------------2:Guess my name---------------------------------- \n";
cout<<"-------------------------3:生成~1000以内的完全数-------------------------\n";
cout<<"-------------------------4:计算n的阶乘-------------------------------------\n";
cout<<"-------------------------5: Enter q to quit---------------------------------";
int choose;
while(cin>>choose)
{
switch(choose)
{
case 1:
guess_number();
break;
case 2:
guess_name();
break;
case 3:
wqnum();
break;
case 4:
cout<<factorial();
break;
default:
cerr<<"error number choose\n"
<<"please try again";
}
cout<<endl;
cout<<"----------------------------do_while()结构测试程序-------------------------- \n";
cout<<"-------------------------1:Guess my favorite number -----------------------\n";
cout<<"-------------------------2:Guess my name---------------------------------- \n";
cout<<"-------------------------3:生成~1000以内的完全数-------------------------\n";
cout<<"-------------------------4:计算n的阶乘-------------------------------------\n";
cout<<"-------------------------5: Enter q to quit---------------------------------";
}
return 0;
}
void guess_number()
{
const int N=7;
int n;
do
{cout<<"please enter my favorite number: ";
cin>>n;} //将括号里的内容标记为S
while(n!=N);//n和N相同时标记为B
cout<<" Good lucky! "<<N<<"is my favorite\n"
<<"Bye!";//标记该语句为C
}
//则上面的语句相当于执行S语句,直到有B语句才执行C语句
void guess_name()
{
char name[20];
do
{
cout<<"Please guess what's my name: ";
cin>>name;
} //将括号里的内容标记为S
while(strcmp(NAME,name));//标记字符NAME和name相同时为B
cout<<" Yeah! You got it!\n";//该语句标记为C
//则上面的语句相当于执行S语句,直到有B语句才执行C语句
}
int factorial()
{
cout<<"Please enter the number: ";
int n;
cin>>n;
int result=1;
int i=1;
do {
result=result*i;
i=i+1;
}
while(i<=n);//标记i>n语句为B语句
return result;
//则上面的语句相当于执行S语句,直到有B语句返回result,并结束该函数
}
void wqnum()
{
int i,s,k;
i=1;
cout<<"1~1000以内的完全数\n";
do
{
s=0;
for(k=1;k<i;k++)
{
if(i%k==0)
s+=k;
}
if(s==i)
{
printf("%d,its factors are",i);
for(k=1;k<i;k++)
{
if(i%k==0) printf("%d,",k);
}
printf("\n");
}
i++;
}//标记括号内的语句为S语句
while(i<=1000);//标记i>1000为B语句
//则上面的语句相当于执行S语句,直到有B语句才结束该函数
}
完全数,又称完美数或完备数,是一些特殊的自然数:它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。
例如:第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3=6。第二个完全数是28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4 + 7 + 14=28。后面的数是496、8128。
5. 实验结果
实验分析见实验内容的程序。
6. 实验总结
本实验主要运用了C++中的do-while语句。
展开阅读全文