文档库 最新最全的文档下载
当前位置:文档库 › 实验四 系统传递函数的测试方法

实验四 系统传递函数的测试方法

实验四  系统传递函数的测试方法
实验四  系统传递函数的测试方法

实验四系统传递函数的测试方法

一、实验目的

1、研究分析电子系统受随机信号激励后的响应及测量方法。

2、了解随机信号的特性,包括均值、均方值、方差、相关函数、概率密度、频谱及功率谱密度等。

3、熟悉常用的信号处理仿真软件平台:matlab或c/c++语言。

二、实验仪器

1、256M以上内存微计算机。

2、20M双踪示波器、信号源。

3、自选matlab6以上版本或c/c++语言环境。

三、实验步骤

1、根据选题的内容和要求查阅相关的文献资料,设计具体的实现程序流程。

2、用matlab、c仿真。

3、按设计指标测试电路。分析实验结果与理论设计的误差,根据随机信号的特征,分析误差信号对信号和系统的影响。

四、实验内容

1、实验原理

利用互相关算法可以求取线性时不变系统的冲击响应。通过被测系统后的理想高斯白噪声信号与理想高斯白噪声进行互相关运算,产生相应的输出通过一个低通滤波器,获得线性系统单位冲激响应h(t)。其原理框图如图4-1所示:

图4-1 利用互相关测量线性系统单位冲击响应

2、实验任务与要求

(1) 实验要求掌握白噪声的特性,以及探讨这种测试方法的意义,重点在于系统测试与分析。电路原理如图4-1所示。输入信号:高斯白噪声时域、频域图如图4-2所示:

图4-2 高斯白噪声的时域、频域图

要求测试白噪声的均值、均方值、方差,自相关函数、概率密度、频谱及功率谱密度并绘图。分析实验结果,搞清楚均值、均方值、方差,自相关函数、频谱及功率谱密度的物理意义。例:均值除了表示信号的平均值,它还表示信号中有了什么成分。相关函数当τ=0时为什么会有一个冲击,表示什么,它又等于什么。信号的时域波形有哪些特征,频域又有哪些特征。频谱及功率谱密度有什么差异,什么噪声是白噪声,这个噪声符合白噪声的定义吗等等。

(2)被测系统:

①被测系统是一个低通滤波器。低通滤波器的通带为0KHz-1KHz、通带衰减小于

1db、阻带衰减大于35db。

②被测系统是一个带通滤波器。带通滤波器的通带为1KHz-2KHz、通带衰减小于

1db、阻带衰减大于35db。

③被测系统是一个微分器。

如果被测系统是低通滤波器,它的冲击响应h(τ)为撒函数。实验结果y(t)应该为图4-3所示:

图4-3 y(t)的输出

同理,如果被测系统是带通滤波器,y(t)输出是它的冲击响应h(τ),如图4-4所示:

图4-4 y(t)的输出

(4) 要求:绘制低通滤波器、带通滤波器、微分器的频谱特性、冲激响应。计算x(t)、a(t)、y(t)信号的均值、均方值、方差、相关函数、概率密度、频谱及功率谱密度等。

(5)按要求写实验报告。

五、实验报告的要求

简述主要实验内容、基本原理和结论,重点叙述实验中遇到的问题及解决方法,讨论该实验内容和方法在相关领域的应用和发展,试举例说明。

C语言程序设计(第3版)何钦铭-颜-晖-第10章--函数与程序结构

第10章函数与程序结构 【练习10-1】使用递归函数计算1到n之和:若要用递归函数计算sum=1+2+3+…+n(n为正整数),请写出该递归函数的递归式子及递归出口。试编写相应程序。 解答: 递归式子: sum(i) = sum(i-1) + i; 递归出口: sum(i) = 0; 【练习10-2】请完成下列宏定义: ① MIN(a,b) 求 a,b 的最小值 ② ISLOWER(c) 判断 c 是否为小写字母 ③ ISLEAP(y) 判断 y 是否为闰年 ④ CIRFER(r) 计算半径为 r 的圆周长 解答: ① MIN(a, b):求a,b的最小值。 #define MIN(a,b) (a='a'&&c<='z') ③ ISLEAP(y):判断y是否为闰年。 #define ISLEAP(y) (y%4==0&&y%100!=0)||y%400==0) ④ CIRFER(r):计算半径为r的圆周长。 #define PI 3.14159 #define CIRFER(r) 2*PI*(r) 【练习10-3】分别用函数和带参宏实现从 3 个数中找出最大数,请比较两者在形式上和使用上的区别。 解答: (1)函数实现 int max(int x,int y,int z) { int t; if(x>=y) if(x>=z) t=x; else t=z; else if(y>=z) t=y; else t=z; return t; } (2)宏实现 #define MAX( x, y, z ) x>=y? (x>=z? x:z) : (y>=z? y:z)两者在定义形

通过函数绘制一阶二阶传递函数伯德图

关于一阶二阶传递函数的伯德图 一阶惯性系统的通式为: 将式子两边同时除以a0得 令0 0a K b =为系统静态灵敏度; 0 1a a =τ为系统时间常数; 则有 )()()1( s KX s Y s =+τ 故有 ) 1()()()(+==s K s X s Y s H τ 以液柱式温度计为例,传递函数为 )1(1)()()(+==s s X s Y s H τ 可得频率响应函数 )1j (1)(+= τωs H )()()(001t x b t y a dt t dy a =+)()()(0001t x a b t y dt t dy a a =+

可得传递函数的幅频与相频特性 2)1(1 )()(τωωω+==j H A ωτωω?arctan )()(-=∠=j H 在MATLAB 上输入程序(此时令1=τ) num=[1]; den=[1,1]; figure sys=tf(num,den); bode(sys);grid on 可得bode 图

二阶惯性系统的通式为: 将式子两边同时除以a 0得 令0 0a K b =为系统静态灵敏度; 20n a a = ω为系统无阻尼固有频率; 1 012a a a =ξ为系统阻尼器 传递函数为 12) ()()(22++==n n s s K s X s Y s H ωξω 可得传递函数的幅频与相频特性 2222)(4)1(1 )()(2n n K j H A ωωξωωωω+-== )()()()(001222t x b t y a dt t dy a dt t y d a =++)()()()(00012202t x a b t y dt t dy a a dt t y d a a =++

实验三 函数与程序结构实验

C 语言程序设计 实验报告 专业 信息安全 班级 1103 日期 成绩 实验组别 第 1次实验 指导教师 学生姓名 严志颖 学号 U201114113 同组人姓名 实验名称 函数与程序结构实验 一、实验目的 1.熟悉和掌握函数的定义、声明;函数调用与参数传递方法;以及函数返回值类型的定义和返回值使用。 2.熟悉和掌握不同存储类型变量的使用。 3.熟悉多文件编译技术。 二、实验任务 1.源程序改错题 下面是计算s=1!+2!+3!+…+n!的源程序,在这个源程序中存在若干语法和逻辑错误。要求在计算机上对这个例子程序进行调试修改,使之能够正确完成指定任务。 #include "stdio.h" void main(void) { int k; for(k=1;k<6;k++) printf("k=%d\tthe sum is %ld\n",k,sum_fac(k)); } long sum_fac(int n) { long s=0; int i; long fac; for(i=1;i<=n;i++) fac*=i; s+=fac; return s; } 2.源程序修改替换题 (1)修改第1题中sum_fac 函数,使其计算量最小。 (2)修改第1题中sum_fac 函数,计算! 1!31!211n s ++++= 。 3.跟踪调试题 计算fabonacci 数列前n 项和的程序如下: 其中,long sum=0,*p=∑声明p 为长整型指针并用&sum 取出sum 的地址对p 初始化。*p 表示引用p 所指的变量(*p 即sum )。 void main(void) {

实验二选择结构程序设计实验报告

实验三:C程序的选择结构 一、实验目的和要求 (1)了解 C 语言表示逻辑量的方法(以0 代表“假”,以非0 代表“真”)。 (2)学会正确使用逻辑运算符和逻辑表达式。 (3)熟练掌握if 语句的使用(包括if 语句的嵌套)。 (4)熟练掌握多分支选择语句—switch 语句。 (5)结合程序掌握一些简单的算法。 (6)进一步学习调试程序的方法。 二、、实验软硬件配置 1.硬件配置 电脑 2.软件配置 Windows xp Visual C++6.0 三、实验内容及过程描述 实验步骤: ①进入Visual C++ 6.0 集成环境。 ②输入自己编好的程序。 ③检查一遍已输入的程序是否有错(包括输入时输错的和编程中的错误),如发现有错,及时 改正。 ④进行编译和连接。如果在编译和连接过程中发现错误,频幕上会出现“报错信息”,根据提 示找到出错位置和原因,加以改正。再进行编译,如此反复直到不出错为止。 ⑤运行程序并分析运行结果是否合理。在运行是要注意当输入不同的数据时所得结果是否正 确,应运行多次,分别检查在不同情况下结果是否正确。 实验内容: 本实验要求事先编好解决下面问题的程序,然后上机输入程序并调试运行程序。 x x 1 (1)有一函数:y 2x 1 1 x 10 3x 11 x 10 写程序,输入x 的值,输出y 相应的值。用scanf 函数输入x 的值,求y 的值。程序如下:#include int main() {float x,y; int i; while(i<1000) { printf(" 请输入x 的值:"); scanf("%f",&x); if(x<1) y=x; else if(1<=x&&x<10)

实验四 MATLAB程序设计

实验四 MATLAB 程序设计 1.实验目的 (1)熟练掌握MATLAB 的程序流程控制结构。 (2)掌握M 文件的结构,M 函数文件编写、使用。 (3)熟练掌握函数调用和参数传递。 2.实验仪器 (1)Matlab6.5应用软件安装版 一套 (3)PC 机 一台 3. 实验原理 依据MA TLAB 的编程的原理,编写M 函数文件,调用M 函数文件,完成曲线绘制。 4. 实验步骤 (1)利用for 、while 控制语句和sum 指令求和。 (2)使用MA TLAB 函数文件绘图。 (3)利用置换指令绘制脉冲响应曲线. (4)利用feval 指令实现指定的函数。 5. 实验报告内容(选做其中两题) (1)分别用for 和while 循环语句计算∑==630i i 2 K 的程序,再写出一种避免循环的计算程序。 (提示:可考虑利用MA TLAB 的sum (X,n )函数,实现沿数组X 的第n 维求和。)保存为M 文件. (2)将课本例4-8子函数编程及调用演示,三个子图上的圆和多边形绘制在同一坐标系中。并保存为M 文件。保存输出结果图。 (3)利用置换指令subs(X,new),例4-18中的脉冲响应在t=[0,18]的曲线。并保存为M 文件。保存输出结果图。 (4)试利用feval ()指令计算F(x)+F 2(x),其中F 可取‘sin ’、‘cos ’。(提示:先编写以个M 函数function y=trif(F,x)实现F(x)+F 2(x)的计算,在编写调用函数完成F 为‘sin ’、‘cos ’的计算),并保存为M 文件。(指定完成sin(pi/2)+sin(pi/2)^2; cos(pi/3)+cos(pi/3)^2)

实验三 顺序及选择结构程序设计

实验三顺序及选择结构程序设计 一、实验目的 1、掌握顺序结构程序的设计方法。 2、掌握赋值语句、注释语句、InputBox()函数、MsgBox语句与函数的使用方法。 3、掌握Print方法、Tab函数、字体类型、打印机输出的使用。 4、掌握简单块If语句、多分支块If语句、行If语句、IIf()函数的使用。 5、掌握情况语句(Select Case)的使用。 二、实验内容 要求:实验一、实验二中选做一个,实验三、实验四中选做一个 1、实验一。 2、实验二。 3、实验三。 4、实验四。 三、实验指导 1、实验一。 用InputBox()函数输入弧度值,将弧度值转换为角度值(度、分、秒)的形式,然后在窗体上打印出来。 【提示】利用InputBox()函数输入弧度值后,首先把弧度值转换为原始角度值,然后取整,结果就为角度值中的度值,然后把原始角度值减去度值,把结果转化为分值,采用类似思维即可求出结果。 【参考代码】 Private Sub Cmd1_Click() Dim s As Single, a As Integer, b As Integer, c As Integer Const pi As Single = 3.14159 s = Val(InputBox("请输入弧度值:")) s = s * 180 / pi a = Int(s) s = s - a s = s * 60 b = Int(s) s = s - b c = s * 60 Print "对应的角度值为:"; a & "度" & b & "分" & c & "秒。" End Sub 程序运行界面如图4.1所示。

计算机组成实验报告汇总

计算机组成与体系结构 实验报告

实验项目一 一、实验目的 通过了解高级语言源程序和目标机器代码的不同表示及其相互转换,深刻理解高级语言和机器语言之间的关系,以及机器语言和不同体系结构之间的关系。 二、实验要求: 在VC6.0中创建下列源程序 #include void main() { inti=100; int j=-1; int k; k=i+j; printf("%d",k); } 然后对该程序进行编译、链接,最终生成可执行目标代码。 三、实验报告 1.给出做实验的过程. 关键代码如下:

2.给出源程序(文本文件)的内容(用十六进制形式表示)。 3.给出可执行目标文件(二进制文件)的内容(用十六进制形式表示)。

4.VC6.0调试环境:设置断点、单步运行、变量的值(十进制、十六进制)、变量的地址、变量的存储。 断点设置如下:

变量的值十进制: 变量的值十六进制: 变量的地址:

5.VC 6.0反汇编:查看源程序对应的汇编程序、可执行目标程序的二进制编码、了解如何给变量分配内存、系统函数程序段的调用。 6.分析或回答下列问题。 (1)分析同一个源程序在不同机器上生成的可执行目标代码是否相同。 不相同。因为不同的机器硬件的组成不同,因此同一个源程序在不同的机器上生成的目标文件不同。 (2)你能在可执行目标文件中找出函数printf()对应的机器代码段吗?能的话,请标示出来。 不能。因为源程序中的printf函数在可执行文件中已转换为机器语言。被翻译的机器语言中有printf函数,但是不知道是从哪一段开始翻译的。 (3)为什么源程序文件的内容和可执行目标文件的内容完全不

实验05 函数程序设计

计算两个复数之积(调试示例error05_1)程序填空,不要改变与输入输出 有关的语句。 分别输入两个复数的实部与虚部,编程调用函数实现计算两个复数之积。 若两个复数分别为:c1=x1+(y1)i, c2=x2+(y2)i,则: c1*c2 = (x1*x2-y1*y2) + (x1*y2+x2*y1)i 输入输出示例:括号内是说明 输入 1 2 (x1=1, y1=2) -2 3 (x2=-2, y2=3) 输出 product of complex is (-5.000000)+(1.000000)i #include /*---------*/ int main(void) { float imag1, imag2, real1, real2; scanf("%f%f", &real1, &imag1); scanf("%f%f", &real2, &imag2); complex_prod(real1, imag1, real2, imag2); printf("product of complex is (%f)+(%f)i\n", result_real, result_imag); return 0; } /*---------*/ 使用函数求1! + 2! + … + m!(改错题error05_2)程序填空,不要改 变与输入输出有关的语句。 求1! + 2! + … + 10!,要求定义并调用函数fact(n)计算 n!,函数形参 n 的类型是int,函数类型是double。 输入输出示例:括号内是说明 输出: 1!+2!+...+10! = 4037913.000000 #include

二阶系统的性能指标

一、二阶系统传递函数的标准形式 二阶系统的闭环传递函数写成标准形式为:22 2 2)()(n n n s s s R s C ωξωω++= 式中,ξ为阻尼比;n ω为无阻尼自振频率。 所以,二阶系统的特征方程为:022=++n n s s ωξω 由上式解得二阶系统的二个特征根(即闭环极点)为:2 2.11ξωξω-±-=n n j s 随着阻尼比ξ取值的不同,二阶系统的特征根(即闭环极点)也不相同。 二、单位阶跃函数作用下二阶系统的过渡过程(针对欠阻尼状态,10<<ξ ) 令)(1)(t t r =,则有s s R 1 )(= ,二阶系统在单位阶跃函数作用下输出信号的拉氏变换为:2 2222 22)()(1 ) )((211 2)(d n d d n d n n d n d n n n n n s s s s j s j s s s s s s s C ωξωωωξωωξωξωωξωωξωξωωξωω++? -+++-=-++++- =?++= 式中,2 1ξωω-=n d 为有阻尼自振频率 对上式进行反拉氏变换,得: ) sin(11) sin 1(cos 1sin cos 1)(2 2 ?ωξ ωξ ξ ωωωξωωξωξωξωξω+-- =-+-=?- -=----t e t t e t e t e t c d t d d t d t d n d t n n n n 式中,ξ ξ?2 1-=arctg 由上式看出,对应10<<ξ时的过渡过程,)(t c 为衰减的正弦振荡曲线。其衰减速度取决 ?角的定义

于n ξω值的大小,其衰减振荡的频率便是有阻尼自振频率d ω,即衰减振荡的周期为: 2 122ξ ωπ ωπ -= = n d d T 三、二阶系统的性能指标 1.上升时间tr :上升时间是响应曲线由零上升到稳态值所需要的时间。 根据定义,当r t t =时,1)(=r t c 。 即 0sin 1cos 2 =-+ r d r d t t ωξ ξ ω 或 n n r d t tg ξωξωω2 1-=,)(?πω-=tg t tg r d 所以,上升时间为:2 1ξ ω?π--= n r t 2.峰值时间tp :过渡过程曲线达到第一个峰值所需的时间。 ??ωtg t tg dt t dc p d t t p =+?==)(0) ( ( ,3,2,,0πππω=p d t ) 由于峰值时间tp 是过渡过程曲线达到第一个峰值所需的时间,故取πω=p d t 即 21ξ ωπωπ-= = n d p t 3.最大超调量p σ 最大超调量为:%100) ()()(?∞∞-= c c t c p p σ % 100% 100)sin 1(cos % 100)sin 1(cos 2 12 2 ?=??-+ -=?-+-=-- --ξξπ ξωξωσπξξ πωξ ξ ωe e t t e p t p d p d t p n p n 式中,)(p t c 为过渡过程曲线第一次达到的最大输出值;)(∞c 为过渡过程的稳态值()(∞c =1)。

(完整版)Matlab实验5选择结构程序结构

实验五、选择与循环结构 一、实验目的: 1、 掌握建立和执行M 文件的方法。 2、 掌握利用if 语句实现选择结构的方法。 3、 掌握利用switch 语句实现多分支选择结构的方法。 4、 掌握try 语句的使用。 5、 掌握利用for 语句实现循环结构的方法。 6、 掌握利用while 语句实现循环结构的方法。 7、 熟悉利用向量运算来代替循环的操作方法。 二、实验内容: 1、 列分段函数的值。 ?? ???--≠≠<≤+--≠<-+=其他且且,632,100,6530,6222x x x x x x x x x x x y 要求: (1) 用if 语句实现,分别输出x =-0.5,-3.0,1.0,2.0,2.5,3.0,5.0时的y 值。 提示:x 的值从键盘输入,可以是向量。 %homework_5_1_1.m x=input('请输入x 的值:x='); if (x<0 & x~=-3) y= x.*x + x - 6 elseif (x>=0 & x<10 & x~=2 & x~=3) y=x.*x-5.*x+6 else y=x.*x-x-6 end >> homework_5_1 请输入x 的值:x=[-0.5 -3.0 1.0 2.0 2.5 3.0 5.0] y = -5.2500 6.0000 -6.0000 -4.0000 -2.2500 0 14.0000 (2) 用逻辑表达式实现上述函数。 %homework_5_1_2.m x=input('请输入x 的值:x=') y=(x<0 & x~=-3).*(x.*x+x-6)... +(x>=0 & x<10 &x~=2 &x~=3).*(x.*x-5.*x+6)... +(x>=10 | x==-3 | x==3 | x==2).*(x.*x-x-6) >> homework_5_1_2 请输入x=[-0.5 -3.0 1.0 2.0 2.5 3.0 5.0] x = -0.5000 -3.0000 1.0000 2.0000 2.5000 3.0000 5.0000 y = -6.2500 6.0000 2.0000 -4.0000 -0.2500 0 6.0000

计算机系统结构实验报告

计算机系统结构实验报告 一.流水线中的相关 实验目的: 1. 熟练掌握WinDLX模拟器的操作和使用,熟悉DLX指令集结构及其特点; 2. 加深对计算机流水线基本概念的理解; 3. 进一步了解DLX基本流水线各段的功能以及基本操作; 4. 加深对数据相关、结构相关的理解,了解这两类相关对CPU性能的影响; 5. 了解解决数据相关的方法,掌握如何使用定向技术来减少数据相关带来的暂停。 实验平台: WinDLX模拟器 实验内容和步骤: 1.用WinDLX模拟器执行下列三个程序: 求阶乘程序fact.s 求最大公倍数程序gcm.s 求素数程序prim.s 分别以步进、连续、设置断点的方式运行程序,观察程序在流水线中的执行情况,观察 CPU中寄存器和存储器的内容。熟练掌握WinDLX的操作和使用。 2. 用WinDLX运行程序structure_d.s,通过模拟找出存在资源相关的指令对以及导致资源相 关的部件;记录由资源相关引起的暂停时钟周期数,计算暂停时钟周期数占总执行周期数的 百分比;论述资源相关对CPU性能的影响,讨论解决资源相关的方法。 3. 在不采用定向技术的情况下(去掉Configuration菜单中Enable Forwarding选项前的勾选符),用WinDLX运行程序data_d.s。记录数据相关引起的暂停时钟周期数以及程序执行的 总时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。 在采用定向技术的情况下(勾选Enable Forwarding),用WinDLX再次运行程序data_d.s。重复上述3中的工作,并计算采用定向技术后性能提高的倍数。 1. 求阶乘程序 用WinDLX模拟器执行求阶乘程序fact.s。这个程序说明浮点指令的使用。该程序从标准 输入读入一个整数,求其阶乘,然后将结果输出。 该程序中调用了input.s中的输入子程序,这个子程序用于读入正整数。 实验结果: 在载入fact.s和input.s之后,不设置任何断点运行。 a.不采用重新定向技术,我们得到的结果

matlab实验四函数编写与程序设计

实验四:函数编写与程序设计 一、实验目的1 . 掌握M文件的创建。 2.掌握函数的编写规则。 3.掌握函数的调用。 4 . 掌握基本的输入输出函数以及显示函数的用法。 5.会用Matlab程序设计实现一些工程算法问题。 二、实验内容 1 . 设计程序,完成两位数的加、减、乘、除四则运算,即产生两个两位随机整数,再输入一个运算符号,做相应的运算,显示相应的结果,并要求结果显示类似于“a=x+y=34”。a=input('请输入一个数: ')

b=input('请输入一个数:'); fuhao=input('请输入一个运算符号(+-*/):','s'); switch fuhao case {'+'} he=a+b; disp(['和=',num2str(a),'+',num2str(b),'=',num2str(he)]); case {'-'} he=a-b; disp(['减=',num2str(a),'-',num2str(b),'=',num2str(he)]) case {'*'} he=a*b; disp(['乘=',num2str(a),'*',num2str(b),'=',num2str(he)]) case {'/'} he=a/b; disp(['除=',num2str(a),'/',num2str(b),'=',num2str(he)]) otherwise disp('请输入正确的符号'); end 2 . 求下列分段函数的值 2 2 2 6,0 56, 1, y χχχχ χχχχχ χχ ?+-<≠ ? =-+≤≠≠? ?-- ? 且-3 0<10,2且3 其他

函数与程序结构实验

C 语言程序设计实验报告 实验名称 函数与程序结构实验 一、实验目的 1.熟悉和掌握函数的定义、声明;函数调用与参数传递方法;以及函数返回值类型的定义和返回值使用。 2.熟悉和掌握不同存储类型变量的使用。 3.熟悉多文件编译技术。 二、实验任务 1.源程序改错题 下面是计算s=1!+2!+3!+…+n!的源程序,在这个源程序中存在若干语法和逻辑错误。要求在计算机上对这个例子程序进行调试修改,使之能够正确完成指定任务。 #include "stdio.h" void main(void) { int k; for(k=1;k<6;k++) printf("k=%d\tthe sum is %ld\n",k,sum_fac(k)); } long sum_fac(int n) { long s=0; int i; long fac; for(i=1;i<=n;i++) fac*=i; s+=fac; return s; } 2.源程序修改替换题 (1)修改第1题中sum_fac 函数,使其计算量最小。 (2)修改第1题中sum_fac 函数,计算! 1!31!211n s ++++= 。 3.跟踪调试题 计算fabonacci 数列前n 项和的程序如下: 其中,long sum=0,*p=∑声明p 为长整型指针并用&sum 取出sum 的地址对p 初始化。*p 表示引用p 所指的变量(*p 即sum )。 void main(void) { int i,k; long sum=0,*p=∑

scanf("%d",&k); for(i=1;i<=k;i++){ sum+=fabonacci(i); printf("i=%d\tthe sum is %ld\n",i,*p); } } long fabonacci(int n) { if(n==1 || n==2) return 1; else return fabonacci(n-1)+fabonacci(n-2); } 单步执行程序,观察p,i,sum,n值。 (1)刚执行完scanf("%d",&k);语句,p,i值是多少? (2)从fabonacci函数返回后光条停留在哪个语句上? (3)进入fabonacci函数,watch窗口显示的是什么? (4)当i=3,从调用fabonacci函数到返回,n值如何变化? 4.编程设计题 (1)编程让用户输入两个整数,计算两个数的最大公约数并且输出之(要求用递归函数实现求最大公约数)。同时以单步方式执行该程序,观察递归过程。 (2)编程验证歌德巴赫猜想:一个大于等于4的偶数都是两个素数之和。 编写一个程序证明对于在符号常量BEGIN和END之间的偶数这一猜测成立。例如,如果BEGIN为10,END为20,程序的输出应为: GOLDBACH'S CONJECTURE: Every even number n>=4 is the sum of two primes. 10=3+7 12=5+7 …… 20=3+17 5.选做题 1、设file1.c如下: #include int x,y; /* 外部变量的定义性说明 */ char ch; /* 外部变量的定义性说明 */ void main(void) { x=10; y=20; ch=getchar(); printf("in file1 x=%d,y=%d,ch is %c\n",x,y,ch); func1(); } file2.c如下:

实验七 用函数实现模块化程序设计

河南工业大学C语言实验报告 专业班级:生物11级1班学号:201112910118姓名:l刘路路指导老师:朱红莉评分: 实验题目:用函数实现模块化程序设计 实验目的:熟练掌握函数的定义、调用、声明 实验内容:P218-219 习题1、2、4 实验步骤:(具体程序及运行结果) 7.1写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。 #include int main() {int hcf(int,int); int lcd(int,int,int); int u,v,h,l; scanf("%d,%d",&u,&v); h=hcf(u,v); printf("H.C.F=%d\n",h); l=lcd(u,v,h); printf("L.C.D=%d\n",l); return 0; } int hcf(int u,int v) {int t,r; if (v>u) {t=u;u=v;v=t;} while ((r=u%v)!=0) {u=v; v=r;} return(v); } int lcd(int u,int v,int h) { return(u*v/h); } 7.3写一个判素数的函数,在主函数输入一个整数,输出是否为素数的信息。 #include int main() {int prime(int); int n; printf("input an integer:"); scanf("%d",&n);

if (prime(n)) printf("%d is a prime.\n",n); else printf("%d is not a prime.\n",n); return 0; } int prime(int n) {int flag=1,i; for (i=2;i #define N 3 int array[N][N]; int main() { void convert(int array[][3]); int i,j; printf("input array:\n"); for (i=0;i

实验2顺序结构与逻辑运算

实验2顺序结构与逻辑运算

实验2 顺序结构与逻辑运算 1.实验目的和要求 (1)掌握数据输入/输出函数的使用,能正确使用各种格式转换符。 (2)熟悉顺序结构程序中语句的执行过程,并学会基本调试程序方法。 (3)能够正确使用逻辑运算符和逻辑表达式。(4)学会运用逻辑表达式或关系表达式等表示条件。 (5)熟练掌握if语句和switch语句,掌握条件表达式构成的选择结构。 (6)熟练掌握跟踪调试程序,针对具体数据组织输入测试数据,观察程序运行能否得到预期的输出结果。 (7)学会编写简单程序。 2.实验内容:实验指导书中的实验三和实验四 3.实验步骤及结果 实验三部分: 3-1-1 该程序正确的源程序代码(或窗口截图):

程序运行结果画面如下: 3-1-2该程序正确的源程序代码(或窗口截图): 程序运行结果画面如下:

3-2-1该程序完整的源程序代码(或窗口截图): 程序运行结果画面如下: 3-2-2该程序完整的源程序代码(或窗口截图):

程序运行结果画面如下: 3-3 注意:这道程序我们不按书中提示进行,而在VC环境下进行调试。 语法错误和逻辑错误的区别何在? 答: 如何启动单步调试? 答: 要使程序运行到“ss=(k…”这一行暂停下来,该如何操作? 答: 怎样终止调试状态(程序复位)? 答: 单步调试状态下,向下运行一条语句的操作方法(分两种情况回答,第一种,跟踪到自定义函数内部,第2种,不跟踪到自定义函数内部):答:

在本题中,假设要在运行第2条语句(即scanf 语句后),要马上观察i,j,k,ss,m,n的变量的值,操作方法:在此填入入答案,请把观察这些变量时的画面粘贴到下面: 通过这道题单步调试,你对i++和++i及i—和—i 应该有了更直观的理解,他们的区别在于:答: 3-4 请回答书中问题 问题(1)字符型 问题(2) 问题(3) 程序运行结果画面如下: 3-5: 运行结果画面:

实验四循环结构大全语言程序设计实验报告

循环结构汇编语言程序设 计实验报告 实验四循环结构汇编语言程序设计 一、实验目的 1、学习循环结构的汇编语言程序的设计和调试。 2、学习通过直接对8086计算机的寄存器和内存的直接访问,编写更高效简洁的汇编程序。 3、加深掌握计算机整体的工作过程。 3、加深对排序算法的理解。 二、实验任务 编写程序求出数组A中(20个元素)的最大值和最小值(数组没有排序)。 要求至少采用二种不同的排序算法来实现。( 快速排序,归并排序、堆排序、Shell排序、插入排序、冒泡排序、交换排序、选择排序、基数排序……) 三、实验内容 为了更好地实现老师所布置的实验任务,我们根据情况选取以下两种方式实验。 1、利用冒泡排序的方式求解数组A中元素的最大值最小值。设计流程图如下所示: 2、利用选择排序的方式求得数组A中元素的序列。设计流程图如下所示: 四、实验环境 PC机: winXP/win7(32位)/win7(64位)+winxp 虚拟机 汇编工具:+。 五、实验步骤 1)建立和生成的文件 (1)编写的源程序,源程序名为abc、扩展名为.asm (2)源程序经汇编程序汇编(翻译)后生成二进制目标程序,文件名为 (3)目标程序需要经连接生成可执行程序,文件名为 2)汇编环境

最基本的汇编环境只需要两个文件:和。将这两个文件拷入到已经建好的文件夹(例如huibian)中,并将文件夹huibian放在硬盘根目录C :\>下 3)上机步骤 进入DOS窗口中执行。 4)调试程序 进入DEBUG后,调试程序 5)调试成功后重新汇编、连接并生成可执行代码 6)执行程序,并对运行结果截图。 利用冒泡排序求得数组A中元素的最大值最小值的实验结果如下图所示:(说明:输入 数据为:13,0,59,900,587,1,657,234,34,48) 利用选择排序对数组A中元素排序得到的序列得实验结果如下图所示:(说明:输入数 据为13,0,59,900,587,1,657,234,34,48) 六、实验心得 通过本次循环结构汇编语言程序设计的实验,我初步了解了汇编语言的基本语法,利用汇编语言的循环结构实现了对于数组A中元素的排序以及求得元素中的最大值最小值。另外,在实验过程中,我也了解到了,我们要时刻细心严谨,认真做好每一步,避免出现低级错误。 七、汇编语言代码 1、利用冒泡排序实现求最大值最小值的代码 data segment mes1 db 'the max:$' mes2 db 'the min:$' a dw 13,0,59,900,587,1,657,234,34,48 data ends code segment main proc far assume cs:code,ds:data start: push ds sub ax,ax push ax mov ax,data mov ds,ax ;以下是起泡排序核心代码 mov cx,10 dec cx loop1: mov di,cx mov bx,0

实验四 函数编程练习

2.2.4 实验4:函数编程练习 1. 给小学生出加法考试题 编写一个程序,给学生出一道加法运算题,然后判断学生输入的答案对错与否,按下列要求以循序渐进的方式编程。 程序1 通过输入两个加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则显示“Not correct! Try again!”,程序结束。 程序2 通过输入两个加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则显示“Not correct! Try again!”,直到做对为止。 程序3 通过输入两个加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则提示重做,显示“Not correct! Try again!”,最多给三次机会,如果三次仍未做对,则显示“Not correct! You have tried three times! Test over!”,程序结束。 程序4 连续做10道题,通过计算机随机产生两个1~10之间的加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则显示“Not correct!”,不给机会重做,10道题做完后,按每题10分统计总得分,然后打印出总分和做错的题数。 程序5 通过计算机随机产生10道四则运算题,两个操作数为1~10之间的随机数,运算类型为随机产生的加、减、乘、整除中的任意一种,如果输入答案正确,则显示“Right!”,否则显示“Not correct!”,不给机会重做,10道题做完后,按每题10分统计总得分,然后打印出总分和做错题数。 【思考题】如果要求将整数之间的四则运算题改为实数之间的四则运算题,那么程序该如何修改呢?请读者修改程序,并上机测试程序运行结果。 2.掷骰子游戏 编写程序模拟掷骰子游戏。已知掷骰子游戏的游戏规则为:每个骰子有6面,这些面包含1、2、3、4、5、6个点,投两枚骰子之后,计算点数之和。如果第一次投的点数和为7或11,则游戏者获胜;如果第一次投的点数和为2、3或12,则游戏者输;如果第一次投的点数和为4、5、6、8、9或10,则将这个和作为游戏者获胜需要掷出的点数,继续投骰子,直到赚到该点数时算是游戏者获胜。如果投掷7次仍未赚到该点数,则游戏者输。 【思考题】将游戏规则改为:计算机想一个数作为一个骰子掷出的点数(在用户输入数据之前不显示该点数),用户从键盘输入一个数作为另一个骰子掷出的点数,再计算两点数之和。其余规则相同,然后请读者重新编写该程序。

c语言程序设计实验报告1--顺序结构

福建农林大学金山学院实验报告 系(教研室):专业:年级: 实验课程: C语言程序设计姓名:学号:实验室号:_ 计算机号:实验时间:指导教师签字:成绩: 实验1:顺序结构程序设计 一、实验目的和要求 1.了解Visual C++ DEV_C++的基本操作方法 2.掌握C程序设计的基本步骤:编辑、编译、连接和运行 3.掌握各种类型数据的输入输出方法 4.能够编写一个简单的程序 二、实验内容和原理 1. 输入并运行一个简单、正确的程序。 # include <> int main( ) { printf ("This is a c program!\n"); return 0; } 2. 要使下面程序的输出语句在屏幕上显示:A,B,34,则从键盘输入的数据格式应为AB34__________ 。 #include<> int main() { char a, b; int c;

scanf("%c%c%d",&a,&b,&c); printf("%c,%c,%d\n",a,b,c); return0; 问题1:要使上面程序的键盘输入数据格式为a=A,b=B,34,输出语句在屏幕上显示的结果也为A,B,34,则应修改程序中的哪条语句怎样修改 scanf( “a=%c,b=%c,%d”,&a,&b,&c ); 问题 2:要使上面程序的键盘输入数据格式为A,B,34,而输出语句在屏幕上显示的结果为“A”,“B”,34,则应修改程序中的哪两条语句怎样修改 scanf( “%c,%c,%d”,&a,&b,&c); printf(“\”%c\”,\”%c\”,%d\n”,a,b,c); 3、编程求一个圆的周长和面积。用scanf输入圆半径,输出保留两位小数。 4、输入一个华氏温度F,要求输出摄氏温度C。公式为 c=5/9(F-32),取两位小数。 5、编程序,用getchar函数读入两个字符给c1、c2,然后分别用putchar函数和printf 函数输出这两个字符。 6. 计算定期存款本利之和。 设银行定期存款的年利率rate为%,并已知存款期为n年,存款本金为capital元,试编程计算n年后的本利之和deposit。要求定期存款的年利率rate、存款期n和存款本金capital 均由键盘输入。(提示:pow为幂函数:pow(2,3)表示23)。 #include <> #include <> int main() { } 三、实验环境

函数程序设计 -C语言程序实验报告

安徽工程大学 高级语言程序设计实验报告 班级姓名同组者/ 成绩 日期2019\11\21 指导教师 实验名称函数程序设计 一、实验目的 1.掌握定义函数的方法。 2.掌握函数实参与形参的对应关系,体会“值传递”的方式。 3.掌握函数的嵌套调用和递归调用的方法。 4.掌握全局变量和局部变量、动态变量和静态变量的概念与使用方法。 5.理解数组作为函数参数的传递方式。 6.理解宏的概念,掌握宏的定义。 7.了解文件包含的概念,掌握其用法。 二、实验内容 1.完成程序,求解n! 具体要求:输入并完善源程序;对源程序进行编译、连接和运行;写出程序运行结果。 2.计算s=1的k次方+2的k次方+3的k次方+……+N的k次方。 具体要求:输入并完善源程序;对源程序进行编译、连接和运行;写出程序运行结果。 3.写出下面3个程序的输出结果,说明每个程序中的各个x有何不同。 4.阅读程序,理解程序的功能,写出预期结果并上机验证。 5.编程并上机调试运行。 (1)编写一个判断素数的函数,在主函数输入一个整数,输出是否为素数的信息。(2)输入一个整数,将它逆序输出。要求定义并调用函数rverse(number),它的功能是返回number的逆序数。如reverse(12345)的返回值是54321。 (3)用递归法求n阶勒让德多项式的值,递归公式为 P(x)=1,n=0;P(x)=x,n=1;P(x)= [(2n-1)*x-Pn-1(x)-(n-1)Pn-2(x)]/n, n>1 (4)编写一函数,由实参传递一个字符串,统计此字符串中字母、数字、空格和其他

字符的个数,在主函数中输入字符串并输出上述结果。 (5)带参数的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参。输出交换后的两个值。 (6)编写函数,实现两个字符串的连接,在主函数中输入两个字符串并输出连接后的结果(不要使用库函数中的strcat函数)。 (7)请编写函数fun,它的功能是:求出1~1000之内能被7或11整除,但不能同时被7和11整除的所有整数,并将它们放在a所指的数组中,通过n返回这些数的个数,在主函数中输出这些整数,并给出统计的总数。 (8)设有未完成的函数: char GetChar(char c) { char s[]="9038571426"; …… } 字符串s中无序地存储了10个数字字符,没有重复。函数的功能是: 如果字符c不是数字字符,函数原样返回该字符;否则,在s中查找字符C,并返回其在s 中的前一个字符。如果该字符位于s的最前面(字符'9') ,则返回最后一个字符6'。 如GetChar(4)得到字符'I', GetChar(T)得到字符T。请完成该函数并在主函数中调用。*思考题 1.请分析不返回值的函数定义与有返回值的函数定义有什么不同,思考这两类函数在实际编程中的作用。 2.请观察本次实验中使用的函数都有几个返回值,当个函数需要有多个返回值时,应该如何处理? 3.数组作为函数参数有哪几种方式?这些方式中有没有能解决之前“函数多值返回问题”的方法? 4.请分析下面程序的作用。 /*format.h*/ #define DIGIT(d) printf("整数输出:%d\n",d) #define FLOAT(f) printf("实数输出:%10.2f\n",f) #define STRING(s) printf("字符串输出:?号s\n",s) /*user's program*/

相关文档
相关文档 最新文档