1、第 5 章 函数一、选择题1、以下正确的说法是( A )A) 实参可以是常量、变量或表达式 B) 实参类型不必同形参类型一致 C) 形参可以是常量、变量或表达式 D) 实参顺序与形参顺序无关2、以下函数首部的定义形式的正确的是( B )A) int fun(int x; int y) B) int fun(int x, int y) C) int fun(int x, y) D) int fun(int x, int y);3、以下描述正确的是( B )A) 如果形参和实参的类型不一致,应以实参类型为准 B) 如果函数值类型与返回值类型不一致,应以函数值类型为准 C) return 语句后不能
2、是表达式 D) 定义函数时,可以省略不写形参的类型,只写形参名4、下列关于函数的描述错误的是( D )A) c 程序是由函数组成的 B) c 程序中的函数是各自独立的 C) main 函数可以调用其它的函数 D) 在 main 函数中可以嵌套定义别的函数5、关于 C 语言的主函数描述正确的是 ( )BA) C 程序可以有多个 main 函数 B) C 程序有且只有一个 main 函数C) C 程序可以没有 main 函数 D) C 程序不一定从 main 函数开始执行6、若定义的函数有返回值,则以下关于该函数调用的叙述错误的是( )DA) 函数调用可作为独立的语句存在 B) 函数调用可作为一个
3、函数的实参C) 函数调用可以出现在表达式中 D) 函数调用可作为一个函数的形参7、以下对于 return 语句的作用叙述 不正确的是( )CA) 可以将函数值返回给主调函数 B) 可以将程序流程返回到主调函数C) 一个函数只能有一个 return 语句 D) 一个函数可以没有 return 语句8、C 语言规定,函数返回值的类型是由( D )决定的。A) return 语句中表达式的类型 B) 调用该函数的主调函数的类型 C) 调用该函数时系统临时 D) 在定义函数时所指定的函数值类型9、在 C 语言程序中,若对函数类型未加显式说明,则函数的隐含类型为( )AA) int B) double
4、C) void D) float10、若函数定义如下,则函数返回值的数据类型是( )Afloat fun(int x) int y=x+2;return(y);A) float B) int C) 不能确定 D) 编译出错11、以下正确的函数形式是( )DA) double fun(int x, int y) B) void fun(int x, y) z = x + y; int z;return z; return z; C) double fun(x, y) D) double fun(int x, int y) double z = x + y; double z = x + y;re
5、turn z; return z; 12、函数调用时,若参数为“值传递” 方式,则下列描述错误的是( B )A) 实参可以是表达式 B) 实参与形参共用同一内存单元C) 调用时为形参分配内存单元 D) 实参与形参类型应一致13、若函数定义如下,假设将常数 1.6 传给 x,则函数的返回值是( )Bint fun(float x) float y=x+2;return(y);A) 3.6 B) 3 C) 4 D) 3.014、设有如下的函数,则函数返回值的类型是( ) Cggg(float x) return(x*x); A) 与参数 x 的类型相同 B) void C) int D) 无法确定
6、15、有以下程序,则执行后输出的结果是( )A#include “stdio.h“void fun(int k,int n) int t;t=k; k=n; n=t;void main() int k=1, m=2; fun(k, m); printf(“%d,%dn“, k,m); A) 1,2 B) 2,1 C) 1,1 D) 2,216、以下程序运行后的输出结果是 ( ) D#include “stdio.h“int fun(int a, int b) if (ab) return(a);else return(b);void main( ) int x=3, y=8, z=6, r;r
7、=fun( fun(x, y), 2*z);printf(“%dn“, r);A) 3 B) 6 C) 8 D) 12*数组作函数参数*17、对于一维数组名作函数实参,以下描述正确的是( A )A) 必须在主调函数中说明此数组的大小 B) 实参数组类型与形参数组类型可以不一致 C) 函数调用时是将实参数组中的所有元素值复制到形参数组中 D) 实参数组名与形参数组名必须保持一致18、数组名作参数时,以下叙述正确的是( )BA) 函数调用时是将实参数组的所有元素传给形参 B) 函数调用时是将实参数组的首地址传给形参 C) 函数调用时是将实参数组的第 1 个元素传给形参 D) 函数调用时是将实参数组
8、所有元素的地址传给形参19、已有如下数组定义和函数调用语句,则 fun 函数的形参数组的正确定义方法是( C )int a34;fun(a);A) fun( int a6) B) fun(int a3 C) fun(int a4) D) fun(int a)20、有以下程序,则执行后的结果为( )C#include “stdio.h“void fun(int b, int n) for(int i=0;iint fun(int a, int b);void main ( ) int x, y, z;scanf(“%d %d”, z=fun(x, y);printf(“z=%d”,z);int
9、fun(int a, int b) int r, t;if(afloat fun(int x, int y) return(x+y); void main() int a=2,b=5,c=8;printf(“%3.0fn“, fun( (int)fun(a+c, b), a-c) ); 输出结果:_ _ 95、写出 fun1 和 fun2 函数的功能和程序的运行结果。 (5 分)#include int fun1(int x) int i, t=1;for(i=1; i#define M 6void main( ) int n, i, j, pos, aM= 1, 3, 5, 7, 9;sca
10、nf(“%d“, if (naM-2) aM-1=n;else for(pos=0; posn) break;for(j=M-1; jpos ; j-) aj=aj-1;apos=n;for( i=0; i#define N 3#define M 4void fun(int xNM) int i, j, p;for(i=0; iint fun(int n) if(n=1) return 1;else return fun(n-1)+n; /该递归函数功能是计算 1n 的和void main() int i, sum=0;for(i=1;ichar str=“ABCDEFGH“;void fun
11、(int i) printf(“%c“, stri);if(iint k=1;void fun(int x) int k;k=x+1; printf (“k=%dn“, k);void main( ) k+; printf (“k=%dn“, k);fun(k); printf (“k=%dn“, k);运行结果:k=2k=3k=211、写出程序的输出结果。#includeint a=3;void main() int s=0; int a=5; s+=a+; s+=a+;printf(“s=%d, a=%dn“, s, a);输出结果:s=8, a=412、写出程序的输出结果。#includ
12、evoid dec( ) static int x=5;x=x-1;printf(“%d “, x);void main( ) int k;for(k=0; kint fun(int a) int b=1;static int c=2;b+; c+;return(a+b+c);void main( ) int a=3, x1, x2;x1=f(a); x2=f(a);printf(“x1=%d, x2=%dn”,x1,x2);运行结果: x1=8, x2=916、写出下面程序的输出结果。#includeint x=3;void fun( ) static int x=1;x*=x+1;prin
13、tf(“x=%dn “,x);void main( ) int i;for(i=1; iint fun(int a) static int f=1;f=f*a; return(f);void main( ) int i, a=3;for(i=1; ivoid fun(int a, int i, int j) int t;if(ivoid fun1 (int a, int p, int r);int fun2 (int a, int p, int r);void main( ) int i, a10=3,6,1,0,9,4,8,5,2,7;fun1(a, 0, 9);for(i=0; ix) ;
14、if (i=j) break; t=ai; ai=aj; aj=t; ap=aj; aj=x; return j;运行结果:0 1 2 3 4 5 6 7 8 9fun1 的功能 :将数组按中间值分成两组分别进行排序fun2 的功能 :找出数组中间值的下标四、程序填空题1、下面的递归函数是完成 1n 的累加,请填写完整。int fun(int k) int sum;if (kfloat func(int n);void main ( ) int m, k; float p;scanf (“%d%d”,p= ; printf(“p=%f n”, p);float func(int n) int
15、i; float value;value= ;for ( )return ( );func(k)/ func(m-k) 1 i=1;iint search(int a,int n,int x ) int low,high,mid;low=0; high=n-1;while( ) mid=(low+high)/2;if(amid=x) return ;elseif(amidx) ;else ;return -1;low#define N 10void input(int a);void sort(int a);void main() int i,xN;input(x);sort(x);for(i
16、=0;iak) k=j; if(k!=i) t=ak; ak=ai; ai=t; 2、编程输出 10n(n10)之间所有素数的和,要求编写函数 fun1 判断某个数是否为素数,编写函数 fun2 实现累加求和,在主函数中输入 n,输出最后的计算结果。#include int fun1( int a ) int i; for(i=2;i#includedouble factorial(int n);double power(double x,int n);double sinfun(double x);void main() double x,value;printf(“input x:“);s
17、canf(“%lf“, value=sinfun(x);printf(“sin(%.2lf)=%lfn“, x, value);double factorial(int n) double f=1;for(int i=2; i=1e-5);return(v);4、编写函数求字符串 1 在字符串 2 中首次出现的位置,如果字符串 1 未出现过则返回-1。例如:字符串 1 为“do”, 字符串 2 为“how do you do?”,则返回值应该为 4。(难度 4 颗星)#include#includeint strlocation(char str1,char str2);void main()
18、 char s120,s2100;int n=-1;printf(“输入字符串 2:“);gets(s2);printf(“输入字符串 1(即要在字符串 2 中查找的):“);gets(s1);n=strlocation(s1,s2);if(n=-1) printf(“字符串 2 中没有出现过字符串 1!n“);elseprintf(“字符串 2 中首次出现字符串 1 的位置是%dn“,n);int strlocation(char str1,char str2) int i,len1,len2;char str320;len1=strlen(str1);len2=strlen(str2);if(len1len2) return(-1);else for(i=0;i#includeint Cfun(int m,int n);void main() int m,n,C;printf(“input m,n:“);scanf(“%d%d“,C=Cfun(m,n);printf(“C=%dn“,C);int Cfun(int m,int n) if(m0|n0) printf(“m or n error!n“);exit(0);if(m=n | n=0)return(1);elsereturn(m*Cfun(m-1,n)/(m-n);