C语言实验指导3--用函数进行程序设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《C语言程序设计》实验指导书
软工2010级2班
m a o
S W U
实验环境Windows,Visual C++
实验目录
实验三用函数进行程序设计
实验目的
1、掌握C语言函数定义及调用的规则,理解参数传递的过程。
2、掌握函数嵌套调用过程及递归调用过程。
3、理解数组元素作参数和数组名作参数的不同。
4、编程验证全局变量、局部变量,动态变量、静态变量。
实验内容
1、编程验证基本的函数定义和调用
下面的程序,在主函数main中输入2个整数,并传给函数max。
函数max返回最大值。
#include <stdio.h>
int max(int x,int y){ /*本函数返回x和y中的最大值*/
int z;
if(x>y) z=x;
else z=y;
return z;
}
main(){
int a,b;
printf("请输入a和b,用空格分开:\n");
scanf("%d %d",&a,&b);
printf("最大值是%d\n",max(a,b));
}
2、编程验证函数嵌套调用的执行过程
执行下面的程序,分析嵌套调用的过程。
再分析一下,如果没有函数声明,编译时有何问题。
#include<stdio.h>
void f1(void);/*这3行是函数声明*/
void f2(void);
void f3(void);
void f1(){
printf("I am f1\n");
f2();
}
void f2(){
f3();
printf("I am f2\n");
}
void f3(){
printf("I am f3\n");
}
main(){
f1();
f2();
}
3、编程验证函数的递归调用过程
#include <stdio.h>
int f(int a[],int n){
if(n>=1){
printf("要计算f(a,%d),先计算f(a,%d)\n",n,n-1);
return f(a,n-1)+a[n-1];
}
else return 0;
}
main(){
int aa[5]={1,2,3,4,5},sum;
sum=f(aa,5);
printf("数组aa[5]中5个元素的总和是%d\n",sum);
}
4、编程验证数组元素及数组名作参数有何不同
数组元素作参数以及数组名作参数
(1)把数组元素作参数。
下面的程序,main函数中有数组a[6]。
其中a[0]~a[4]这5个元素赋了初值。
要获得其中最大值,放到元素a[5]中。
#include <stdio.h>
int max(int x0,int x1,int x2,int x3,int x4){/*获得5个变量的最大值*/ int i,m,b[5];
m=b[0]=x0;b[1]=x1;b[2]=x2;b[3]=x3;b[4]=x4;
for(i=1;i<5;i++)
if(b[i]>m) m=b[i];
return m;
}
main(){
int m,a[6]={23,45,89,12,34};/*a[5]没有赋初值,系统自动初始化为0*/
a[5]=max(a[0],a[1],a[2],a[3],a[4]);/*将a[0]~a[4]的最大值放到a[5]中*/
printf("数组a的最大值已经放到a[5]中,值是%d\n",a[5]);
}
(2)把数组名作参数。
#include <stdio.h>
void max(int b[],int n){/*获得数组b[]中的前n个元素的最大值,放到b[n]中*/ int i,m;
m=b[0];
for(i=1;i<5;i++)
if(b[i]>m) m=b[i];
b[n]=m;/*修改了b[5],实际上就修改了a[5]*/
}
main(){
int m,a[6]={23,45,89,12,34};/*a[5]没有赋初值,系统自动初始化为0*/
max(a,5);/*将a[]中前5个元素的最大值放到a[5]中*/
printf("数组a的最大值已经放到a[5]中,值是%d\n",a[5]);
}
5、编程验证全局变量、局部变量,动态变量、静态变量。
下面的程序,main中是个循环,每次输入a和b的值,输出这是第几次,并输出最大值。
max函数中有一静态局部变量count,用来存放被调用的次数。
注意,虽然它是局部变量,但因为它是静态的,所以有固定内存空间,其值在max函数退出后可以得到保留。
将这个程序和本实验的第一个程序进行比较,思考为什么在函数调用时不用参数。
#include <stdio.h>
int a=1,b;/*全局变量*/
int max(){ /*本函数返回a和b中的最大值*/
int z=3;/*局部变量,存放本次输入的2个数中的最大值*/
static int count=0;/*静态局部,本函数被调用的次数,每次被调用,count加1*/
if(a>b) z=a;
else z=b;
count++;
printf("这是第%d次被调用\n",count);
return z;
}
main(){
while(a!=0){/*如果输入的a是0,那么退出循环*/
printf("\n请输入a和b,用空格分开:\n");
scanf("%d %d",&a,&b);
printf("最大值是%d\n",max());
}
}
6、自由编程。
要求:
要用到extern(声明下面要用到外部变量或外部函数)要用到static(静态变量或静态函数)。