1、第七章 函数一、选择题1.以下函数声明正确的是: C 。(0203第一学期试题)A) double fun(int x, int y) B) double fun(int x; int y)C) double fun(int x, int y) ; D) double fun(int x , y)2.C语言规定,简单变量作实参,它与对应形参之间的数据传递方式是: B 。(0级)A)地址传递; B)单向值传递;C)双向值传递; D)由用户指定传递方式3.以下关于语言程序中函数的说法正确的是: B 。(0级)函数的定义可以嵌套,但函数的调用不可以嵌套;)函数的定义不可以嵌套,但函数的调用可以嵌套;
2、)函数的定义和调用均不可以嵌套;)函数的定义和点用都可以嵌套。4.以下正确的函数形式是: D 。(1级)A)double fun(int x,int y) B)fun (int x,y) z=x+y;return z; int z;return z;C)fun(x,y) D)double fun(int x,int y) int x,y ; double z; double z; z=x+y; return z; z=x+y; return z;5.以下说法不正确的是: B 。 (1级)C 语言规定 A)实参可以是常量、变量或表达式 B)形参可以是常量、变量或表达式 C)实参可以是任意类型D)
3、形参应与其对应的实参类型一致6.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是 B 。(0级)A) float型 B) int 型 C)long 型 D)double 型7.以下错误的描述是 D 。(0级)函数调用可以 A)出现在执行语句中 B)出现在一个表达式中 C)做为一个函数的实参 D)做为一个函数的形参8.若用数组名作为函数调用的实参,传递给形参的是 A 。(0级)A)数组的首地址 B)数组第一个元素的值C)数组中全部元素的值 D)数组元素的个数9.以下正确的说法是 A 。(0级)如果在一个函数中的复合语句中定义了一个变量,则该变量A)只在该复合语句中有效 B)在该函数中有效C
4、)在本程序范围内有效 D)为非法变量10.以下不正确的说法为 D 。(0级)A)在不同函数中可以使用相同名字的变量B)形式参数是局部变量C)在函数内定义的变量只在本函数范围内有效D)在函数内的复合语句中定义的变量在本函数范围内有效11.凡是函数中未指定存储类别的局部变量,其隐含的存储类别为 A 。(0级)A)自动(auto) B)静态(static) C)外部(extern) D)寄存器(register)12.下面程序的正确运行结果是: D 。(1级)main( ) int a=2, i;for(i=0;i2) return(fib(n-1)+fib(n-2); else return(2)
5、; main( ) printf(“%dn”,fib(3); 该程序的输出结果是 B 。(1级) A2 B4 C6 D 824.有以下程序voidf(int x,int y) int t;if(xy) t=x; x=y; y=t; main() int a=4,b=3,c=5;f(a,b); f(a,c); f(b,c);printf(%d,%d,%dn,a,b,c);执行后输出的结果是 D 。(1级) A) 3,4,5 B) 5,3,4 C) 5,4,3 D) 4,3,525.以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。#define N 10void arrin(int x
6、N) int i=0;while(iy)?x:y; return(z); f2(int x, int y)int z; z=(xy)?x:y; return(z); 执行后输出的结果是 C 。(1级)A) 3,4,5 B) 5,3,4 C) 5,4,3 D)3,5,429.以下程序的输出结果是 C 。(1级) #include int f(void) static int i = 0; int s =1;s += i;i+;return (s); void main(void) int i, a = 0;for (i=0; ib) c=1; else if (a=b) c=0; else c=
7、-1; return(c); A)1,0 B)2,0 C)2,-1 D)1,138. 下面程序的输出结果是: B 。(往届试题)int m=13;int fun( int x, int y) int m=3; return( x*y-m); main( )int a=7,b=5; printf(“%dn”, fun(a,b)/m); A)1 B)2 C)7 D)1039. 若有说明语句:static int a34=0;则下面叙述正确的是: B 。(往届试题)A)只有a00元素可得到初值0;B)数组a中每个元素均可得到初值0。C)数组a中各元素都可得到初值,但值不一定为0;D)此说明语句不正确
8、40. 以下程序的运行结果是: B 。(往届试题)main( ) int a=2, i ; for(i=0;i3;i+) printf(“%4d”,f(a) ) ; f( int a) int b=0,c=3;b+; c+; return(a+b+c); A)7 10 13 B)7 7 7C)7 9 11 D)7 8 9二、填空题1.C语言规定,可执行程序的开始执行点是 main 。(0级)2.在C语言中,一个函数一般由两个部分组成,它们是 函数首部 和 函数体。(0级)3.函数swap(int x,int y)可完成对x和y值的交换。a0=1,a1=2 在运行调用函数中的如下语句后,a0和a
9、1 的值分别为 a0=1,a1=2 ,原因 单向值传递,不能返回交换后的值 。(1级)4.函数swap(arr,n)可完成对arr数组从第1个元素到第n个元素两两交换。在运行调用函数中的如下语句后,a0 和a1的值分别为 a0=2,a1=1 ,原因实参是地址,已对指定地址中的内容进行了交换。(1级)5.设在主函数中有以下定义和函数调用语句,且f un函数为void类型;请写出fun函数的首部 fun (double b) 。要求形参名为b。(1级) main() double s1022; int n; fun(s); 6.返回语句的功能是从包含它的函数 返回 调用函数 。(0级)三、程序填空
10、题1. (1)d=a*b/c (2)num1num2 (3)x%y2. (1)break (2)getchar( ) 3. (1) (int)(value10+5)/10) 4.(1)2i1 (2)a(i) (3)a(i) 5.(1) j (2) strj-1 6.(1)n*fac(n-1) (2)fac(n)7.(1)i10 (2)arrayi (3)average(score)1.下面程序的功能是利用函数调用求两整数的最大公约数和最小公倍数,请填空。 (1级) main( ) int a, b ,c,d; scanf(“%d, %d”, &a, &b ) ; c = gongyue( a,
11、 b ) ; (1) ; printf(“gongyue=%d,gongbei=%dn”, c,d ) ; gongyue( int num1, int num2 ) int temp, x, y ; if (_ (2) _) temp=num1; num1=num2 ; num2=temp ; x=num1 ; y=num2 ; while(_ (3) _) temp=x%y ; x=y ; y = temp ; return (y) ; 2.以下程序的功能是根据输入的“y”(“Y”)与“n”(“N”),在屏幕上分别显示出“This is YES.”与“This is NO.”。请填空。(1
12、级) # include viod YesNo(char ch) switch(ch)case y: case Y: printf(“nThis is YES.n”); (1) ; case n: case N: printf(“nThis is NO.n”); main( )char ch; printf(“nEnter a char y,Yorn,N:”); ch= (2) ; printf (”ch: %c”,ch); YesNo(ch); 3.以下Check函数的功能是对value中的值进行四舍五入计算,若计算后的值与ponse值相等,则显示“WELL DONE!”,否则显示计算后的值
13、。已有函数调用语句Check(ponse,value);请填空。(1级) viod Check ( int ponse, float value) int val; val= (1) ; printf (“计算后的值: %d”, val); if (val= =ponse) printf(“n WELL DONE! n”); else printf (“nSorry the correct answer is %dn”, val);4.以下程序的运行结果是输出如下图形。请填空。(1级)* * * * * * * * * * * * * * * * * * * * * *# include vo
14、id a (int i) int j, k; for (j=0; j=7i; j+) printf (“ “); for (k=0; k (1) ; k+) printf(“”);printf(“n”); main ( ) int i; for( i=0; i=0; i) (3) ; 5.函数fun的功能是:使字符串str按逆序存放。(2级)void fun (char str) char m; int i, j;for (i=0, j=strlen(str); i (1) ; i+, j-) m = stri; stri = (2) ; strj-1 = m;printf(%sn,str);
15、6.以下程序使用递归法求n!, 请填空。(03试题)float fac(int n) float f; if(n0) printf(“n0” data error); f=-1; else if(n=0|n=1) f=1; else f=_ (1) _;return( f ); main( ) int n; float y;printf(“input a integer number”);scanf(“%d”,&n);y=_ (2) _;printf(“%d! = %15.0f”, n, y ); 7. 以下程序可计算10名学生1门功课成绩的平均分,请填空。(往届试题)float averag
16、e( float array10 ) int i; float aver, sum=array0; for ( i=1; _ (1) _;i+) sum+=_ (2) _; aver=sum/10; return(aver); main( ) float score10, aver ; int i ; printf(“ninput 10 scores:”); for(i=0; i10;i+) scanf(“%f”,&scorei ); aver =_ (3) _; printf(“naverage score is %5.2fn”, aver);四、读程序写结果题1. 15 2. i=7;j=
17、6;x=7 i=2;j=7;x=5;3. 1114. A+B=95. 1236. 2467. 1:a=1,b=12:a=1,b=23:a=1,b=38. x=9x=109. 910. input a integer number:55!=12011. 2112. 77713. 1514. 015. sum=61.下面程序的运行结果是: 。 (1级)main( ) int i=5; printf(“%dn”, sub(i) ) ; sub ( int n ) int a ;if ( n=1) a=1; else a=n+sub(n-1); return( a ) ; 2.下面程序的运行结果是:
18、。 (1级) main( ) int i=2, x=5, j=7; fun (j,6); printf(“i=%d; j=%d; x=%dn”, i, j, x ) ; fun (int i, int j ) int x=7; printf(“i=%d; j=%d; x=%dn”, i, j, x) ;3.以下程序的运行结果是 。(1级)main( ) increment ( ); increment ( ); increment ( ); increment ( ) int x=0; x+=1; printf (“%d”, x); 4.以下程序的运行结果是 。(1级)int a=5; int
19、 b=7;main( ) int a=4, b=5,c; c=plus (a,b); printf(“A+B=%dn”,c) ; plus (int x, int y) int z; z=x+y; return (z); 5.以下程序的运行结果是 。(1级)main( ) increment ( ); increment ( ); increment ( ); increment ( ) static int x=0; x+=1; printf (“%d”, x); 6.以下程序的输出结果是 。 (2级)void fun() static int a=0; a+=2; printf(“%d”,
20、a); main() int cc; for(cc=1;cc4;cc+) fun() printf(“n”); 7.以下程序的输出结果是 。 (2级)#include void f(int c) int a=0; static int b=0; a+; b+; printf(%d: a=%d, b=%dn, c, a, b);void main(void) int i; for (i=1; i=3; i+) f( i );8.以下程序的输出结果是 。 (2级)#include void increment(void);void main(void) increment(); increment
21、();void increment(void) static int x = 8; x +; printf(x = %dn, x);9.若有以下程序,执行后输出结果是 。(2级)int f(int x,int y) return((y-x)*x); main() int a=3,b=4,c=5,d;d=f(f(3,4),f(3,5);printf(%dn,d);10. 假如在运行程序时输入5 ,写出程序的运行情况及最终结果: 。(0102第二学期试题)float fac(int n) float f ; if(n0)printf(“n0,dataerror!”); f=-1; else if
22、(n=0|n=1) f=1; else f=fac(n-1)*n; return(f); main( )int n ;float y ;printf(“input a integer number:”);scanf(“%d”,&n);y=fac(n);printf(“%d!=%5.0f”, n,y); 11.下面程序的运行结果是: 。(03试题)func( int x, int y) int z; z=x+y;return(z); main( ) int a=6, b=7, c=8, r; r=func( ( a-, b+, a+b), c-); printf(“%d”, r) ; 12.下面
23、程序的运行结果是: 。(0405第二学期试题) func( int a) int b=0,c=3;b+;c+;return(a+b+c); main( ) int a=2,i;for(i=0;ib) c=1;else if(a=b) c=0;else c=-1;return(c); 15. 以下程序的运行结果是:_。(往届试题) main( ) int a33 = 1, 3, 5, 7, 9, 11, 13, 15, 17 ; int sum ; sum = func ( a ) ; printf ( “nsum = %dn”, sum ) ; func ( int a 3 ) int i, j, sum = 0; for ( i=0; i3; i+ ) for ( j=0; j3; j+ ) aij = i + j ; if ( i=j ) sum = sum + aij ; return ( sum );