实验八函数的高级特性
实验目的:
掌握函数与数组、指针的关系;了解内联函数的概念;熟悉函数的缺省参数和函数重载的概念;掌握函数递归调用的思想和方法。
实验要求:
对实验内容中的每个题目,用C++语言实现,考虑能不能简化、改进;搞清楚每行代码的含义,保证类似的题目也能实现。注意变量名、缩进、程序嵌套结构等代码规范。
实验内容:
写在动手之前:
==================================数组元素和数组名作为函数参数的区别:
数组元素做函数参数时,就是将数组元素的值作为实参传递给函数中的形参,也可以将数组元素的地址、引用作为参数传递给函数的形参;跟普通变量作为函数参数的用法相同。
数组名作为函数参数时,传递的是数组的首地址,所以函数的形参(数组)将指向实参(数组)的地址空间,对形参的操作结果会返回给实参;由于此时传递的只是数组首地址,并没有数组长度信息,所以通常我们会再传递一个代表数组长度的变量。如FindMax(Arr, Len);
==================================函数与指针:
函数的参数可以是指针,函数的返回值也可以是指针:函数可以将处理结果的地址而不是值返回。在函数中,返回全局变量的地址、返回动态分配内存的地址,都是正确的操作;返回函数中的局部变量的地址是错误的操作。当在函数中动态分配内存,然后返回地址给调用函数时,要记得在调用函数中及时释放该内存块,避免内存泄漏。
==================================函数的缺省参数:
C++为函数的实现提供了便利:我们可以指定函数的缺省参数,这样当某次调用函数时,不指定该参数的值时,它就按缺省的参数设置。例如:void AddGrade (int Grade[], int nLen, int add=10)
//函数定义,给数组Grade中各成绩增加一个分值,默认增加10分
{…}
…
AddGrade(Class1Grade, 50);//给Class1Grade数组中的学生成绩各增加10分AddGrade(Class2Grade, 50, -20);//给Class2Grade数组中的成绩各减少20分
缺省参数一般在函数声明中提供。若程序中既有函数的声明又有函数的定义,则函数定义中不允许定义参数的默认值。当程序中只有函数的定义时,默认参数才可出现在函数定义中。
设置为有缺省值的参数,要按从右至左的方式逐渐定义。如:
int function(int a, int b, int c, int d=5, int e=3);
==================================函数的重载:
C++为函数的实现提供了便利:函数重载,一个函数可以和同一作用域中的其他函数具有相同的名字,但这些同名函数的参数类型、参数个数、返回值、函数功能可以完全不同。一般重载函数做的功能类似,根据参数、返回类型的不同稍有区别。这样我们可以把一类函数看成一个函数,不用考虑某次具体执行应该调用哪个函数,让编译器根据我们所给的参数来选择即可。
==================================
以下题目注意函数名、变量名、返回类型的设置等代码规范。
1、用两种方法,将数组a[20]中的元素逆序排列。第一、交换操作用函数实
现,将数组元素作为函数参数,循环多次调用这个函数。第二、将数组首
地址作为参数传递给函数,实现逆序排列,在主函数中调用这个函数。
2、定义指针函数(即返回值为指针的函数),分别取得全局变量、局部变量、
新分配的堆内存空间的地址,访问这些地址,参照ppt上的例8-5
3、用函数实现字符串拷贝的功能,具体要求如下:
拷贝操作用指针函数实现,参数为源字符串(即字符数组首地址);
在函数中开辟新的内存空间,用来存放新字符串,拷贝操作完成后,把
新字符串的地址返回;
在主函数中,调用拷贝函数后,记得释放new出来的堆内存。
4、定义一个函数AddGrade,完成将成绩数组中的元素各增加值a的操作,
增加值默认为10;在主函数中两次调用这个函数,一次增加默认值,一
次增加20;分别输出结果查看。
5、定义一组重载函数,分别完成求三个变量的和,三个参数分别是整型、浮
点型。
实验八公式、序列及函数的使用 一、实验目的 1.熟练掌握序列填充及公式复制的方法; 2.掌握常用函数的功能及使用方法,并能用它们来解决一些实际问题。 二、实验内容与操作步骤 在Excel环境下完成以下各操作: (一)序列填充及公式的使用 1.在Excel中创建一个空白工作簿 2.利用Excel提供的数据填充功能,在Sheet1工作表中输入以下数据: ⑴在区域A1:A9中从上到下填入:2,4,6,8,10,12,14,16,18 ⑵在区域B1:B9中从上到下填入:1,2,4,8,16,32,64,128,256 ⑶在区域C1:C12中从上到下填入:JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC ⑷在区域D1:D7中从上到下填入:星期日,星期一,星期二,星期三,星期四,星期五,星期六 3.在Sheet2工作表中,利用公式计算二次函数ax2+bx+c的值,其中a=2,b=3,c=5,x从-3到4变化,每隔0.5取一个函数值。操作方法写出如下: 4.把工作簿以E81.XLS为文件名存入D:\EX8中。 (二)函数的使用 在Excel环境下打开D:\EX8\E82.XLS文件,依次完成以下各操作后按E83.XLS为文件名存入D:\EX8中。 1、统计函数的使用 ⑴单击“统计函数”工作表;
⑵在区域F3:G8中用“统计函数”计算出各分店的统计值。 操作方法是:先在F3单元及G3单元输入的计算公式,然后选定区域F3:G3后双击其填充柄。其中F3单元的公式为,G3单元的公式为。 ⑶在区域B9:E12用“统计函数”计算出各季度的统计值。 2、条件函数的使用 ⑴单击“条件函数”工作表。 ⑵计算出各学生的平均分; ⑶给定各学生的成绩等级,规则如下:平均分≥90为“A”,80≤平均分<90为“B,70≤平均分<80为“C”,60≤平均分<70为“D”,平均分<60为“E”。以此规则在区域F3:F62用IF函数确定各学生的等级。 ⑷用FREQUENCY函数在区域I2:I5中统计出平均分0~59,60~79,80~99,100各分数段的学生人数。 3、文本函数的使用 ⑴单击“文本函数”工作表; ⑵在区域A2:F32给出的数据清单中,编号的前3位为系别信息,101为数学系,102为物理系,103为化学系,据此在区域B3:B32用函数求出每位教师的系别。其中B3单元使用的公式为。 ⑶已知身份证号的第7至第10位数为出生年份,据此在区域F3:F32用函数求出每位教师的出生年份。其中F3单元使用的公式为。 4、日期函数的使用 ⑴单击“日期函数”工作表; ⑵在区域A2:F32给出的数据清单中,在区域E3:E32用日期函数求出每位职工的工龄。其中E3单元使用的公式为。 ⑶在区域F3:F32用日期函数求出每位职工的工作天数(即自参加工作以来已经过的总天数。其中F3单元使用的公式为。 5、财务函数的使用 使用 PMT 函数完成以下有关的操作: ⑴单击“财务函数”工作表; ⑵某企业向银行贷款5 万元,准备4年还清,假定当前年利率为 4 % ,在 B5 单元 计算每个月应向银行偿还贷款的数额,根据条件在 B2 : B4 补充所需内容。其中单元格B5 使用的公式为。 ⑶假定当前年利率为 5 %,为使 5 年后得到 10 万元的存款,在 D5 单元计算现在开
实验8 函数(一)实验目的: 1、理解自定义函数过程的定义与调用方法; 2、掌握自定义函数的定义与调用方法; 3、理解函数中的参数的作用; 实验内容: 1、编写一函数Fabonacci(n),其中参数n代表第n 次的迭代。While循环 def fib(n): if n==1 or n==2: return 1 a=1 b=1 i=2 while True: c=a+b a=b b=c i+=1 #第i次迭代,也就就是第i个数 if i==n: return c break def main(): n=input("Enter a number of generation:") print fib(n) main() 或者用for循环 def fib(n): a=1 b=1 c=0 if n==1 or n==2: return 1 else: for i in range(3,n+1): c=a+b a=b b=c return c def main(): n=input("enter n:") print fib(n) main() 2、编写一函数Prime(n),对于已知正整数n,判断该数就是否为素数,如果就是素数,返回True,否则返回 False。 def prime(n): if n<2: return False a=0 for i in range(1,n+1): if n%i==0: a+=1 if a>2: return False else: return True def main(): n=input("Enter a number:") print prime(n) main() Or: def prime(n): if n<2: return False if n==2: return True for i in range(2,n): if n%i==0: return False return True def main(): n=input("Enter a number:") print prime(n) main()
实验1 cin、cout及面向过程的编程实验2 引用与函数重载 实验3 类与对象 实验4 静态成员与对象参数 实验5 拷贝构造函数与内存分配 实验6 对象数组与子对象 实验7 含有数组成员的对象与深拷贝实验8 运算符重载(1) 实验9 运算符重载(2) 实验10 继承与派生 实验11 虚函数与类族 实验12 STL
实验1 cin 、cout 及面向过程的编程 1A :显示某个日期是星期几 (1) 输入、输出要求: 输入:3个正整数,依次为年、月、日,比如2049 10 1 输出:按类似“[2049-10-5] is Friday.”的形式输出 示例: (2) 处理方法 历史上的某一天是星期几?未来的某一天是星期几?关于这个问题,有很多计算公式,其中最著名的是蔡勒(Zeller)公式。即 7)%110)1(26244(-+? ?? ???++-??????+??????+=d m c c y y w 公式中的符号含义: w ——星期几 c ——年份的前两位 y ——年份的后两位 m ——月,3≤m ≤14,某年的1、2月视为上一年的13、14月,比如2003年1月1日要看作2002年的13月1日 d ——日 ??——代表取整,即只要整数部分 %——除法求余数 例如:对于2049年10月1日,计算过程如下: 5 7%547)%284051249(7)%1110)110(2620242044949(==+-++=-+??? ???++?-??????+??????+=w 即2049年10月1日是星期5。如果计算结果是负数,则加7。 1B :格式化输出实数 从键盘读取本金和年利率,求20年中每年末本息合计有多少钱。 输入:用空格分隔的两个数,都可以带小数点 输出:以“钱数(?年后)”的方式显示,以“2格、右对齐”的方式显示年,以“共10格、小数点后取2位、右对齐”的方式显示本息合计的钱数,见示例 示例:本金973.45元、年利率2%的显示结果如下
实验八函数 【目的与要求】 1.掌握C语言函数的定义方法、函数的声明及函数的调用方法。 2.了解主调函数和被调函数之间的参数传递方式。 【上机内容】 【一般示例】 【例1】将打印18个"*"组成星形线定义为一个返回值和形参列表都为空的函数,通过主函数调用它。 #include
#include
实验八 函 数(二) 参考答案 /*1.(sy8-1.c ) 请编写函数 fun ,其功能是:计算并输出给定数组(长度为 9)中每相邻两个元素之平均值的平方根之和。 例如,给定数组中的 9 个元素依次为 12.0、34.0、4.0、23.0、34.0、45.0、18.0、3.0、11.0,输出应为:s=35.951014。 【解题思路】 在给出的参考程序中,由于函数要求的返回值为双精度型,所以先将变量 avg 、sum 定义为双精度型,初值为 0.0,然后通过 for 循环分别求出相邻两个元素的平均值放入变量 avg 中,再使用求平方根函数sqrt()对各平均值开方求和,最终结果输出到变量 sum 中并返回。 【参考答案】*/ double fun(double x[9]) { int i ; double avg=0.0,sum=0.0; //将变量avg 、sum 定义为双精度型,并给其赋初值为0.0 for (i=0;i< 8;i++) { avg=(x[i]+x[i+1])/2; //通过for 循环分别求出相邻两个元素的平均值放入变量avg 中 sum+=sqrt(avg); //使用求平方根函数sqrt()对各平均值开方求和,最终结果输出到变量 sum } return sum; /*返回计算结果*/ } 2.(sy8-2.c ) 编写函数fun ,实现矩阵(3行3列)的转置(即行列互换)。例如,输入下 面的矩阵:????? ??900800700600500400300200100,程序输出: ???? ? ??900600300800500200700400100。 【解题思路】 方阵转置,只需要将左下半三角元素和右上半三角元素对换即可。 【参考答案】 int fun(int array[3][3]) { int i,j,t ; for(i = 0 ; i < 3 ; i++) for(j = 0 ; j < i ; j++) {t=array[i][j]; array[i][j]=arrar[j][i]; array[j][i]=t ; } } 3.(sy8-3.c ) 请编写函数 fun ,函数的功能是:统计一行字符串中单词的个数作为函数值返回。一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干个空格隔开,一行的开始没有空格。 【解题思路】I am a student! 在给出的参考程序中,若判断出当前字符为非空格,而它前面的字符是空格,则单词数累加 1;若当前字符为非空格,而其前面的字符也为非空格,则单词数不累加 1,程序细节可以参考程序的注释部分。 【参考答案1】 int fun( char s[])
实验十函数应用 一?实验目的 1.掌握函数的定义和调用; 2.理解形参和实参的使用和传值调用; 3.理解函数声明的使用; 4.掌握函数的嵌套调用; 5.了解函数的嵌套与递归调用,掌握递归函数的编写规律; 6.了解数组元素、数组名作函数参数。 二?实验学时数 2学时 三?实验步骤 (一)阅读程序 1.#include
x=x-y; printf("%d,%d\n",x,y); 3.#include
淮海工学院计算机科学系实验报告书 课程名:《C语言程序设计A 》 题目:实验8 函数 ——递归函数 班级:软嵌151 学号:2015123349 姓名:陈正宁
1、实验内容或题目 (1)用递归编写n!的函数,并在main主函数中调用此函数。 (2)有n个大小不同的盘片从大到小放在A柱上,另有B和C两个空柱,要求将这n个盘片从A柱搬到C柱上,在搬动过程中,每次只能搬一个盘片,而且小的不能放在大的之下。编写hanio函数实现搬迁过程。 (3)编写一个程序,求解皇后问题:在n×n的方格棋盘上,放置n个皇后,要求每个皇后不同行、不同列、不同左右对角线。 2、实验目的与要求 (1)要求熟练掌握函数的定义和调用,熟悉函数返回值的使用。 (2)熟悉函数调用的方式和过程。 (3)重点掌握递归函数的使用。 (4)要求实验的第2题采用递归函数编写,盘片的数目在main主函数中输入。提示:函数的参数定义如hanio(n,A,C,B),表示将n个盘片从A柱通过C柱搬到B柱。 (5)要求实验的第3题采用递归函数编写皇后的个数n由用户输入,其值不能超过20;采用整数数组q[N]求解结果,因为每列只能放一个皇后,q[i]的值表示第i个皇后所在的行号,即该皇后放在(q[i],i)的位置上。求解皇后问题的递归模型如下:place(i,n):若i=n,则n个皇后放置完毕,输出解(输出q数组元素) place(k,n):在第k列找一个合适位置i,放置一个皇后(即q[k]=i);place(k+1,n);其中,place(k,n)表示前面的第1,…,k-1个皇后放置好后,现在用于放置k,…,n的皇后。 3、实验步骤与源程序 ⑴实验步骤 ⑵源代码 (1)、 #include
实验5 函数 姓名:学号:实验日期: 1.实验目的和要求:参见实验指导书实验八 2.实验内容和步骤: 实验内容:实验指导书中的实验八 实验步骤: 2.1.实验内容的第1题,通过本题,了解到要在单步调试时能够观察自定义的函数内部变量变化情况,单步调试如何操作: 1.在“菜单栏”中单击“组建”,然后在弹出的下划栏中选择“开始调试”,然后选择“Step Into”;或者按“F11”。 2.然后开始单步调试,按F10 提问 修改前运行结果画面: (1),请在下面粘贴运行结果画面: #include
实参a是否为同一变量?不是 提问(2),请请在下面粘贴运行结果画面:#include
int a=3,b=5; 通过本题,可以得出什么结论?若没给未知量赋予初值,那未知量将被随意赋值,赋值一主函数的赋值为先。 2.2 实验内容部分第2题源程序代码,请贴图: 程序运行结果画面,请贴图: 2.3 实验内容部分第3题源程序代码,请贴图:
实验8 参考答案 二、实验内容与操作步骤 (二) 函数的使用 1、统计函数的使用 其中F3单元的公式为=SUM(B3:E3) ,G3单元的公式为=A VERAGE(B3:E3)。 2、条件函数的使用 ⑶其中F3单元使用的公式为: =IF(E3>=90,”A”,IF(E3>=80,”B”,IF(E3>=70,”C”,IF(E3>=60,”D”,”E”))))。 然后双击F3单元的填充柄。 ⑷具体的操作步骤及计算公式如下: (1)在区域H2:H4输入统计间距数据59.9,79.9,99.9; (2)选定作为统计结果数据的输出区域:I2:I5; (3)输入频度分析统计函数的公式:=FREQUENCY(E3:E62,H2:H4); (4)按[Ctrl]+[Shift]+[Enter] 3、文本函数的使用 ⑵其中B3单元使用的公式为 =IF(LEFT(A3,3)=”101”,”数学系”,IF(LEFT(A3,3)=”102”,”物理系”,”化学系”))。 ⑶其中F3单元使用的公式为 =MID(E3,7,4) 。 4、日期函数的使用 ⑵其中E3单元使用的公式为 =YEAR(TODAY())-YEAR(D3)+1 。 ⑶其中F3单元使用的公式为 =TODAY()-D3 。 5、财务函数的使用 ⑵其中B5单元使用的公式为 =PMT(B2/12,B3*12,B4)。 ⑶其中E5单元使用的公式为 =PMT(E2/12,E3*12,,E4)。 6、排位函数的使用 ⑵其中G2单元使用的公式为 =F2-$B$10 。 ⑶其中H2单元使用的公式为 =RANK(F2,$F$2:$F$8,1) 或 =RANK(G2,$G$2:$G$8,1) 。 三、思考与练习 1、具体的操作步骤及计算公式如下: (1) 在区域F10:F13输入统计间距数据99,199,299,399; (2) 选定作为统计结果数据的输出区域:G10:G14; (3) 输入频度分析统计函数的公式:=FREQUENCY(C3:C23,F10:F13); (4) 按[Ctrl]+[Shift]+[Enter] 2、操作步骤及计算公式:
实验八 函 数(二) 参考答案 1.(sy8-1.c ) 请编写函数 fun ,其功能是:计算并输出给定数组(长度为 9)中每相邻两个元素之平均值的平方根之和。 例如,给定数组中的 9 个元素依次为 1 2.0、34.0、4.0、2 3.0、3 4.0、4 5.0、18.0、3.0、11.0,输出应为:s=35.951014。 【解题思路】 在给出的参考程序中,由于函数要求的返回值为双精度型,所以先将变量 avg 、sum 定义为双精度型,初值为 0.0,然后通过 for 循环分别求出相邻两个元素的平均值放入变量 avg 中,再使用求平方根函数sqrt()对各平均值开方求和,最终结果输出到变量 sum 中并返回。 【参考答案】 double fun(double x[9]) { int i ; double avg=0.0,sum=0.0; //将变量avg 、sum 定义为双精度型,并给其赋初值为0.0 for (i=0;i< 8;i++) { avg=(x[i]+x[i+1])/2; //通过for 循环分别求出相邻两个元素的平均值放入变量avg 中 sum+=sqrt(avg); //使用求平方根函数sqrt()对各平均值开方求和,最终结果输出到变量 sum } return sum; /*返回计算结果*/ } 2.(sy8-2.c ) 编写函数fun ,实现矩阵(3行3列)的转置(即行列互换)。例如,输入下 面的矩阵:????? ??900800700600500400300200100,程序输出: ???? ? ??900600300800500200700400100。 【解题思路】 方阵转置,只需要将左下半三角元素和右上半三角元素对换即可。 【参考答案】 int fun(int array[3][3]) { int i,j,t ; for(i = 0 ; i < 3 ; i++) for(j = 0 ; j < i ; j++) t=array[i][j], array[i][j]=arrar[j][i], array[j][i]=t ; } 3.(sy8-3.c ) 请编写函数 fun ,函数的功能是:统计一行字符串中单词的个数作为函数值返回。一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干个空格隔开,一行的开始没有空格。 【解题思路】 在给出的参考程序中,若判断出当前字符为非空格,而它前面的字符是空格,则单词数累加 1;若当前字符为非空格,而其前面的字符也为非空格,则单词数不累加 1,程序细节可以参考程序的注释部分。 【参考答案】 int fun( char s[]) { int i,word=0,num=0;/*word 标志是否是单词,num 用来记录单词数*/ for(i=0;s[i]!=?\0?;i++)
一、选择题 1.甲、乙两车分别从A 地出发匀速行驶到B 地,在整个行驶过程中,甲、乙两车离开A 城的距离(km)y 与甲车行驶的时间(h)t 之间的关系如图所示,则下列结论中正确的个数为( ) ①,A B 两地相距480km ; ②乙车比甲车晚出发1小时,却比甲车早到1小时; ③乙车出发后4小时时追上甲车; ④甲,乙两车相距50km 时, 3.5t =或4.5. A .1 B .2 C .3 D .4 2.若正比例函数y =(m ﹣2)x 的图象经过点A(x 1,y 1)和点B(x 2,y 2),当x 1<x 2时,y 1>y 2,则m 的取值范围是( ) A .m >0 B .m <0 C .m >2 D .m <2 3.已知函数y kx b =+的图象如图所示,则函数y bx k =-的图象大致是( ) A . B . C . D . 4.如图,一次函数y kx b =+(,k b 为常数,且0k ≠)的图像经过点(3,2)-,则关于x 的不等式2kx b +<的解集为( ) A .3x >- B .3x <- C .2x > D .2x < 5.甲,乙两车分别从A , B 两地同时出发,相向而行.乙车出发2h 后休息,当两车相遇时,两车立即按原速度继续向目的地行驶.设甲车行驶的时间为x (h ), 甲,乙两车到B 地
的距离分别为y 1(km ), y 2(km ), y 1, y 2关于x 的函数图象如图.下列结论:①甲车的速度是 45a km /h ;②乙车休息了0.5h ;③两车相距a km 时,甲车行驶了5 3 h .正确的是( ) A .①② B .①③ C .②③ D .①②③ 6.如图,在平面直角坐标系中,点()2,A m 在第一象限,若点A 关于x 轴的对称点B 在直线1y x =-+上,则m 的值为( ) A .-1 B .1 C .2 D .3 7.科学家就蟋蟀鸣叫的次数与室外温度的数量关系做了如下记录: 蟋蟀每分钟鸣叫的次数 温度/°F 144 76 152 78 160 80 168 82 176 84 ) A .178 B .184 C .192 D .200 8.火车匀速通过隧道时,火车在隧道内的长度y (米)与火车行驶时间x (秒)之间的关
实验八函数(二) 一.实验目的与要求 1.理解函数的嵌套调用和递归调用特点 2.熟悉简单的递归函数设计 3.理解函数参数的普通值传递和地址值传递特点 4.掌握用数组元素和数组名作为函数参数的应用 5.理解变量的作用域和存储属性,掌握局部变量和全局变量、静态变量和动态变量的特 点和应用。 二.实验准备。 1、函数的嵌套调用 C规定,函数不能嵌套定义,但可以嵌套调用。当一个函数调用另一个函数时,前者称为主调函数,后者称为被调函数。不管函数嵌套调用多少次,当被调函数执行结束后返回它的主调函数的调用位置,继续执行主调函数中的其他操作。 2、函数的递归调用 一个函数直接或间接地调用自身称为递归调用。有递归调用语句的函数称为递归函数。C对函数递归自调用的次数没有限制,但每调用一次函数,会在内存的堆栈区分配存储空间用于存放函数的返回位置等相关信息。堆栈的特点是后进先出,所以最后调用的函数最先返回。如果递归自调用的次数过多,可能导致堆栈的溢出。所以,在设计递归函数时,函数体中一般有if~else~这样的语句,用于设置递归结束的条件和继续递归的语句。 3、函数的参数的两种传递方式 (1) 普通值传递的特点: ●只能由实参向形参单向传递,形参的修改不能影响实参 ●形参变量在调用函数时才分配存储空间,调用结束后即释放其存储空间 ●最多只能通过return 语句带回一个返回值 (2) 地址值传递的特点: ●实参是地址常量或变量,形参是能接收实参值的地址变量 ●在被调函数中可以间接使用实参提供的地址空间的数据,相当于“双向”传递。 ●不用return 可以在主调函数中得到多个处理结果 4、数组作为函数参数 (1) 数组元素作为实参:等价于普通变量作为实参,形参为同类型的普通变量,是普通值传递。 (2) 数组名作为实参:传递主调函数中实参数组存储空间的首地址,形参定义为同类型同大小的数组,且形参一维数组可以省略其大小,形参二维数组可以省其第一维大小。是地址值传递。 5、需掌握的教材例题 ●嵌套调用:例7.5 ●递归调用:例7.6、例7.7 ●数组名作函数参数:例7.11、例7.12、例7.13 ●全局变量:例7.14、例7.15 ●静态变量:例7.16、例7.17 三、实验内容(按要求设计以下程序,并调试分析运行结果) 1.(sy8-1.c)请编写函数fun,其功能是:计算并输出给定数组(长度为9)中每相邻两个元素之平均值的平方根之和。例如,给定数组中的9 个元素依次为1 2.0、34.0、4.0、
实验八 专业_____________ 班级________年级________姓名______________学号_______________ 一、实验目的 1、掌握通用过程和函数的定义及调用方法 2、了解参数的传递 3、掌握简单的递归算法 二、实验内容 1、在窗体层编写过程Proc1(a() as integer)其功能:给数组a赋[0,99]的随机整数,并显示在Text1中;Proc2(a() as integer)其功能是把数组a进行逆序存放。单击“生成随机数”按钮用于调用Proc1过程;单击“调用proc”按钮,调用Proc2过程;单击“输出结果”按钮,将调用Proc2的结果显示在Text2中。 D i m b(9)A s I n t e g e r D i m s t r a A s S t r i n g P r i v a t e S u b C o m m a n d1_C l i c k() C a l l p r o c1(b()) E n d S u b S u b p r o c1(a()A s I n t e g e r) R a n d o m i z e F o r i=0T o U B o u n d(a) a(i)=I n t(R n d*100) T e x t1.T e x t=L T r i m(T e x t1.T e x t)+S t r(a(i)) N e x t i E n d S u b P r i v a t e S u b C o m m a n d2_C l i c k() C a l l p r o c2 E n d S u b S u b p r o c2() F o r i=9T o0S t e p-1 s t r a=s t r a&b(i)&"" N e x t i E n d S u b
仲恺农业工程学院实验报告纸 计算机科学与工程(院)计算机科学与技术专业计111班1 组C语言程序设计课学号201110214113 姓名廖兆伟实验日期2012-3-29 教师评定 实验8函数(二) 实验目的: 1、进一步熟悉怎样利用函数实现指定的任务; 2、熟悉函数的嵌套调用和递归调用的方法; 3、熟悉全局变量和局部变量的概念和用法; 实验内容 (1)写一个函数,用“起泡法”对输入的10个字符按由小到大顺序排列。 ①输入程序,进行编译和运行,分析结果。 输入程序如下: #include
实验八函数 班级___________姓名___________指导老师_____________成绩___________ 第_____________机房___________号机器时间________________________ 实验目的:1. 学会函数的定义和调用方法。 2. 掌握形参和实参的使用和传值调用。 3. 了解函数声明的使用。 实验要求:每次实验前,学生要先预习实验内容,写出分析结果或程序,经实验指导 老师检查后上机运行、调试程序,得出最终正确的结果。 实验内容 一、读程序 要求:读懂程序,写出分析结果;上机运行程序,得到运行结果,比较之。 1. #include
#include
实验6 函数 一、实验目的 (1)掌握定义函数的方法; (2)掌握函数实参与形参的对应关系,以及“值传递”的方式; (3)掌握函数的嵌套调用和递归调用的方法; (4)掌握全局变量和局部变量、动态变量和静态变量的概念和使用方法; (5)学习对多文件的程序编译和运行。 二、实验内容 1.阅读下面程序,写出程序运行结果,并且上机进行验证。 (1)a1.cpp 变量的虚实耦合,实现的是值传递,是单向传递 #include "stdio.h" int swap(int a,int b) { int c,s; c=a; a=b; b=c; s=a+b; return s; } void main() { int a,b,s; a=3;b=4; s=swap(a,b); printf("a=%d b=%d s=%d\n",a,b,s); } (2)a2.cpp
将十进制数26的各位数字相乘 #include "stdio.h" int fun(int num) { int k=1; do { k*=num %10; / num/=10; }while(num); return(k); } void main() { int n=26; printf("%d\n",fun(n)); } (3)a3.cpp 变量的作用域,当在函数内定义了与全局变量同名的局部变量时,全局变量被屏蔽#include "stdio.h" int a=3,b=5,c; void f(int b) { c=a+b; printf("%d %d %d\n",a,b,c); } void main() { int a=8; f(3); printf("%d %d %d\n",a,b,c); } (4)a4.cpp 递归,将十进制11转换为二进制 #include "stdio.h" void dtob(int n) { int i;
实验8 函数嵌套调用及函数重载与带默认参数值的函数【实验目的】 1: 掌握函数嵌套的概念及嵌套中的相互调用关系。 2:理解并掌握函数递归调用的方法,学会用递归调用的方法解决实际问题。 3:了解内联函数,函数重载及带默认参数值的函数用法。 二、实验内容-上机调试理解 例1.编写函数求代数式11+22+33+44+55的值。 分析:本题采用函数嵌套来解决,在主函数中调用了sum求和函数,在sum函数中又调用了power 函数求幂。 源程序: #include 例2.分别用用递归算法和非递归算法实现1!+2!+3!+…+n! 非递归算法-源程序: 分析:求阶乘的函数需要一个整型形参,函数类型为double,由于在主函数中要求1!+2!+…+n!,因此要循环调用该函数求累加和。 #include 1.编一个带有函数的程序。在main()函数中输入一个字符串(长度<20),调用函数fun将该字符串中的所有字符按ASCII码升序排序,然后再输出排序后的字符串。例如,输入edcba,则应输出abcde.。 #include 2.下面程序的功能是依次取出字符串中所有数字字符,形成新的字符串,并取代原字符串;(如:abcd123efg456变为123456)。 修改该程序,要求将红色部分用一个函数来实现。 #include "stdio.h" main() { char s[15]; int i,j; scanf("%s",s); for (i=0,j=0; s[i]!='\0'; i++) if (s[i]>='0' && s[i]<='9') { s[j]=s[i]; j++; } s[j]='\0'; printf("\nThe result:"); printf("%s",s); } #include 实验八 MATLAB函数文件 一、实验目的 1. 理解函数文件的概念。 2. 掌握定义和调用MATLAB函数的方法。 二、实验内容 要求:命令手工 ( )输入!!! 1. 定义一个函数文件,求给定复数的指数、对数、正弦和余弦,并在命令文件中调用该函数文件。 解:M文件如下: 2. 编写一个函数,计算美元与人民币对换。现在汇率为6.23 。 解: function rmb = dh(my,hl) % my为美元,hl为汇率,rmb 为人民币 rmb=my*hl; return MATLAB 命令窗口输入: yy=dh(100,6.23) % 100 为美元,6.23为汇率,yy 为对换后的人民币 3. 一个自然数是素数,且它的数字位置经过任意对换后仍为素数,这种素数称为绝对素数。例如:13是绝对素数。试求所有两位绝对素数。 要求:定义一个判断素数的函数文件。 解:M 函数文件: 运算结果: 4. 设2411()(2)0.1(3)0.01 f x x x =+?+?+,编写一个MATLAB 函数文件fx.m ,使得调用f(x)时,x 可用矩阵代入,得出的f(x)为同阶矩阵。 运算结果: 5. 已知 (40) (30)(20) f y f f = + (1) 当f(n)=n+10ln(n2+5)时,求y的值。 (2) 当f(n)=1×2+2×3+3×4+...+n×(n+1)时,求y的值。 (2). 运算结果如下: *选作题: 6. 一个物理系统可用下列方程组来表示: 111211 12220cos sin 0sin 0cos 000sin 000cos 1a m m a m g m N m N m g θθθθθ θ????????????????????=???????????????????? 从键盘输入m 1、m 2和θ的值,求a 1、a 2、N 1和N 2的值。其中g 取9.8,输入θ时以角度为单位。 要求:定义一个求解线性方程组AX=B 的函数文件,然后在命令文件中调用该函数文件。 实验八友元函数和友元类 , 一,实验目的 1.熟悉类和模板类的使用。 2.掌握友元函数和友元类的声明格式。 3.了解友元函数和友元类的作用,使用友元的利弊。 4.掌握静态数据成员和函数成员的使用方法,它们同一般成员的差异。 5.掌握栈和队列的运算特点和有关算法。 二、实验内容 1.定义复数类Complex,使用友元,完成复数的加法、减法、乘法、除法运算,以及对复数的输出。 # include实验答案--函数
实验八:MATLAB函数文件
实验八