一、实验目的
(一)掌握函数的定义、函数类型、函数参数、函数调用的基本概念;
(二)掌握变量名作函数参数的程序设计方法;
(三)掌握函数的嵌套调用的方法;
(四)掌握数组元素作函数参数;
(五)掌握数组名作函数参数的程序设计方法;
(六)掌握字符数组作函数参数的程序设计方法;
(七)了解全局变量、局部变量的概念和使用方法;
(八)使用功能键F7单步执行,使用Ctrl+F7观察变量的值,学会程序调试基本方法。
二、预习要求
(一)函数的定义、函数类型、函数参数、函数调用的基本概念;
(二)函数实参与形参的对应关系以及参数的传递;
(三)以变量名和数组名作函数参数时的使用方法;
(四)全局变量、局部变量的概念和使用方法。
三、实验内容
(一)下面程序的功能是:根据输入的整数x和n,利用函数fact实现求xn。
例如:输入:2,3 输出23=8
1. /* c9-1.c 利用函数fact实现求x的n次方*/ 2. #include "stdio.h" 3. void main( ) 4. { long int fact(long x,long n) ; /*声明fact函数*/ 5. long int x ; 6. long int n; 7. printf("please enter X and N(>=0): "); 8. scanf("%ld,%ld", &x, &n ); 9. printf("%ld,%ld=%ld",x,n,fact(x,n)); /*调用fact函数 */ 10. } 11. long int fact(long int x, long int n) /*定义fact函数求xn */ 12. { long int i,s; /*求累积变量的初始化*/ 13. if(n==0) return 0; 14. for(i=1; i<=n; i++) /*用循环实现xn*/ 15. s=s*x; 16. return(s); /*返回结果xn*/ 17. }
(二) 下面程序的功能是:计算的值。
例如:输入:5,3 输出:
编程提示:
(1)定义求阶乘函数,在此基础上定义求组合数函数。
(2)主函数调用求组合数函数,求组合数函数再三次调用求阶乘函数。
1. /* c9-2.c 利用函数组合数*/ 2. #include "stdio.h" 3. long int jf (int m,int n) /*定义求阶乘函数jf*/ 4. { int i,j; 5. long int t=1,u=1,r=1; 6. for(i=1; i<=m; i++) 7. t*=i; 8. for(i=1; i<=n; i++) 9. u*=i; 10. for(i=1; i<=(m-n); i++) 11. r*=i; 12. j=(t/(u*r)); 13. return(j); 14. } 15. void main( ) 16. { int m,n,c; 17. printf("please enter m and n: "); 18. scanf("%d,%d", &m, &n ); 19. c=jf(m,n); 20. printf("%d",c); 21. }
(三)下面程序的功能是:读入一个整数m,计算如下公式的值:
例如:若输入5,则应输出:“The result is 2.28333”。
1. /* c9-3.c 利用函数实现级数求和*/ 2. #include "stdio.h" 3. void main() 4. { 5. double as(int a); 6. float b,c; 7. printf("请输入数值:"); 8. scanf("%f",&b); 9. c=as(b); 10. printf("%f",c); 11. } 12. double as(int a) 13. { 14. float b=1.0; 15. int c; 16. for(c=2;c<=a;c++) 17. b=b+1.0/c; 18. printf("%f",b); 19. }
(四)下面程序的功能是:输入一个十进制整数,输出其对应的二进制数。
编程提示:
在main函数中定义一个变量并为其赋值,然后调用函数fun将该十进制数转换为二进制。
函数fun的形参即为被转换的整数,在for循环中每次求出m%k存放到数组aa中,同时将m/k的整数商赋给m继续判断,直止m的值为0。最后按反序输出数组aa的元素。
1. /* c9-4.c 通过函数调用实现数制转换*/ 2. #include "stdio.h" 3. void main() 4. { 5. int as(int a); 6. int b; 7. printf("请输入数值:"); 8. scanf("%d",&b); 9. printf("%d ",as(b)); 10. } 11. int as(int a) 12. { 13. int b,c=2,aa[30]; 14. for(b=0;a;b++) 15. { 16. aa[b]=a%c; 17. a=a/c; 18. } 19. b--; 20. for(;b;b--) 21. { 22. printf("%d ",aa[b]); 23. } 24. return 0; 25. }
如果将十进制数转换为八进制数,应对程序的哪个语句进行修改?怎样修改?
四、实验注意事项
(一)定义函数时,函数名后的圆括号后面不能加“;”。
(二)在函数体内,不能再对形参进行定义和说明。
(三)变量作实参时,只使用变量名,实参变量对形参变量的数据传递是“值传递”。
(四)一维数组作函数的实参时,只使用数组名如:fun(a); 。