实习六
过程和子过程的定义和调用方法
地点:计算机实验室。
每名学生一台计算机。
实习时间:90分钟
指导教师:任课教师,实习指导教师
学生分组:每三人为一组。
每名教师负责七个组的指导。
实习目的:
1、 掌握自定义函数过程和子过程的定义和调用方法.
2、 掌握形参和实参的对应关系.
3、 掌握值传递和地址的传递方式.
4、 掌握变量、函娄和过程的作用域.
5、 掌握递归概念和使用方法.
熟悉程序设计中的常用算法.
实验6.1 编一子过程ProcMin,求一维数组a 中的最不值,子过程的形参自己确定.
主调程序随机产生10个-300~-400之间的整数,调用ProcMin 子过程,显示
最小值.
实验6.2 编一函数Max(a( )),求一维数组a 中的最大值.主调程序随机产生10个
100~200之间的数,调用Max 函数,显示最大值.
实验6.3 编一个函数过程MySin(x),求
MySin(x)=()()!121...!
7!5!31121753--++-+---n x x x x x n n 当第n 项的精度小于510-时结束计算,x 为弧度.主要程序同时调用MySin 和内
部函数Sin,进行验证.
【提示】
关键是找部分级数和的通项,通项表示如下:
))2()1/((12+⨯+⨯⨯⨯-=+i i x x T T i i ......7,5,3,1=i
实验6.4编一个函数过程HtoD(H),将十六进制字符串H 转换成十进制数.主调程序
调用HorD 函数,再调用内部函数Hex(number)进行逆向验证.
实验6.5 参阅教篇例6.2,编一个子过程DeleStr(s1,s2),将字符串s1中出现s2子字
符串删去,结果还是存放在s1中.
例如:s1=”12345678AAABBDFG12345” s2=”234”
结果:s1=”15678AAABBDFG15”
【提示】
解决此题的方法有以下要点:
(1) 在s1字符串中找s2的子字符串,可利用lnStr()函数,要考虑到s1中可能存在多个或不存在s2字符串,用Do While Instr(s1,s2)﹥0循环结构来实现.
若在s1中找到s2的子字符串,首先要确定s1字符串的长度,因s1字符串在进行多次删除时,长度在变化..然后通过Left() 、Mid() 或Rigth()函数的调用达到删除s1中存在的s2字符串.
实验6.6 编一函数过程MaxLength(s),在已知的字符串s 中,找出最长的单词.假定
字符s 内只含有字母和空格,空格发隔不同的单词.程序运行界面如图2.6.1
所示
【提示】
(1)程序中有到当前单词当前单词长度最长单词最长单词长度等变量.
(2)首先求出输入的字符串长度,然后从字符串中分离出单词,即对每个字符判断:若不为
空格,将每个字符连接到当前单词的字符串变量,当前单词长度计数器加1;若为空格,表示一个单词结束,将每个字符连接到当前单词长度与最长单词长度比较,若长,当前单词替代最长单词.当前单词置空,当前单词计数器清除为0.
实验6.7编一函数过程IsH(n),对于已知正整数n判断该数是否是回文数,函数的返回值类型为布尔型.主调程序每输入一个数,调用IsH函数过程,然后在图形
框显示输入的数,对于是回文数显示一个”★"见图2.6.2。
图2.6.2 实验6.7回文数程序运行界面
【提示】
(1)所谓回文数是指顺读与倒读数字相同,即指最高位与最低们相同,次高位与次低位相同,依次类推.当只有一位数时,也认为是回文数.
(2)回文数的求法,只要对输入的数(按字符串类型处理),利用MID函数从两边
往中间比较,若不相同,就不是回文数.
实验6.8编一函数过程 IsZ(n),对于已知正整数n ,判断该数是否是质数,函数的返回值类型为布尔型.方调程序每输入一个数,调用Is Z函数过程,然后在图形框显示输入的数,对于是质数显示一个"★",界面见上题.
实验6.9编一函数过程,用矩形法求定积数⎰
b a f(x)dx .矩形法的第i 块小面积的
公式为:s i =h*f(x i )
h 为小面积 的宽度主调程序调用函数过程,求dx x
x ⎰+52ln 1的定积分. 实验6.10用迭代法编一个函数过程f(a),求x=3a 求立方根的迭代公式为:
x i 1+=(2/3)x i +a/3x i 2
精度为ε=105-.主调程序调用该函数过程,a的值分别为3、9和12,
显示计算结果.同时,利用幂运算符“^”检验函数过程的正确性.迭代法求
高次方程根的算法见教学篇例6.18.
实验 6.11 用递归方法,编写求n m C 的函数.
对于n m C 有如下递归形式:111---+=n m n m n m C C C 递归条件:⎪⎪⎩⎪⎪⎨⎧〉=====-2
10110m n C C n m
C n C n m m n m m m 实验 6.12 类似第10题,将迭代法改为递归法编函数过程f2(x0,a),求3a x =,求立
方根的迭代公式为:
21332i
i i x a x x +=+
ε.
精度为5
=
10-
主调程序分别调用函数过程,a的值分别为3、9和12,显示计算结果.同时,利用运算符“∧”检验数时程的正确性.
【提示】
递归法求根时,形参要有两个,x0为每次递归调用时的初值,假定x0的初值为a.。