实验7: 用函数实现模块化程序设计 综合性实验
实验名称:用函数实现模块化程序设计 实验编号:C_7 小组成员:(姓名) 实验日期: 仪器设备:计算机
实验地点: 实验目的:
1、掌握定义函数的方法。
2、掌握函数实参与形参的对应关系,以及函数调用的值传递规则。
3、理解函数返回值的意义,掌握正确操作函数返回值的方法。 4、掌握函数的嵌套调用和递归调用的方法;
5、掌据数组作为函数参数的情况下,函数的参数传递情况。
6、掌握全局变量、局部动态变量及静态变量的概念和使用方法。 7、掌握变量的作用域和生存期情况。
实验内容:空
实验原理:函数调用、嵌套调用和递归调用; 数组作为函数参数、变量的作用域和生存期。
实验步骤:
1、运行第七章课件中的所有例题,验证其正确性并分析其原因。 2、运行教材第七章中的所有例题,验证其正确性并分析其原因。 3、实验7的内容。
实验原理记录及数据处理:(将所运行的程序代码填写在此处。) 结果与结论:程序是否能正常运行,如果不能存在哪些问题。 实验内容(一):
编程序并上机调试运行之。
(1) 写一个判别素数的函数,在主函数输入一个整数程序输出该数是否素数的信息。 本程序应当准备以下测试数据:17、34、2、1、0。分别运行并检查结果是否正确。 要示所编写的程序,主函数的位置在其他函数之前,在主函数中对其所调用的函数作声明。
①输入程序,编译运行程序,分析其结果。
②将主函数的函数声明删去,再进行编译,分析编译结果。
③把主函数的位置改为在其它函数之后,在主函数中不含函数声明。
④保留判别素数的函数,修改主函数,要求实现输出100~200之间的素数。
(2) 写一个函数,将一个字符串中的元音字母复制到另一个字符串,然后输出。
①输入程序,编译运行程序,分析其结果。
②分析函数声明中参数的写法。先后用以下两种形式:
(a) 函数声明中参数的写法与定义函数时的形式完全相同,如: Void cpy(char s[],char c[]);
(b) 函数声明中参数的写法与定义函数时的形式完全相同,省写数组名。如: Void cpy(char s[],char []); 分别编译和运行,分析结果。
③思考形参数组为什么可以不指定数组大小,如: Void cpy(char s[80],char[80]) 如果随便指定数组大小行不行,如: Void cpy(char s[40],char [40]) 请分别上机试一下。
(3) 输入10个学生5门课的成绩,分别用函数实现下列功能: ①计算每个学生平均分;
②计算每门课的平均分;
③找出所有50个分数中最高的分数所对应的学生和课程。
(4) 写一个函数,输入一行字符,然后将此字符串中最长的单词输出。此行字符串
从主函数传递给该函数。
①把两个函数放在同一个程序文件中,作为一个文件进行编译和运行。
②把两上函数分别放在两个程序文件中,作为两个文件进行编译,连接和运行。 实验内容(二):
(1) 用递归法将一个整数n转换成字符串。例如,输入整数2008,应输出字符串
“2008”。n的位数不确定,可以是任意的整数。 ①输入程序,进行编译和运行,分析结果。 ②分析递归调用的形式和特点。
③思考如果不用递归法,能否改用其他方法解决此问题,上机试一下。
(2) 输入4个整数a、b、c、d,找出其中最大的数。用函数的递归调用来处理。 ①输入程序,进行编译和运行,分析结果。
②分析嵌套调用和递归调用函数在形式上和概念上的区别。在本例中既有嵌套调用也有递归调用,哪个属于嵌套调用?哪个属于递归调用?
③改用非递归方法处理此问题,编程并上机运行。对比分析两种方法的特点。
(3) 编写一个函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其他字符的个数,在主函数中输入字符串以及输出上述的结果。
①在程序中用全局变量。编译和运行程序,分析结果。讨论为什么要用全局变量。 ②能否不用全局变量,修改程序并运行之。
(4) 求两个整数的最大公约数和最小公倍数,用一个函数求最大公约数,用另一个
函数根据求出的最大公约数求最小公倍数。 ①不用全局变量,分别用两个函灵敏求最大公约数和最小公倍数。两个整数在主函数中输入,并传送给函数f1,求出的最大公约数反回主函数,然后再与两个整数一起作为实参传递给函数f2,以求出最小公倍数,返回到主函数输出最大公约数和最小公倍数。 ②用全局变量的方法,分别用两个函数求最大公约数和最小公倍数,但其值不由函数带回。将最大公约数和最小公倍数都设为全局变量,在主函数中输出它们的值。 分别用以上两种方法编程并运行,分析对比。