北邮c++实验 实验二
北邮程序设计实验报告
实验名称:程序设计实验实验时间:2023年X月X日实验地点:北邮计算机实验室一、实验目的1. 熟悉C语言编程环境,掌握基本的程序设计方法。
2. 通过实际编程,提高逻辑思维和问题解决能力。
3. 理解算法设计的重要性,掌握常用的算法设计方法。
二、实验内容本次实验主要分为以下几个部分:1. 编写一个计算两个整数相加的程序。
2. 编写一个计算两个整数相减的程序。
3. 编写一个计算两个整数相乘的程序。
4. 编写一个计算两个整数相除的程序(要求考虑除数为0的情况)。
5. 编写一个判断两个整数是否相等的程序。
三、实验步骤1. 打开C语言编程环境,创建一个新的项目。
2. 编写计算两个整数相加的程序:```c#include <stdio.h>int main() {int a, b, sum;printf("请输入两个整数:\n");scanf("%d %d", &a, &b);sum = a + b;printf("两个整数相加的结果为:%d\n", sum); return 0;}```3. 编写计算两个整数相减的程序:```c#include <stdio.h>int main() {int a, b, sub;printf("请输入两个整数:\n");scanf("%d %d", &a, &b);sub = a - b;printf("两个整数相减的结果为:%d\n", sub); return 0;}```4. 编写计算两个整数相乘的程序:```c#include <stdio.h>int main() {int a, b, mul;printf("请输入两个整数:\n");scanf("%d %d", &a, &b);mul = a b;printf("两个整数相乘的结果为:%d\n", mul);return 0;}```5. 编写计算两个整数相除的程序(考虑除数为0的情况):```c#include <stdio.h>int main() {int a, b, div;printf("请输入两个整数:\n");scanf("%d %d", &a, &b);if (b == 0) {printf("除数不能为0,请重新输入。
北邮数据结构试验报告试验二含源码
数据结构实验报告实验名称:实验二一一栈和队学生姓名:申宇飞班级:班内序03号:学号:日期2013年11月18日:1- 实验要求1.1实验目的:通过选择卞面五个题目之一进行实现,掌握如卞内容:>进一步掌握指针、模板类、异常处理的使用>掌握栈的操作的实现方法>掌握队列的操作的实现方法>学习使用栈解决实际问题的能力>学习使用队列解决实际问题的能力1.2实验内容题目1根据栈和队列的抽象数据类型的定义,按要求实现一个栈或一个队列。
要求:1、实现一个共享栈2、实现一个链栈3、实现一个循环队列4、实现一个链队列编写测试mainO函数测试线性表的正确性。
2.程序分析2.1存储结构链栈:栈的链式存储结构,其实现原理类似于单链表,结点结构与单链表相同,但链栈在实现时直接采用栈顶指针指向栈顶元素。
第]页北京邮电大学信息与通信工程学院data next栈顶栈底关键算法分析链栈:一、入栈操作算法步骤:自然语言描述:1、建立新结点2、给p结点的数据域赋值3、修改p结点的指针域,将其指向栈顶结点4、栈顶指针指向p结点伪代码描述:1)Node<T> * s = new Node<T>;2)p->data = x;3)p->next = top;4)top = p;二、出栈操作算法步骤:自然语言描述:1、判断栈是否为空2、保存栈顶结点的数据域3、定义指针p指向栈顶结点4、栈顶指针指向下一个结点5、释放p结点伪代码描述:1)if(EmptyO)throw" F溢“;2)T x = top->data;3)Node<T> * p = top;4)top = top->next;5)elete p;三、链栈的取栈顶元素算法步骤:自然语言描述:1、判断栈是否为空第3页2、定义指针p指向栈顶结点3、返回栈顶元素的值,不删除伪代码描述1)if(EmptyO)tlu'ow H卜溢";2)Node<T>*p=top;3)cout«p->data;四、遍历链栈元素算法步骤:自然语言描述:1、定义指针p指向栈顶结点2、判断栈是否为空3、返回栈元素的值4、把下一个指针的值赋给p 伪代码描述:1)Node<T>*p = top;2)while(p !=NULL)3)cout« p->data ;4)p = p->next;五、析构函数算法步骤:自然语言描述:1、判断栈顶指针是否为空2、定义指针p指向栈顶结点3、把下一个指针的值赋给栈顶指针4、释放要释放的指针伪代码描述:1)while(top)2)strnct Node <T> * p = top;3)top = top->next;4)deletep; 时间复杂的:0(1)。
北邮c++小学期实验报告
面向对象程序设计与实践c++实验总结报告实验一简单C++程序设计1.猜价格游戏编写C++程序完成以下功能:(1)假定有一件商品,程序用随机数指定该商品的价格(1-1000的整数);(2)提示用户猜价格,并输入:若用户猜的价格比商品价格高或低,对用户作出相应的提示;(3)直到猜对为止,并给出提示。
题目1-1总结:1)本题需要随机生成整数,我开始只使用rand(),即price=rand();来生成随机整数但这样只是一个伪随机函数,每一次重新打开程序生成的数都是一致的。
因此加入时间随机种子:srand((unsigned)time(NULL))2)个人改进1:定义最大值最小值,在每次猜测数字时显示应猜的数字范围,作为提示。
想到这个是因为有一次猜了很多遍都没猜到,一时突然忘记猜到什么范围,然后往前翻猜过的数字和大小感觉相当麻烦,所以就添上了应猜范围,方便再一次猜数。
3)个人改进2:本来有一个判断条件判断生成的随机数是不是1~1000范围内,而后更进为随机生成整数对1000取余得到0~999整数,再+1得到1~1000的整数。
实验二类与对象1.矩形编写C++程序完成以下功能:(1)定义一个Point类,其属性包括点的坐标,提供计算两点之间距离的方法;(2)定义一个矩形类,其属性包括左上角和右下角两个点,提供计算面积的方法;(3)创建一个矩形对象,提示用户输入矩形左上角和右下角的坐标;(4)观察矩形对象以及Point类成员的构造函数与析构函数的调用;(5)计算其面积,并输出。
题目2-1总结:1)这一题是第一次用到class类的题目,开始并不明白为何要定义class,然后还需要区分public和private。
而后来去图书馆借了书看到c++最大特色就是可以封装,定义私有属性和公有函数,以确保有些函数和参数不会被轻易访问到,降低错误率。
2)class类在最起初定义时总是在class Rectangle那一行报错,经查书发现class定义最后一个大括号后有分号,开始并没有加上。
北邮scilab_通信原理软件实验报告
信息与通信工程学院通信原理软件实验报告实验二时域仿真精度分析一、实验目的1. 了解时域取样对仿真精度的影响2. 学会提高仿真精度的方法二、实验原理一般来说,任意信号s(t)是定义在时间区间(-无穷,+无穷)上的连续函数,但所有计算机的CPU 都只能按指令周期离散运行,同时计算机也不能处理这样一个时间段。
为此将把s(t)按区间[-T/2 ,+T/2 ]截短为按时间间隔dert T均匀取样,得到的取样点数为N=T/dert T.仿真时用这个样值集合来表示信号s(t)。
Dert T反映了仿真系统对信号波形的分辨率,越小则仿真的精确度越高。
据通信原理所学,信号被取样以后,对应的频谱是频率的周期函数,其重复周期是1/t;。
如果信号的最高频率为那么必须有才能保证不发生频域混叠失真,这是奈奎斯特抽样定理。
设则称为仿真系统的系统带宽。
如果在仿真程序中设定的采样间隔是,那么不能用此仿真程序来研究带宽大于这的信号或系统。
换句话说,就是当系统带宽一定的情况下,信号的采样频率最小不得小于2*Bs,如此便可以保证信号的不失真,在此基础上时域采样频率越高,其时域波形对原信号的还原度也越高,信号波形越平滑。
也就是说,要保证信号的通信成功,必须要满足奈奎斯特抽样定理,如果需要观察时域波形的某些特性,那么采样点数越多,可得到越真实的时域信号。
三、实验步骤1.将正弦波发生器模块、示波器模块、时钟模块按下图连接:四、实验结果对比分析时钟设置0.01,得到的结果如下:时钟设置0.3,以后得到的结果如下:五、思考题(1)观察分析两图的区别,解释其原因。
答:因为信号周期是1,而第一个图的采样周期是0.01,所以一个周期内能采样100个点,仿真出来的波形能较精确地显示成完整波形,而第二个图采样周期是0.3,所以一个周期内只有三个采样点,故信号失真了。
(2)将示波器的控制时钟的period的参数改为0.5,观察仿真结果,分析其原因。
结果如下:可见,此时根本没有信号显示了。
北邮数据结构实验报告
北邮数据结构实验报告摘要:本报告基于北邮数据结构实验,通过实际操作和实验结果的分析,总结和讨论了各实验的目的、实验过程、实验结果以及相关的问题和解决方法。
本报告旨在帮助读者了解数据结构实验的基本原理和应用,并为今后的学习和研究提供参考。
1. 实验一:线性表的操作1.1 实验目的本实验旨在掌握线性表的基本操作以及对应的算法实现,包括插入、删除、查找、修改等。
1.2 实验过程我们使用C++语言编写了线性表的相关算法,并在实际编程环境下进行了测试。
通过插入元素、删除元素、查找元素和修改元素的操作,验证了算法的正确性和效率。
1.3 实验结果经过测试,我们发现线性表的插入和删除操作的时间复杂度为O(n),查找操作的时间复杂度为O(n),修改操作的时间复杂度为O(1)。
这些结果与预期相符,并反映了线性表的基本特性。
1.4 问题与解决方法在实验过程中,我们遇到了一些问题,例如插入操作的边界条件判断、删除操作时的内存释放等。
通过仔细分析问题,我们优化了算法的实现,并解决了这些问题。
2. 实验二:栈和队列的应用2.1 实验目的本实验旨在掌握栈和队列的基本原理、操作和应用,并进行实际编程实现。
2.2 实验过程我们使用C++语言编写了栈和队列的相关算法,并在实际编程环境下进行了测试。
通过栈的应用实现表达式求值和逆波兰表达式的计算,以及队列的应用实现图的广度优先遍历,验证了算法的正确性和效率。
2.3 实验结果经过测试,我们发现栈的应用可以实现表达式的求值和逆波兰表达式的计算,队列的应用可以实现图的广度优先遍历。
这些结果证明了栈和队列在实际应用中的重要性和有效性。
2.4 问题与解决方法在实验过程中,我们遇到了一些问题,例如中缀表达式转后缀表达式的算法设计、表达式求值的优化等。
通过查阅资料和与同学的讨论,我们解决了这些问题,并完善了算法的实现。
3. 实验三:串的模式匹配3.1 实验目的本实验旨在掌握串的基本操作和模式匹配算法,并进行实际编程实现。
数据结构_迷宫求解_实验报告 北邮
数据结构实验报告实验名称:实验二——利用栈结构实现迷宫求解问题学生姓名:班级:班内序号:学号:日期:2012年11月19日一、实验目的1、进一步掌握指针、模板类、异常处理的使用2、掌握栈的操作的实现方法3、掌握队列的操作的实现方法4、学习使用栈解决实际问题的能力5、学习使用队列解决实际问题的能力二、实验要求:利用栈结构实现迷宫求解问题。
迷宫求解问题如下:心理学家把一只老鼠从一个无顶盖的大盒子的入口赶进迷宫,迷宫中设置很多隔壁,对前进方向形成了多处障碍,心理学家在迷宫的唯一出口放置了一块奶酪,吸引老鼠在迷宫中寻找通路以到达出口,测试算法的迷宫如下图所示。
提示:1、可以使用递归或非递归两种方法实现2、老鼠能够记住已经走过的路,不会反复走重复的路径3、可以自己任意设置迷宫的大小和障碍4、使用“穷举求解”的方法三、程序分析1、存储结构栈存储结构;示意图;2、关键算法分析A、绘制迷宫;伪代码:1、输出迷宫的大小及全部设置为障碍;2、根据键盘的输入绘制迷宫的路线,起始点和终点;void draw()//绘制迷宫障碍{k=getch();switch(int(k)){case 105://上if(by>5){by--;j--;}break;case 107://下if(by<M+4){by++;j++;}break;case 106://左if(bx>2){bx=bx-2;i--;}break;case 108://右if(bx<2*N){bx=bx+2;i++;}break;case 114://'R'路map[i][j]=0;cout<<".";break;case 119://'W'墙map[i][j]=-3;cout<<"■";break;case 115://'S'起点s[0].x=i;//起点入栈s[0].y=j;top=1;map[i][j]=-1;cout<<k;break;case 101://'E'终点map[i][j]=-2;cout<<k;break;}gotoxy(bx,by);}B、路径寻找伪代码;1、向某一方向查找是否有路;2、如有遍历一下栈,看是否已经进栈,一进栈就舍弃,寻求下一个;无就让其进栈。
北邮物理实验报告
北邮物理实验报告北邮物理实验报告引言:物理实验是学习物理知识的重要环节,通过实际操作和观察,我们可以更深入地理解和应用所学的理论知识。
本文将介绍我在北邮进行的物理实验,并对实验结果进行分析和讨论。
实验一:测量重力加速度实验目的:通过自由落体实验测量地球上的重力加速度。
实验装置:简易自由落体装置、计时器、测量尺。
实验步骤:将自由落体装置固定在垂直方向上,从不同高度释放小球,用计时器测量小球下落所需的时间,并用测量尺测量下落的距离。
实验结果:通过多次实验,我们得到了不同高度下小球下落所需的时间和下落距离的数据。
数据处理:根据自由落体运动的公式,我们可以得到重力加速度的值,并与理论值进行比较。
实验讨论:通过与理论值的比较,我们可以评估实验误差的大小,并分析可能的原因。
同时,我们还可以探讨重力加速度与高度、质量等因素的关系。
实验二:测量光的折射率实验目的:通过测量光在不同介质中的折射角和入射角,计算出光的折射率。
实验装置:光源、平面镜、凸透镜、直尺、三棱镜。
实验步骤:将光源放置在透明介质中,通过平面镜和凸透镜使光线尽可能平行,然后让光线依次通过三棱镜。
利用直尺测量光线的入射角和折射角。
实验结果:通过实验测量得到了不同介质中光的入射角和折射角的数据。
数据处理:根据折射定律和光的折射率公式,我们可以计算出光的折射率,并与理论值进行比较。
实验讨论:在实验过程中,我们还可以观察到光的色散现象,并探讨折射率与介质的性质、入射角等因素的关系。
实验三:测量电流和电压实验目的:通过测量电流和电压的关系,验证欧姆定律。
实验装置:电源、电阻、导线、电流表、电压表。
实验步骤:将电源、电阻、导线连接在一起,用电流表测量电路中的电流,用电压表测量电路中的电压。
实验结果:通过实验测量得到了不同电压下的电流数据。
数据处理:根据欧姆定律,我们可以绘制出电流和电压的关系曲线,并通过斜率计算电阻的值。
实验讨论:在实验过程中,我们还可以探讨电流和电压的变化规律,以及电阻对电路的影响。
北邮小学期c++实验报告and程序文件
C++实验课总结张涛实验一:简单c++程序设计一、1、猜价格游戏编写C++程序完成以下功能:(1)假定有一件商品,程序用随机数指定该商品的价格(1-1000的整数);(2)提示用户猜价格,并输入:若用户猜的价格比商品价格高或低,对用户作出相应的提示;(3)直到猜对为止,并给出提示。
#include<iostream>#include<time.h>using namespace std;//使用命名空间std.int main(){srand(time(NULL));//将时钟数作为随机数种子int price,guess;price = rand() % 1000 + 1;//取余,获得1~1000的随机数cout << "please input the price:" << endl;do{cin >> guess;//记录玩家所输入数值if(guess > price)cout << "The price is lower than your guess,please input the price again:" << endl;if(guess < price)cout << "The price is higher than your guess,please input the price again:" << endl;//给予玩家比较大小的提示}while (guess != price);//循环结构cout << "The price you give is right.It cost " << price << "." <<endl;//获得正确答案system("pause");return 0;}2、计算N 以内的所有素数编写C++程序完成以下功能:(1)提示用户输入N;(2)计算出从2到N之间的所有素数;(3)将结果保存在一个文本文件中。
C++实验2报告
北京电子科技学院(BESTI)实验报告课程:面向对象程序设计班级:姓名:学号:成绩:指导教师:徐日实验日期:2011.10.22 实验密级:预习程度:实验时间:12:00仪器组次:801机房A43必修/选修:选修实验序号: 2实验名称:C++基础编程实验目的与要求:1、使学生掌握内联函数、输入输出流控制编程;2、培养学生具有运用C++语言编程解决问题的能力,提高学生的计算机编程能力;3、引导和培养学生具有认真严谨的实验态度和勇于时间的学习精神。
实验仪器:名称型号数量微机Lenovo ThinkCentre 80001一、实验内容第一题1.计算显示立方值关键提要:内联函数,输出流控制用内联函数编程,计算并显示0.5,1,1.5,2,3,…..,19.5,20,……的立方值。
(终止值请自行指定,但应>20)要求:1.主函数中输出提示信息,主函数输出计算结果,每行输出3个立方值。
2.输出计算结果时要设定输出格式,各列数据要紧凑对齐,样式为:0.5立方值=0.125 ||1立方值=1||……3.计算立方值的函数用内联函数编程实现。
4.为便于理解题意,程序执行结果可参考下图。
编程设计思想:由终止值确定最大的有多少位数,最大就是(终止值-0.5)的三次方,它的位数最多。
使用setprecision()的时候就把确定的位数带入括号当中。
内联函数使用的时候,分别带入就行了。
如果是3的倍数的时候,则换行。
编程如下:#include<iostream.h>#include<iomanip.h>inline double cube(double x){return x*x*x;}//设置一个内联函数//void main(void){double a=0.5;int n;int b;int c;int d=3;//因为一个小数位数最多的只是有3个小数//cout<<"输入终止值(大于等于20的整数)"<<endl;cin>>b;cout<<"下面程序输出0,0.5,1,1.5,......"<<b<<"的立方值:"<<endl;c=cube(b);//带入内联函数//while(c>0){c=c/10;d++;}//判断一个数的位数//for(n=1;n<=(b*2);n++){cout<<setiosflags(ios::right)<<setw(9)<<a<<"立方值"<<"=";//打印并右对齐//cout<<resetiosflags(ios::right)<<setiosflags(ios::l eft)<<setw(9)<<setprecision(d)<<cube(a)<<resetios flags(ios::left);//先重新右对齐在设置左对齐//if(n%3!=0)//没有3个的时候打印||//{cout<<"||";}if(n%3==0)//当有3个的时候就换行//{cout<<endl;}a+=0.5;}}结果如下:输入终止值(大于等于20的整数)34下面程序输出0,0.5,1,1.5,......34的立方值:0.5立方值=0.125 || 1立方值=1 || 1.5立方值=3.3752立方值=8 || 2.5立方值=15.625 || 3立方值=273.5立方值=42.875 || 4立方值=64 ||4.5立方值=91.1255立方值=125 || 5.5立方值=166.375 || 6立方值=2166.5立方值=274.625 || 7立方值=343 ||7.5立方值=421.8758立方值=512 || 8.5立方值=614.125 || 9立方值=7299.5立方值=857.375 || 10立方值=1000 || 10.5立方值=1157.62511立方值=1331 || 11.5立方值=1520.875 || 12立方值=172812.5立方值=1953.125 || 13立方值=2197 || 13.5立方值=2460.37514立方值=2744 || 14.5立方值=3048.625 || 15立方值=337515.5立方值=3723.875 || 16立方值=4096 || 16.5立方值=4492.12517立方值=4913 || 17.5立方值=5359.375 || 18立方值=583218.5立方值=6331.625 || 19立方值=6859 || 19.5立方值=7414.87520立方值=8000 || 20.5立方值=8615.125 || 21立方值=926121.5立方值=9938.375 || 22立方值=10648 || 22.5立方值=11390.62523立方值=12167 || 23.5立方值=12977.875|| 24立方值=1382424.5立方值=14706.125|| 25立方值=15625 || 25.5立方值=16581.37526立方值=17576 || 26.5立方值=18609.625|| 27立方值=1968327.5立方值=20796.875|| 28立方值=21952 || 28.5立方值=23149.12529立方值=24389 || 29.5立方值=25672.375|| 30立方值=2700030.5立方值=28372.625|| 31立方值=29791 || 31.5立方值=31255.87532立方值=32768 || 32.5立方值=34328.125|| 33立方值=3593733.5立方值=37595.375|| 34立方值=39304 ||Press any key to continue第二题2.字符串中找数字关键提要:输入输出流控制编写程序,将用户输入的由数字字符和非数字字符组成的字符串中的数字提取出来,例如输入“asd12345rt456,fg9crp”,则产生的数字分别是12345,456和9输出这些数字字符。
数字电路实验报告_北邮
一、实验目的本次实验旨在通过实践操作,加深对数字电路基本原理和设计方法的理解,掌握数字电路实验的基本步骤和实验方法。
通过本次实验,培养学生的动手能力、实验技能和团队合作精神。
二、实验内容1. 实验一:TTL输入与非门74LS00逻辑功能分析(1)实验原理TTL输入与非门74LS00是一种常用的数字逻辑门,具有高抗干扰性和低功耗的特点。
本实验通过对74LS00的逻辑功能进行分析,了解其工作原理和性能指标。
(2)实验步骤① 使用实验箱和实验器材搭建74LS00与非门的实验电路。
② 通过实验箱提供的逻辑开关和指示灯,验证74LS00与非门的逻辑功能。
③ 分析实验结果,总结74LS00与非门的工作原理。
2. 实验二:数字钟设计(1)实验原理数字钟是一种典型的数字电路应用,由组合逻辑电路和时序电路组成。
本实验通过设计一个24小时数字钟,使学生掌握数字电路的基本设计方法。
(2)实验步骤① 分析数字钟的构成,包括分频器电路、时间计数器电路、振荡器电路和数字时钟的计数显示电路。
② 设计分频器电路,实现1Hz的输出信号。
③ 设计时间计数器电路,实现时、分、秒的计数。
④ 设计振荡器电路,产生稳定的时钟信号。
⑤ 设计数字时钟的计数显示电路,实现时、分、秒的显示。
⑥ 组装实验电路,测试数字钟的功能。
3. 实验三:全加器设计(1)实验原理全加器是一种数字电路,用于实现二进制数的加法运算。
本实验通过设计全加器,使学生掌握全加器的工作原理和设计方法。
(2)实验步骤① 分析全加器的逻辑功能,确定输入和输出关系。
② 使用实验箱和实验器材搭建全加器的实验电路。
③ 通过实验箱提供的逻辑开关和指示灯,验证全加器的逻辑功能。
④ 分析实验结果,总结全加器的工作原理。
三、实验结果与分析1. 实验一:TTL输入与非门74LS00逻辑功能分析实验结果表明,74LS00与非门的逻辑功能符合预期,具有良好的抗干扰性和低功耗特点。
2. 实验二:数字钟设计实验结果表明,设计的数字钟能够实现24小时计时,时、分、秒的显示准确,满足实验要求。
北京邮电大学信息论实验2
|������������ − ������������������������ | < ������������������
i=1
式中,p 为第 n 步转移之后的分布概率,mem为存储的 n-1 步的分布概率,CTL 为控制 阈值,可取 0.0000001。
实验结论:
在运行程序之后,我总结了以下表: 起始分布概率 [1,0,0,0] [1/2,1/2,0,0] [1/3,1/3,1/3,0] [1/4,1/4,1/4,1/4] 进入平稳之前的转移步数 57 53 52 15
北京邮电大学信息与通信工程学院
信息论实验
信息论实验· 第二次实验报告
题目一: 实验步骤: (程序见附件)
我首先计算该马氏源的平稳分布,求得分布概率π为(5/14,1/7,1/7,5/14) ,然后随机设 定一个初始概率, 重复迭代计算下一步转移之后的分布概率, 直到本步分布概率与上一步分 布概率之差的绝对值小于控制阈值 CTL,即可跳出循环,返回迭代步数。 判别公式:
由此看来,这三年的粮食收成尚可,欠收的概率较小,收成有波动。 使用一阶马氏链预测的长期粮食收成情况: 丰收 0.3655 平收 0.3529 欠收 0.2816
通过长期预测,我们可以认为:该地区适合做粮食产业,因为丰收+平收的概率已经超 过 70%,未来的收益基本有保障。 使用二阶马氏链预测的长期粮食收成情况:
������������ −1 ∗ ������ = ������������ −1
最后分别求得两个马氏源的平稳分布(出预测。方法是迭代计算,然后将相邻两步的概率差值与控制阈值比较,当小 于控制阈值,跳出迭代。
实验结论:
求得的一步转移概率矩阵: 0.2000 0.4667 0.3333 P = 0.5385 0.1538 0.3077 0.3636 0.4545 0.1818 二步转移概率矩阵: 0.4125 0.3166 0.2709 ������2 = 0.3024 0.4148 0.2828 0.3836 0.3223 0.2941 对于未来三年的粮食收成概率预测: 年份 1 2 3 丰收 0.5385 0.3024 0.3867 平收 0.1538 0.4148 0.3335 欠收 0.3077 0.2828 0.2799
北邮通信网实验二报告
通信网理论基础实验报告实验二:端间最短路径算法的仿真实现27班项明钧201321073127班唐睿2013210742一、实验目的通信网络中为传输信息,需要求解网络中端点之间的最短距离和路由。
此时网络可以用图,)G V E =(来表示,每条边(,)i j 的权,i j w 可为该边的距离、成本或容量等物理意义。
端间最短径问题主要分为两种情况:寻找指定端至任意其它端之间的最短距离和路由,可以使用Dijkstra 算法解决;寻找任意两端之间的最短距离和路由, 使用Floyd 算法解决。
Dijkstra 算法为标号置定法,通过依次置定指定端与当前端的最短距离和回溯路由来实现;Floyd 算法为标号修正法,通过初始化图的距离矩阵和路由矩阵、并在迭代过程中不断刷新最短距离和路由信息,直至算法结束才能求出任意两点间的最短距离矩阵和前向(或反向)路由矩阵。
本次实验要求利用MATLAB 分别实现Dijkstra 算法和Floyd 算法,针对输入的邻接距离矩阵,计算图中任意两点间的最短距离矩阵和路由矩阵,且能查询任意两点间的最短距离和路由。
二、实验原理2.1 Dijkstra 算法描述如下:D 算法的每个端点i v 的标号为(,)i l λ,其中i λ表示1v 到i v 的距离,而l 为端点是1v 到i v 最短路径的最后一个端点。
图G V E =(,)的每一边上有一个权()0w e ≥。
D0:初始(0)1{}X v =,记10λ=,设1v 的标号为1(,1)λ。
D1:对任一边()()()(,)()(,)k k k i l i l X v X v X ∈Φ∈∉反圈,计算i il w λ+的值。
在()()k X Φ中选一边,设为00()()00(,)(,)k k i l i l v X v X ∈∉。
使000()(,)()()min k i i l i il i l X w w λλ∈Φ+=+,并令00l i i l w λλ=+,并且0l v 的标号为0,l i λ()。
北邮高级计算机系统结构实验二三四五
实验二指令流水线相关性分析·实验目的通过使用WINDLX模拟器,对程序中的三种相关现象进行观察,并对使用专用通路,增加运算部件等技术对性能的影响进行考察,加深对流水线和RISC 处理器的特点的理解。
·实验原理:指令流水线中主要有结构相关、数据相关、控制相关。
相关影响流水线性能。
·实验步骤一.使用WinDLX模拟器,对Fact.s做如下分析:(1)观察程序中出现的数据/控制/结构相关。
指出程序中出现上述现象的指令组合。
(2)考察增加浮点运算部件对性能的影响。
(3)考察增加forward部件对性能的影响。
(4)观察转移指令在转移成功和转移不成功时候的流水线开销。
·实验过程一.使用WinDLX模拟器,对Fact.s做如下分析:浮点加、乘、除部件都设置为1,浮点数运算部件的延时都设置为4,如图1:图1 初始设置将fact.s和input.s加载至WinDLX中,如图2示。
图2 加载程序1.观察程序中出现的数据/控制/结构相关;指出程序中出现上述现象的指令组合。
1)数据相关点击F7,使程序单步执行,当出现R-Stall时停止,运行过程中出现下图3所示,输入整数6。
图3 输入整数6打开Clock Diagram,可以清楚的看到指令执行的流水线如图4所示。
图4 指令流水线双击第一次出现R-Stall的指令行,如图5所示。
图5 指令详细信息对以上出现的情况分析如下:程序发生了数据相关,R-Stall(R-暂停)表示引起暂停的原因是RAW。
lbu r3,0×0(r2)要在WB周期写回r3中的数据;而下一条指令seqi r5,r3,0×a要在intEX周期中读取r3中的数据。
上述过程发生了WR冲突,即写读相关。
为了避免此类冲突,seq r5,r4,0×a的intEX指令延迟了一个周期进行。
由此,相关指令为:2)控制相关由图6可以看出,在第4时钟周期:第一条指令处于MEM段,第二条命令处于intEX段,第三条指令出于aborted状态,第四条命令处于IF段。
北邮数据结构实验 第二次实验 图
数据构造实验报告1.实验要求〔1〕实验目的通过选择下面5个题目之一进展实现,掌握如下内容:➢掌握图根本操作的实现方法➢了解最小生成树的思想和相关概念➢了解最短路径的思想和相关概念➢学习使用图解决实际问题的能力(2)实验内容根据图的抽象数据类型的定义,使用邻接矩阵或邻接表实现一个图。
图的根本功能:1、图的建立2、图的销毁3、深度优先遍历图4、广度优先遍历图5、使用普里姆算法生成最小生成树6、使用克鲁斯卡尔算法生成最小生成树7、求指定顶点到其他各顶点的最短路径8、其他:比方连通性判断等自定义操作编写测试main()函数测试图的正确性2. 程序分析2.1 存储构造图:(1)带权值的无向图V09 6V1 2 V2(2)带权值的有向图V063 9 4V1 2 V2 2.2 关键算法分析〔1〕深度优先遍历int visited[MAXSIZE]={false};template<class T>void MGraph<T>::DFS(int v){cout<<vertex[v];visited[v]=true;for(int j=0;j<vNum;j++)if(arc[v][j]==1&&!visited[j])DFS(j);}时间复杂度:O(n²)〔2〕广度优先遍历int queue[MAXSIZE];int f=0,r=0;cout<<vertex[v];visit[v]=true;queue[++r]=v;while(f!=r){v=queue[++f];for(int j=0;j<vNum;j++){if(arc[v][j]==1&&!visit[j]){cout<<vertex[j];visit[j]=true;queue[++r]=j;}时间复杂度:O〔n²〕〔3〕普利姆算法int adjvex[MAXSIZE];int lowcost[MAXSIZE];int MAX=10000;template<class T>int mininum(MGraph<T> G,int a[]){int min=MAX;int k=0;for(int i=0;i<G.vNum;i++){if(a[i]!=0&&a[i]<min)//寻找U-{V-U}中边权值最小的顶点{min=a[i];k=i;}}return k;}template<class T>void MGraph<T>:: Prim(MGraph G){for(int i=0;i<G.vNum;i++){adjvex[i]=0;lowcost[i]=G.arcs[0][i];}lowcost[0]=0;//初始化U={vo}for(int i=1;i<G.vNum;i++){int k=mininum(G,lowcost);//求下一个边权值最小的邻接点 cout<<'V'<<adjvex[k]<<"->V"<<k<<endl;lowcost[k]=0;for(int j=0;j<G.vNum;j++){if(lowcost[j]!=0&&G.arcs[k][j]<lowcost[j]){lowcost[j]=G.arcs[k][j];adjvex[j]=k;}}}}时间复杂度:O(n²)〔4〕克鲁斯卡尔算法template<class T>void GenSortEdge(MGraph<T> G,VEdge E[])//获取EdgeList{int k=0,i,j;for(i=0;i<G.vNum;i++)//边赋值for(j=i;j<G.vNum;j++)if(G.arcs[i][j]!=MAX){E[k].fromV=i;E[k].endV=j;E[k].weight=G.arcs[i][j];k++;}for(i=0;i<G.arcNum-1;i++){for(j=i+1;j<G.arcNum;j++)if(E[i].weight>E[j].weight){VEdge t=E[i];E[i]=E[j];E[j]=t;}}}const int MAX_VERTEXT=20;template<class T>void MGraph<T>:: Kruskal(VEdge E[],int n,int e){int vset[MAX_VERTEXT];for(int i=0;i<n;i++) vset[i]=i;//初始化vsetint k=0,j=0;while(k<n-1){int m=E[j].fromV,n=E[j].endV;int sn1=vset[m];//m所属的集合int sn2=vset[n];//n所属的集合if(sn1!=sn2){cout<<'V'<<m<<"->V"<<n<<endl;k++;for(int i=0;i<n;i++){if(vset[i]==sn2)//集合编号为sn2的全部改为sn1vset[i]=sn1;时间复杂度:O(n²)〔5〕求最短路径,连通性判断int dist[MAXSIZE][MAXSIZE];int path[MAXSIZE][MAXSIZE];template<class T>void Floyd(MGraph<T> G){for(int i=0;i<G.vNum;i++) //寻找最短路径for(int j=0;j<G.vNum;j++){dist[i][j]=G.arcs[i][j];if(dist[i][j]!=MAX_VALUE)path[i][j]=i;elsepath[i][j]=-1;}for(int k=0;k<G.vNum;k++)for(int i=0;i<G.vNum;i++)for(int j=0;j<G.vNum;j++)if(dist[i][k]+dist[k][j]<dist[i][j])//更新迭代数组Disk[][]{dist[i][j]=dist[i][k]+dist[k][j];path[i][j]=k;}cout<<"任意两点间的最短路径长度(以矩阵表示〕:"<<endl;int l=1;for(int i=0;i<G.arcNum;i++)for(int j=0;j<G.arcNum;j++){cout<<dist[i][j]<<" ";l++;if(l>G.arcNum) {cout<<endl;l=1;}}}时间复杂度:O(n³)3. 程序运行结果〔1〕流程图:初始化带权值的无向图深度优先遍历,广度优先遍历用普利姆算法求最小生成树用克鲁斯卡尔算法求最小生成树初始化带权值的有向图用Floyd算法求任意两点间最短路径,并判断连通性删除图〔2〕本程序所用的图带权值的无向图V09 6V1 2 V2带权值的有向图V063 9 4V1 2 V2〔3〕程序结果4. 总结〔1〕遇到的问题:私有数据访问权的问题,在编程时应该注意〔2〕心得体会:通过这次实验,我掌握了图根本操作的实现方法,了解最小生成树的思想和相关概念,了解最短路径的思想和相关概念等等。
北京邮电大学 电磁兼容实验报告
电磁兼容原理
CST仿真实验报告
2016年5月9日
学院:电子工程学院
姓名:刘博闻
学号:2013211049
班级:2013211209
实验一:电磁性耦合
1.实验要求:
已知:U1=10V、f=10Mhz、导线半径r=1mm、线间d=20mm、导线离地高度h=10cm、现场L=1m。
1)R=50Ω
2)R=1MΩ
3)
分别求导线2上的干扰电压公式如下:
2.实验步骤
第一问:
1)新建工程
2)创建地板
3)创建两条铜质导线
4)添加电阻(3个)
5)添加信号源
6)添加一段直线以便采电压值
7)设定信号的频率电压等参数
第二问:
1)采用与第一问相同方式建立地面,导线,信号源,电阻,
和采样点。
3.实验结果
第一问:
1)信号源电压
2)Energy
3)采样处的signal
4)采样处的信号电压(DB)
第二问:
1)信号源电压
2)Energy
3)采样点处的signal
4)采样处的信号电压(DB)
实验二:屏蔽腔上孔的影响
1.实验要求
计算:屏蔽腔上孔对屏蔽效能的影响,取频率f=1000Mhz。
公式和图如下:
2.实验步骤
1)建立盒子(铜材质)
效果如下图:
11
2)在盒子上开洞
效果如下图:
12
3)设定端口(共7个,盒外一个,盒内6个)用来监测信号
3.实验结果
仿真得到端口间的S参数图,由S参数可知信号从盒外到盒内各处的衰减情况
13。
北邮信通C++实验二
1.1#include <iostream>using namespace std;void main() //主函数,不返回任何信息{ //函数体开始int x,y; //定义整型变量x,ycin>>x>>y; //输入x,ycout<<!(y==x/2)<<endl; //判断y是否等于x/2,然后进行非运算cout<<(y!=x%3)<<endl;cout<<(x>0&&y<0)<<endl;cout<<(x!=y||x>=y)<<endl;y=x--+1; //令y=x+1,后x=x-1cout<<(x<y?x++:y++)<<endl;cout<<endl; //换行}1.2#include<iostream>using namespace std;int main(){int x,y,s; //定义三个整型变量cout<<"请输入三个数x,y,s:"; //提示语cin>>x>>y>>s; //在键盘上输入变量的值x=(x+--y)*s++;cout<<"x="<<x<<endl<<"y="<<y<<endl<<"s="<<s<<endl; //输出结果cout<<endl;return 0;}1.3#include<iostream>using namespace std;void main(){int x,y,z;float ans;cout<<"请输入三个数x,y,z:";cin>>x>>y>>z;ans=(x*x+y*y+z*z)/(3.0*x*y*z);cout<<'\n'<<"计算结果="<<ans<<endl;cout<<endl;}1.4#include<iostream>using namespace std;void main(){int num;cout << "Please enter a decimal number:";cin >> num;cout << "Dec " << num << endl;cout << "Oct " << oct << num << endl;cout << "Hex " << hex << num << endl; }1.5#include<iostream>using namespace std;void main(){int n, m;cout << "请输入一个正整数n:" << endl;cout << "n=";cin >> n;m = n | 15;cout<< "结果为" << m<<endl;}2.1#include<iostream>using namespace std;void main(){char ch;cout << "请输入一个小写字母:";cin >> ch;cout << endl;ch -= 32;cout <<"其对应大写字母为:"<< ch << endl;}2.2#include<iostream>using namespace std;void main(){int a,b,c;cout << " 请输入一个整数:";cin >> a;cout << endl;b = a*a;c=a*a*a;cout <<" 此数的平方是="<<b<< endl;cout << " 此数的立方是=" << c << endl; }2.3#include<iostream>using namespace std;void main(){int a;cout << "请输入一个三位以上的整数:";cin >> a;cout << endl;a %= 100;a =( a - a % 10)/10;cout << "十位数数字为:" << a << endl; }2.4#include<iostream>using namespace std;void main(){int a,b,c,n;cout << "请输入一个三位正整数:";cin >> n;cout << endl;a = n / 100;b =( n % 100)/10;c = n % 10;cout << "逆转数为:" << c<<b<<a << endl; }2.5#include<iostream>#include<cmath>using namespace std;void main(){const double PI = 3.1415926;double a,sina, cosa,tana;cout << "请输入一个锐角:";cin >> a;cout << endl;a = a / 180 * PI;sina = sin (a); cosa = cos(a); tana = tan(a);cout << "sina=" << sina << endl;cout << "cosa=" << cosa << endl;cout << "tana=" << tana << endl;}2.6#include<iostream>#include<string>using namespace std;void main(){cout << "char:" << sizeof(char) << "字节\n";cout << "int:" << sizeof(int) << "字节\n";cout << "float:" << sizeof(float) << "字节\n";cout << "double:" << sizeof(double) << "字节\n";cout << "bool:" << sizeof(bool) << "字节\n";cout << "请输入一种数据类型:";string s1;cin>> s1;cout << endl;cout << s1<<":" << sizeof(s1) << endl;}。
北邮 操作系统 实验2 代码 进程管理 实验报告
main()
{
pid_t pid1,pid2;
pid1=fork();
if(pid1==0)
putchar('b');
else if(pid1<0)
return -1;
else
{
pid2=fork();
if(pid2==0)
putchar('c');
else if(pid2<0)
while(wait_mark!=0)
lockf(1,1,0);
printf("\nChild Process 1 is killed by Parent!\n");
lockf(1,0,0);
exit(0);
}
}
void waiting(){
sleep(5);
if(wait_mark!=0)
kill(getpid(),SIGALRM);
if(pid2==0)
printf("this is process c.\n");
else if(pid2<0)
return -1;
se printf("this is father process.\n");
}
}
运行结果
this is father process.
this is process c.
sleep(5);/*自我阻塞5秒*/
lockf(fd[1],0,0);
exit(0);
}
else{
while((pid2=fork())==-1);
if(pid2==0){
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.3 实验题一、基础题1.修改下列程序中的语法错误。
#include<iostream>using namespace std;void main(){ int choice=0;do{cout<<"请选择下面功能菜单"<<endl;cout<<" 1.调用浏览学生信息模块.\n"; cout<<" 2.调用查询学生信息模块.\n"; cout<<" 3.调用增加学生信息模块.\n"; cout<<" 4.调用修改学生信息模块.\n"; cout<<" 请输入数字(1~):\n";cin>>choice;if(choice<1||choice>4){cout<<"输入错误!重新输入:";continue;}switch(choice){ case 1:cout<<" 执行浏览学生信息程序";break;case 2 :cout<<" 执行查询学生信息程序";break;case 3 :cout<<" 执行增加学生信息程序";break;case 4 :cout<<" 执行修改学生信息程序";break;}}while(choice<0);cout<<endl;cout<<"程序结束!"<<endl;}2.在下列程序中填上适当的语句,打印200以内所有的质数,并对有注释标记的语句进行功能注释。
#include<iostream>#include<cmath>using namespace std;void main(){int i,j,k,flage;for(i=2;i<=200;i++){flage=1;k=sqrt(i); //对i进行开平方操作,并赋值给k for(j=2;j<=k;j++){if(i%j==0) //如果i对j取余的值为0,则执行下面的操作{flage=0;break;}}if(flage) //如果flage的值为非零,则执行下面的操作cout<<i<<" ";}}//sqrt内i必须是double类型,而题中定义为int类型,在2005的环境中无法执行。
所以无法截图,但是题中填的条件应该是对的。
3.修改下列程序,并输出结果,输出示例见图3-1。
要求:对循环体进行注释。
#include<iostream>using namespace std;void main(){int i,j=20;for(i=0;i<=5;i++)//i初始化为1,如果i<=5,则执行大括号里的语句,执行完后i进行自加,再判断i<=5是否成立。
直到条件不成立时跳出循环。
{cout<<"i="<<i<<" "<<"j="<<j<<" "<<endl;//依次输出i和j在各步循环中的值j=i+j*3;//将上一步j的3倍与i相加的和赋值给j}cout<<"i="<<i<<endl;cout<<"j="<<j<<endl;}图3-1 第3题的输出示例4.修改下列程序,输出结果如图3-2。
并对有注释标记的语句进行功能注释。
#include<iostream>using namespace std;void main(){int i,j;for(i=1;i<=9;i++) //i初始化为1,判断i<=9是否成立,成立则执行下面的语句,执行完后i自加,再判断i<=9是否成立。
直到不成立时跳出循环。
for(j=1;j<=i;j++) //j初始化为1,判断j<=i是否成立,成立则执行下面的语句,执行完后j自加,再判断j<=i是否成立。
直到不成立时跳出循环。
{cout<<j<<"*"<<i<<"="<<j*i<<" ";if(i==j)cout<<endl;//输出:回车换行}}图3-2 第4题的输出5.在下列程序中填上适当的语句,完成统计售货员一天的销售额和接待顾客的人数,并对有注释标记的语句进行功能注释。
输出示例见图3-3。
#include<iostream>using namespace std;void main(){char x;float sum=0,sum1,m,p=0;cout<<"请输入营业员的密码:";cin>>x;if(x=='1'||x=='2'||x=='3'||x=='4'||x=='5') //如果营业员的密码为1,2,3,4,5中的一个,执行下面的操作do//执行下面的do-while循环{ sum1=0;cout<<"请分别输入用户购买商品的价格"<<endl;;for(int i=1;i<=10000;i++) //i初始化为1,判断i<=10000是否为真,如果为真则执行大括号里面的循环,再i进行自加,判断i<=10000是否为真,直到不成立时跳出循环。
{ cout<<"第"<<i<<"商品价格为:";cin>>m; //请输入第i个商品的价格if(1111==m||0==m) //判断输入的m值为1111或者m值为0,则跳出循环。
如果括号内为非正,则继续循环。
break;sum1=sum1+m; //将上一次的sum1值与输入的m值相加,和赋值给sum1。
}cout<<endl;cout<<" 请付款为"<<sum1;cout<<endl;p++; //p进行自加sum=sum+sum1 ;}while(m);elsecout<<"请退出收银台,谢谢!" ;cout<<"今天商店的营业额为:"<<sum<<endl;cout<<"今天接待消费客人共:"<<p<<"人"<<endl;}图3-3 第5题的示例输出二、编程题1.设计一个程序,验证进入程序密码的正确性。
仿真让用户输入六位数字的密码,且提供三次输入机会,输入正确则显示欢迎使用财会报表程序,否则则显示密码错,重新输入!,连续输入三次错误后,则显示拒绝使用财会报表软件并结束程序。
#include<iostream>using namespace std;void main(){int n=111111,m; //假设设定的密码为111111cout<<"请您输入六位数字的密码:";cin>>m;for(int i=1;i<=2;i++){if(m==n)cout<<"密码输入正确!欢迎使用财会报表程序!"<<endl;else cout<<"密码输入错误!请重新输入!"<<endl;cout<<"请再次输入密码:";cin>>m;}{if(m==n)cout<<"您密码最后一次输入准确!欢迎使用财会报表程序!"<<endl;else cout<<"您已连续三次输入错误!您被拒绝使用财会报表软件!程序结束!"<<endl;}}2.设计一个程序,求出100到999以内的所有“水仙花数”。
“水仙花数”是指一个三位数,其各位数字的立方和恰好等于该数本身。
例如370=3*3*3+7*7*7+0,在999以内共有4个水仙数。
#include<iostream>using namespace std;void main(){int n=100,i,j,k;for(;n<=999;n++){i=(n-n%100)/100;j=(n-i*100)%10;k=(n-i*100-j)/10;if(i*i*i+j*j*j+k*k*k==n)cout<<n<<endl;}}3.设计一个程序,输入年、月,打印出该年该月的天数。
提示:每年的1月、3月、5月、7月、8月、10月、12月份是31天,4月、6月、9月、11月份是30天;闰年判断方法:如果年号能被400整除,则是闰年;如果年号能被4整除,而不能被100整除,则是闰年,闰年的2月份为29天,平年为28天。
#include<iostream>using namespace std;void main(){int m,n;cout<<"请输入年份:";cin>>m;cout<<"请输入月份:";cin>>n;{if( 0==m%400 || (m%100!=0) && (0==m%4) ) {if(n==2)cout<<"这一年为闰年,这个月有29天。
"<<endl;else{if(n==4||n==6||n==9||n==11)cout<<"这个月有30天。
"<<endl;else cout<<"这个月有31天。