函数与编译预处理的实验操作

合集下载

编译原理实验一_源程序的预处理及词法分析程序设计

编译原理实验一_源程序的预处理及词法分析程序设计

实验一词法分析程序设计(6学时)一、实验目的设计并实现一个包含预处理功能的词法分析程序,加深对编译中词法分析过程的理解。

二、实验要求1、实现词法分析功能输入:所给文法的源程序字符串。

输出:二元组(syn,token)构成的序列。

其中,syn为单词种别码。

Token为存放的单词自身字符串。

具体实现时,可以将单词的二元组用结构进行处理。

2、待分析的C语言子集的词法1)关键字main if then while do static int double struct break else long switch case typedef char return const float shortcontinue for void default sizeof do所有的关键字都是小写。

2)运算符和界符+ - * / < <= > >= = ; ( )3)其他标记ID和NUM通过以下正规式定义其他标记:标识符 ID→letter(letter|digit)*无符号整数 NUM→digit digit*字母 letter→a|…|z|A|…|Z数字 digit→0|…|9…4)空格由空白、制表符和换行符组成空格一般用来分隔ID、NUM、专用符号和关键字,词法分析阶段通常被忽略。

4、各种单词符号对应的种别码表1 各种单词符号的种别码单词符号种别码单词符号种别码main 1 ; 41if 2 ( 42else 3 ) 43while 4 int 7do 5 double 8static 6 struct 9ID (标识符)25 break 10NUM (整数) 26 else 11+ 27 long 12- 28 switch 13* 29 case 14/ 30 typedef 15: 31 char 16:= 32 return 17< 33 const 18<> 34 float 19<= 35 short 20> 36 continue 21>= 37 for 22= 38 void 23default 39 sizeof 24do 405、词法分析程序的主要算法思想算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到的单词符号的第一个字符的种类,拼出相应的单词符号。

《C语言程序设计》实验四

《C语言程序设计》实验四

电子科技大学计算机学院标准实验报告(实验)课程名称C语言程序设计电子科技大学教务处制表电子科技大学实验报告四学生姓名:学号:指导教师:王瑞锦实验地点:实验日期:年月日一、实验室名称:软件实验室二、实验项目名称:函数的应用及预处理三、实验学时:2四、实验原理:使用Turbo C软件(简称TC),在微型计算机上,对其程序进行编辑、编译、连接与运行。

Turbo C是一个集成环境,它具有方便、直观、易用的界面和丰富的库函数。

通过上机练习掌握在TC环境下编辑、编译、连接、和运行C程序的方法和过程。

五、实验目的1.掌握C语言中定义函数的方法;2.掌握函数传值调用的方法;3.掌握函数传址调用的方法;4.掌握递归函数的设计方法;5.掌握命令行参数的使用方法;6.掌握函数在不同文件中的编译、链接方法。

六、实验内容编程实验,完成以下上机内容,调试运行程序并完成报告1)、教材第七章习题7.4;2)、编写一个实现冒泡法排序的函数,并在主函数中从键盘上输入6个数后进行排序输出;3)、教材第七章习题7.11;4)、教材第七章习题7.15;5)、教材第七章习题7.24;6)、求解汉渃塔(tower of Hanoi)问题。

在一块平板上立有3根立柱,从左到右分别标记为A,B,C。

最初在A柱上放有6个大小不等的圆盘,并且大盘在下面,小盘在上面。

要求将这些盘从A移到C(可以借助B柱)。

条件是:每次只能移动一个盘,并且不允许把大盘放在小盘的上面。

(提示:利用函数的递归调用);七、实验器材(设备、元器件):pc硬件要求:CPU PII 以上,64M 内存,1OOM 硬盘空间即可。

软件要求:DOS3.0以上/Windows98/Me/XP/NT/2000。

八、实验步骤:实验编程与运行结果⑴编写一个求两个整数的最小公倍数的函数,两个整数由键盘输入,用主函数调用这个函数,并输出结果。

程序文件名为7_4.c,源程序清单如下:#include<stdio.h>lcd(int a,int b){int temp,num1,num2;num1=a;num2=b;while(num2!=0){temp=num1%num2;num1=num2;num2=temp;}return(a*b/num1);}main(){int t,x,y;printf("Please input two integers:");scanf("%d,%d",&x,&y);if(x>y){t=x;x=y;y=t;}printf("lcd(%d,%d)=%d\n",x,y,lcd(x,y));}运行结果:⑵编写一个实现冒泡法排序的函数,并在主函数中从键盘上输入6个数后进行排序输出。

C++程序设计实践教程思考题答案

C++程序设计实践教程思考题答案

实验1 C++基础6.编写程序,输入某大写字母的ASCII码值,输出该字母的对应小写字母。

#in clude<iostream>using n amespace std;int mai n(){int i;cin> >i;if(i>=65 && 1<=90 )cout<<char(i-'A'+'a')vve ndl;elsecout«"输入有误"<<endl;} return 0;实验2三、实验思考1.输入直角三角形的两条直角边长,调用平方根库函数sqrt来求斜边的长度#in clude<iostream>#in clude<cmath>using n amespace std;int mai n(){ float a,b,c;coutvv"请输入直角三角形的两条边长:";cin> >a>>b;c二sqrt(a*a+b*b);cout«"直角三角形的斜边="<<c<<endl;return 0;}2 •从键盘输入一个字符,如果输入的是英文大写字母,则将它转换成小写字母后输出,否则输出原来输入的字符。

#in clude<iostream>using n amespace std;int mai n(){char c;1coutvv"请输入一个字符:";cin> >c;if(c>='A'&& c<='Z')c+='a'-'A';coutvvcvve ndl;return 0;3•输入一个学生的成绩,如高于60分,贝V输出“ pass” ;否则,输出“failed ”。

程序编译的四个步骤

程序编译的四个步骤

程序编译的四个步骤程序编译通常涉及以下四个步骤:预处理、编译、汇编和链接。

1.预处理预处理是编译过程的第一步,它主要负责对源代码进行一些预处理操作。

预处理器工具通常被称为预处理程序,它会根据源代码文件中的预处理指令来修改源代码。

预处理指令位于源代码文件的开头,以“#”字符开头。

预处理指令主要包括宏定义、条件编译和包含文件等。

在预处理阶段,预处理器会执行以下操作:-展开宏定义:将代码中的宏定义替换为相应的代码片段。

-处理条件编译:根据条件编译指令的结果,决定是否包含或排除一些代码。

-处理包含文件:将文件中的包含文件指令替换为实际的文件内容。

预处理后的源代码通常会生成一个中间文件,供下一步编译使用。

2.编译编译是程序编译过程的第二个阶段。

在编译阶段,编译器将预处理生成的中间文件翻译成汇编语言。

编译器会按照源代码的语法规则,将源代码转换为汇编语言指令,生成目标文件(也称为汇编代码文件)。

编译器在编译过程中执行以下操作:-词法分析:将源代码分割为多个词法单元,如关键字、标识符和运算符等。

-语法分析:根据语言的语法规则,分析词法单元的组合,生成语法树。

-语义分析:检查语法树的语义正确性,进行类型检查等。

-优化:对生成的中间代码进行各种优化,以提高程序执行效率。

编译器输出的目标文件通常是汇编语言形式的代码,以便下一步汇编使用。

3.汇编汇编是编译过程的第三个阶段,它将编译器生成的汇编代码翻译成目标机器码。

汇编器(或称为汇编程序)将汇编代码中的指令和操作数翻译为目标机器指令的二进制表示。

汇编器在汇编过程中执行以下操作:-识别和解析汇编指令:将汇编代码中的汇编指令和操作数分割解析。

-确定存储器地址:根据符号的引用和定义,计算并分配存储器地址。

-生成目标机器指令:将汇编指令和操作数翻译为目标机器指令的二进制表示。

汇编器的输出是一个或多个目标文件,每个目标文件都包含可在目标机器上执行的二进制指令。

4.链接链接是编译的最后一个阶段,它将多个目标文件和库文件组合在一起,生成最终的可执行文件。

编译原理 实验

编译原理 实验

编译原理实验编译原理实验。

编译原理是计算机科学中的一个重要领域,它研究的是编译器的设计和实现原理。

编译器是将高级语言代码转换成机器语言代码的程序,它在软件开发过程中起着至关重要的作用。

而编译原理实验则是帮助学生深入理解编译原理的重要手段之一,通过实际操作来加深对编译原理知识的理解和掌握。

在编译原理实验中,我们需要掌握以下几个关键点:1. 词法分析,词法分析是编译过程中的第一步,它负责将源代码分割成一个个的单词(Token)。

在词法分析实验中,我们需要实现一个词法分析器,能够正确地识别出源代码中的各种单词,并进行分类和标记。

2. 语法分析,语法分析是编译过程中的第二步,它负责将词法分析得到的单词序列转换成抽象语法树。

在语法分析实验中,我们需要实现一个语法分析器,能够根据给定的文法规则,将单词序列转换成抽象语法树,并进行语法检查。

3. 语义分析,语义分析是编译过程中的第三步,它负责对抽象语法树进行语义检查和翻译。

在语义分析实验中,我们需要实现一个语义分析器,能够对抽象语法树进行类型检查、作用域分析等,并生成中间代码。

4. 代码生成,代码生成是编译过程中的最后一步,它负责将中间代码转换成目标机器代码。

在代码生成实验中,我们需要实现一个代码生成器,能够将中间代码转换成目标机器代码,并进行优化。

通过以上实验,我们可以深入理解编译原理的各个环节,并掌握编译器的设计和实现原理。

同时,实验过程中还能培养我们的动手能力和解决问题的能力,为今后的软件开发打下坚实的基础。

总之,编译原理实验是非常重要的,它能够帮助我们深入理解编译原理知识,提高我们的动手能力和解决问题的能力。

希望大家能够认真对待编译原理实验,从中获得更多的收获和成长。

实验二 编译预处理

实验二  编译预处理

实验一编译预处理实验目的:1. 了解程序设计语言的编译系统;2. 从编译程序的角度理解程序设计语言。

实验内容:1.编写一程序,输入一C语言源程序,输出的结果不对源程序行改变,仅去掉所有注释的内容;把C语言中定义的符号变量能采用对应的常量来替换。

2.学生可以进入turbo c和其它程序设计语言来实现程序。

实验要求:每位同学撰写一份试验报告,并提交电子版的源程序和报告。

实验报告的要求:程序流程图源程序输入和输出实验提示:以下是一个C++程序,请试着写出它的功能。

#include <fstream.h>#include <iostream.h>void pro_process(char *);void main(){char buf[4048]={'\0'};pro_process(buf);cout<<buf<<endl;}void pro_process(char *buf){ifstream cinf("source.txt",ios::in);int i=0;char old_c='\0',cur_c;bool in_comment=false;while(cinf.read(&cur_c,sizeof(char))) {switch(in_comment){case false:if(old_c=='/'&&cur_c=='*'){i--;in_comment=true;}else{if(old_c=='\\'&& cur_c=='\n')i--;else{if(cur_c>='A'&&cur_c<='Z')cur_c+=32;if(cur_c=='\t'||cur_c=='\n')cur_c=' ';buf[i++] =cur_c;}}break;case true:if(old_c=='*'&&cur_c=='/')in_comment=false;}old_c=cur_c;}buf[i++]='#';}。

L4_实验四_函数与预处理

L4_实验四_函数与预处理
3.课本P133,第9题。
在运行时,分别指定盘子数为3,5,7。并统计,在不同盘子数的情况下,移动盘子多少次。请试一下如果盘子数为16,在你所用的计算机上要运行多少时间。设想一下,如果盘子数为64,会出现什么情况。
4.课本P133,第14题。
5.课本P133,第16题。
通过这个简单的程序,初步掌握处理包含多文件的程序的方法。
三、实验结果
实验报告
实验名称函数与预处理
实验项目
专业班级姓名学号
指导教师成绩日期
一、实验目的
1.熟悉定义函数的方法、函数实参与形参的对应关系以及“值传递”的方式。
2.熟悉函数的嵌套调用和递归调用的方ห้องสมุดไป่ตู้。
3.熟悉全局变量、局部变量概念和使用方法。
4.熟悉编译预处理的应用。
5.掌握多文件的程序的编译和运行的方法。
二、实验内容和步骤
1.课本P132,第3题。
该程序应当准备以下测试数据:17,34,2,1,0。分别运行并检查结果是否正确。
2.写一个函数验证哥德巴赫猜想,一个不小于6的偶数可以表示为两个素数之和,如6=3+3,8=3+5,10=3+7……在主函数中输入一个不小于6的偶数n,然后调用函数gotbaha,在gotbaha函数中再调用prime函数,prime函数的作用是判别一个数是否为素数。在gotbaha函数中输入以下形式的结果:34=3+31。运行时,输入该偶数的值为6,12,20,458,分析运行结果。如果输入2,4,会出现什么情况?修改程序,使之能输出相应的信息。

实验7 预处理命令

实验7 预处理命令
使用make工具与makefile文件编写多文件组成的程序,共有5个程序文件。
详细操作步骤
(1).新建一个目录:mkdirlesson7
(2).切换目录到lesson7:cdlesson7
(3).分别编写五个程序文件
1)实现两个浮点数相加运算的程序文件
float add(float f1,float f2)
说明:在程序主函数使用宏时只能用两个实参,如SWAP(a,b),不能用三个参数。
#include<stdio.h>
#define SWAP(a,b) {t=a;a=b;b=t;}
intmain()
{
intm,n,t;
scanf("%d%d",&m,&n);
SWAP(m,n);
printf("two num swap is:%d,%d\n",m,n);
#define CHANGE 1
则输出密码。若
#define CHANGE 0
则不译成密码,按原码输出。
用条件编译方法来处理。
#include<stdio.h>
#define CHANGE 1
intmain()
{
charstr[20];
inti=0;
printf("input text:\n");
gets(str);
#define F2(f1,f2) PR(D2,f1,f2)
#define F3(f1,f2,f3) PR(D3,f1,f2,f3)
(2)建立源文件test8_2.c,编写如下程序
#include<stdio.h>
#include"format.h"
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

函数与编译预处理的实验操作
实验目的:了解函数的定义,掌握函数的调用和参数的传递及预编译命令实验要求:熟练掌握函数的调用及参数的传递
实验内容:1.在VC++下输入以下函数
#include<stdio.h>
int fact(int n)
{
int j,f=1;
for(j=1;j<=n;j++)
f=f*j;
return f;
}
void main()
{
int k’sum=0;
for(k=1;k<=5;k++)
sum=sum+fact(k);
printf(“sum=%d\n”,sum);
}
#include<stdio.h>
int max(int x,int y)
{
return x>y?x:y;
}
void main()
{
int a,b,c,m;
printf(“请输入三个整数:\n”);
scanf(“%d%d%d”,&a&b&c);
m=max(c,max(a,b));
printf(“m=%d\n”,m);
}
#include<math.h>
#include<stdio.h>
int prime(int x)
{
int i,r=1;
for(i=2;i<=sqrt(x);i++)
if(x%i==0)
{
r=0;break;
}
return r;
}
void output(int x,int n)
{
printf(“%6d”,x);
if(n%5==0) printf(“\n”);
}
void main()
{
int m,n=0;
for(m=2;m<=50;m++)
if(prime(m))
{
n++;
output(m,n);
}
}
#include<stdio.h>
double fac(int n)
{
double f;
if(n<0) printf(“n<0,input error!”) else if(n==0||n==1)f=1;
else f=fac(n-1)*n;
return(n);
}
void main()
{
int n;
printf(“\ninput a inteager number:”); scanf(“%d”,&n);
printf(“%d!=%.1f\n”,n,fac(n));
}
#include<stdio.h>
int ged (int m,int n)
{
int g;
if(n==0)
g=m;
else
g=ged(n,m%n);
return(g)
}
void main()
{
int m,n;
printf(“请输入两个整数:”);
scanf(“%d%d”,&m&n);
printf(“gcd=%d\n”,gcd(m,n));
}
#include<stdio.h>
int divisor(int a,int b)
{
int r;
while((r=a%b)!=0)
{
a=b;b=r;
}
return b;
}
int multiple(int a,int b)
{
int d;
d=divisor(a,b);
return a*b/d;
}
void main()
{
int a,b,c;
printf(“请输入两个整数a,b:\n”);
scanf(“%d%d”,&a&b);
c=multiple(a,b);
printf(“最小公倍数=%d\n”,c);
}
2.保存程序并编译,当窗口显示无错误时,选择执行程序
3.关闭程序工作区
实验结果:
实验分析:。

相关文档
最新文档