实验06 函数
- 格式:doc
- 大小:53.00 KB
- 文档页数:6
一、实验目的1. 理解函数的概念及其应用。
2. 掌握函数的基本性质和运算。
3. 应用函数解决实际问题。
4. 提高数学思维能力和解决问题的能力。
二、实验内容本次实验主要围绕以下内容展开:1. 函数的定义及性质2. 常见函数的图像和性质3. 函数的运算4. 函数在实际问题中的应用三、实验步骤1. 函数的定义及性质(1)首先,我们学习了函数的定义:设A、B是两个非空数集,如果按照某种确定的对应关系f,使得对于集合A中的任意一个数x,在集合B中都有唯一确定的数y与之对应,则称这种对应关系f为从集合A到集合B的一个函数,记作f:A→B。
(2)接着,我们探讨了函数的基本性质,如单调性、奇偶性、周期性等。
(3)最后,我们分析了函数的图像,了解函数图像与函数性质之间的关系。
2. 常见函数的图像和性质(1)我们学习了幂函数、指数函数、对数函数、三角函数等常见函数的图像和性质。
(2)通过绘制函数图像,我们观察了函数的增减性、对称性、周期性等特征。
(3)我们掌握了如何根据函数图像分析函数性质的方法。
3. 函数的运算(1)我们学习了函数的加法、减法、乘法、除法、复合等基本运算。
(2)通过练习,我们熟练掌握了函数运算的技巧。
(3)我们了解了函数运算在实际问题中的应用。
4. 函数在实际问题中的应用(1)我们学习了如何利用函数解决实际问题,如优化问题、增长率问题等。
(2)通过实例分析,我们掌握了函数在实际问题中的应用方法。
(3)我们提高了运用数学知识解决实际问题的能力。
四、实验结果与分析1. 函数的定义及性质通过实验,我们掌握了函数的定义和基本性质,如单调性、奇偶性、周期性等。
同时,我们了解了函数图像与函数性质之间的关系。
2. 常见函数的图像和性质通过绘制函数图像,我们直观地观察了函数的增减性、对称性、周期性等特征。
这有助于我们更好地理解函数的性质。
3. 函数的运算通过练习,我们熟练掌握了函数的加法、减法、乘法、除法、复合等基本运算。
06实验六Leaky ReLUs激活函数周常欣2019-9-1ReLU简介ReLU函数代表的的是“修正线性单元”,它是带有卷积图像的输入x的最大函数(x,o)。
ReLU函数将矩阵x内所有负值都设为零,其余的值不变。
ReLU函数的计算是在卷积之后进行的,因此它与tanh函数和sigmoid函数一样,同属于“非线性激活函数”。
这一内容是由Geoff Hinton首次提出的。
ReLU 的缺点训练的时候很”脆弱”,很容易就”死(die)”了。
例如,一个非常大的梯度流过一个ReLU 神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了,那么这个神经元的梯度就永远都会是0。
如果学习率(learning rate) 很大,那么很有可能网络中的40% 的神经元都”dead”了。
为了解决Relu函数这个缺点,在Relu函数的负半区间引入一个泄露(Leaky)值,所以称为Leaky Relu函数,如下图所示:Leaky ReLU简介ReLU是将所有的负值都设为零,相反,Leaky ReLU是给所有负值赋予一个非零斜率。
Leaky ReLU激活函数是在声学模型(2013)中首次提出的。
以数学的方式我们可以表示为:a i是(1,+∞)区间内的固定参数。
带泄露修正线性单元(Leaky ReLU)函数是经典(以及广泛使用的)的ReLu激活函数的变体,该函数输出对负值输入有很小的坡度。
由于导数总是不为零,这能减少静默神经元的出现,允许基于梯度的学习(虽然会很慢),解决了Relu函数进入负区间后,导致神经元不学习的问题。
吴恩达(Andrew Ng)说:1、Leaky ReLU函数比ReLU函数效果好,但实际中Leaky ReLU并没有ReLU用的多。
2、除了输出层是一个二元分类问题外,基本不用Sigmoid函数3、Relu是最常用的默认激活函数,若不确定用哪个激活函数,就使用Relu或者Leaky Relu。
leaky_relu.m%########################################################################## function result = leaky_relu(x, leak)if (nargin < 2)leak = 0.2;%a i=5endresult = x;result(x<0) = result(x<0) * leak;end%##########################################################################main.m%######################################################################## clc;clear;x=linspace(-10.0,10.0);y=leaky_relu(x);plot(x,y);fontSize=10;title('leaky relu函数','FontSize',fontSize)xlabel('x','FontSize',fontSize)ylabel('leaky relu(x)','FontSize',fontSize)grid on%######################################################################## 调试:。
函数实验报告总结函数实验报告总结引言:函数是计算机编程中的重要概念,它能够将一组输入映射为输出,是程序设计中模块化和可重用性的基石。
为了更好地理解函数的概念和使用方法,我们进行了一系列的函数实验。
本文将对这些实验进行总结和归纳,探讨函数在实际编程中的应用。
实验一:函数的定义和调用在这个实验中,我们学习了函数的基本概念和语法。
通过定义一个简单的函数,我们了解了如何使用关键字“def”来定义函数,并通过调用函数来执行其中的代码块。
这个实验让我们明白了函数的封装性和可复用性,可以将一段代码封装成函数,供其他地方调用。
实验二:函数的参数传递在这个实验中,我们学习了函数的参数传递方式。
通过定义带有参数的函数,我们了解了函数参数的不同类型,包括位置参数、关键字参数和默认参数。
我们还学习了如何在函数调用时传递参数,并探讨了参数传递的机制和注意事项。
这个实验让我们对函数的灵活性和可变性有了更深入的理解。
实验三:函数的返回值在这个实验中,我们学习了函数的返回值。
通过定义带有返回值的函数,我们了解了如何使用关键字“return”来返回函数执行的结果。
我们还学习了函数返回值的类型和用途,包括返回单个值、返回多个值和返回空值。
这个实验让我们明白了函数的结果可以被其他代码使用,提高了代码的灵活性和可扩展性。
实验四:递归函数在这个实验中,我们学习了递归函数的概念和用法。
通过定义递归函数来解决问题,我们了解了递归的原理和应用场景。
我们还学习了递归函数的优缺点,包括代码简洁但可能导致性能问题。
这个实验让我们对递归思想和算法有了更深入的认识,提高了问题解决的能力。
实验五:高阶函数在这个实验中,我们学习了高阶函数的概念和用法。
通过定义接受函数作为参数或返回函数的函数,我们了解了高阶函数的特点和应用场景。
我们还学习了匿名函数和函数式编程的基本概念,以及如何使用内置函数和自定义函数来实现高级功能。
这个实验让我们对函数的扩展性和灵活性有了更深入的理解。
函数产生的社会背景历史表明,重要数学概念对数学发展的作用是不可估量的,函数概念对数学发展的影响, 可以说是贯穿古今、旷II持久、作用非凡,I口I顾函数概念的历史发展,看一看函数概念不断被精炼、深化、丰富的历史过程,是一件十分有益的事情,它不仅有助于我们提高对函数概念来龙去脉认识的清晰度,而且更能帮助我们领悟数学概念对数学发展,数学学习的巨大作用。
(一)马克思曾经认为,函数概念来源于代数学中不定方程的研究。
由于罗马时代的丢番图对不定方程已有相当研究,所以函数概念至少在那时已经萌芽。
日哥白尼的天文学革命以后,运动就成了文艺复兴时期科学家共同感兴趣的问题,人们在思索:既然地球不是宇宙中心,它本身又有日转和公转,那么下降的物体为什么不发生偏斜而还要垂直下落到地球上?行星运行的轨道是椭圆,原理是什么?还有,研究在地球表面上抛射物体的路线、射程和所能达到的高度,以及炮弹速度对于高度和射程的影响等问题,既是科学家的力图解决的问题,也是军事家要求解决的问题,函数概念就是从运动的研究中引申出的一个数学概念,这是函数概念的力学来源。
(二)早在函数概念尚未明确提出以前,数学家己经接触并研究了不少具体的函数,比如对数函数、三角函数、双曲函数等等。
1673年前后笛卡儿在他的解析几何中,己经注意到了一个变量对于另一个变量的依赖关系,但由于当时尚未意识到需要提炼一般的函数概念,因此直到17世纪后期牛顿、莱布尼兹建立微积分的时候,数学家还没有明确函数的一般意义。
1673年,莱布尼兹首次使用函数一词表示“慕”,后来他用该词表示曲线上点的横坐标、纵坐标、切线长等曲线上点的有关几何量。
几乎与此同时,牛顿在微积分的讨论中,使用另一名词“流量”来表示变量间的关系,直到1689年,瑞士数学家约翰•贝努里才在莱布尼兹函数概念的基础上,对函数概念进行了明确定义,贝努里把变量x和常量按任何方式构成的量叫“x 的函数”,表示为叔。
当时,由于连接变数与常数的运算主要是算术运算、三角运算、指数运算和对数运算, 所以后来欧拉就索性把用这些运算连接变数x和常数c而成的式了,取名为解析函数,还将它分成了“代数函数”与“超越函数”。
实验六函数一、实验目的1. 熟练掌握函数的定义、函数的类型和返回值。
2. 熟练掌握形式参数与实际参数、参数值的传递。
3. 掌握函数的嵌套调用与递归调用。
4.学会使用指向函数的指针变量。
5.了解指向指针的指针的概念及带参数的main函数。
6. 掌握局部变量和全局变量。
7. 掌握变量的存储类型。
8. 了解内部函数和外部函数。
二、实验学时:8课时三、预习知识1.标准库函数标准库函数是C系统提供的,这些库函数定义了一些基本的、常用的功能,用户可以使用这些库函数,但是在使用库函数之前需要用预编译命令# include将该库函数所在的头文件包含进来。
2.自定义函数定义函数一般有两种形式形式1:存储类型类型符函数名(类型符形参1,类型符形参2 ,… ) { 说明语句执行语句}形式2:存储类型类型符函数名(形参1,形参2 ,……)形参类型说明{ 说明语句执行语句}说明:①形参表中即使没有参数,函数名后的一对圆括号也不能省略。
②函数名前的类型符是用来说明函数返回值的数据类型(也作为函数的数据类型) 。
当函数值为整型时,类型符可以省略。
③当函数只完成某一特定操作不需要返回值时,可用类型标识符 void 说明,将函数定义成空类型。
④C 规定:不允许在一个函数内部再定义另外一个函数,即函数不允许嵌套定义。
⑤函数的存储类型:函数的存储类型有 extern 和 static 两种。
extern 型的函数除了可以被本程序中其它函数调用外,还可以被其它文件中的函数调用,这种函数称为外部函数,如果定义函数时省略 extern ,则隐含为外部函数。
static 型的函数只能被本源程序文件中的函数调用,称为内部函数(静态函数)。
3.函数的参数(1)在定义函数时函数名后面括号中的变量称为形参(形式参数),如果有两个以上形参,形参之间以逗号分隔。
形参是函数的内部变量,只在函数内部才有意义。
在未出现函数调用时,形参不占内存。
对每个形参必须指明其名字和数据类型。
C语⾔与数据结构实验指导Harbin Institute of TechnologyC语⾔与数据结构实验指导书刘梅索莹⽥⽂龙哈⼯⼤电⼦与信息⼯程学院电⼦⼯程系实验1 实验平台⼀、实验⽬的1.掌握Microsoft Visual C++ 6.0集成环境的使⽤⽅法。
2.掌握C程序在Microsoft Visual C++ 6.0开发环境中的编辑、编译、链接和运⾏全过程⼆、实验内容1)启动Microsoft Visual C++ 6.0开发环境双击桌⾯应⽤程序图标或“开始”菜单程序组中的Microsoft Visual C++ 6.0应⽤程序,启动VC++,如图所⽰图1.1 VC++初始界⾯2)建⽴C源程序⽂件⽅法1:单击⼯具栏的“新建⽂本⽂件”按钮,打开⽂本⽂件编辑界⾯如下图所⽰图1.2 ⽂本⽂件编辑界⾯⽅法2:执⾏“⽂件”->“新建”命令,如图1.3所⽰,在“⽂件”选项卡下选择C++ Source File ⽂件类型,然后输⼊C源程序⽂件名和保存⽂件,如图1.3所⽰,然后单击“确定”按钮,打开源程序⽂件编辑界⾯,如图1.4所⽰。
注意:输⼊C源程序⽂件名时必须带上扩展“.c”,否则默认创建的是扩展名为“.cpp”的C++⽂件。
3)编辑源⽂件⽅法1:在如图1.2所⽰的⽂本⽂件编辑界⾯中输⼊源程序代码,如图1.5所⽰。
⽅法2:在如图1.4所⽰的C源程序⽂件编辑界⾯中编辑源程序代码,如图1.6所⽰。
图1.3 新建⽂件图1.4 C源程序⽂件编辑界⾯图1.5 ⽂本⽂件编辑界⾯编辑源⽂件图1.6 C源程序编辑界⾯编辑源⽂件4)保存源⽂件源⽂件编辑结束后,执⾏“⽂件”->“保存”命令保存⽂件,⽂本⽂件编辑界⾯中编辑的源⽂件保存时必须在⽂件名后加上扩展名“.c”,否则保存的是扩展名为txt的⽂本⽂件,不能编译运⾏。
5)组件⽂件执⾏“组建”->“组建”命令或直接按F7功能键或单机⼯具栏Build按钮,可以对源⽂件进⾏编译、链接⽽不运⾏该程序。
实验六用窗函数法设计FIR滤波器分析解析一、引言数字滤波器是数字信号处理中的重要组成部分。
滤波器可以用于去除噪声、调整频率响应以及提取感兴趣的信号。
有许多方法可以设计数字滤波器,包括窗函数法、频域法和优化法等。
本实验将重点介绍窗函数法设计FIR滤波器的原理和过程。
二、窗函数法设计FIR滤波器窗函数法是设计FIR滤波器的一种常用方法。
其基本原理是将滤波器的频率响应与理想滤波器的频率响应进行乘积。
理想滤波器的频率响应通常为矩形函数,而窗函数则用于提取有限长度的理想滤波器的频率响应。
窗函数的选择在FIR滤波器的设计中起着重要的作用。
常用的窗函数包括矩形窗、汉宁窗、汉明窗、布莱克曼窗等。
对于每种窗函数,都有不同的特性和性能指标,如主瓣宽度、副瓣抑制比等。
根据不同的应用需求,可以选择合适的窗函数。
窗函数法设计FIR滤波器的具体步骤如下:1.确定滤波器的阶数N。
阶数N决定了滤波器的复杂度,一般情况下,阶数越低,滤波器的简单度越高,但频率响应的近似程度也会降低。
2.确定滤波器的截止频率。
根据应用需求,确定滤波器的截止频率,并选择合适的窗函数。
3.根据窗函数长度和截止频率计算理想滤波器的频率响应。
根据所选窗函数的特性,计算理想滤波器的频率响应。
4.根据理想滤波器的频率响应和窗函数的频率响应,得到所需的FIR滤波器的频率响应。
将理想滤波器的频率响应与窗函数的频率响应进行乘积,即可得到所需滤波器的频率响应。
5.对所得到的频率响应进行逆傅里叶变换,得到时域的滤波器系数。
6.实现滤波器。
利用所得到的滤波器系数,可以通过卷积运算实现滤波器。
三、实验结果与分析本实验以Matlab软件为平台,利用窗函数法设计了一个低通滤波器。
滤波器的阶数为16,截止频率为500Hz,采样频率为1000Hz,选择了汉宁窗。
根据上述步骤,计算得到了所需的滤波器的频率响应和时域的滤波器系数。
利用这些系数,通过卷积运算,实现了滤波器。
为了验证滤波器的性能,将滤波器应用于输入信号,观察输出信号的变化。
函数(二)实验报告
《函数(二)实验报告》
实验目的:通过本次实验,掌握函数的概念、性质和应用,加深对函数的理解,提高数学分析和解决问题的能力。
实验内容:
1. 函数的概念和性质:通过观察和分析不同函数的图像,探讨函数的定义域、
值域、单调性、奇偶性等性质。
2. 函数的应用:结合实际问题,利用函数的概念和性质进行建模和求解,探讨
函数在生活中的应用。
实验步骤:
1. 确定实验的函数范围和内容,选择适当的函数进行实验。
2. 绘制函数的图像,观察函数的变化规律,分析函数的性质。
3. 结合实际问题,利用函数建立数学模型,并求解相关问题。
实验结果:
1. 通过实验,我们深入理解了函数的定义和性质,掌握了函数的图像和变化规律。
2. 在实际问题中,我们成功利用函数的概念和性质建立了数学模型,并求解了
相关问题,验证了函数在生活中的应用价值。
实验结论:
通过本次实验,我们加深了对函数的理解,提高了数学分析和解决问题的能力。
函数是数学中的重要概念,具有广泛的应用价值,我们将继续深入学习和探索
函数的相关知识,不断提高自己的数学素养和解决问题的能力。
实验总结:
本次实验不仅加深了对函数的理解,还提高了我们的数学分析和解决问题的能力。
在今后的学习和工作中,我们将继续加强对函数的学习和应用,不断提升自己的数学素养和解决问题的能力。
实验六、利用MATLAB 计算复变函数在孤立奇点处的留数及进行复积分计算一、本实验教学的作用:熟悉MATLAB 基本命令与操作,利用MATLAB 计算复变函数在孤立奇点处的留数;利用MATLAB 计算围线积分。
通过实验具体操作,培养学生综合实践能力。
二、本实验教学目的及学生能力标准:会利用MATLAB 计算复变函数在孤立奇点处的留数;会利用MATLAB 计算围线积分。
三、实验内容:四、相关知识1.在孤立起点处的留数----通过求极限的方法计算留数假设已知奇点α和重数m 则用下面的MATLAB 语句求出相应的留数B=limit(F*(z-α),z, α) 单奇点B=limit(F*(z-α)*m ,z,m -1)/prod(1:m-1),z,α m 重奇点例1 计算z e z z z z f 23)3cos()1(1)(-+-=π在孤立起点处的留数 解 函数)(z f 在0=z 是三重奇点,在1=z 是简单奇点>>syms z>>f=cos(z+pi/3)*exp(-2*z)/z^3*(z-1);>>limit(diff(f*z^3,z,2)/prod(1;2),z,0);>> limit((f*(z-1),z,1)ans=-1/4-1/2*3^(1/2)1/2*exp(-2)*cos(1)-1/2*3^(1/2)*exp(-2)*sin(1)学生练习1 计算z e z z z z f 23)3sin()1(1)(-+-=π在孤立起点处的留数 提示 函数)(z f 在0=z 是三重奇点,在1=z 是简单奇点>>syms z;>>f=sin(z+pi/3)*exp(-2*z)/z^3*(z-1);>>limit(diff(f*z^3,z,2)/prod(1;2),z,0);>> limit((f*(z-1),z,1)ans=-1/4*3^(1/2)+1/2-1/2*exp(-2)*sin(1)+1/2*3^(1/2)*exp(-2)*cos(1)例2 计算3542)(zz i z z f ++=在孤立起点处的留数 解 函数)(z f 在0=z 是三重奇点,在i i z 2,2-=是简单奇点>>syms z;>>f= (z+2*i3) /z^5+z^3);>>limit(diff(f*z^3,z,2)/prod(1;2),z,0);>> limit((f*(z-2*i),z,2i)>> limit((f*(z+2*i),z,-2i)ans=i/8-i/8例3 计算函数1)(2-=z e z f z在∞=z 处的留数 解 函数)(z f 在扩充复平面有三个极点:∞-=,1,1z>>syms z>>z1=exp(z)/(z^2-1);>>B1=limit(z1*(z-1),z,1)>>B2=limit(z1*(z+1),z,-1)>>B=B1+B2ansB1=1/2*exp(1)B2=-1/2*exp(-1)B=1/2*exp(1)-1/2*expp(-1)学生练习2 计算函数4sin )(zz z z f +=在0=z 处的留数 提示 函数)(z f 在0=z 是四重奇点>>syms z;>>f= (sin(z)+z)/z^4;>>limit(diff(f*z^4,z,3)/prod(1;3),z,0);ans=-1/6学生练习3 计算下列函数在奇点处的留数:(1) z z z 212-+ (2)14-z z 解 在Matlab 命令窗口键入:>> [r1,p1,k1]=residue([1,1],[1,-2,0])r1 =1.5000-0.5000p1 =2k1 =[ ]>> [r2,p2,k2]=residue([1 0],[1 0 0 0 -1])r2 =0.25000.2500-0.2500 + 0.0000i-0.2500 - 0.0000ip2 =-1.00001.00000.0000 + 1.0000i0.0000 - 1.0000ik2 =[ ]反之:>> [B,A]=residue([0.2500 0.2500 -0.2500 -0.2500],[-1 1 i -i],[])B =0 0 1 0A =1 0 0 0 -12.求积分2.1 非闭合路径的积分非闭合路径的积分,用函数int 求解,方法同微积分部分的积分。
实验六函数 (2学时)一、实验目的1.掌握C语言函数的定义、声明以及函数的调用方法。
2.掌握函数实参与形参的对应关系以及主调函数和被调函数之间的“值传递”的方式。
3.熟练掌握数组作为函数参数的用法。
4.掌握函数的嵌套调用和递归调用的方法。
5.掌握全局变量和局部变量动态变量、静态变量的概念和使用方法。
6.学习对多文件程序的编译和运行。
二、实验重点1.掌握函数定义、函数调用的方法。
2.掌握函数实参与形参的对应关系以及主调函数和被调函数之间的“值传递”的方式。
三、实验难点1.掌握函数实参与形参的对应关系以及主调函数和被调函数之间的“值传递”的方式。
2.掌握函数的嵌套调用和递归调用的方法。
四、实验内容及步骤1.写一个判断素数的函数,在主函数输入一个整数,输出是否素数的信息。
解题思路:(1)判断素数的函数名为Prime。
(2)传递参数为int类型的变量。
(3)输出格式为:* is a prime!或者* is not a prime!(*代表输入的整数)参考程序如下:#include <stdio.h>void Prime( int num ){int i;int flag=0;for( i=2;i<num;i++ ){if( num%i==0 ){flag=1;break;}}if( flag==0 )printf("%d is a prime!\n",num);elseprintf("%d is not a prime!\n",num);}void main( ){int num;printf("Please input a num:");scanf("%d",&num);Prime(num);}2.写一个函数,用“冒泡法”对输入的10个整数由小到大排序,并将排序后的结果输出到屏幕上。
解题思路:(1)排序的函数名为Sort。
(2)排序前的输入和排序后的输出都在主函数中完成。
(3)使用数组作为函数参数。
(4)使用“冒泡法”排序。
参考程序如下:#include <stdio.h>void Sort( int num[] ){int i,j;int temp;for( i=0;i<=8;i++ ){for( j=0;j<9-i;j++ ){if( num[j]>num[j+1] ){temp=num[j];num[j]=num[j+1];num[j+1]=temp;}}}}void main( ){int num[10];int i;printf("Please input 10 numbers:");for( i=0;i<10;i++ )scanf("%d",&num[i]);Sort(num);printf("the sorted numbers:");for( i=0;i<10;i++ )printf("%d ",num[i]);}3.写一函数,使给定的一个二维数组(5×5)转置,即行列互换。
解题思路:(1)使用5×5的二维数组存放数据。
(2)矩阵转置的函数名为Turn。
(3)转置前后的输入输出都应在主函数中完成。
(4)使用数组作为函数参数.参考程序如下:#include <stdio.h>void Turn( int num[5][5] ){int i,j;int temp;for( i=0;i<5;i++ ){for( j=i;j<5;j++ ){temp=num[i][j];num[i][j]=num[j][i];num[j][i]=temp;}}}void main( ){int num[5][5]={{1,2,3,4,5},{2,3,4,5,1},{3,4,5,1,2},{4,5,1,2,3},{5,1,2,3,4}};int i,j;printf("Before array be turned:\n");for( i=0;i<5;i++ ){for( j=0;j<5;j++ )printf("%2d ",num[i][j]);printf("\n");}Turn(num);printf("After array be turned:\n");for( i=0;i<5;i++ ){for( j=0;j<5;j++ )printf("%2d ",num[i][j]);printf("\n");}}4.写一函数,使输入的字符串逆序存放,在主函数中输入和输出字符串。
解题思路:(1)字符串逆序的函数名为Reverse。
(2)逆序前输入和逆序后的输出都应在主函数中完成。
(3)使用数组作为函数参数。
(4)需要使用strlen函数得到字符串长度,需要在源文件头部加入#include<string.h>。
参考程序如下:#include <stdio.h>#include <string.h>void Reverse( char str[] ){int length;int i;char temp;length=strlen(str);for( i=0;i<length/2;i++ ){temp=str[i];str[i]=str[length-1-i];str[length-1-i]=temp;}}void main( ){char str[50];printf("Please input a string:");scanf("%s",str);Reverse(str);printf("After reversed is %s\n",str);}5.写一函数,求字符串的长度,并编写主函数。
解题思路:(1)求字符串长度的函数名为:Count(2)可利用字符串结束的标志'\0'来判断字符串是否已经到串尾。
(3)输出格式为:The length of string is *!(*代表字符串的长度)。
(4)使用数组作为函数参数。
参考程序如下:#include <stdio.h>int Count( char str[] ){int i;for( i=1;str[i]!='\0';i++ );return i;}void main( ){char str[10];int length;printf("Please input the string:");scanf("%s",str);length=Count(str);printf("The length of string is %d!\n",length);}五、课后作业1.运行课本中第八章的例8.2,通过此题了解简单的函数定义及程序运行过程。
2.阅读以下程序,分析程序完成的功能,然后上机验证结果。
(1)#include <stdio.h>void main( ){void f(float,float);float x,y;scanf("%f,%f",&x,&y);f(x,y);}void f(float a ,float b){float c;if(a>b)c=a+b;elsec=a-b;printf("%f",c);}【分析提示】该程序通过函数f,对形式参数为a,b进行相应运算。
通过该题目验证自定义函数的定义、调用、参数传递、返回值之间的关系。
请思考:如果将该函数定义为带返回值的类型,该程序应该如何改变?(2)#include <stdio.h>void func( );void main( ){int x=5,y=0;printf("x=%5d y=%5d \n",x,y);func( );printf(" x=%5d y=%5d \n",x,y);func( );}void func( ){static int x=4;int y=10;x=x+2;y=y+x;printf(" x0=%5d y0=%5d \n",x,y);}请思考:分析该程序的运行结果并给出简单解释。
3.运行课本第8章中的例8.9,通过此题了解函数的递归调用的原理及应用方法。
4.(选做题)某班期末考试科目为数学(MT)、英语(EN)和物理(PH),有最多不超过30人参加考试。
考试后要求:(1)计算每个学生的总分和平均分。
(2)按总分成绩由高到低排出成绩的名次,若成绩相同,姓名按字典顺序由低到高排出名次。
(3)打印出名次表,表格内包括学生编号、各科分数、总分和平均分。
(4)任意输入一个学号,能够查找出该学生在班组中的排名及其考试分数。
解题思路:用二维数组score存放每个学生各门课程的成绩,用一维数组num存放每个学生的学号,用一维数组sum存放每个学生的总分,用一维数组aver存放每个学生的平均分。
(1)用函数编程实现计算每个学生的总分。
(2)用函数编程实现按总分由高到低对学生成绩排序。
注意:排序时,一维数组sum元素的变化应连同二维数组score及一维数组num和aver一起变化。
(3)用函数编程实现查找学号为K的学生在班级中的排名及相关成绩等信息,找不到时返回-1值。
六、总结1.总结函数的功能。
2.总结模块化程序设计的优点。
3.总结在解题过程中遇到的问题及解决方法。