您的当前位置:首页正文

实验八函数应用一daan

2021-09-15 来源:客趣旅游网


实验八 函数应用(一)

一、实验目的

1.掌握函数的定义和调用;

2.掌握形参和实参的使用和传值调用; 3.了解函数声明的使用; 4.掌握函数的嵌套调用;

5.了解函数的递归调用,掌握递归函数的编写规律; 6.重点掌握数组作函数参数。 二、实验学时数

3学时 三、实验步骤 (一) 阅读程序

1.fun (int x, int y, int z) { z=x * x + y * y; } main() { int a=38; fun(7,3,a); printf(“%d”,a); } 分析结果 运行结果 38 2.void fun (int x,int y );

main() {int x=5,y=3; fun(x,y);

printf(“%d,%d\\n”,x,y); }

void fun (int x,int y ) { x=x+y; y=x-y; x=x-y;

printf(“%d,%d\\n”,x,y);

} 分析结果 运行结果 3,5 5,3 3.int f (int a) ;

main()

{ int s[ 8 ] = {1,2,3,4,5,6} ,i, d=0;

for (i=0; f( s[i] ) ; i++) d+=s[i];

printf(\"%d\\n\}

int f(int a) { return a%2; }

分析结果 运行结果 1 4.long f( int g) { switch(g)

{ case 0:return 0;

}

return ( f(g-1)+ f(g-2)); } main ( ) { long int k; k = f(7);

printf(\"\\nk= %d\\n\} 分析结果 运行结果 13 case 1:

case 2: return 1;

5. int f(int b[ ][4])

{ int i,j,s=0;

for(j=0;j<4;j++)

if(i>2) i=3-j; s+=b[i][j];

{ i=j;

} return s; } main( )

{int a[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}}; printf(“%d\\n”,f(a) ); } 分析结果 运行结果 22 (二)完成程序 要求:依据题目要求,分析已给出的语句,填写空白。但是不要增行或删行,改动程序的结构。

1. 请在以下程序第一行的下划线处填写适当内容,使程序能正确运行。

___________________________ main()

{double x,y;

scanf(\"%lf%lf\printf(\"%.8lf\\n\}

double max(double a,double b) {return (a>b ? a:b) ; }

double max(double a,double b); main() {double x,y;

scanf(\"%lf%lf\printf(\"%.8lf\\n\

}

double max(double a,double b) {return (a>b?a:b) ; }

2.以下函数的功能是:求x的y次方,请填空,并配写出主调函数。

double fun( double x, int y) {int i; double z;

for(i=1, z=x; idouble fun( double x, int y) {int i; double z;

for(i=1, z=x; iscanf(\"%lf%d\

printf(\"%lf的%d次方为%lf\}

3.mystrlen函数的功能是计算字符串的长度,并作为函数值返回。请填空,并配写主调函数。

int mystrlen(char str[ ]) {int i;

for(i=0; ____________!=‘\\0';i++);

return(_______); } main ( ) { }

int mystrlen(char str[ ]) {int i;

for(i=0; str[i]!='\\0';i++); return(i); } main ( ) {char a[81]; scanf(\"%s\

printf(\"所输入字符串的长度为%d\\n\}

4.通过函数求f(x)的累加和,其中f(x)=x*x*x+1

SunFun(int n) ; F( int x) ; main() {

printf(\"The sum=%d\\n\}

SunFun(int n) {

int x,s=0;

for(x=1;x<=n;x++) s+=F( ____________ ); return s; }

F( int x)

{ return (___________);}

SunFun(int n) ; F( int x) ; main() {

printf(\"The sum=%d\\n\}

SunFun(int n) {

int x,s=0;

for(x=1;x<=n;x++) s+=F( x ); return s; }

F( int x)

{ return (x*x*x+1);}

(三)调试程序

要求:调试运行下列程序是否正确,若有错,写出错在何处?填写正确的运行结果。 1.行号

1 void func ( float a , float b ) 2 main()

3 { float x , y ; 4 5 6 7 8 }

9 void func ( float a , float b ) 10 { float c ;

11 c = a * a + b * b ; 12 return c ; 13 }

正确 运行结果: 错误所在行: 错误 应改为: float z ;

scanf(“%f , % f”,&x ,&y); z = func ( x , y ) ;

printf ( “ z = % f \\n” , z ) ;

float func ( float a , float b ); main() { }

float func ( float a , float b ) { float c ;

c = a * a + b * b ; return c ; }

2.函数sstrcmp()的功能是对两个字符串进行比较。当s数组中字符串和t数组中字符串相等时,返回值为0;当s数组中字符串大于t数组中字符串时,返回值大于0;当s数组中字符串小于t数组中字符串时,返回值小于0(功能等同于库函数strcmp())。 行号

1 int sstrcmp(char s[ ],char t[]) 2 { int i=0 , j=0 ; 3 5 } 6 main() 7 {

int x;

8 char s1[50],s2[50]; 9 scanf(\"%s%s\10 x= sstrcmp(s1,s2); 11 printf(\"\\n%d\\n\}

while(s[i]&&t[j]&& s[i]== t[j] ) ;

4 return s[i]-t[j];

float x , y ; scanf(\"%f,%f\z=func(x,y);

printf ( \"z=%f\\n\

float z ;

正确 运行结果: 错误所在行: 错误 应改为: int sstrcmp(char s[ ],char t[]) { int i=0 , j=0 ;

while(s[i]&&t[j]&& s[i]== t[j] )i++,j++; return s[i]-t[j]; } main() { int x;

char s1[50],s2[50];

scanf(\"%s%s\

x= sstrcmp(s1,s2); printf(\"\\n%d\\n\}

3.以下程序的功能是用递归方法计算学生的年龄,已知第一位学生年龄最小,为10岁,其余学生一个比一个大2岁,求第12位学生的年龄。 行号main() 1 {

int age( int n) ;

2 int n =12;

3 printf (“ Age is %d\\n” , age (n)); 4 }

5 int age(int n); 6 { int c; 7 8 9 }

c = age (n-1)+2 ; return ( c ) ;

正确 运行结果: 错误所在行: 错误 应改为: #include main()

{ int age( int n); int n=12;

printf(\"Age is %d\\n\}

int age(int n) { int c;

if(n==1) return 10;

c=age(n-1)+2; return ( c ) ; }

(四)编写程序

1.编写一个函数,选出能被3整除且至少一位是5的两位数,用主函数调用这个函数,并输出所有这样的两位数。 #include int f(int x) { int a,b; a=x/10; b=x%10;

if((a==5||b==5)&&x%3==0) return 1; else return 0; } main( ) {int i;

for(i=15;i<=95;i++) if(f(i)) printf(\"%4d\}

因篇幅问题不能全部显示,请点此查看更多更全内容