实验六 函数

合集下载

matlab实验六

matlab实验六

实验六M-文件结构与编写、函数文件格式、编写与调用、程序结构与流程控制一、实验目的:Matlab文件类型及其编写、程序结构、流程控制认识二、实验原理:1、建立M文件将多个可执行的系统命令,用文本编辑器编辑后并存放在后缀为 .m 的文件中,若在MATLAB命令窗口中输入该m-文件的文件名(不跟后缀.m!),即可依次执行该文件中的多个命令。

这个后缀为.m的文件,也称为Matlab的命令文件(Script File)。

注意:文件存放路径必须在Matlab能搜索的范围内。

2、建立函数文件对于一些特殊用户函数,系统提供了一个用于创建用户函数的命令function,以备用户随时调用。

(1).格式:function [输出变量列表]=fun_name(输入变量列表)用户自定义的函数体(2).函数文件名为:fun_name,注意:保存时文件名与函数名最好相同;(3).存储路径:最好在系统的搜索路径上。

(4). 调用方法:输出参量=fun_name (输入变量)例1:计算s = n!,在文本编辑器中输入:function s=pp(n);s=1;for i=1:ns=s*i;ends;在MATLAB命令窗口中输入:s=pp(5)结果为s = 1202、无条件循环当需要无条件重复执行某些命令时,可以使用for循环:for 循环变量t=表达式1 : 达式2 : 表达式3语句体end说明:表达式1为循环初值,表达式2为步长,表达式3为循环终值;当表达式2省略时则默认步长为1;for语句允许嵌套。

例2:如:矩阵输入程序m=input('矩阵行数:m=');n=input('矩阵列数:n=');for i=1:mfor j=1:ndisp(['输入第',num2str(i),'行,第', num2str(j),'列元素'])A(i, j) = input ('')endend生成3×4阶的Hiltber矩阵。

实验六-方波—三角波—正弦波函数发生器

实验六-方波—三角波—正弦波函数发生器

实验六-方波—三角波—正弦波函数发生器六.方波-三角波-正弦波函数发生器一、实验目的函数信号发生器是一种可以同时产生正弦波、三角波和方波信号电压波形的电路,调节外部电路参数,还可以获得占空比可调的锯齿波、阶梯波等信号的电压波形。

本实验主要是掌握方波-三角波-正弦波函数发生器的设计方法。

二、设计任务要求频率范围:100~1000Hz,1000~10000Hz输出电压:方波V pp≤24V三角波V pp=6V正弦波V pp=1V波形特征:方波t r<100μs三、实验原理本实验方波-三角波-正弦波的设计电路如下图所示:由比较器、积分器和反馈网络组成振荡器,比较器所产生的方波通过积分器变成三角波,最后利用差分放大器传输特性曲线,将三角波转换成正弦波。

具体的电路设计如下图所示,三角波-方波产生电路是把比较器与积分器首尾相连,而三角波-正弦波的变换电路采用的是单端输入-单端输出差动放大电路输入输出方式。

下面将仔细分析两个子电路。

①方波-三角波产生器方波-三角波产生器有很多种,此次试验是采用把比较器和积分器首尾相连构成方波-三角波产生器的方式,具体分析电路如下所示:集成运放A 2的输出信号三角波V O2为A 1的输入信号V 1,又因为A1的反相端接地,可得三角波输出V O2的峰值V O2m 为V O2m =ZP V R R R 132+式中的V Z 为方波的峰值电压。

因积分电路输出电压从0上升到V 1m 所需时间为1/4T,故RCT V dt R V CV R R R V Z TZ Z P MO 4141322==+=⎰其中R=R 4+R P2 ()C R R R R R T p p 132424++=从上述分析关系可得,调节R P2和电容C 的大小可改变振荡频率,改变R 2/(R P1+R 3)的比值可调节三角波的峰值。

② 三角波-正弦波产生电路三角波-正弦波产生电路的设计简图如下所示:在电路两边对称的理想条件下,流过理想的恒流源R E 的电流I O 不会随差模输入电压而变化,晶体管工作在放大区时,它的集电极电流近似为: TBE V V S E C e I I I 1111=≈α TBE V V S E C eI I I 2222=≈α假设α≈1时, )1()1(12112121TBE BE V V VC C C C C C O eI I I I I I I -+=+=+≈由于V id =V BE1-V BE2 则TidV V OC eI I -+=11同理Tid V V OC eI I+=12分析表明,如果差分电路的差模输入V id 为三角波,则I c1与I c2的波形近似为正弦波,因为单端输出电压V o3也近似为正弦波,实现了三角波-正弦波变换。

实验六 金属线胀系数测定

实验六 金属线胀系数测定

实验六金属线胀系数测定
本实验主要是用物理实验的方法来测量金属线胀系数,以了解材料的物理性质并评估
其使用范围。

金属线的胀系数是指其长度随温度变化而发生的变化。

胀系数通常是温度的函数,可
以用以下公式来计算:
α = (L –L0) / (L0 × ΔT)
其中,α为胀系数,L为材料长度,L0为初始长度,ΔT为温度变化量。

在本实验中,我们将使用蓝铜丝和一台称重器来测量其胀系数。

蓝铜丝是一种优良的
电导率材料,适合用于制造电线和电缆。

它具有良好的弹性和塑性,能够耐受高温和高压;而其胀系数随温度的变化也是非常小的。

实验步骤:
1.将一根3米长的蓝铜丝固定起来,确定其长度为L0。

2.将蓝铜丝放入烘箱中,在温度为100℃的条件下加热30分钟。

3.取出蓝铜丝,将其放置到室温下自然冷却至恒定温度,记录其长度为L1。

7.重复上述步骤,测量蓝铜丝在不同温度下的胀系数,得出其与温度的关系。

实验注意事项:
1.在实验中要注意安全,避免触电或烧伤等意外情况的发生。

2.烘箱的温度要稳定,确保加热的均匀性和准确性。

3.在蓝铜丝加热和冷却过程中,要避免其与其他物体摩擦或外力作用。

4.测量过程中要准确记录数据,并保证实验环境的稳定性。

实验结果分析:
根据测量获得的数据,可以得出蓝铜丝的胀系数与温度的函数关系,得到其随温度的
变化规律。

这为材料的设计和应用提供了必要的参考信息。

通过本实验,我们可以深入了解金属材料的物理性质,为材料的选择和使用提供科学
依据,有助于提高制造工艺和产品质量。

窗函数及其对信号频谱的影响

窗函数及其对信号频谱的影响

实验六窗函数及其对信号频谱的影响一.实验目的1. 掌握几种典型窗函数的性质、特点,比较几种典型的窗函数对信号频谱的影响。

2. 通过实验认识它们在克服 FFT 频谱分析的能量泄漏和栅栏效应误差中的作用,以便在实际工作中能根据具体情况正确选用窗函数二、实验原理实际应用的窗函数,可分为以下主要类型:1. 幂窗--采用时间变量某种幂次的函数,如矩形、三角形、梯形或其它时间(t)的高次幂;2. 三角函数窗--应用三角函数,即正弦或余弦函数等组合成复合函数,例如汉宁窗、海明窗等;3. 指数窗--采用指数时间函数,如e-st形式,例如高斯窗等。

下面介绍几种常用窗函数的性质和特点。

a) 矩形窗——矩形窗属于时间变量的零次幂窗,函数形式为:相应的窗谱为:矩形窗使用最多,习惯上不加窗就是使信号通过了矩形窗。

这种窗的优点是主瓣比较集中,缺点是旁瓣较高,并有负旁瓣,导致变换中带进了高频干扰和泄漏,甚至出现负谱现象。

b) 汉宁(Hanning)窗——汉宁窗又称升余弦窗,其时域表达式为:相应的窗谱为:由此式可以看出,汉宁窗可以看作是3个矩形时间窗的频谱之和,或者说是 3个 sine(t)型函数之和,而括号中的两项相对于第一个谱窗向左、右各移动了π/T,从而使旁瓣互相抵消,消去高频干扰和漏能。

可以看出,汉宁窗主瓣加宽并降低,旁瓣则显著减小,从减小泄漏观点出发,汉宁窗优于矩形窗.但汉宁窗主瓣加宽,相当于分析带宽加宽,频率分辨力下降。

c)海明(Hamming)窗——海明窗也是余弦窗的一种,又称改进的升余弦窗,其时间函数表达式为:相应的窗谱为:海明窗与汉宁窗都是余弦窗,只是加权系数不同。

海明窗加权的系数能使旁瓣达到更小。

分析表明,海明窗的第一旁瓣衰减为一42dB.海明窗的频谱也是由3个矩形时窗的频谱合成,但其旁瓣衰减速度为20dB/(10oct),这比汉宁窗衰减速度慢。

海明窗与汉宁窗都是很有用的窗函数。

不同的窗函数对信号频谱的影响是不一样的,这主要是因为不同的窗函数,产生泄漏的大小不一样,频率分辨能力也不一样。

实验六用窗函数法设计FIR滤波器分析解析

实验六用窗函数法设计FIR滤波器分析解析

实验六用窗函数法设计FIR滤波器分析解析一、引言数字滤波器是数字信号处理中的重要组成部分。

滤波器可以用于去除噪声、调整频率响应以及提取感兴趣的信号。

有许多方法可以设计数字滤波器,包括窗函数法、频域法和优化法等。

本实验将重点介绍窗函数法设计FIR滤波器的原理和过程。

二、窗函数法设计FIR滤波器窗函数法是设计FIR滤波器的一种常用方法。

其基本原理是将滤波器的频率响应与理想滤波器的频率响应进行乘积。

理想滤波器的频率响应通常为矩形函数,而窗函数则用于提取有限长度的理想滤波器的频率响应。

窗函数的选择在FIR滤波器的设计中起着重要的作用。

常用的窗函数包括矩形窗、汉宁窗、汉明窗、布莱克曼窗等。

对于每种窗函数,都有不同的特性和性能指标,如主瓣宽度、副瓣抑制比等。

根据不同的应用需求,可以选择合适的窗函数。

窗函数法设计FIR滤波器的具体步骤如下:1.确定滤波器的阶数N。

阶数N决定了滤波器的复杂度,一般情况下,阶数越低,滤波器的简单度越高,但频率响应的近似程度也会降低。

2.确定滤波器的截止频率。

根据应用需求,确定滤波器的截止频率,并选择合适的窗函数。

3.根据窗函数长度和截止频率计算理想滤波器的频率响应。

根据所选窗函数的特性,计算理想滤波器的频率响应。

4.根据理想滤波器的频率响应和窗函数的频率响应,得到所需的FIR滤波器的频率响应。

将理想滤波器的频率响应与窗函数的频率响应进行乘积,即可得到所需滤波器的频率响应。

5.对所得到的频率响应进行逆傅里叶变换,得到时域的滤波器系数。

6.实现滤波器。

利用所得到的滤波器系数,可以通过卷积运算实现滤波器。

三、实验结果与分析本实验以Matlab软件为平台,利用窗函数法设计了一个低通滤波器。

滤波器的阶数为16,截止频率为500Hz,采样频率为1000Hz,选择了汉宁窗。

根据上述步骤,计算得到了所需的滤波器的频率响应和时域的滤波器系数。

利用这些系数,通过卷积运算,实现了滤波器。

为了验证滤波器的性能,将滤波器应用于输入信号,观察输出信号的变化。

实验六Hermite 插值

实验六Hermite 插值
x=x1;
while(x<x2)
{
pDC->SetPixel(int(300*x+0.5),int(-300.0*Hermite(x)+0.5),RGB(255,0,0));
//Hermite方法逼近函数
x=x+0.002;
}
}
结果截图:
原函数图像
Hermite两点三次分段插值函数图像
Hermite两点三次分段插值函数图像与原函数图像的对照
xqHii=Daof(cx[i+1])*(x-cx[i+1])*(x-cx[i])*(x-cx[i])/(cx[i+1]-cx[i])/(cx[i+1]-cx[i]);
return xqHi+xqHii;
}
此段返回:H0(x)*f(cx[i])+H1(x)*f(cx[i]);
在(x1,x2)区间函数的三次两点插值函数
分段线性插值函数得到的是一个分段函数。根据传入的自变量的值确定其属于某一区间段,进而调用该段的对应函数。程序实现细则如下:
源代码:
在(X【i】,X【i+1】)区间的h0(x),H0(x),h1(x),H1(x);
double CMyView::h(int i, double x)
{
double xqhi,xqhii;
结果分析:
Hermite两点三次分段插值函数在形值点之间满足函数值与原函数相等,一阶导数相等的较为严格的条件,故其图像与原函数非常相近。
double CMyView::Hermite(double x)
{
int i;
for(i=0;i<N;i++)

实验六用窗函数设计FIR滤波器

实验六用窗函数设计FIR滤波器

实验六用窗函数设计FIR滤波器一、引言数字滤波器是用于处理数字信号的重要工具,而FIR(Finite Impulse Response)滤波器是其中一类常见的滤波器。

在FIR滤波器中,输出信号的每个样本值仅依赖于输入信号在过去固定时间窗口内的样本值。

窗函数则是用于设计FIR滤波器的一种常见方法。

本实验将介绍如何用窗函数设计FIR滤波器,并通过一系列实验验证其性能。

二、实验目的1.了解FIR滤波器的原理和窗函数设计方法。

2.利用MATLAB工具进行FIR滤波器设计与性能评估。

3.分析不同窗函数对FIR滤波器的影响。

三、窗函数设计方法在设计FIR滤波器时,可以通过选择不同的窗函数来实现不同的频率响应。

常见的窗函数有矩形窗、汉宁窗、汉明窗、布莱克曼窗等。

在本实验中,我们将以汉宁窗为例进行讲解。

1.首先确定滤波器的截止频率和通带误差。

2.根据通带误差和滤波器的截止频率计算阶数。

3.根据阶数选择合适大小的窗口长度。

4.选择合适的窗函数,如汉宁窗。

5.计算窗函数的系数,并与理想滤波器的冲击响应相乘得到最终的滤波器系数。

四、实验步骤1.确定滤波器参数:截止频率、通带误差等。

2.根据通带误差和截止频率计算滤波器的阶数。

3.选择合适大小的窗口长度,通常选择大于滤波器阶数的2倍。

4.选择窗函数,如汉宁窗,计算窗函数的系数。

5.根据窗函数系数和截止频率计算滤波器的系数。

6.绘制滤波器的频率响应曲线。

7.利用设计好的FIR滤波器对输入信号进行滤波,并观察滤波效果。

五、实验结果与分析在本实验中,我们选择了截止频率为1kHz的低通滤波器。

首先计算滤波器的阶数,假设通带误差为0.01,根据公式可得N=3.32/((截止频率*通带误差)/采样频率)≈60。

我们选择窗口长度为120,即滤波器的阶数的两倍。

接下来选择汉宁窗作为窗函数,并计算其系数。

最后通过窗函数系数和截止频率计算得到滤波器的系数。

实验采用不同窗函数设计的FIR滤波器进行滤波,观察不同窗函数对滤波器性能的影响。

C语言程序设计实验六函数答案《西北民大电气学院》

C语言程序设计实验六函数答案《西北民大电气学院》

实验六函数一,实验目的:1,掌握定义函数的方法.2,掌握函数实参与形参的对应关系,以及"值传递"的方式.3,掌握函数的嵌套调用和递归调用的方法.4,掌握全局变量和局部变量动态变量,静态变量的概念和使用方法.二,实验准备:1,复习函数调用的基本理论知识.2,复习函数的嵌套调用和递归调用的方法.3,复习全局变量,局部变量;静态变量,动态变量;外部变量等概念和具体使用. 4,源程序.三,实验步骤及内容:1,运行程序并回答问题(1)程序main(){ play(3);}void print_star(){ printf("* * * * * * * * * *\n")}void print_message(){ printf("Good Friend! \n");}void play(n)int n;{ int i;for(i=1;i<=n;++i){ print_star();print_message();}}问题:运行后出现什么错误为什么应如何修改请上机调试.修改:main(){ play(3);}void print_star(){ printf("* * * * * * * * * *\n");(缺少分号)}void print_message(){ printf("Good Friend! \n");}play(n)(原先void的与声明类型不同)int n;{ int i;for(i=1;i<=n;++i){ print_star();print_message();}getch();}运行结果(2)以下程序用于计算1+2+3+4+5.main(){ int i,sum;for(i=1;i<=5;++i)sum=add(i);printf("sum=%d\n",sum);getch();}add (a)int a;{static int s=0;s=s+a;return(s);}运行结果:问题:此程序能否得到正确结果为什么请在不增加语句的条件下,修改程序并上机调试.(3)程序int x=567,y=890;main(){ printf("x=%d,y=%d\n",x,y);}运行结果:问题:运行程序后出现什么错误为什么如何修改答:定义位置出错,y的定义在主函数之后了,将y的定义改在和x一样的位置处。

c语言知识点实验总结

c语言知识点实验总结

c语言知识点实验总结(一)实验目的C语言作为一种通用的高级程序设计语言,被广泛用于系统软件、应用软件、驱动程序、网络通信以及嵌入式系统的开发。

本次实验旨在通过对C语言知识点的实际操作,巩固学生对C语言编程基础知识的掌握,提高学生对C语言程序设计的理解和运用能力,培养学生的程序设计思维和编程实践经验。

(二)实验内容本次实验涉及的C语言知识点包括数据类型、控制语句、循环语句、数组、指针、函数等基本概念和用法。

通过实验,学生将学会如何定义变量、赋值、输入输出、运算、条件判断、循环控制、数组访问、指针使用、函数调用等基本的C语言编程操作。

具体实验内容如下:1. 数据类型:学生需了解C语言的基本数据类型(int、float、char等),并能够正确地声明和初始化各种数据类型的变量。

2. 控制语句:学生需掌握if-else语句和switch-case语句的用法,并能够正确地使用这些控制语句来实现条件判断和分支选择的功能。

3. 循环语句:学生需掌握for循环、while循环和do-while循环的用法,并能够正确地使用这些循环语句来实现重复执行的功能。

4. 数组:学生需了解一维数组和多维数组的定义和使用方法,并能够正确地声明、初始化和访问数组元素。

5. 指针:学生需了解指针的基本概念和使用方法,并能够正确地定义指针变量、进行指针运算、访问指针所指向的变量。

6. 函数:学生需了解函数的定义和调用方法,并能够正确地编写和调用自定义函数,以及理解函数参数传递和返回值的概念。

(三)实验环境本次实验的编程环境为C语言集成开发环境(IDE),可以选择Visual Studio、Dev C++、Code::Blocks等开发工具进行实验。

实验过程中,学生需要使用C语言编译器来编译和执行自己编写的程序代码,以验证程序的正确性和功能实现。

(四)实验步骤1. 实验一数据类型实验目的:了解C语言的基本数据类型和变量定义方法,掌握数据类型之间的转换和运算规则。

java实验报告:实验六

java实验报告:实验六

java实验报告:实验六一、实验目的本次实验的主要目的是深入理解和掌握 Java 中的一些关键概念和技术,包括面向对象编程的特性、异常处理机制以及文件操作等。

通过实际的编程实践,提高我们运用 Java 解决实际问题的能力。

二、实验环境本次实验使用的开发工具是 IntelliJ IDEA,操作系统为 Windows 10。

三、实验内容(一)面向对象编程实践1、定义一个名为“Student”的类,包含学生的姓名、学号和成绩等属性,并实现相应的 getter 和 setter 方法。

2、在主函数中创建“Student”类的对象,并对其属性进行赋值和输出。

(二)异常处理1、编写一个方法,实现两数相除的运算。

如果除数为 0,抛出“ArithmeticException”异常。

2、在主函数中调用该方法,并使用trycatch 语句捕获并处理异常。

(三)文件操作1、创建一个文本文件,并向其中写入一些数据。

2、读取该文件中的数据,并将其输出到控制台。

四、实验步骤(一)面向对象编程实践1、首先,在 IntelliJ IDEA 中创建一个新的 Java 项目。

2、然后,创建“Student”类,代码如下:```javapublic class Student {private String name;private int studentId;private double score;public String getName(){return name;}public void setName(String name) {thisname = name;}public int getStudentId(){return studentId;}public void setStudentId(int studentId) {thisstudentId = studentId;}public double getScore(){return score;}public void setScore(double score) {thisscore = score;}}```3、在主函数中创建“Student”类的对象,并对其属性进行赋值和输出,代码如下:```javapublic class Main {public static void main(String args) {Student student = new Student();studentsetName("张三");studentsetStudentId(1001);studentsetScore(905);Systemoutprintln("学生姓名:"+ studentgetName());Systemoutprintln("学生学号:"+ studentgetStudentId());Systemoutprintln("学生成绩:"+ studentgetScore());}}```(二)异常处理1、编写一个名为“divide”的方法,实现两数相除的运算,代码如下:```javapublic class ExceptionHandling {public static double divide(double num1, double num2) {if (num2 == 0) {throw new ArithmeticException("除数不能为 0");}return num1 / num2;}public static void main(String args) {try {double result = divide(10, 0);Systemoutprintln("结果:"+ result);} catch (ArithmeticException e) {Systemoutprintln("捕获到异常:"+ egetMessage());}}}```(三)文件操作1、创建一个名为“FileOperation”的类,用于实现文件的写入和读取操作,代码如下:```javaimport javaioBufferedWriter;import javaioFileWriter;import javaioIOException;import javaioBufferedReader;import javaioFileReader;public class FileOperation {public static void writeToFile(String filePath, String content) {try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))){writerwrite(content);} catch (IOException e) {eprintStackTrace();}}public static String readFromFile(String filePath) {StringBuilder content = new StringBuilder();try (BufferedReader reader = new BufferedReader(new FileReader(filePath))){String line;while ((line = readerreadLine())!= null) {contentappend(line)append("\n");}} catch (IOException e) {eprintStackTrace();}return contenttoString();}public static void main(String args) {String filePath ="testtxt";String data ="这是写入文件的内容";writeToFile(filePath, data);String readData = readFromFile(filePath);Systemoutprintln("读取到的文件内容:\n" + readData);}}```五、实验结果(一)面向对象编程实践成功创建了“Student”类的对象,并正确地对其属性进行了赋值和输出。

实验六 指针与引用

实验六  指针与引用

实验六指针与引用一、目的和要求1.掌握指针、指针变量、指针常量的基本概念;2.掌握指针与数组、指针与函数的关系及应用。

3.初步掌握引用的概念及简单应用。

二、实验设备及分组1.Windows XP操作系统;2.Visual C++6.0语言环境;3.每人一台PC机。

三、内容和步骤(一)验证实验程序1.指针变量的自加、自减、加n和减n运算。

假设数组a的首地址为1000。

解:# include <iostream.h>void main( ){int a[5]={0,1,2,3,4};int *p;p=&a[0]; //p指向a[0],p=1000p++ ; //p指向下一个元素a[1],p=1004cout<< *p<<'\t'; //输出a[1]的内容1。

p=p+3; //p指向下3个元素a[4],p=1016cout<< *p<<'\t'; //输出a[4]的内容4。

p――; //p指向上一个元素a[3],p=1012cout<< *p<<'\t'; //输出a[3]的内容3。

p=p―3; //p指向上3个元素a[0],p=1000cout<< *p<<'\t'; //输出a[0]的内容0。

}运行结果:1 4 3 02.指出下列程序的错误。

#include <iostream.h>void exchange(int,int);void main(){int a,b;cin>>a>>b;cout<<"Before Exchange:a="<<a<<",b="<<b<<endl;exchange(a,b);cout<<"After Exchange:a="<<a<<",b="<<b<<endl;}void exchange(int x,int y){int t;t=x;x=y;y=t;}分析:本例的目的是在子函数中交换的两个变量的值,在主函数中使用。

c++实验六

c++实验六

实验六1.实验目的通过本次实验(1)初步掌握函数的定义方法,及函数的三种调用方法;(2)理解参数传送过程中,值传送与传地址的过程与区别;(3)初步学会用递归编写程序方法;(4)学会用数组作为函数参数的编程方法。

2.实验要求(1)编写实验程序(2)在VC++运行环境中,输入源程序;(3)编译运行源程序;(4)输入测试数据进行程序测试;(5)写出运行结果。

3.实验内容(1)分别用冒泡法(升序)、选择法(降序)、擂台法(升序)编写三个对一维数组进行排序的函数,函数名为sort1()、sort2()、sort3()。

再定义一个输出数组元素值的函数print()。

在主函数中定义一维整型数组a[N](N=10),用键盘输入10个整数给a[N]数组。

依次调用sort1()、print()、sort2()、print()、sort3()、print(),进行升序、降序、升序的操作,并输出每次排序后的结果。

输入十个实验数据:10,25,90,80,70,35,65,40,55,5(2)编写一个函数px(float x,int n)用递归的方法求下列级数前n项的和s。

在主函数中定义变量x与n,用键盘输入x与n的值,调用px()函数计算并返回级数前n项和s。

最后输出s的值。

输入实验数据:x=1.2 n=10(3)编写一个字符串连接函数str_cat(char s[],char s1[],chars2[]),完成s=s1+s2的字符串连接工作。

具体要求为,先将字符串s1复制到s中,然后再将字符串s2连接到s后面。

在主函数中定义三个字符串数组str[80]、str1[40]、str2[40],将两个字符串输入到str1与str2中,调用字符串连接函数str_cat(),将str1与str2连接到str中,最后输出连接后的字符串str。

要求用两种方法编写str_cat()函数。

方法一,用字符串复制与连接函数。

方法二,用while语句编程实现。

数值分析实验报告--实验6--解线性方程组的迭代法

数值分析实验报告--实验6--解线性方程组的迭代法

1 / 8数值分析实验六:解线性方程组的迭代法2016113 张威震1 病态线性方程组的求解1.1 问题描述理论的分析表明,求解病态的线性方程组是困难的。

实际情况是否如此,会出现怎样的现象呢?实验内容:考虑方程组Hx=b 的求解,其中系数矩阵H 为Hilbert 矩阵,,,1(),,,1,2,,1i j n n i j H h h i j n i j ⨯===+-这是一个著名的病态问题。

通过首先给定解(例如取为各个分量均为1)再计算出右端b 的办法给出确定的问题。

实验要求:(1)选择问题的维数为6,分别用Gauss 消去法、列主元Gauss 消去法、J 迭代法、GS 迭代法和SOR 迭代法求解方程组,其各自的结果如何?将计算结果与问题的解比较,结论如何?(2)逐步增大问题的维数(至少到100),仍然用上述的方法来解它们,计算的结果如何?计算的结果说明了什么?(3)讨论病态问题求解的算法1.2 算法设计首先编写各种求解方法的函数,Gauss 消去法和列主元高斯消去法使用实验5中编写的函数myGauss.m 即可,Jacobi 迭代法函数文件为myJacobi.m ,GS 迭代法函数文件为myGS.m ,SOR 方法的函数文件为mySOR.m 。

1.3 实验结果1.3.1 不同迭代法球求解方程组的结果比较选择H 为6*6方阵,方程组的精确解为x* = (1, 1, 1, 1, 1, 1)T ,然后用矩阵乘法计算得到b ,再使用Gauss 顺序消去法、Gauss 列主元消去法、Jacobi 迭代法、G-S 迭代法和SOR 方法分别计算得到数值解x1、x2、x3、x4,并计算出各数值解与精确解之间的无穷范数。

Matlab 脚本文件为Experiment6_1.m 。

迭代法的初始解x 0 = (0, 0, 0, 0, 0, 0)T ,收敛准则为||x(k+1)-x(k)||∞<eps=1e-6,SOR方法的松弛因子选择为w=1.3,计算结果如表1。

2014《C语言实验指导书》

2014《C语言实验指导书》

《C语言》实验指导书编(全校理工类本科用)2014年2月目录实验一简单C语言程序设计 (1)实验二顺序结构程序设计 (3)实验三选择结构程序设计 (5)实验四循环结构程序设计 (7)实验五数组程序设计 (10)实验六函数程序设计 (13)实验七指针程序设计 (16)实验八结构体程序设计 (17)附录1 C语言上机步骤 (18)实验一简单C语言程序设计实验类型:验证性实验课时: 4 指导教师:时间:2014 年月日课次:第节教学周次:第周实验分室:实验台号:实验员:一、实验目的1.掌握所用的C语言环境的基本操作方法。

2.掌握编辑、编译、连接和运行C程序。

3.掌握C程序的数据类型、运算符,表达式。

二、实验内容和要求1.打开C语言环境,编辑如下程序,写出运行结果。

#include <stdio.h>void main(){printf(“Hello World!\n”);}2. 在屏幕上显示下列图形:* * * ** * ** **3.完成习题集中习题一的内容4. 已知三角形的三边长为3,4,5,求三角形周长5 .完成习题集中习题二内容实验二顺序结构程序设计实验类型:验证性实验课时: 2 指导教师:时间:2014 年月日课次:第节教学周次:第周实验分室:实验台号:实验员:一、实验目的1.掌握基本输入输出函数、库函数的使用。

2.能够编程实现简单的结构化程序。

二、实验内容和要求1.执行程序,写出运行结果。

#include <stdio.h>void main(){float a = 9.1234567891234567890;double b = 9.1234567891234567890;printf("%f, %lf\n",a,b);printf("%.15f,%.15\n",a,b);};2.运行程序,写出结果。

#include <stdio.h>void main(){float x1;double y1 ;scanf("%f %lf ",&x1,&y1) ;printf("x1=%f,y1=%lf ",x1,y1) ;}程序运行时输入x的值123456789,输入y的值123456789。

c++程序编写求三个数的最大值和最小值,c++函数应用

c++程序编写求三个数的最大值和最小值,c++函数应用

c++程序编写求三个数的最⼤值和最⼩值,c++函数应⽤实验六函数及其使⽤1 学时4学时2 实验⽬的与要求学习函数的编写。

理解数学中的函数、⾃变量、函数在某⼀点的取值与 C++中的⾃定义函数、函数参数、函数调⽤及其返回值之间的联系,掌握 C++对数学函数功能的实现⽅式。

3 实验环境WINDOWS XP 或WINDOWS SERVER 2000Microsoft Visual C++ 6.04 准备⼯作安装好Microsoft Visual C++6.05 实验内容(⼀).输⼊三个数,编写⼀个程序求这三个数的最⼤值和最⼩值。

要求把求最⼤值和最⼩值编写成函数。

#includedouble max(double a,double b,double c);double min(double a,double b,double c);int main (){int a,b,c;cout <<"请输⼊三个数: " <cin >>a;cin >>b;cin >>c;cout <<"最⼤数的为: " <cout <<"最⼩的数为: " <return 0;}double max(double a,double b,double c){if (a>b && a>c) return a;if (b>a && b>c) return b;return c;}double min(double a,double b,double c){if (aif (breturn c;}(⼆)编制如下⾃定义函数,实现指定功能。

(1)编⽆参函数,void print(),负责在屏幕的同⼀⾏上连续显⽰ 20 个“-”符号。

(2)编⼀参函数,double f(double x),计算 x2 + x + 1 并返回结果。

实验六参考答案

实验六参考答案

第一套1、程序填空题1)【参考答案】第一处:* 第二处:'Z' 第三处:tt2)【参考答案】第一处:char 第二处:ch<='9' 第三处:'0'2、程序改错题【参考答案】第一处:c=c-32;改为c=c+32; 第二处:c=c-5;改为c=c+5;2、程序设计题【参考答案】void fun(char *s){ int i=0;/*假如s[i]不为字符串结束符,则继续循环,否则退出循环*/while (s[i]!='\0')/*假如s[i]为大写字母Z 且在字符串中下标为奇数的位置上,则转换成小写字母z*/{ if ((s[i]=='Z') && (i%2==1))s[i]='z';/*假如s[i]为除大写字母Z 以外的字母,则直接转换成该字母的小写字母状态的下一个字母*/else if ((s[i]>='A' && s[i]<'Z') && (i%2==1))s[i]=s[i]+33;i++;}}【解题思路】将s 所指字符串中下标为奇数位置上的大写字母转换为字母序列中的下一个小写字母,若该位置上是小写字母,则不转换;若该位置上是大写字母Z,则仅转换成小写字母z。

判断字符为大写字母的方法是:判断字符的ASCII 值是否大于A小于Z。

判断下标为奇数,用i%2 等于1 来判断。

1、程序填空题1)【参考答案】第一处:n >0 第二处:n%10+'0' 第三处:str[i]= ′\0′2)【参考答案】第一处:s[i] >= ′0′ &&s[i]< = ′9′第二处:s[i]- ′0′第三处:n2、程序改错题【参考答案】第一处:if(('a'<=tt[i]) || (tt[i]<='z'))改为if(('a'< =tt[i]) && (tt[i]< ='z'))第二处:tt[i]+=32;改为tt[i]-=32;3、程序设计题【参考答案】long fun(char *p){ long n=0;攀枝花学院计算机基础教研室第1页共3页int flag=0;/*通过循环语句移动指针,取出指针所在位置上的字符*/while(*p!='\0'){ if(*p=='-') /*判断其是否为负号*/flag=1;else if (*p=='+') /*判断其是否为正号*/flag=0;else /*判断其是否为数字字符*/n=n*10+(*p-'0'); /*将数字字符转化为相应的数值*/p++;}if (flag==1) n=-n;return n;}【解题思路】通过循环语句移动指针,取出指针所在位置上的字符,先判断其为正负号还是为数字字符,如果为数字字符则将其转化为相应的数值,否则作正负标记。

实验六 简单正弦交流电路的研究

实验六 简单正弦交流电路的研究

实验六简单正弦交流电路的研究实验目的:1、理解正弦交流电路基本概念和相关计算方法;2、学习正弦交流电路的基本组成和特点;3、通过实验了解正弦交流电路的工作原理和基本参数。

实验仪器:正弦交流信号发生器、多用示波器、交流电压表、电阻箱、万用表等。

实验原理:正弦交流电路是指交流电流或电压大小、正负周期和相位都随时间按正弦规律周期性变化的电路。

正弦电压与正弦电流的关系可以用欧姆定律解释:U = I × R (式一)其中,U为电势差或电压,I为电流,R为电阻。

欧姆定律可以用于所有电路中,在交流电路中也同样可以适用。

因此,在深入研究正弦交流电路之前,我们先了解交流电压的基本性质:(1) 交流电压的特点u(t)= Vm sin(ωt+φ) (式二)其中,Vm为交流电压的幅值,ω为角频率,φ为相位角,t为时间,sin为正弦函数。

(2) 交流电阻理论交流电路中的电阻也称交流电阻,是指电阻对于交流电流的阻力。

交流电路中,电阻对交流电流的阻抗与电阻对直流电流的电阻是不同的,最常用的是交流电阻,即所谓的“阻抗”。

阻抗的计算式为:其中,R为电阻,L为电感,ω为角频率,j为单位虚数。

交流电路中的电感和电容都是随着时间周期性变化的被动元件。

在电路中,它们对于交流电流的阻抗值分别是:Xl = ωL (式四)Xc = 1/(ωC) (式五)交流电阻的大小取决于电阻、电容、电感等电路元件,同时也与电流的频率有关。

一个简单的正弦交流电路由以下几个基本部分组成:(1) 信号源正弦交流电路的信号源一般为交流电源,它会产生正弦波形的交流电。

(2) 负载负载是在正弦交流电路中转换电能并将其用于加热、照明等工作的部分。

负载可以是灯泡、电磁铁、电动机等。

(3) 阻抗实验步骤:1、测量交流电压源的电压并记录下来;2、接通电路并且打开示波器观测交流电压源和负载的电压大小,能够观测到依次变化的电压大小及相位差;3、根据示波器上的波形,测量出交流电压源和负载的电压幅值、频率和相位差;4、更改电压源的电压频率,重新测量交流电路的各种参数,记录下来并计算出传输功率,观察波形对应的变化,分析实验结果。

实验六开环增益与零极点对系统性能的影响

实验六开环增益与零极点对系统性能的影响

实验六 开环增益与零极点对系统性能的影响一.实验目的1.研究闭环、开环零极点对系统性能的影响; 2.研究开环增益对系统性能的影响。

二.实验内容1.搭建原始系统模拟电路,观测系统响应波形,记录超调量σ%、峰值时间tp 和调节时间ts ;2.分别给原始系统在闭环和开环两种情况下加入不同零极点,观测加入后的系统响应波形,记录超调量σ%和调节时间ts ;3.改变开环增益K ,取值1,2,4,5,10,20等,观测系统在不同开环增益下的响应波形,记录超调量σ%和调节时间ts 。

三.实验步骤在实验中观测实验结果时,可选用普通示波器,也可选用本实验台上的虚拟示波器。

如果选用虚拟示波器,只要运行ACES 程序,选择菜单列表中的相应实验项目,再选择开始实验,就会打开虚拟示波器的界面,点击开始即可使用本实验台上的虚拟示波器CH1、CH2两通道观察被测波形。

具体用法参见用户手册中的示波器部分。

1.原始二阶系统实验中所用到的功能区域:阶跃信号、虚拟示波器、实验电路A1、实验电路A2、实验电路A3。

原始二阶系统模拟电路如图1-6-1所示,系统开环传递函数为:0.1(0.21)Ks s ,图1-6-1原始二阶系统模拟电路(1) 设置阶跃信号源:A .将阶跃信号区的选择开关拨至“0~5V ”;B .将阶跃信号区的“0~5V ”端子与实验电路A3的“IN32”端子相连接;C .按压阶跃信号区的红色开关按钮就可以在“0~5V ”端子产生阶跃信号。

(2) 搭建原始二阶系统模拟电路:A .将A3的“OUT3”与A1的“IN11”、“IN13”同时连接,将A1的“OUT1”与A2的“IN21”相连接,将A2的“OUT2”与A3的“IN33”相连接;B.按照图1-6-1选择拨动开关:图中:R1=200K、R2=200K、R3=200K、R4=100K、R5=64K、R6=200K、R7=10K、R8=10K、C1=1.0uF、C2=1.0uF将A3的S5、S6、S10,A1的S3、S6、S9,A2的S3、S8、S13拨至开的位置;(3)连接虚拟示波器:将实验电路A2的“OUT2”与示波器通道CH1相连接。

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

实验六 函数
一、实验目的
1.掌握自定义函数的一般结构及定义函数的方法。

2.掌握形参、实参、函数原型等重要概念。

3.掌握函数声明、函数调用的一般方法。

4. 了解函数的嵌套调用以及函数的递归调用的格式。

二、实验预习
1 .理解为什么要在程序中引入函数?函数的引入对程序的整体结构有什么样的影响?
2. 函数的定义格式,理解函数的类型说明符根据什么来确定?
3. 充分理解函数实参和形参的联系和区别,掌握单向值传递的意义。

4. 了解针对不同返回类型的函数返回值的应用,尤其是有无return 语句的区别。

5. 掌握函数调用与函数声明的格式,了解什么情况下需要进行函数声明?什么情况下不需要?
6. 了解函数嵌套调用和递归调用的原理及使用原则。

三、实验内容
(一)阅读并调试下列程序,根据要求给出程序结果。

1.求三角形面积函数。

⑴ 编程分析
① 设三角形边长为a 、b 、c ,面积area 的算法是s=(a+b+c)/2, area=))()((c s b s a s s --- ,其中 显然,要计算三角形面积,需要用到三个参数,面积函数的返回值的数据类型应为实型。

② 尽管main()函数可以出现在程序的任何位置,但为了方便程序阅读,通常将主函数放在程序的开始位置,并在它之前集中进行自定义函数的原型声明。

⑵ 参考程序
/* 定义和使用求三角形面积函数的程序 */
#include "math.h"
#include "stdio.h"
float area(float,float,float); /*函数的声明*/
void main()
{
float a,b,c;
printf("请输入三角形的三个边长值:\n")
scanf("%f,%f,%f",&a,&b,&c);
if(a+b>c&&a+c>b&&b+c>a&&a>0.0&&b>0.0&&c>0.0)
printf("Area=%-7.2f\n",area(a,b,c));
/* 以下是计算任意三角形面积的函数 */
float area(float a,float b,float c)
{
float s,area_s;
s=(a+b+c)/2.0;
area_s=sqrt(s*(s-a)*(s-b)*(s-c));
return(area_s);
}
⑶ 程序调试
① 三角形面积函数area()不能单独调试,需要通过主函数调用来进行调试。

② 输入多个边长数据进行测试,在输入时,应考虑多种情况,如:负数值、零值、构不成三角形的数值等。

2.菜单程序。

编写一个菜单程序,运行后首先在屏幕显示如下菜单,当输入数值1后,调用显示“&”图案的函数程序;输入数值2后,调用显示“$”图案的函数程序;输入数值3后结束程序。

**********************************
* Menu section *
* 1. Design(&) *
* 2. Design($) *
* 3. Exit *
**********************************
⑴ 编程分析
① 在主程序中生成菜单,并提供数值输入和函数调用功能。

② 分别设计显示“&”图案的design1()函数和显示“$”图案的
design2()函数,以供主函数调用。

design1()和design2()都为void型
函数,无返回值,函数参数也可以缺省。

⑵ 参考程序
/* 菜单程序 */
#include "stdio.h"
void design1(),design2();
void main()
{
int op; /* 以下代码生成菜单 */
printf("\n*************************************");
printf("\n* Menu section *");
printf("\n* 1. Design(&) *");
printf("\n* 2. Design($) *");
printf("\n* 3. Exit *");
printf("\n*************************************");
printf("\nPlease enter selection:");
scanf("%d",&op);
if(op==1)
design1();
else if(op==2)
design2();
else
exit(0);
}
/* 以下是显示&图案的函数 */
void design1()
{
int i;
char str[31]="&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&";
for(i=1;i<10;i++)
puts(str);
return;
}
/* 以下是显示$图案的函数 */
void design2()
{
int i,j;
for(i=1;i<10;i++)
{
for(j=1;j<i;j++)
putchar(' ');
for(j=1;j<30;j++)
putchar('$');
printf("\n");
}
return;
}
⑶ 程序调试
① 为提高程序的调试效率,在设计使用菜单程序之前,首先调试两个图案显示函数。

② 在调试菜单程序时,可以使用简单的空函数,即函数体只包含一个“return;”语句的函数。

③将主函数中的if-else结构尝试采用switch结构来实现,给出最后结果,并分析两种实现方法的异同。

3. 分析下面的程序,根据所学内容对上述程序进行调试,调试通过后写出运行结果。

(1)程序分析
①下面这个程序运行有些错误,学生应该从以下几点来考虑如何修改,使程序正常运行。

在函数被调用前是否需要函数声明?函数返回值是否需要return语句?函数定义时的类型标识符应该根据什么来确定?
②根据以上的提示对程序进行调试,并总结出这一类程序的关于函数声明,函数调用以及函数的返回值等相关的语法点。

(2)参考程序
#include <stdio.h>
main()
{
float n;
float x=1.0,y=2.0;
n=s(x,y);
printf("x=%5.2f,y=%5.2f,n=%5.2f",x,y,n);
}
s(float x,float y)
{
float z;
float x=3.0,y=4.0;
z=x+y;
}
(3)程序的执行结果为____________________________________________。

(二)程序编制题
1. 写一个函数,使给定的一个二维整型数组(3×3)转置,即行列互换。

2. 写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。

3. 用递归法将一个整数n转换成字符串。

例如,输入483,应输出字符串“483”。

n的位数不确定,可以是任意位数的整数。

四、思考题
1.理解局部变量和全局变量的概念区别。

以及如何在程序中使用静态变量。

2.在本实验的菜单程序中再增加一些菜单项,需要调用的用户函数名及其功能自己确定。

3. 比较地址传递和值传递的异同点。

相关文档
最新文档