实验5 模块化程序设计
一、实验目的和要求
1.掌握C语言函数定义及调用的规则。 2.理解参数传递的过程。 3.理解函数的递归调用。 4.掌握库函数的调用方法。 5.理解变量的作用域和生存期。 6.了解编译预处理命令的使用。 二、实验内容和步骤
1.阅读并分析下面的程序,并按要求改写程序。
#include
int max,a,b;
printf(\ scanf(\ if(a>b) max=a; else
max=b;
printf(\}
(1)该程序的主要功能是什么?
(2)自定义函数fun1()实现该程序的功能,要求在主函数内实现数据的输入和输出,部分代码已经给出,请补充完整。
#include
int max,a,b;
/*函数的声明语句*/
printf(\ scanf(\
/*函数的调用语句*/ printf(\}
int fun1( )/*函数头*/ {
int max; if(x>y) max=x; else
max=y;
/*函数的返回语句*/ }
(3)调试运行该程序,并记录输出结果。 2.上机调试下面的程序。
#include
float x,y;
scanf(\ f(x,y);
}
void fun2(float a,float b) {
float c; if(b>0) c=a+b; else
c=a-b;
printf(\}
(1)记录系统给出的出错信息,并指出出错原因。
(2)如果将该函数定义为float fun2(float a,float b),该程序应该如何改变? (3)调试运行该程序,并记录输出结果。 3.上机调试下面程序,改正其不合理之处。
main() {
int x,n,s; s=power(x,n); }
power(y) {
int i,p=1;
for(i=1;i<=n;i++) p=p*y; }
4.编写一个函数,计算xy,用主函数进行调用。 (1)在主函数里,实现数据的输入和输出;
(2)函数的头部的定义,注意函数的形参个数和类型,函数的返回类型; (3)函数体的定义,注意返回语句的用法。
5.编写程序,用递归的方法求1+2+3+?+n,可设递归函数为fun5()。 (1)递归结束条件为n=0; (2)递推公式为n+fun5(n-1)。 6.编写并调试一个求n!(n为整数)的递归函数,希望能在程序运行过程中动态地显示递归函数被调用的轨迹。
(1)注意递归结束条件和递推公式;
(2)动态的显示递归函数被调用的轨迹,即每次要打印出变量的变化情况。 7.分析下面的程序,并记录输出结果。
#include
int x=2,y=3; void fun7();
printf(\ fun7();
printf(\ fun7(); }
void fun7() {
static int x=1; int y=10; x=x+2; y=y+x;
printf(\}
(1)分析自动变量的作用域和生存期。 (2)分析静态变量的作用域和生存期。 8.分析下面的程序,并记录其执行结果。
#include
void fun8x(),fun8y(); extern int x,y;
printf(\ y=100; fun8x(); fun8y(); }
void fun8x() {
extern int x,y; x=110;
printf(\}
int x,y;
void fun8y() {
printf(\}
(1)分析外部变量的作用域和生存期。 (2)注意extern关键字的用法。 9.写出下面程序的输出结果。
#include
#define PRINT(s) printf(\void main() {
int x=3;
PRINT(x*FU(1)); }
(1)分析#include命令的用法。 (2)分析#define命令的用法。
10.调用库函数,随机生成100~200之间的整数。
11.编写一个函数fun11(),输入3个顶点坐标,求ΔABC的面积。
对应答案:实验5 模块化程序设计
1.参考答案
(1)该程序的主要功能是:从键盘上输入两个整数,并求出其中的最大值。
(2)自定义函数fun1()实现该程序的功能,要求在主函数内实现数据的输入和输出,部分代码已经给出,请补充完整。
#include
int max,a,b;
int fun1(int,int); /*函数的声明语句*/ printf(\ scanf(\
max=funl(a,b); /*函数的调用语句*/ printf(\}
int fun1(int x,int y) /*函数头*/ {
int max; if(x>y) max=x; else
max=y;
return max; /*函数的返回语句*/ }
(3)运行结果
Please enter 2 numbers:(a,b) 4,5 max=5
2.参考答案
(1)出错信息:Linker error:Undefined symbol '_f' in model。
错误原因是:函数调用错误,调用函数fun2()却调用了没有定义的函数f()。 (2)程序应该改为
#include
float x,y;
float fun2(float a,float b); scanf(\
printf(\}
float fun2(float a,float b) {
float c; if(b>0) c=a+b; else
c=a-b; return c; }
(3)运行结果
3,-4 x+|y|=7
3.改正后的程序如下。
main() {
int x,n,s;
int power(int x,int n);
printf(\ scanf(\ s=power(x,n);
printf(\ =%d\}
int power(int x,int n) {
int i,p=1;
for(i=1;i<=n;i++) p=p*x; return p;
相关推荐: