一、实验题目:
实验五 函数的应用
二、实验目的:
1.进一步掌握函数的定义方法、调用方法,实参与形参的对应关系,以及调用函数的执行过程。
2.掌握函数的嵌套调用、递归调用、数组作为函数参数的设计方法。 3.进一步理解变量的作用域和生存期。
三、实验内容:
1.定义一个求阶乘的递归调用函数double fac(int n),在主函数中调用3次该函数分别求出8!、10!、18!的准确值(结果:8!=40320,10!=3628800,18!=6402373705728000)。编写源程序,给出注释及运行结果。(提示,请参阅教材上174页例8.7的程序)。
#include void main() /*空类型主函数*/ { double fac(int n); /*声明函数fac(int n)*/ int a,b,c; /*定义整型变量a,b,c*/ double x,y,z; /*定义double型变量x,y,z*/ a=8; /*将8赋给a*/ b=10; /*将10赋给b*/ c=18; /*将18赋给c*/ x=fac(a); /*将fac(a)赋给x*/ y=fac(b); /*将fac(b)赋给y*/ z=fac(c); /*将fac(c)赋给z*/ printf(\"%d!=%.0lf\\n%d!=%.0lf\\n%d!=%.0lf\\n\标准输出函数 输出a,x,b,y,c,z的值*/ } double fac(int n) /*定义函数fac(int n)*/ { double f; /*定义double型变量f*/ if(n==0||n==1) /*如果n等于0或n等于1*/ f=1; /*将1赋给f*/ else/*否则*/ f=fac(n-1)*n; /*将函数值赋给f*/ - 1 - 《C语言》实验报告 return(f); /*返回f的值*/ } 2.编写一个将n个整数用选择法按由小到大的顺序排序的函数void sort(int array[], int n),在主函数中调用两次该函数,对任给出个数分别是10和15的两组整数进行排序。编写源程序,给出注释及运行结果。(提示,请参阅教材上181页例8.13的程序)。 #include void main() /*空类型主函数*/ { void sort(int array[],int n); /*声明空类型函数sort(int array[],int n)*/ int a[10],b[15],i,j; /* 定义整形数组a[],b[]长度分别为10,15,定义整形变量i,j*/ printf(\"enter the array a:\\n\"); /*标准输出函数 输出enter the array a:*/ for(i=0;i<10;i++) /*当i等于1,i小于10时,i自加一,并执行下面循环*/ scanf(\"%d\ /*标准输入函数 以十进制输入数组a[i]的元素*/ sort(a,10); /*将长度为10的实参数组赋给形参数组a,调用函数,进行计算*/ printf(\"the sorted array:\\n\"); /*标准输出函数 输出the sorted array:*/ for(i=0;i<10;i++) /*当i等于1,i小于10时,i自加一,并执行下面循环*/ printf(\"%5d\ /*标准输出函数 输出数组a[i]*/ printf(\"\\n\"); /*标准输出函数 输出换行*/ printf(\"enter the array b:\\n\"); /*标准输出函数 输出enter the array b:*/ for(j=0;j<15;j++) /*当j等于1,j小于15时,j自加一,并执行下面循环*/ scanf(\"%d\ /*标准输入函数 以十进制输入数组b[j]的元素*/ sort(b,15); /*将长度为15的实参数组赋给形参数组b,调用函数,进行计算*/ printf(\"the sorted array:\\n\"); /*标准输出函数 输出the sorted array:*/ for(j=0;j<15;j++) /*当j等于1,j小于15时,j自加一,并执行下面循环*/ printf(\"%5d\ *标准输出函数 以十进制形式输出数组b[j]*/ - 2 - 《C语言》实验报告 printf(\"\\n\") ; /*标准输出函数 输出换行*/ } void sort(int array[],int n) /*定义空类型 函数sort(int array[],int n)*/ { int c,d,e,f; /*定义整型变量c,d,e,f*/ for(c=0;c } } 3.编写一个求3个学生的各科平均成绩的程序,每个学生有4科成绩,学生成绩存放在a数组中,求平均成绩需调用函数void aver(float array[][4], int n), 65677060n为学生数,其中a数组的矩阵表示为 A80879081。编写源程序, 909910098给出注释及运行结果,自己试着增加学生数或者成绩科数再运行程序。(提示,可参阅教材183页例8.14的程序,注意按科平均成绩可存入数组A中,只需将A增加1行并先付初值0,求出平均值之后替换0) 1、 #include void aver(float array[][4]); /*声明空类型函数aver(float array[][4])*/ int i; /*定义整型变量i*/ float a[4][4]={{65,67,70,60},{80,87,90,81},{90,99,100,98}}; /*对浮点型数组进行赋值*/ printf(\"the average is:\\n\"); /*标准输出函数 输出the average is*/ - 3 - 《C语言》实验报告 aver(a); /*将实参数组地址赋给形参数组,调用函数。*/ for(i=0;i<4;i++) /*当i等于0并小于4时,i自加一,执行循环*/ printf(\"%.2f \ /*标准输出函数 输出数组a*/ printf(\"\\n\"); /*标准输出函数 输出换行*/ } void aver(float array[][4]) /*定义空类型函数aver(float array[][4])*/ { int i; /*定义整型变量i*/ for(i=0;i<4;i++) /*当i等于0并小于4时,i自加一,执行循环*/ array[3][i]=(array[0][i]+array[1][i]+array[2][i])/3; /*按列求平均值并赋给最后一行*/ } 2、 #include void aver(float array[6][4]); /*声明空类型函数aver(float array[][4])*/ int i; /*定义整型变量i*/ float a[6][4]={{65,67,70,60},{80,87,90,81},{90,99,100,98},{78,88,98,64},{55,100,87,96}}; /*对浮点型数组进行赋值*/ printf(\"the average is:\\n\"); /*标准输出函数 输出the average is*/ aver(a); /*将实参数组地址赋给形参数组,调用函数。*/ for(i=0;i<4;i++) /*当i等于0并小于4时,i自加一,执行循环*/ printf(\"%.2f \ /*标准输出函数 输出数组a*/ printf(\"\\n\"); /*标准输出函数 输出换行*/ } void aver(float array[6][4]) /*定义空类型函数aver(float array[6][4])*/ { int i; /*定义整型变量i*/ for(i=0;i<4;i++) /*当i等于0并小于4时,i自加一,执行循环*/ - 4 - 《C语言》实验报告 array[5][i]=(array[0][i]+array[1][i]+array[2][i]+array[3][i]+array[4][i])/5; } /*按列求平均值并赋给最后一行*/ 四、实验结果: 1、输出结果: 2、输出结果: 3、输出结果: ⅰ、 ⅱ、 五、实验体会或遇到问题: 1、对于函数使用理解不够透彻。 2、没太掌握函数的用法,做实验较费劲。 - 5 - 《C语言》实验报告 3、所使用变量一定要定义。 4、利用函数调用,可以使程序较为简洁。 5、注意值输出时所用格式。 6、使用函数要声明,并定义。 7、要好好回去看看书,重新学习一遍,争取弄懂。 8、注意元素个数与其位置的对应。 - 6 - 因篇幅问题不能全部显示,请点此查看更多更全内容