控制结构程序设计实验报告

合集下载

Logisim平台微程序控制实验-计算机组成原理

Logisim平台微程序控制实验-计算机组成原理

CPU的结构与功能
结构:CPU由控制器、运算器和寄存器组成
功能:控制器负责控制计算机的运行,运算器负责执行算术和逻辑运算,寄存器负责存储数据 和指令
指令集:CPU能够执行各种指令,包括算术指令、逻辑指令、控制指令等
工作原理:CPU通过读取指令、解码指令、执行指令的循环过程,实现对计算机的控制和运算。
控制器:控制计算机的运行,包括指令的 执行和程序的控制
运算器:进行算术和逻辑运算,包括加、 减、乘、除等基本运算
存储器:存储数据和程序,包括内存和外 存
输入设备:将数据或程序输入计算机,包 括键盘、鼠标等
输出设备:将计算机的处理结果输出,包 括显示器、打印机等
总线:连接计算机的各个部件,包括数据 总线、地址总线和控制总线
实验结果分析与讨论
实验目的:验证计算机组成原理的基 本概念和原理
实验方法:使用Logisim平台进行微 程序控制实验
实验结果:成功实现计算机组成原理 的基本功能
分析与讨论:实验结果与预期相符, 验证了计算机组成原理的基本概念和 原理,为后续课程学习打下基础。
06 实验总结与展望
实验总结回顾
实验目的:掌握微程序控制的基本原理和实现方法
实验内容:设计并实现一个简单的微程序控制器
实验方法:使用Logisim平台进行模拟和验证 实验结果:成功实现了微程序控制器的功能,并对计算机组成原理有了更 深入的理解
实验收获与感悟
掌握了Logisim平台的基本操作和微程序控制的原理 提高了计算机组成原理的理解和应用能力 学会了如何分析和解决实际问题 培养了团队合作和沟通能力 提高了对计算机科学的兴趣和热情
微程序控制的优势与局限性
优势:微程序控制可以实现复杂的控制功能,提高系统的灵活性和可扩展性。 优势:微程序控制可以简化硬件设计,降低硬件成本。 局限性:微程序控制需要大量的存储空间,可能导致系统资源紧张。 局限性:微程序控制可能会导致系统响应速度降低,影响系统性能。

C语言程序设计实验报告模版——实验5 循环控制

C语言程序设计实验报告模版——实验5 循环控制
2)根据分析结果写出源程序
#include <stdio.h>
void main( )
{
int i,j ;
/*定义循环控制变量*/
for(i=1;i<=4;i++)
{
for(j=1;j<=4-i;j++)
prinf(" ");
/*输出4-i个空格*/
for(j=1;j<=2*i-1;j++)
printf("*");
提示:循环条件可在while语句后的括号中出现,也可以用break语句控制。
2)根据分析结果写出源程序。
程序一:
#include<stdio.h>
void main( )
{
int x,xo=0,xj=0 ;
/*将偶数个数xo与奇数个数xj赋0值*/
scanf("%d",&x);
/*先输入一个整数*/
{
int x,xo=0,xj=0 ;
/*在循环内部用break语句控制循环条件*/
while(1)
{
scanf("%d",&x);
if(x=='\n')break ;
if(x%2==0)xo=xo+1;
else xj=xj+1 ;
}
printf("xo:%d,xj:%d",xo,xj);
}
分析:
(2)打印如下图案
printf("\n");
}
}
程序结果如下图:
四、实验心得(体会):

程序类实验报告

程序类实验报告

实验名称:程序设计基础实验实验目的:1. 理解程序设计的基本概念和原理。

2. 掌握编程语言的基本语法和编程技巧。

3. 提高程序调试和问题解决能力。

实验时间:2023年X月X日实验地点:计算机实验室实验器材:1. 计算机2. 编程软件(如Visual Studio、Eclipse等)3. 实验指导书实验内容:一、实验一:基本语法学习1. 实验目的了解编程语言的基本语法,包括变量声明、数据类型、运算符、控制结构等。

2. 实验步骤(1)编写一个简单的C程序,实现变量声明、赋值、打印输出。

(2)使用if语句实现一个简单的判断功能。

(3)使用for循环实现1到10的累加和。

(4)使用while循环实现计算两个数的最大公约数。

3. 实验结果(1)变量声明、赋值、打印输出:```c#include <stdio.h>int main() {int a = 10, b = 20;printf("a = %d, b = %d\n", a, b); return 0;}```(2)if语句实现判断功能:```c#include <stdio.h>int main() {int a = 5, b = 10;if (a > b) {printf("a > b\n");} else {printf("a <= b\n");}return 0;}```(3)for循环实现累加和:```c#include <stdio.h>int main() {int sum = 0;for (int i = 1; i <= 10; i++) {sum += i;}printf("1到10的累加和为:%d\n", sum); return 0;}```(4)while循环计算最大公约数:```c#include <stdio.h>int main() {int a = 48, b = 18, temp;while (b != 0) {temp = b;b = a % b;a = temp;}printf("最大公约数为:%d\n", a);return 0;}```二、实验二:函数使用1. 实验目的了解函数的概念和作用,掌握函数的声明、定义和调用。

实验3 结构化程序设计初步

实验3  结构化程序设计初步

实验3 结构化程序设计初步1.实验目的(1)掌握C++赋值语句与输入输出语句的使用方法,区别C语言的输入输出语句(2)掌握关系运算符、逻辑运算符与条件运算符的运算规则并能熟练计算由这些运算符构成的表达式(3)深入掌握C++各种流程控制语句(选择语句、循环语句和跳转语句)的要点和使用方法(4)能够灵活地运用C++各种语句进行综合程序设计2.实验内容2.1程序分析题。

分析下面程序的运行结果,上机运行程序,观察其输出结果与你的分析结果是否相同?(1)有如下程序,从键盘输入123456.78↙后,变量c1、c2、a、b的值分别是多少?#include <iostream.h>void main( ){char c1,c2;int a;float b;cin>>c1>>c2>>a>>b;cout<<c1<<" "<<c2<<" "<<a<<" "<<b<<'\n';}(2)#include <iostream.h>#include <iomanip.h>void main( ){double a=123.456789012345;cout<<a<<endl;cout<<setprecision(9)<<a<<endl;cout<<setprecision(6)<<a<<endl;cout<<setiosflags(ios::fixed)<<a<<endl;cout<<setiosflags(ios::fixed)<<setprecision(8)<<a<<endl;}(3)#include <iostream.h>#include <iomanip.h>void main( ){double a=123.456789012345;cout<<setiosflags(ios::scientific)<<a<<endl;cout<<setiosflags(ios::scientific)<<setprecision(4)<<a<<endl;}#include <iomanip.h>void main( ){int b=123456;cout<<b<<endl;cout<<hex<<b<<endl;cout<<setiosflags(ios::uppercase)<<b<<endl;cout<<dec<<setw(10)<<b<<','<<b<<endl;cout<<setfill('*')<<setw(10)<<b<<endl;cout<<setiosflags(ios::showpos)<<b<<endl;}(5)有如下程序,从键盘输入86 24 75↙后,程序的输出结果为多少,为什么?#include <iostream.h>void main( ){int a,b,c;cin>>a>>oct>>b>>hex>>c;cout<<a<<" "<<b<<" "<<c<<endl;}(6)#include <iostream.h>#include <iomanip.h>void main( ){short a=-1;cout<<dec<<a<<" "<<oct<<a<<" "<<hex<<a<<endl;}(7)#include <stdio.h>void main( ){int a=-1;printf("dec:%d,oct:%o,hex:%x,unsigned:%u\n",a,a,a,a);}(8)以下程序中,为了给整型变量k1,k3赋值为10,给k2,k4赋值为20,如何输入数据?#include <stdio.h>void main( ){int k1,k2,k3,k4;scanf("%d%d",&k1,&k2);scanf("%d,%d",&k3,&k4);printf("k1=%d,k2=%d,k3=%d,k4=%d\n",k1,k2,k3,k4);}void main( ){int a=3,b=4,c=5,d=6,e,f;e=a>b&&(c=8);cout<<c<<" "<<e<<endl;f=a<b&&(e=c<d);cout<<e<<" "<<f<<endl;f=a<b||(d>0?d++:d--);cout<<d<<" "<<f<<endl;}(10)#include <iostream.h>void main( ){int x,y,z,w;z=(x=-1)?(y=-1,y+=x+5):(x=7,y=9);w=y*'a'/4;cout<<x<<" "<<y<<" "<<z<<" "<<w<<endl;}(11)#include <iostream.h>void main( ){int a=5,b=7,c=3,t;if(a= -1) cout<<"Yes"<<endl;else cout<<"No"<<endl;if(a>b) { t=a;a=b;b=t; }if(a>c) { t=a;a=c;c=t; }if(b>c) { t=b;b=c;c=t; }cout<<a<<" "<<b<<" "<<c<<endl;}解析:a被赋值为-1,输出YESIf语句成立则执行,不成立则不执行分析只有b>c成立,=后面的值赋给左边的,顺序从左到右(12)#include <iostream.h>void main( ){ char c='3';switch(c-'1'){case 0:case 1:cout<<c+1<<endl;case 2:cout<<c+2<<" "<<char(c+2)<<endl;default:cout<<c+3<<" "<<char(c+3)<<endl;}}‘3’是字符型,ASCLL码为051,执行Switch时,根据switch表达式的值找到与之匹配的case子句,就从此子句开始执行下去,不再进行判断(13)#include <iostream.h>void main( ){int a=2,b=7,c=5;switch(a>0){case 1:switch(b<0){case 1: cout<<"+";break;case 2: cout<<"-";break;}case 0:switch(c==5){case 0: cout<<"*";break;case 1: cout<<"/";break;default: cout<<"#";break;}default: cout<<"$";}cout<<"\n";}a>0是真,值为1,执行case1,继续下面,b<0是假,不执行其中的case1.case2c==5是真,值为1,执行case1,输出/,其后有break,被中断不再执行分句里其下的命令,default: cout<<"$"前面没有break,则输出$(14)#include <iostream.h>void main( ){int a=10,b=0;do{a+=2;b+=a;cout<<"a="<<a<<",b="<<b<<endl;if(b>20) break;}while(a!=14);}(15)#include <iostream.h>void main( ){int i,j;for(i=10;i<20;i++){for(j=2;j<=i/2;j++)if(i%j==0) break;if(j>i/2)cout<<i<<" ";}cout<<endl;}(16)#include <iostream.h>void main( ){int i,j,m=0;for(i=0;i<5;i++)for(j=0;j<5;j++)if(j>=i) m++;cout<<m<<endl;}(17)#include <iostream.h>void main( ){int i,j;for(i=1;i<=9;i++){for(j=1;j<=9;j++){ if(j>i) break;cout<<i<<"*"<<j<<"="<<i*j<<" ";}cout<<endl;}}(18)#include <iostream.h>void main( ){int i=1,sum=0;while(i<=100){if(i%2==0){ i++; continue;}sum+=i;i++;}cout<<sum<<endl;}2.2编程题(1)编写程序从键盘输入一个大写字母,将其转换为小写字母并输出。

Python程序设计之结构与复用实验报告

Python程序设计之结构与复用实验报告

计算机科学技术学院实验报告import randomguess=0 #输入的数字times=1 #猜数字的次数secret=random.randint(0,100) #生成随机数print("--------欢迎参加猜数字游戏,请开始--------")while guess!=secret:guess=int(input("@数字区间0-100,请输入你猜的数字:"))print("你猜的数字是:",guess)if guess==secret:print("你猜了{}次,猜对了,真厉害".format(times))else:if guess<secret:print("你猜的数字小于正确答案")else:print("你猜的数字大于正确答案")times+=1print("游戏结束")3. 猜数字游戏再续。

用变量maxtimes设置允许猜数字的最大次数(比如最多只允许猜6次maxtimes=6),并在猜错后提示还有几次机会。

用for循环改写整个程序,并提交。

(提示,猜对后可使用break跳出循环)import randomguess=0times=1maxtimes=eval(input("请输入猜数字的最大次数:"))#用户自己设置maxtimessecret=random.randint(0,100)print("----------欢迎参加猜数字游戏,请开始-----------")for i in range(maxtimes):guess=int(input("@数字区间0-100,请输入你猜的数字:"))print("你输入的数字是:",guess)if guess==secret:print("你猜了{}次,猜对了,真厉害".format(times))breakelse:if guess<secret:print("你猜的数字小于正确答案")print("你还有", maxtimes - 1, "次输入机会")else:print("你猜的数字大于正确答案")print("你还有", maxtimes - 1, "次输入机会")times+=1maxtimes-=1else:print("你已没有输入机会,猜数字游戏失败!")print("游戏结束")4.猜数字游戏之续了又续。

Python程序设计 实验报告 第4章 程序控制结构的应用

Python程序设计 实验报告 第4章 程序控制结构的应用

实验4程序控制结构的应用[实验目的]•了解程序的基本结构;•掌握分支结构的类型和使用方法;•掌握循环结构的类型和使用方法;•理解程序设计的流程控制语句;•掌握循环语句的结构特点;•具备使用循环结构并能够完成简单编程的能力。

要求:所有操作结果均以截图的形式保存,截取的图上尽可能的出现自己的个人信息。

[实验设备]PC机一台;Pycharm;Win7/11操作系统。

[实验任务]任务4-1判断奇偶数任务4-2鸡兔同笼的问题任务4-3输出美元符号($)阵列任务4-4继续嵌套循环任务4-5输出IOO以内的素数任务4-6求1-2+3-4+5...99的所有数的和[实验流程]任务4・1判断奇偶数【任务需求】编写一个程序,判断输入的整数,利用流程分支语句去判断是奇数还是偶数,按编程顺序进行编写。

【任务完成效果图】请按照任务需求将完成的效果图放在下方。

任务4-2鸡兔同笼的问题【任务需求】一个笼子中有鸡X只,兔y只,使用a和b定义鸡和兔子的头和脚,求鸡兔各有几只,运用关系式判断鸡的数量和兔子的数量如果f1ag=1则成立,如果f1ag=O则输出错误(使用for循环解决)。

【任务完成效果图】请按照任务需求将完成的效果图放在下方。

任务4-3输出美元符号($)阵列【任务需求】分别使用for循环和使用whi1e循环,运用range函数设置循环的次数,输出每次i+1后的$号,接着按要求进行程序编写。

【任务完成效果图】请按照任务需求将完成的效果图放在下方。

任务4-4继续嵌套循环【任务需求】某课程的百分之分数m,将其变换为5分制(优、良、中、及格、不及格)的评定等级grade,评定条件以下:优:m>=90>良:80<=m<90>中:70<=m<80>及格:60<=m<70.不及格:m<60,首先创建以对象名为“m”,接着按要求进行程序编写。

【任务完成效果图】请按照任务需求将完成的效果图放在下方。

Python实验报告

Python实验报告

目录备注:实验考核要求及成绩评定本课程共有10个上机实验(16次),均为必做。

实验考核由出勤与纪律情况、实验任务完成情况、实验报告质量三个环节组成,成绩以百分计,满分 100 分。

各考核环节所占分值比例及考核要求如下。

每次实验按百分制单独评分,取各次成绩的平均值作为此环节的最终成绩并按比例计入课程总评成绩。

sy1_7.py 并保存至已建好的文件夹中。

4. 检查已输入的程序是否有错(包括输入时输错的和编程中的错误),如发现有错,及时改正。

5. 运行程序并分析运行结果是否合理。

在运行时要注意当输入不同的数据时所得结果是否正确,应测试两组以上数据,分别检查在不同情况下结果是否正确。

列出1-7题源程序清单并记录上机运行结果。

1.编写Python程序,进行摄氏度和华氏度之间的温度转换。

源程序:运行结果:2. 天天向上的力量计算。

一年365天,以第1天的能力值为基数,记为1.0,当好好学习时能力值相比前一天提高1‰,当没有学习时由于遗忘等原因能力值相比前一天下降1‰。

每天努力和每天放任,一年下来的能力值相差多少呢?源程序:运行结果:思考:如果好好学习时能力值相比前一天提高5‰,当放任时相比前一天下降5‰。

效果相差多少呢?源程序:运行结果:如果好好学习时能力值相比前一天提高1%,当放任时相比前一天下降1%。

效果相差多少呢?源程序:运行结果:3. 一年365天,一周5个工作日,如果每个工作日都很努力,可以提高1%,仅在周末放任一下,能力值每天下降1%,效果如何呢?源程序:运行结果:4. 每周工作5天,休息2天,休息日水平下降0.01,工作日要努力到什么程度一年后的水平才与每天努力1%所取得的效果一样呢?(选作)源程序:运行结果:5. 输入一个星期数字,返回对应星期名称。

源程序:运行结果:6. 利用print()函数实现简单的非刷新文本进度条及单行动态刷新文本进度条。

(1) 简单的非刷新文本进度条源程序:运行结果:(2) 单行动态刷新文本进度条源程序:运行结果:实验成绩评定表sy2_1.py-sy2_9.py并保存至已建好的文件夹中。

分支结构控制实验报告

分支结构控制实验报告

一、实验目的1. 理解并掌握分支结构在程序设计中的作用。

2. 熟练运用if-else语句和switch-case结构实现分支控制。

3. 通过实际案例,提高对分支结构在实际编程中的应用能力。

二、实验环境1. 操作系统:Windows 102. 编程语言:C语言3. 编译器:Visual Studio 2019三、实验内容1. 实验一:使用if-else语句判断一个数是正数、负数还是零。

```c#include <stdio.h>int main() {int num;printf("请输入一个整数:");scanf("%d", &num);if (num > 0) {printf("%d 是正数。

\n", num);} else if (num < 0) {printf("%d 是负数。

\n", num);} else {printf("%d 是零。

\n", num);}return 0;}```2. 实验二:使用switch-case结构判断一个星期中的某一天。

```c#include <stdio.h>int main() {int day;printf("请输入星期几(1-7):");scanf("%d", &day);switch (day) {case 1:printf("星期一。

\n");break;case 2:printf("星期二。

\n");break;case 3:printf("星期三。

\n");break;case 4:printf("星期四。

\n");break;case 5:printf("星期五。

c语言实验报告详细设计

c语言实验报告详细设计

实验报告:C语言程序设计
一、实验目的
通过本次实验,使学生掌握C语言的基本语法和程序设计思想,培养学生的编程能力和解决问题的能力。

二、实验内容
1. C语言程序的组成和结构
2. 数据类型、运算符和表达式
3. 输入输出函数
4. 控制结构(选择结构和循环结构)
5. 数组和字符串
6. 函数和程序结构
7. 指针和内存管理
三、实验步骤
1. 准备阶段:了解实验内容和要求,准备好所需的资料和工具。

2. 设计阶段:根据实验内容,设计程序结构和算法,编写代码。

3. 调试阶段:运行程序,调试代码,确保程序的正确性和可靠性。

4. 测试阶段:对程序进行各种测试,确保程序的正确性和性能。

5. 总结阶段:总结实验过程和结果,撰写实验报告。

四、实验结果与分析
1. 实验结果:通过本次实验,学生掌握了C语言的基本语法和程序设计思想,能够编写简单的C程序,解决了一些实际问题。

2. 结果分析:在实验过程中,学生遇到了一些问题,如语法错误、逻辑错误等。

通过调试和测试,学生逐渐掌握了C语言的编程技巧和方法,提高了编程能力和解决问题的能力。

五、结论与建议
1. 结论:通过本次实验,学生掌握了C语言的基本语法和程序设计思想,能够编写简单的C程序,解决了一些实际问题。

同时,学生也提高了编程能力和解决问题的能力。

2. 建议:在今后的实验中,应该更加注重学生的实践能力和创新能力的培养,加强实验内容的深度和广度,提高学生的编程能力和解决问题的能力。

同时,应该注重实验过程的规范化和科学化,确保实验结果的准确性和可靠性。

C语言程序设计实验报告

C语言程序设计实验报告

C语言程序设计实验报告一、实验目的本次 C 语言程序设计实验的主要目的是通过实际编写和调试 C 语言程序,加深对 C 语言语法、数据类型、控制结构、数组、指针、函数等核心概念的理解和掌握,提高编程能力和问题解决能力。

二、实验环境本次实验使用的编程环境是 Visual Studio Code,编译器为 GCC。

操作系统为 Windows 10。

三、实验内容及步骤(一)简单数据类型与运算1、定义并初始化不同类型的变量,如整型、浮点型、字符型等。

2、进行基本的算术运算、关系运算和逻辑运算,并输出结果。

(二)控制结构1、编写使用 ifelse 语句进行条件判断的程序,根据不同的条件执行不同的操作。

2、运用 for 循环和 while 循环实现特定次数的重复操作,例如计算1 到 100 的和。

(三)数组1、定义并初始化一维数组和二维数组。

2、实现数组元素的遍历和操作,如查找最大值、最小值等。

(四)指针1、理解指针的概念,定义指针变量并进行赋值。

2、通过指针访问变量和数组元素。

(五)函数1、定义和调用具有不同参数类型和返回值类型的函数。

2、理解函数的参数传递机制,包括值传递和指针传递。

四、实验过程中的问题及解决方法(一)语法错误在编写程序的过程中,经常会出现语法错误,如遗漏分号、括号不匹配等。

通过仔细检查代码,对照 C 语言的语法规则,能够及时发现并修正这些错误。

(二)逻辑错误逻辑错误是比较难以发现和解决的问题。

例如,在循环中可能会出现错误的边界条件,导致结果不正确。

通过打印中间结果和逐步调试,能够帮助找出逻辑错误的所在,并进行修正。

(三)运行时错误运行时错误可能是由于内存访问越界、除数为零等原因引起的。

使用调试工具和异常处理机制,能够有效地处理运行时错误,保证程序的稳定性。

五、实验结果与分析(一)简单数据类型与运算通过实验,对不同数据类型的取值范围、精度以及运算规则有了更清晰的认识。

例如,整型数据在不同的平台上可能具有不同的取值范围,浮点型数据在进行运算时可能会存在精度损失。

可编程控制器实验报告

可编程控制器实验报告

一、实验目的1. 熟悉可编程控制器(PLC)的基本结构、工作原理及编程方法。

2. 掌握PLC编程软件的使用,能够根据实际需求编写控制程序。

3. 理解PLC在实际工程中的应用,提高动手实践能力。

二、实验原理可编程控制器(PLC)是一种数字运算操作电子系统,用于工业控制领域。

它根据预设的程序对输入信号进行处理,并通过输出信号来控制执行器。

PLC具有可靠性高、抗干扰能力强、编程灵活等特点。

PLC主要由以下几部分组成:1. 输入/输出(I/O)模块:负责接收外部信号,并将信号转换为内部信号,同时将内部信号转换为外部信号。

2. CPU:是PLC的核心,负责处理输入信号,执行用户程序,并输出控制信号。

3. 存储器:用于存储用户程序、系统程序、输入/输出数据等。

4. 电源模块:为PLC提供稳定的工作电压。

三、实验内容1. 实验环境:PLC实验箱、编程软件、上位机等。

2. 实验步骤:(1)连接PLC实验箱,设置输入/输出端子;(2)打开编程软件,创建新的项目;(3)编写控制程序,包括梯形图、指令表等;(4)编译程序,下载到PLC;(5)观察PLC运行结果,验证程序是否正确。

四、实验步骤1. 连接PLC实验箱,设置输入/输出端子(1)将PLC实验箱的电源线、输入/输出线与上位机连接;(2)根据实验需求,将输入/输出端子与相应的外部设备连接。

2. 打开编程软件,创建新的项目(1)启动编程软件,选择合适的PLC型号;(2)创建新的项目,输入项目名称、版本等信息。

3. 编写控制程序(1)根据实验需求,编写梯形图或指令表程序;(2)设置输入/输出端子的地址,确保程序正确;(3)保存程序,进行编译。

4. 编译程序,下载到PLC(1)编译程序,检查是否有错误;(2)将编译后的程序下载到PLC。

5. 观察PLC运行结果,验证程序是否正确(1)操作输入设备,观察输出设备是否按预期工作;(2)根据实际需求,调整程序,直至达到预期效果。

c语言程序设计实验报告

c语言程序设计实验报告

c语言程序设计实验报告C语言程序设计实验报告一、引言C语言是一种广泛应用于软件开发的高级编程语言,其简洁、高效和灵活的特性使其成为许多程序员的首选。

在本次实验中,我们将通过编写C语言程序,探索其基本语法和功能,以及如何应用于实际问题的解决。

二、实验目的本次实验的目的是让我们熟悉C语言的基本语法和常用的控制结构,掌握C语言程序的编写和调试技巧。

通过实践,我们将学习如何使用C语言解决简单的问题,并培养编程思维和逻辑思维能力。

三、实验过程1. 程序设计环境的搭建在开始编写C语言程序之前,我们需要先搭建一个合适的开发环境。

通常,我们可以选择使用集成开发环境(IDE)如Code::Blocks或使用文本编辑器和命令行编译器的组合。

在本次实验中,我们选择使用Code::Blocks作为开发工具。

2. 程序的编写在本次实验中,我们将编写一个简单的学生成绩管理程序。

该程序可以实现学生信息的录入、查询和统计功能。

首先,我们需要定义适当的数据结构来存储学生的信息,如姓名、学号和成绩。

然后,我们可以使用C语言的基本输入输出函数来实现信息的录入和查询功能。

最后,我们可以使用循环和条件语句来实现成绩统计功能。

3. 程序的调试和测试在完成程序的编写后,我们需要进行调试和测试以确保程序的正确性。

我们可以通过逐行调试和输入不同的测试数据来验证程序的逻辑和功能。

如果发现错误或异常,我们可以使用调试工具来定位和修复问题。

四、实验结果与分析经过调试和测试,我们成功地完成了学生成绩管理程序的编写。

该程序可以实现学生信息的录入、查询和统计功能,并且在处理异常情况时能够给出相应的提示信息。

通过该程序,我们可以更好地理解C语言的基本语法和常用控制结构,并学会了如何将其应用于实际问题的解决。

然而,我们也发现了一些问题和改进的空间。

首先,程序的界面可以进一步优化,使其更加友好和易用。

其次,我们可以添加更多的功能,如成绩排序和成绩分析等,以满足更多的需求。

c语言程序设计实验报告模板

c语言程序设计实验报告模板

c语言程序设计实验报告模板一、实验目的本实验的目的是学习和掌握C语言程序设计的基本概念和技巧,深入理解C语言的程序结构以及算法设计和实现的过程。

二、实验内容1. 程序设计的基本原理和基本语法:包括数据类型、运算符、控制结构、函数等基本概念的学习和理解。

2. 程序运行环境的搭建:安装和配置C语言程序运行所需要的开发环境,例如使用Code::Blocks、Dev-C++等集成开发环境进行实践。

3. 程序设计和实现:根据给定的实验要求,设计并实现C语言程序,通过编码和调试实现程序的正确运行。

三、实验步骤和实验结果在实验过程中,按照以下步骤进行实践:1. 实验环境搭建:a. 下载并安装适合的集成开发环境,例如Code::Blocks。

b. 配置环境变量,确保C语言编译器和执行文件的路径正确。

2. 实验程序设计:a. 阅读实验要求,理解实验的要求和目标。

b. 设计程序的结构和算法思路。

c. 编写程序代码,并确保代码的格式整洁、符合C语言的编码规范。

3. 程序的编译和运行:a. 打开集成开发环境,创建新的项目并添加编写好的源代码文件。

b. 编译程序,检查是否有错误或警告信息。

c. 运行程序,验证程序的正确性和功能实现情况。

4. 分析实验结果:a. 根据实验要求,分析程序输出的结果。

b. 比较结果和预期结果,确保程序的正确性和可靠性。

c. 对实验结果进行总结和讨论,评估程序的性能和优化空间。

四、实验总结与心得体会在本次实验中,通过对C语言程序设计的学习和实践,我对C语言的基本概念和语法有了更深入的了解。

通过编写和调试实验程序,我逐步提高了自己的编程能力和解决问题的能力。

同时,我也认识到了C语言程序设计的重要性和实用性,对计算机程序的设计和实现有了更全面的认识。

总的来说,本次实验让我受益匪浅,不仅学到了理论知识,还提高了实践能力。

通过参与实验,我意识到了编程实践对于理论知识的巩固和转化的重要性,并且增强了我的实际操作能力。

程序设计基础实验报告

程序设计基础实验报告

《程序设计基础》实验报告实验二控制结构程序设计1.实验目的要求(1)理解基本的解题技巧,掌握用自顶向下、逐步求精的过程设计算法。

(2)熟练掌握if/else语句和switch语句的使用。

(3)熟练掌握while语句、do/while语句和for语句的使用以及区别。

(4)掌握break和continue程序控制语句的使用。

2.实验设备微型计算机Microsoft Visual C++3.实验内容(1)阅读下列程序,写出(由指定的输入)所产生的运行结果,并指出其功能。

<1>#include <iostream.h>void main(){int m,n;m = 1000;n = 850;cout << ‚\n(‚ << m << ‘,’ << n << ‘)’;while ( m != n ) {while ( m > n ) {m = m – n ;cout << ‘(‘ << m << ‘,’ << n << ‘)’;}while ( m < n ) {n = n – m ;cout << ‘(‘ << m << ‘,’ << n << ‘)’;}}cout << ‚\n‛ << m ;}<2>#include <iostream.h>void main(){int m,n,k ;m = 1000 ;n = 45 ;cout << ‚\n(‚ << m << ‘:’ << n << ‘)’ ;k=0;while ( m >=n ){m = m – n ;k = k + 1 ;}cout << k << ‚---‛ << m << endl ;}<3>#include <iostream.h>void main(){int i;for ( i = 1 ; i <= 5 ; i ++ ){if ( i % 2 )cout << ‘*’;elsecontinue;cout << ‘#’ ;}cout << ‚$\n‛ ;}<4>#include <iostream.h>void main(){int a = 1,b = 10;do{b -= a ;a ++ ;}while ( b -- <= 0 ) ;cout << ‚a=‛ << a << ‚b=‛ << b <<endl ;}(2)编写程序实现下列问题的求解。

实验四 程序控制结构 实验报告

实验四 程序控制结构  实验报告

天津理工大学计算机科学与工程学院实验报告2018 至2019 学年第一学期课程名称程序设计(C语言)学号学生姓名班级专业计算机科学与技术(合作)实验地点7-21 实验项目程序控制结构实验时间批改意见成绩教师签字:scanf("%d",&a);if(a<=100&&a>=90){printf("Excellent\n");}else if(a<90&&a>=80){printf("Good\n");}else if(a<80&&a>=70){printf("Middle\n");}else if(a<70&&a>=60){printf("Passed\n");}else if(a<60&&a>=0){printf("Failed\n");}else {printf("Illegal\n");}}编译结果:--------------------Configuration: 232562269292969 - Win32 Debug-------------------- Linking...232562269292969.exe - 0 error(s), 0 warning(s)运行结果:经过验证,该程序没有出现错误,且能够完成任务目标。

(2).使用switch语句实验代码:#include <stdio.h>void main(){int a,b;printf("请输入一个百分制成绩,要求在0到100之间\n");scanf("%d",&a);if(a<=100&&a>=90){b=1;}else if(a<90&&a>=80){b=2;}else if(a<80&&a>=70){b=3;}else if(a<70&&a>=60){b=4;}else if(a<60&&a>=0){b=5;}else {b=6;}switch (b){case 1:printf("Excellent\n");break;case 2:printf("Good\n");break;case 3:printf("Middle\n");break;case 4:printf("Passed\n");break;case 5:printf("Failed\n");break;case 6:printf("Illegal\n");}}编译结果:--------------------Configuration: 232562269292969 - Win32 Debug-------------------- Linking...232562269292969.exe - 0 error(s), 0 warning(s)运行结果:经过验证,该程序没有出现错误,且能够完成任务目标。

流程控制及其它指令编程实验报告

流程控制及其它指令编程实验报告

流程控制及其它指令编程实验报告下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。

文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor.I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!流程控制及其指令编程实验报告一、实验目的:本次实验的主要目标是深入理解和掌握流程控制指令在编程中的应用,包括顺序结构、选择结构(条件语句)和循环结构(循环语句),并通过对这些基本指令的实际操作,提升编程能力和问题解决能力。

深圳大学计算机基础实验raptor控制结构

深圳大学计算机基础实验raptor控制结构

深圳大学实验报告课程名称:计算机基础实验序号: 6实验名称:raptor控制结构班级:信工1班姓名:同组人:实验日期:2015年1月 3 日教师签字:一、实验目的学会使用raptor程序,了解各种算法结构二、实验环境1、硬件环境:微机2、软件环境:windows 7三、实验步骤例题1:已知圆的半径,求解圆的面积。

【解】利用raptor编制的求解圆面积流程图如图1-1所示图1-1单击运行后在输入框输入半径后单击确定,流程图将运行完毕,结果如图1-2图1-2例题2:计算存款利息。

有10000,想存一年。

有如下两种方式可选。

①活期存款,年利率为r1。

②一年定期存款,年利率为r2。

请分别计算出一年后按这两种方法分别所得到的本息和。

【解】首先确定计算本息和的公式。

活期存款一年后本息和为p1=10000(1+r1);定期存款一年后本息和为p2=10000(1+r2)。

在raptor中编辑相应的流程图,如图2-1所示。

图2-1运行结果如图2-2图2-2例题3:输入两个数a、b,要求按照从小到大的顺序显示结果。

【解】画出其流程图如图3-1所示。

图3-1运行结果如图3-2图3-2例题4:求02=++c bx ax 方程的根,a 、b 、c 由键盘输入。

【解】画出的流程图如图4-1所示。

图4-1 运行结果如图4-2图4-2例题5:求1+2+3+…+100,即∑=1001n n 。

【解】画出的程序图如图5-1所示。

图5-1 运行结果如图5-2所示。

图5-2例题6:百元买鸡问题【解】画出的流程图如图6-1所示图6-1 运行结果如图6-2图6-2例题7:要求输入以下的结果,用子图实现。

*********************Shenzhen University.*********************【解】画出流程图如图7-1所示,子图如图7-2、图7-3所示图7-1图7-2图7-3运行结果如图7-4所示图7-4例题8:解决斐波那契数列,即⎪⎩⎪⎨⎧-+-=)2()1(10)(n Fib n Fib n Fib【解】主程序图如图8-1所示,子图如图8-2所示。

微程序控制器实验报告

微程序控制器实验报告

一、实验目的1、通过实验,进一步理解微程序控制器的组成结构。

理解微程序控制器的控制原理2、加深理解微程序控制器的工作原理。

掌握指令流程与功能3、理解掌握微程序控制器的设计思路与方法二、实验内容与步骤1、微程序控制器的组成原理控制存储器:实现整个指令系统的所有微程序,一般指令系统是规定的由高速半导体存储器构成,容量视机器指令系统而定,取决于微程序的个数,其长度就是微指令字的长度。

微指令寄存器:存放从控存读出的当前微指令。

微操作控制字段将操作控制信号送到控制信号线上,微地址字段指出下一条微地址的形成。

微地址寄存器:存放将要访问的下一条微指令地址地址转移逻辑:形成将要执行的微指令地址,形成方式:取指令公操作所对应的微程序一般从控存的0地址开始,所以微程序的人口地址0是由硬件控制的。

当出现分支时,通过判别测试字段、微地址字段、和执行部件的反馈信息形成后即微地址。

Cpu设计步骤:1.拟定指令系统2.确定总体结构(数据通路)3.安排时序4.拟定指令流程。

根据指令系统,写出对应所有机器指令的全部微操作机器节拍安排,然后列出操作时间表5.确定微指令的控制方式、下地址形成方式、微指令格式及微指令字长,编写全部的微指令的代码,最后将编写的微指令放入控制存储器中。

微程序控制器的设计步骤(1)设计微程序确定微程序流程图,也就是控制算法流程图。

(2)确定微指令格式微指令格式中的操作控制字段取决于执行部件的子系统需要多少微指令。

假定采用直接控制方式,执行部件需要10个微命令,则操作控制字段需要10位。

??? 测试判别字段取决于微程序流程图中有多少处分支转移。

假定有3处分支,则测试判别字段需要3位。

下址字段取决于微程序流程图的规模。

假定微程序共用50条微指令,则下址字段至少需要6位。

这是因为ROM地址译码时,26=64,6位地址可容纳64条微指令。

(3)将微程序编译成二进制代码(4)微程序写入控制存储器(5)设计硬件电路三、实验现象--CPU 头文件 cpu_defsLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;PACKAGE cpu_defs IS --定义程序包,包头,包体TYPE opcode IS (load, store, add, sub, bne); --这个语句适合于定义一些用std_logic 等不方便定义的类型,综合器自动实现枚举类型元素的编码,一般将第一个枚举量(最左边)编码为0CONSTANT word_w: NATURAL :=8;CONSTANT op_w: NATURAL :=3;CONSTANT rfill: STD_LOGIC_VECTOR(op_w-1 downto 0):=(others =>'0');--FUNCTIOn slv2op(slv:IN STD_LOGIC_VECTOR) RETURN opcode;FUNCTION op2slv(op:in opcode) RETURN STD_LOGIC_VECTOR;END PACKAGE cpu_defs;PACKAGE BODY cpu_defs ISTYPE optable IS ARRAY(opcode) OF STD_LOGIC_VECTOR(op_w-1 DOWNTO 0);--数组有5个元素,其他均0CONSTANT trans_table:optable :=("000", "001", "010", "011", "100");FUNCTION op2slv(op:IN opcode) RETURN STD_LOGIC_VECTOR ISBEGINRETURN trans_table(op);END FUNCTION op2slv;END PACKAGE BODY cpu_defs;--实验 7-8 微程序控制器实验LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL,IEEE.NUMERIC_STD.ALL;USE WORK.CPU_DEFS.ALL;--使用自己定义的程序包ENTITY CPU ISPORT( clock : IN STD_LOGIC;--时钟reset : IN STD_LOGIC;--复位mode : IN STD_LOGIC_VECTOR(2 DOWNTO 0); --查看用mem_addr : INUNSIGNED(word_w-op_w-1 DOWNTO 0);--地址output : OUT STD_LOGIC_VECTOR(word_w-1 DOWNTO 0);data_r_out : OUT STD_LOGIC_VECTOR(19 DOWNTO 0);--微指令Rop_out : OUT STD_LOGIC_VECTOR(op_w-1 DOWNTO 0);--操作码add_r_out : OUT UNSIGNED(4 DOWNTO 0) --微地址R);END ENTITY;ARCHITECTURE rtl OF CPU ISTYPE mem_array IS ARRAY (0 TO 2**(word_w-op_w)-1) OF STD_LOGIC_VECTOR(word_w-1 DOWNTO 0);--定义RAMSIGNAL mem : mem_array;CONSTANT prog : mem_array:=(0=> op2slv(load) & STD_LOGIC_VECTOR(TO_UNSIGNED(4,word_w-op_w)),1=> op2slv(add) & STD_LOGIC_VECTOR(TO_UNSIGNED(5,word_w-op_w)),2=> op2slv(store) & STD_LOGIC_VECTOR(TO_UNSIGNED(6,word_w-op_w)),3=> op2slv(bne) & STD_LOGIC_VECTOR(TO_UNSIGNED(7,word_w-op_w)), --TO_UNSIGNED转换函数将4转换为5位“00100”4=> STD_LOGIC_VECTOR(TO_UNSIGNED(2,word_w)),5=> STD_LOGIC_VECTOR(TO_UNSIGNED(3,word_w)),OTHERS => (OTHERS =>'0'));TYPE microcode_array IS ARRAY (0 TO 14) OF STD_LOGIC_VECTOR(19 DOWNTO 0); CONSTANT code : microcode_array:=(--控制存储器14=> "00000000000000000000");SIGNAL count : UNSIGNED(word_w-op_w-1 DOWNTO 0);SIGNAL op : STD_LOGIC_VECTOR(op_w-1 DOWNTO 0);SIGNAL z_flag : STD_LOGIC;SIGNAL mdr_out : STD_LOGIC_VECTOR(word_w-1 DOWNTO 0);SIGNAL mar_out : UNSIGNED(word_w-op_w-1 DOWNTO 0);SIGNAL IR_out : STD_LOGIC_VECTOR(word_w-1 DOWNTO 0);SIGNAL acc_out : UNSIGNED(word_w-1 DOWNTO 0);SIGNAL sysbus_out : STD_LOGIC_VECTOR(word_w-1 DOWNTO 0);EGINPROCESS(reset,clock)VARIABLE instr_reg : STD_LOGIC_VECTOR(word_w-1 DOWNTO 0);VARIABLE acc : UNSIGNED(word_w-1 DOWNTO 0);CONSTANT zero : UNSIGNED(word_w-1 DOWNTO 0):=(OTHERS =>'0')VARIABLE mdr : STD_LOGIC_VECTOR(word_w-1 DOWNTO 0);VARIABLE mar : UNSIGNED(word_w-op_w-1 DOWNTO 0);VARIABLE sysbus : STD_LOGIC_VECTOR(word_w-1 DOWNTO 0);VARIABLE microcode : microcode_array;VARIABLE add_r : UNSIGNED(4 DOWNTO 0);VARIABLE data_r : STD_LOGIC_VECTOR(19 DOWNTO 0);VARIABLE temp : STD_LOGIC_VECTOR(4 DOWNTO 0);BEGINIF reset='0' THENadd_r:=(OTHERS =>'0');count <= (OTHERS =>'0');instr_reg := (OTHERS =>'0');acc := (OTHERS =>'0');mdr := (OTHERS =>'0');mar := (OTHERS =>'0');z_flag <='0';mem <= prog;sysbus :=(OTHERS =>'0');ELSIF RISING_EDGE(clock) THEN--microprogram controllerdata_r := code(TO_INTEGER(add_r));IF data_r(4 DOWNTO 0)="01111" THEN --判断下地址temp:="01" & op(2 DOWNTO 0);add_r := UNSIGNED(temp);ELSIF data_r(4 DOWNTO 0)="10000" THENIF z_flag='1' THENadd_r:="01110";ELSEadd_r :="01101";END IF;ELSEadd_r := UNSIGNED(data_r(4 DOWNTO 0));END IF;data_r_out <=data_r;add_r_out <= add_r;--PCIF data_r(16)='1' THEN --PC_bus='1'sysbus := rfill & STD_LOGIC_VECTOR(count);END IF;IF data_r(19)='1' THEN --load_PC='1'count <= UNSIGNED(mdr(word_w-op_w-1 DOWNTO 0));ELSIF data_r(10)='1' THEN --INC_PC='1'count <= count+1;ELSEcount <= count;END IF;--IRIF data_r(15)='1' THEN --load_IRinstr_reg := mdr;END IF;IF data_r(9)='1' THEN --Addr_bus='1'sysbus := rfill & instr_reg(word_w-op_w-1 DOWNTO 0);END IF;op <= instr_reg(word_w-1 DOWNTO word_w-op_w);IR_out <= instr_reg;op_out <=op;--ALUIF data_r(17)='1' THEN --load_ACC='1'acc:=UNSIGNED(mdr);END IF;IF data_r(11)='1' THEN --ALU_ACC='1'IF data_r(6)='1' THEN --ALU_add='1'acc := acc + UNSIGNED(mdr);ELSIF data_r(5)='1' THEN --ALU_sub='1'acc := acc - UNSIGNED(mdr);END IF;END IF;IF data_r(18)='1' THEN --ACC_bus='1'sysbus := STD_LOGIC_VECTOR(acc);END IF;IF acc=zero THENz_flag <='1';ELSEz_flag <='0';END IF;acc_out<= acc;--RAMIF data_r(14)='1' THEN --load_MAR='1'mar := UNSIGNED(sysbus(word_w-op_w-1 DOWNTO 0));ELSIF data_r(12)='1' THEN --load_MDR='1'mdr := sysbus;ELSIF data_r(8)='1' THEN --CS='1'IF data_r(7)='1' THEN --R_NW='1'mdr := mem(TO_INTEGER(mar));ELSEmem(TO_INTEGER(mar))<=mdr;END IF;END IF;IF data_r(13)='1' THEN --MDR_bus='1'sysbus:=mdr;END IF;mdr_out <= mdr;mar_out <= mar;END IF;sysbus_out <=sysbus;END PROCESS;PROCESS(mode,mem_addr)BEGIN--mode=0 -> sysbus--mode=1 -> PC--mode=2 -> result of ALU--mode=3 -> IR--mode=4 -> MAR--mode=5 -> MDR--mode=6 -> memoutput <= (OTHERS =>'0');CASE mode isWHEN "000" =>output<=sysbus_out;WHEN "001" =>output(word_w-op_w-1 DOWNTO 0)<= STD_LOGIC_VECTOR(count);WHEN "010" =>output <= STD_LOGIC_VECTOR(acc_out);WHEN "011" =>output <= IR_out;WHEN "100" =>output(word_w-op_w-1 DOWNTO 0) <= STD_LOGIC_VECTOR(mar_out);WHEN "101" =>output <= mdr_out;WHEN "110" =>output <= mem(TO_INTEGER(mem_addr));WHEN others =>output <= (OTHERS =>'Z');END CASE;END PROCESS;END ARCHITECTURE;现象结果:四、实验体会原本对于控制器的设计还是一片空白,通过实验初步理解微程序控制器的组成结构。

实验3 控制结构

实验3 控制结构

南昌大学实验报告学生姓名:学号:专业班级:实验类型:□验证□√综合□设计□创新实验日期:2013.04.16 实验成绩:一.实验名称实验3 控制语句二.实验目的1.熟练掌握if 、if…else、if…elseif语句和switch语句格式及使用方法,掌握if语句中的嵌套关系和匹配原则,利用if语句和switch语句实现分支选择结构。

2.熟练掌握while语句、do ...while语句和for语句格式及使用方法,掌握三种循环控制语句的循环过程以及循环结构的嵌套,利用循环语句实现循环结构。

3.掌握简单、常用的算法,并在编程过程中体验各种算法的编程技巧。

进一步学习调试程序,掌握语法错误和逻辑错误的检查方法。

三.实验内容1.选择结构程序设计;2.if语句的使用;3.使用switch语句实现多分支选择结构;4.三种循环语句的应用;5.循环结构的嵌套;6.break和continue语句的使用。

三.实验环境PC微机DOS操作系统或Windows 操作系统Visual c++程序集成环境四.实验内容和步骤本实验要求事先编好解决下面问题的程序,然后上机输入程序并调试运行程序。

学会单步调试和断点调试程序及变量跟踪方法。

1.通过键盘输入一个字符,判断该字符是数字字符、大写字母、小写字母、空格还是其他字符。

2.编程实现:输入一个整数,判断该数的正负性和奇偶性之后,将其数值按照①小于10,②10~99,③100~999,④1000以上四个类别分类并显示。

要求:(1)将变量定义为整型。

(2)输入整数前,利用cout 给出提示信息。

(3)输出结果时要有必要的说明,例如:输入358时,显示358 is 100 to 999。

(4)该程序利用if 语句实现。

运行程序,分别输入9,21,321,4321数据检查输出信息的正确性。

3.从键盘输入学生的考试成绩,利用计算机将学生的成绩划分等级并输出。

学生的成绩可分成5个等级,90-100分为A 级,80-89分为B 级,70-79分为C 级,60-69分为D 级,0-59分为E 级。

微程序控制器组成实验报告

微程序控制器组成实验报告

微程序控制器组成实验报告微程序控制器组成实验报告一、引言微程序控制器是计算机中的重要组成部分,它负责解析指令并控制计算机的各个部件进行相应操作。

本实验旨在通过实际操作,深入了解微程序控制器的组成和工作原理。

二、实验目的1. 理解微程序控制器的基本概念和工作原理;2. 掌握微程序控制器的组成结构;3. 实践使用微程序控制器进行指令解析和控制。

三、实验原理微程序控制器由控制存储器和控制逻辑组成。

控制存储器中存储了一系列微指令,每个微指令对应一条机器指令的执行步骤。

控制逻辑根据当前指令的操作码,从控制存储器中读取相应的微指令,并根据微指令的控制信号控制各个部件的操作。

四、实验步骤1. 搭建实验平台:将微程序控制器与计算机主板相连,并连接相应的输入输出设备;2. 下载微程序控制器的控制存储器:将预先编写好的微指令存储到控制存储器中;3. 编写控制逻辑:根据机器指令的操作码,编写相应的控制逻辑,实现指令的解析和控制;4. 运行实验:通过输入指令,观察微程序控制器的工作情况,验证控制逻辑的正确性。

五、实验结果与分析在实验中,我们成功搭建了微程序控制器的实验平台,并下载了相应的微指令。

通过输入不同的指令,我们观察到微程序控制器能够正确解析指令并控制计算机的各个部件进行相应操作。

这证明了我们编写的控制逻辑是正确的。

六、实验总结通过本次实验,我们深入了解了微程序控制器的组成和工作原理。

微程序控制器通过控制存储器中的微指令,实现了对机器指令的解析和控制。

掌握了微程序控制器的基本原理后,我们能够编写相应的控制逻辑,实现自定义的指令解析和控制功能。

七、实验心得本次实验让我对微程序控制器有了更深入的了解。

通过亲自搭建实验平台和编写控制逻辑,我深刻体会到微程序控制器在计算机中的重要作用。

同时,实验过程中也遇到了一些问题,但通过不断尝试和调试,最终解决了这些问题,提高了自己的实践能力。

八、展望微程序控制器作为计算机的核心组件之一,具有广泛的应用前景。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《测绘程序设计()》上机实验报告(Visual C++.Net)班级:学号:姓名:序号:二零一零年三月实验2 控制结构程序设计一、实验目的掌握VC++.net语言的基本语法;理解顺序结构、选择结构和循环结构程序设计的特点及应用;掌握对基于对话框的MFC应用程序设计方法;掌握一些简单算法二、实验内容1)编写后方交会的程序设计思路:通过反正切求得的角度范围是“-90—90”,而方位角的取值范围是“0—360”,因此需要通过方位角的象限来进行转换。

还有一点不容忽视,反正切函数求出的角度是弧度,而需要得到的方位角显示的是度、分、秒。

因此需要转换。

当dx>0时dy>0,nQuadrant=1,Rad=atan(dy/dx)*180/PIdy<0, nQuadrant==4, Rad=(atan(dy/dx)+2*PI)*180/PIdy=0, Rad=0;当dx<0时,dy>0,nQuadrant=2,Rad=(atan(dy/dx)+PI)*180/PI dy<0, nQuadrant=3, Rad=(atan(dy/dx)+PI)*180/PIdy=0,Rad=180当dx=0时dy>0,Rad=90dy<0,Rad=270dy=0,则两点重合,方位角不存在了计算出弧度(Rad)后,再将其转化为度分秒输出就完成了。

界面设计:界面由5个文本框、5个静态框和2个命令按钮组成,需要完成输入2点坐标,输出方位角的功能其中文本控件属性设置为:主要代码:文件名TriAzimuthDlg.cpp#include"stdafx.h"#include"TriAzimuth.h"#include"TriAzimuthDlg.h"#include"math.h"…….void CTriAzimuthDlg::OnBnClickedCancel(){// TODO: 在此添加控件通知处理程序代码OnCancel();}const double PI=3.1415926;void CTriAzimuthDlg::OnBnClickedOk(){// TODO: 在此添加控件通知处理程序代码//OnOK();}//将弧度转化成度分秒形式double Rad_To_Dms(double Rad){double dDeg,dDms; //十进制角度及度分秒格式角度,控制变量//用于存放度分秒三个值的变量int iDegree,iMin;double dSec;double dTmp;dDeg=Rad*180/PI; //弧度转化为度//度转化成度分秒iDegree=int(dDeg);dTmp=(dDeg-iDegree)*60;iMin=int(dTmp);dSec=(dTmp-iMin)*60;dDms=iDegree+double(iMin)/100+dSec/10000;return dDms;}void CTriAzimuthDlg::OnBnClickedButton1(){// TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);double dx,dy;double Rad; //弧度,控制变量dx=X2-X1;dy=Y2-Y1;if(dx>0){if(dy>0)Rad=atan(dy/dx); //A为第一象限角else if(dy<0)Rad=atan(dy/dx)+2*PI; //A为第四象限角elseRad=0; //A=0度}else if(dx<0){if(dy>0)Rad=atan(dy/dx)+PI; //A为第二象限角else if(dy<0)Rad=atan(dy/dx)+PI; //A为第三象限角elseRad=180; //A=180度}else{if(dy>0)Rad=90; //A=90度else if(dy<0)Rad=270; //A=270度elseMessageBox(_T("两点重合,无方位角"));}A=Rad_To_Dms(Rad); //将弧度转化为度分秒形式UpdateData(FALSE);}运行结果:输入两点坐标之后,单击计算,可得方位角,以上方位角表示的是45°00′0000276342″2)空间直角坐标系与大地坐标系的相互转换设计思路:大地坐标系转化为笛卡尔坐标系:首先通过已知的长半径a和扁率α求出偏心率e和卯酉圈曲率半径N;再根据下列公式可求得笛卡尔坐标。

X=(N+H)cosBcosLY=(N+H)cosBcosLZ=[N(1-e*e)+H]sinB笛卡尔坐标系转化为大地坐标系:过程见流程图界面设计:界面由6个文本框、6个静态框和4个命令按钮组成(具体见运行结果)主要代码:列出程序的代码,按文件依次列出。

注意代码的书写格式和注释文件ConCoordinateDlg.cpp#include"stdafx.h"#include"ConCoordinate.h"#include"ConCoordinateDlg.h"#include"math.h"……void CConCoordinateDlg::OnBnClickedCancel(){// TODO: 在此添加控件通知处理程序代码OnCancel();}const double a=6378137.0; //椭球长半径aconst double f=1/298.257223563; //扁率fconst double PI=3.1415926;void CConCoordinateDlg::OnBnClickedOk(){// TODO: 在此添加控件通知处理程序代码L=0;B=0;H=0;X=a;Y=0;Z=0;UpdateData(FALSE);//OnOK();}//将弧度转化成度分秒形式double Rad_To_Dms(double Rad){double dDeg,dDms; //十进制角度及度分秒格式角度,控制变量//用于存放度分秒三个值的变量int iDegree,iMin;double dSec;double dTmp;dDeg=Rad*180/PI; //弧度转化为度//度转化成度分秒iDegree=int(dDeg);dTmp=(dDeg-iDegree)*60;iMin=int(dTmp);dSec=(dTmp-iMin)*60;dDms=iDegree+double(iMin)/100+dSec/10000;return dDms;}//将度分秒形式转化为弧度double Dms_To_Rad(double dDms){int iDegree,iMin;double dSec; //分别用于存放度、分、秒值的变量double dDeg; //十进制角度,控制变量double dRad; //弧度iDegree=int(dDms); //截取度iMin=int((dDms-iDegree)*100); //截取分dSec=((dDms-iDegree)*100-iMin)*100; //获取秒dDeg=iDegree+double(iMin)/60+dSec/3600; //先把分秒转化成度,再相加 dRad=dDeg*PI/180; //转化为弧度return dRad;}void CConCoordinateDlg::OnBnClickedButton1(){// TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);//将度分秒转化成弧度double L_Rad,B_Rad; //弧度//将度分秒转化为弧度L_Rad=Dms_To_Rad(L);B_Rad=Dms_To_Rad(B);double e,N; //定义椭球偏心率e和卯酉圈曲率半径Ne=sqrt(2*f-f*f);N=a/sqrt(1-e*e*sin(B_Rad)*sin(B_Rad));X=(N+H)*cos(B_Rad)*cos(L_Rad);Y=(N+H)*cos(B_Rad)*sin(L_Rad);Z=(N*(1-e*e)+H)*sin(B_Rad);UpdateData(FALSE);}void CConCoordinateDlg::OnBnClickedButton2(){// TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);double L_Rad;double B_Rad=0.0; //弧度double e,N; //定义椭球偏心率e和卯酉圈曲率半径Ndouble H0; //循环中存储上一个H的变量double dH; //储存H增量值的变量e=sqrt(2*f-f*f);do//迭代循环求H及B{H0=H;N=a/sqrt(1-e*e*sin(B_Rad)*sin(B_Rad));B_Rad=atan(Z/sqrt(X*X+Y*Y)/(1-e*e*N/(N+H)));H=sqrt(X*X+Y*Y)/cos(B_Rad)-N;dH=H-H0;}while(fabs(dH)>0.00001);B= Rad_To_Dms(B_Rad); //求Bif(Y>0) //分情况讨论经度{if(X>0)L_Rad=atan(Y/X);else if(X<0)L_Rad=atan(Y/X)+PI;elseL_Rad=PI/2;}else if(Y<0){if(X>0)L_Rad=atan(Y/X);else if(X<0)L_Rad=atan(Y/X)-PI;elseL_Rad=-PI/2;}else{if(X>0)L_Rad=0;else if(X<0)L_Rad=PI;elseMessageBox(_T("该点在地轴上"));}L= Rad_To_Dms(L_Rad); //求LUpdateData(FALSE);}运行结果:如图所示,输入笛卡尔坐标X、Y、Z,单击“笛卡尔转大地”即可获得大地坐标L、B、H。

同理输入大地坐标,单击“大地转笛卡尔”即可获得笛卡尔坐标。

设计技巧:这个程序存在大量角度的转换,既需要将弧度化成度分秒,有需要将度分秒化成弧度,因此可事先为它们分别编写函数,程序中遇到坐标转换就可以直接调用,方便简洁。

3)后方交会计算设计思路:程序中设计度分秒形式与弧度的转换,可以编写一个将度分秒转化为弧度的函数函数,将观测值转化为弧度形式。

相关文档
最新文档