实验4函数文件
- 格式:doc
- 大小:89.50 KB
- 文档页数:6
电子科技大学计算机学院标准实验报告(实验)课程名称C语言程序设计电子科技大学教务处制表电子科技大学实验报告四学生姓名:学号:指导教师:王瑞锦实验地点:实验日期:年月日一、实验室名称:软件实验室二、实验项目名称:函数的应用及预处理三、实验学时:2四、实验原理:使用Turbo C软件(简称TC),在微型计算机上,对其程序进行编辑、编译、连接与运行。
Turbo C是一个集成环境,它具有方便、直观、易用的界面和丰富的库函数。
通过上机练习掌握在TC环境下编辑、编译、连接、和运行C程序的方法和过程。
五、实验目的1.掌握C语言中定义函数的方法;2.掌握函数传值调用的方法;3.掌握函数传址调用的方法;4.掌握递归函数的设计方法;5.掌握命令行参数的使用方法;6.掌握函数在不同文件中的编译、链接方法。
六、实验内容编程实验,完成以下上机内容,调试运行程序并完成报告1)、教材第七章习题7.4;2)、编写一个实现冒泡法排序的函数,并在主函数中从键盘上输入6个数后进行排序输出;3)、教材第七章习题7.11;4)、教材第七章习题7.15;5)、教材第七章习题7.24;6)、求解汉渃塔(tower of Hanoi)问题。
在一块平板上立有3根立柱,从左到右分别标记为A,B,C。
最初在A柱上放有6个大小不等的圆盘,并且大盘在下面,小盘在上面。
要求将这些盘从A移到C(可以借助B柱)。
条件是:每次只能移动一个盘,并且不允许把大盘放在小盘的上面。
(提示:利用函数的递归调用);七、实验器材(设备、元器件):pc硬件要求:CPU PII 以上,64M 内存,1OOM 硬盘空间即可。
软件要求:DOS3.0以上/Windows98/Me/XP/NT/2000。
八、实验步骤:实验编程与运行结果⑴编写一个求两个整数的最小公倍数的函数,两个整数由键盘输入,用主函数调用这个函数,并输出结果。
程序文件名为7_4.c,源程序清单如下:#include<stdio.h>lcd(int a,int b){int temp,num1,num2;num1=a;num2=b;while(num2!=0){temp=num1%num2;num1=num2;num2=temp;}return(a*b/num1);}main(){int t,x,y;printf("Please input two integers:");scanf("%d,%d",&x,&y);if(x>y){t=x;x=y;y=t;}printf("lcd(%d,%d)=%d\n",x,y,lcd(x,y));}运行结果:⑵编写一个实现冒泡法排序的函数,并在主函数中从键盘上输入6个数后进行排序输出。
Python程序设计实验四Python程序设计实验四实验四:Python程序设计引言:本实验主要内容是从实践出发,通过编写Python程序来学习与巩固Python程序设计的知识。
通过实验,我们将了解如何定义函数、使用条件语句与循环语句、处理异常等,并能够熟练使用Python语言进行程序设计。
具体实验内容如下:实验目的:1. 熟悉Python程序设计的基本语法和原理;2. 掌握使用Python编写函数、条件语句和循环语句的方法;3.学会处理异常和错误,增强程序的健壮性;4.提高编程能力,培养解决问题的思维。
实验内容:本实验中,我们将通过实例代码演示如何定义函数、使用条件语句与循环语句、处理异常等,具体实验内容如下:一、定义函数1.基本函数定义:我们首先会了解函数的基本定义方法,如何定义函数、传入参数和返回值等;2.函数的类型:这一部分我们会了解内置函数、匿名函数、递归函数等不同类型的函数。
二、条件语句1. if语句:我们将学习使用if语句来进行条件判断,并根据判断结果执行不同的代码;2. elif语句:在需要判断多个条件时,我们可以使用elif语句来进行连续条件判断;3. else语句:当所有条件判断都不满足时,我们可以使用else语句来执行默认的代码。
三、循环语句1. for循环:我们将学习使用for循环来遍历序列,如字符串、列表等,并执行相应的代码;2. while循环:当需要在满足一些条件时一直执行代码块时,我们可以使用while循环。
四、异常处理1. try-except语句:当我们预测到一些代码块可能会产生错误时,可以使用try-except语句来捕获并处理异常;2. finally语句:如果有代码需要被无论是否发生异常都执行的情况,可以使用finally语句。
五、实例演示本次实验中,我们将通过编写几个实例来演示如何使用函数、条件语句与循环语句等。
以一个计算器程序为例,我们将用Python编写一个简单的四则运算程序,可以实现输入两个数和运算符后进行运算,并输出结果。
实验四、基于感知函数准则线性分类器设计4.1 实验类型:设计型:线性分类器设计(感知函数准则)4.2 实验目的:本实验旨在让同学理解感知准则函数的原理,通过软件编程模拟线性分类器,理解感知函数准则的确定过程,掌握梯度下降算法求增广权向量,进一步深刻认识线性分类器。
4.3 实验条件:matlab 软件4.4 实验原理:感知准则函数是五十年代由Rosenblatt 提出的一种自学习判别函数生成方法,由于Rosenblatt 企图将其用于脑模型感知器,因此被称为感知准则函数。
其特点是随意确定的判别函数初始值,在对样本分类训练过程中逐步修正直至最终确定。
感知准则函数利用梯度下降算法求增广权向量的做法,可简单叙述为: 任意给定一向量初始值)1(a ,第k+1次迭代时的权向量)1(+k a 等于第k 次的权向量)(k a 加上被错分类的所有样本之和与k ρ的乘积。
可以证明,对于线性可分的样本集,经过有限次修正,一定可以找到一个解向量a ,即算法能在有限步内收敛。
其收敛速度的快慢取决于初始权向量)1(a 和系数k ρ。
4.5 实验内容已知有两个样本空间w1和w2,这些点对应的横纵坐标的分布情况是:x1=[1,2,4,1,5];y1=[2,1,-1,-3,-3];x2=[-2.5,-2.5,-1.5,-4,-5,-3];y2=[1,-1,5,1,-4,0];在二维空间样本分布图形如下所示:(plot(x1,y1,x2,y2))2 -6-4-20246-6-4-22464.6 实验任务:1、 用matlab 完成感知准则函数确定程序的设计。
2、 请确定sample=[(0,-3),(1,3),(-1,5),(-1,1),(0.5,6),(-3,-1),(2,-1),(0,1),(1,1),(-0.5,-0.5),( 0.5,-0.5)];属于哪个样本空间,根据数据画出分类的结果。
3、 请分析一下k ρ和)1(a 对于感知函数准则确定的影响,并确定当k ρ=1/2/3时,相应的k 的值,以及)1(a 不同时,k 值得变化情况。
实验四数据可视化方法[实验目的]1.掌握曲线绘制的基本技法和指令,会使用线形、色彩、数据点标记表现不同数据的特征,掌握生成和运用标识注释图形。
2.进一步掌握函数编写及数据可视化方法。
[实验原理]MATLAB 提供了相当强大的可视化指令,通过这些指令,我们可以非常简单地实现数据的可视化。
首先我们来看离散数据和离散函数的可视化方法。
对于离散实函数y n=f(x n),当x n以递增(或递减)次序取值时,根据函数关系可以求得同样数目的y n,当把这两组向量用直角坐标中的点次序图示时,就实现了离散函数的可视化。
当然这种图形上的离散序列所反映的只是某确定的有限区间内的函数关系,不能表现无限区间上的函数关系。
通常我们可以采用plot 或者stem 来实现。
只是需要注意的是使用plot 时,需要使用星号或者点等标识来表示数据点,比如plot(x n,y n,’r*’,’MarkerSize’,20),就表示用字号20的红色星点来标识数据点,此时为了便于观察,通常随后加上一条语句“grid on”,即给图形加上坐标方格。
而采用stem 标识数据点的格式是stem(x n,y n)。
连续函数的可视化与离散函数可视化类似,也必须先在一组离散自变量上计算相应的函数值,并把这一组“数据点”用点图示。
但这些离散的点不能表现函数的连续性。
为了进一步表示离散点之间的函数函数情况,MATLAB 有两种常用处理方法:一是对区间进行更细的分割,计算更多的点,去近似表现函数的连续变化;或者把两点用直线连接,近似表现两点间的(一般为非线性的)函数形状。
但要注意,倘若自变量的采样点不足够多,则无论哪种方法都不能真实地反映原函数。
对于二维数据,常用指令仍旧是plot。
对于离散数据,plot指令默认处理方法是:自动地把这些离散数据用直线(即采用线性插值)连接,使之成为连续曲线。
对于三维图形的表示,通常有plot3 等指令。
通常,绘制二维或三维图形的一般步骤如下表所示:说明:●步骤1、3 是最基本的绘图步骤,一般来说,由这两步所画出的图形已经具备足够的表现力。
实验四Hash算法和密码应用同组实验者实验日期成绩练习一MD5算法实验目的1理解Hash函数的计算原理和特点,2理解MD5算法原理实验人数每组2人系统环境Windows网络环境交换网络结构实验工具密码工具实验类型验证型一、实验原理详见“信息安全实验平台”,“实验4”,“练习一”。
二、实验步骤本练习主机A、B为一组,C、D为一组,E、F为一组。
首先使用“快照X”恢复Windows 系统环境。
1.MD5生成文件摘要(1)本机进入“密码工具”|“加密解密”|“MD5哈希函数”|“生成摘要”页签,在明文框中编辑文本内容:__________________________________________________________________________。
单击“生成摘要”按钮,生成文本摘要:__________________________________________________________________________。
单击“导出”按钮,将摘要导出到MD5共享文件夹(D:\Work\Encryption\MD5\)中,并通告同组主机获取摘要。
(2)单击“导入摘要”按钮,从同组主机的MD5共享文件夹中将摘要导入。
在文本框中输入同组主机编辑过的文本内容,单击“生成摘要”按钮,将新生成的摘要与导入的摘要进行比较,验证相同文本会产生相同的摘要。
(3)对同组主机编辑过的文本内容做很小的改动,再次生成摘要,与导入的摘要进行对比,验证MD5算法的抗修改性。
2.MD5算法本机进入“密码工具”|“加密解密”|“MD5哈希函数”|“演示”页签,在明文输入区输入文本(文本不能超过48个字符),单击“开始演示”,查看各模块数据及算法流程。
根据实验原理中对MD5算法的介绍,如果链接变量的值分别为(其中,M[1]=31323334):A: 2B480E7CB: DAEAB5EFC: 2E87BDD9D: 91D9BEE8请写出第2轮第1步的运算过程以及经过运算后的链接变量。
实验四函数一、实验目的1.掌握函数的定义、函数的说明和调用。
2.掌握函数的参数及其传递方式,函数值的正确返回。
二、实验内容1.[目的]掌握标准库函数的说明和调用方法。
[题目内容]编写一个程序,首先显示一个菜单,然后根据用户的选择,输入数据后,执行相应的操作。
[输入]用户选择和函数自变量值[输出]如下菜单:=======MENU======1.。
sin2.。
cos3.。
pow4.。
sqrt0.。
exit==================[提示]使用标准库函数、多分支选择结构。
2.[目的]掌握用户自定义函数的定义、函数的说明和调用方法。
[题目内容]编写一个用户自定义函数,该函数有一个整型参数,函数的功能是:当这个整型数的值是偶数时,函数的返回值为0,当这个整型数的值是奇数时,返回值为1 。
编写一个程序,从键盘输入任意10个整数,分别调用用户自定义函数来判断这10个整数的奇偶性。
[输入]任意10个整数[输出]这10个整数的奇偶性[提示]在主函数中使用循环结构输入10个整数。
根据子函数的返回值输出相应的判断结果信息。
3.[目的]掌握用户自定义函数的定义、函数的说明和调用方法。
[题目内容]编写一个用户自定义函数,该函数有三个整数参数,函数的功能是:求解这三个整数的最大值,函数的返回值为三个参数的最大值。
编写一个程序,从键盘输入任意5个整数,分别两次调用用户自定义函数来求出这5个整数中的最大值。
[输入]任意5个整数[输出]这5个整数的最大值[提示]先用前三个整数调用函数,求出的最大值作为参数之一,再与另两个整数一起求出最大值即为所求。
4.[目的]掌握用户自定义函数的定义、函数的说明和调用方法。
[题目内容]nA表示从m各元素中抽出n个元素的排列的个数。
它的计算公式为:m)!(!n m m A n m -=。
编写一个用户自定义函数,该函数有一个整数参数,函数的功能是:求解这个整数的阶乘,函数的返回值为这个整数的阶乘。
JOS实验四作者:卓达城邮箱:zhuodc@备注:本文档重点说明exofork函数的返回机制(下面将以黑体标志),如果有不当,敬请发邮件到我的邮箱。
本文档最精彩的地方在于缺页中断处理函数的返回机制和堆栈的切换,文中以灰底,不同字体、加粗显示。
还有一处就是vpd和vpt的使用,这里用了回环搜索pgdir和二级页表,也用加粗显示。
如果要做实验四,要用svn把mit提供的实验代码很lab3 的代码合并。
前面的实验也如此。
修改:对于实验三,有部分地方的代码我写错了,要修改,具体如下:函数:load_icode修改user_mem_check函数:现在进入实验4:PART A:实现调度算法第一步:修改kern/sched.c里面的函数sched_yield,具体代码如下:这个函数很简单,就是从当前环境的下一个环境一直遍历到当前环境,如果有可以运行的就开始运行。
如果没有,就进入idle环境。
然后修改系统调用,具体是修改syscall.c里面的syscall,具体代码如下:这里要完成part a的话不用添加那么多,但是我是做完lab4再写的,所以就多加了一些进去。
现在在init.c里面多创建几个环境,以供测试,具体如下:多余的调试信息删除掉,才能看到效果,不然程序会不断地刷屏。
又或者把这两句激活,也可以达到效果的。
现在开始实现sys_exofork函数:这个函数主要是用来创建环境,这个函数也是整个实验最为难理解的函数之一,这里将详细解释,如果讲的不好,请莫怪,因为实在比较复杂。
函数代码不多,具体如下:要理解这个函数,又要回顾一下中断和异常这方面的知识:我们可以大体的把cpu的中断和异常弄成四类,fault、trap、interrupt(用户调用)、abort 不好用中文翻译,关于那个中断号我们这里都用call来做说明,中断和异常进行特权级的切换(只要设计者愿意,可以在任何特权级间切换),而call是不能的,call tss段也可以切换,但是只能同特权级或者高特权级到低特权级的切换。
实验四函数重载和运算符重载(2学时)一、实验目的1.掌握函数的定义和调用方法。
2.练习重载函数的使用,注意与缺省参数的区别。
3.练习函数模板的使用。
4.练习运算符重载。
5.练习使用系统函数。
6.学习使用VC++的debug调试功能,使用step into追踪到函数内部。
二、实验任务1.定义一个简单的菜单类,运行时显示主菜单,可通过选择进入子菜单(可模仿ATM柜员机的模式,菜单内容可自行设定,相关功能函数可不用实现):主菜单:取现的子菜单1.转账 1.5002.余额查询 2.10003.取现 3.1500Q(退出) 4.返回主菜单请选择(A/S/F/Q)?选择相应的选项后悔执行相应模块并回到主菜单,选择Q则退出。
2.编写重载函数Maxl可分别求取两个整数,三个整数,两个双精度数,三个双精度数的最大值。
3.使用重载函数模板重新实现上小题中的函数Maxl。
4.使用系统函数pow(X,y)计算X y的值,注意包含头文件math.h。
5.用递归的方法编写函数求Fibonacci级数,观察递归调用的过程。
6.写一个点point的类,并重载+实现两个点的坐标相加,和-实现求两点间的距离, >>、<<输入输出点的信息,(1)和(2)分别取点的x和y轴坐标。
三、实验步骤1.考虑抽取菜单的数据和相关操作。
2.分别编写四个同名函数maxl,实现函数重载,在main()函数中测试函数功能。
程序名:lab3_2.cpp。
3.使用函数模板实现求任意类型数的最大值,针对不同的参数个数,编写两个同名函数模板maxl,其参数个数不同,实现函数重载,在main()函数中测试函数功能。
程序名:lab3_3.cpp。
4.在main()函数中提示输入两个整数x、y,使用cin语句得到x、y的值,调用pow(x,y)函数计算x的Y次幂的结果,再显示出来。
程序名.1ab3_4.cpp。
5.编写递归函数int fib(int n),在主程序中输入n的值,调用fib函数计算Fibonacci级数。
实验四 函数文件
1.定义一个函数文件,求给定复数的指数、对数、正弦和余弦,并在命令文件中调用该函数文件。
函数文件:
function [e,ln,s,c]=plural(x)
e=exp(x);
ln=log(x);
s=sin(x);
c=cos(x);
End
命令文件:
x=input('请输入一个复数:');
[e,ln,s,c]=plural(x);
e
ln
s
c
运行结果:
请输入一个复数:3+4i
e =
-13.1288 -15.2008i
ln =
1.6094 + 0.9273i
s =
3.8537 -27.0168i
c =
-27.0349 - 3.8512i
2.一物理系统可用下列方程组来表示:
⎥
⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡----g g m m N N a a m m m m 2121212111001cos 000sin 00cos 0sin 0sin cos θθ
θθ
θθ 从键盘输入m 1、m 2和θ的值,求N a a 121、、和N 2的值。
其中g 取9.8,输入
θ时以角度为单位。
函数文件:
function [a1,a2,N1,N2]=physis(m1,m2,t)
g=9.8;
A=[m1*cos(t*pi/180),-m1,-sin(t*pi/180),0;...
m1*sin(t*pi/180),0,cos(t*pi/180),0;...
0,m2,-sin(t*pi/180),0;...
0,0,-cos(t*pi/180),1];
B=[0;m1*g;0;m2*g];
x=inv(A)*B;
a1=x(1);
a2=x(2);
N1=x(3);
N2=x(4);
命令文件:
m1=input('请输入m1:');
m2=input('请输入m2:');
t=input('请输入角度t :');
[a1,a2,N1,N2]=physis(m1,m2,t);
a1
a2
N1
N2
运行结果:
请输入m1:3
请输入m2:4
请输入角度t :30
a1 =
7.2211
a2 =
2.6801
N1 =
21.4410
N2 =
57.7684
3.设f(x)=01.011.01
)3()2(4
2+++--x x ,编写一个MATLAB 函数文件fx.m ,使得调用f(x)时,x 可用矩阵代入,得出的f(x)为同阶矩阵。
函数文件:
function [f]=fx(x)
a=0.1+(x-2).^2;
b=0.01+(x-3).^4;
f=1./a+1./b;
end
命令文件:
x=input('请输入矩阵x:');
f(x)=fx(x);
disp(f(x))
运行结果:
请输入矩阵x:[1 2 3;4 5 6]
0.9716 10.9901 100.9091
1.2340 0.1724 0.0745
4.已知y=)
20()30()40(f f f + (1)当f(n)=n+10ln(n 2+5)时,求y 的值。
函数文件:
function t=fn(x)
t=x+10*log(x*x+5);
命令文件:
[t(40)]=fn(40);
[t(30)]=fn(30);
[t(20)]=fn(20);
y=t(40)/(t(30)+t(20));
Y
运行结果:
y =
0.6390
(2)当f(n)=1⨯2+2⨯3+3⨯4+…+n ⨯(n+1)时,求y 的值。
函数文件:
function f=fn2(n)
if n<=0
f=0;
else
f=fn2(n-1)+n*(n+1);
end
命令文件:
[f(40)]=fn2(40);
[f(30)]=fn2(30);
[f(20)]=fn2(20);
y=f(40)/(f(30)+f(20));
Y
运行结果:
y =
1.7662
5.假设银行利率为常数,根据公式*(1)n FV PV i =+可以计算出存款余额。
其中:FV 是存款余额;PV 是最初的存款额;i 是每个复利计算期的利率,用分数表示,如5%表示为0.05;n 是复利计算期的数量。
(1)创建MATLAB 函数future_value ,函数的三个输入参数分别是:最初的存款额,分数表示的利率和复利计算期的数量。
函数文件:
function FV=future_value(PV,i,n)
FV=PV*(1+i)^n;
end
(2)利用函数计算¥1000资金在银行中存10年,账户中应有多少存款。
假设月利率为0.5%,利息按月结算。
命令文件:
pv=input('请输入最初的存款额:');
i=input('请输入复利计算期的利息:');
n=input('请输入复利计算期的数量:');
[fv]=future_value(pv,i,n);
fv
format bank
运行结果:
请输入最初的存款额:1000
请输入复利计算期的利息:0.005
请输入复利计算期的数量:10
fv =
1051.14
6.创建函数polygon,画出任意边数的多边形。
函数将给定的边数作为仅有的输入变量,没有输出变量,能够在极坐标系中画出所要求的多边形。
函数文件:
function polygon(n)
if n>=3
t=2*pi/n;
theta=0:t:2*pi;
rho=2*ones(size(theta));
polar(theta,rho);
else
disp('您的输入不正确!')
end
命令文件:
n=input('请输入多边形的边数:');
polygon(n)
运行结果:
7.由物理学中的著名方程2
可知,物体具有的能量E等于物体质量m乘以光
E mc
速的平方。
真空中光的传播速度是2.9979×108m/s。
(1)创建函数energy,根据物体质量(单位kg)计算物体具有的能量。
能量的单位用焦耳表示,1kg m2/s2=1J。
函数文件:
function E=energy(m)
c=2.9979e8;
E=m*c^2;
调用文件:
m=input('请输入物体的质量,单位为kg:');
E=energy(m);
disp(['质量为',num2str(m),'的物体具有的能量为: ',
num2str(E),'J'])
运行结果:
请输入物体的质量,单位为kg:1
质量为1的物体具有的能量为:89874044100000000J
(2)利用函数计算质量为1kg到106kg的物体所具有的能量。
用函数logspace创建物体质量的矢量,函数语法可参考help/logspace。
调用命令:
m=logspace(0,6,10); %生成10的0次方到10的6次方之间按对数等分
的6个元素的行向量
E=energy(m);
E
运行结果:
E =
1.0e+022 *
0.0000 0.0000 0.0002 0.0009 0.0042
0.0194 0.0899 0.4172 1.9363 8.9874
(3)将计算结果绘图。
对比几种对数坐标作图方法(如semilogy、semilogx和loglog),比较哪种图形效果最好。
命令文件:
m=logspace(0,6,10);
E =energy(m);
subplot(2,2,1);
semilogx(m,E);
title('semilogx(m,E)');
grid on;
subplot(2,2,2);
semilogy(m,E);
title('semilogy(m,E)');
subplot(2,2,[3,4]);
loglog(m,E);
title('loglog(m,E)')
运行结果:
在全对数坐标系中是线性的递增的。