实验八 函数实验一
函数实验一
一、目的与要求 1.掌握 C 语言函数的定义方法、函数的声明及函数的调用方法。 2.了解主调函数和被调函数之间的参数传递方式。 二、实验例程 例 1:利用函数调用方式实现从键盘输入两个整数,输出较大的数。 int max(int a,int b); void main() {
int max(int a,int b); int x,y,z; printf("input two numbers:\n"); scanf("%d,%d",&x,&y);//输入时注意"," z=max(x,y); printf("maxmum=%d",z); } int max(int a,int b) { if(a>b) return a; else return b; } 例 2:写两个函数,分别求两个正数的最大公约数和最小公倍数,用主函数 调用这两个函数并输出结果。两个正数由键盘输入。 源程序如下: #include "stdio.h" hcf(u,v) int u,v; { int a,b,t,r; if(u>v) {
t=u; u=v; v=t; } a=u; b=v; while((r=b%a)!=0) {
b=a; a=r;
} return(a); } lcd(u,v,h) int u,v,h; { return(u*v/h); } main() { int u,v,h,l; scanf("%d,%d",&u,&v); h=hcf(u,v); printf("H.C.F=%d\n",h); l=lcd(u,v,h); printf("L.C.D=%d\n",l); } 这是一个十分典型的算法,同学们一定要认真分析、学习。 例 3 用牛顿迭代法求根。方程为 ax3+bx2+cx+d=0,系数 a、b、c、d 由主函 数输入。求 x 在 1 附近的一个实根。求出根后,由主函数输出。(用函数方法实 现)。 源程序如下: /*牛顿迭代法解方程*/ #include “math.h” float solut(a,b,c,d) float a,b,c,d; { float x=1,x0,f,f1; do {
} 在此题目中,方程的系数是未知的,这是与以前我们用牛顿迭代法的时候不 同的地方。但原理、算法是相同的,这里我们用函数来求方程的根。也就是把牛 顿迭代法用函数的形式表现出来。 【作业】 1.上机调试下面的程序,记录系统给出的出错信息,并指出出错原因。 main() {
int x,y; printf("%d\n",sum(x+y)); int sum(a,b); {
int a,b; return(a+b); } } 2.定义一个函数,功能是计算 n 个学生的成绩中,高于平均成绩的人数, 并作为函数值。用主函数来调用它,统计 50 个学生成绩中,高于平均成绩的有 多少人? 3.编写一个对 n 个数据从大到小的排序 C 函数,再编写一个计算最后得分 的 C 函数,计算方法是:去除一个最高分,去除一个最低分,其余的平均分为 参赛选手的最后得分。并在主函数中调用它们对有 n 个评委评分,m 个选手参赛 的x0+b)*x0+c)*x0+d; f1=(3*a*x0+2*b)*x0+c; x=x0-f/f1; }while(fabs(x-x0)>=1e-5); return(x); } main()
{ float a,b,c,d; printf(“\n 输入方程的系数 a,b,c,d\n”); scanf(“%f,%f,%f,%f”,&a,&b,&c,&d); printf(“\n 方程是:%5.2fx^3+%5.2fx^2+%5.2fx+%5.2f=0”,a,b,c,d); printf(“\nX=%10.7f\n”,solut(a,b,c,d));