1、函数进一步 40792发光并非太阳的专利,你也可以发光。 函数进一步一、选择题(1)有以下程序# include void f(char *schar *t) char k; k=*s; *s=*t; *t=k; s+; t-;if (*s) f(st);main() char str10=“abcdefg“*p ;p=str+strlen(str)/2+1;f(pp-2);printf(“%sn“str);程序运行后的输出结果是A)abcdefg B)gfedcba C)gbcdefa D)abedcfg(2)有以下程序float f1(float n) return n*n; float
2、f2(float n) return 2*n; main() float (*p1) (float)(*p2) (float)(*t) (float)y1y2;p1=f1; p2=f2;y1=p2( p1(2.0) );t = p1; p1=p2; p2 = t;y2=p2( p1(2.0) ); printf(“%3.0f%3.0fn“y1y2);程序运行后的输出结果是A)816 B)88 C)1616 D)48(3)程序中若有如下的说明和定义语句char fun(char *);main()char *s=“one“a5=0(*f1) ()=funch;以下选项中对函数 fun的正确调用语
3、句是 A) (*f1) (a);B)*f1(*s);C)fun(D)ch=*f1(s)(4) 在函数调用过程中如果函数 funA调用了函数 funB函数 funB又调用了函数 funA则A) 称为函数的直接递归调用 B) 称为函数的间接递归调用C) 称为函数的循环调用 D) C 语言中不允许这样的递归调用(5) 有以下程序void fun(int *aint iint j) int t;if(imain(int argc char *argv ) int ilen=0;for(i=1;imain(int argcchar *argv) int ilen=0;for(i=1;i则运行的结果是:A
4、) 22 B) 17 C) 12 D) 9(11) 有以下程序int fa(int x) return x*x; int fb(int x) return x*x*x; int f(int (*f1) ()int (*f2) ()int x) return f2(x)-f1(x); main() int i;i=f(fafb2); printf(“%dn“i);程序运行后的输出结果是A) -4 B) 1 C) 4 D) 8*(12) 不合法的 main函数命令行参数表示形式是A) main(int achar *c) B) main(int arcchar *arv)C) main(int a
5、rgcchar *argv) D) main(int argvchar *argc)*(13) 假定以下程序经编译和连接后生成可执行文件PROG.EXE如果在此可执行文件所在目录的 DOS提示符下键入:PROG ABCDEFGH IJKL则输出结果为A) ABCDEFG B) IJHL C) ABCDEFGHIJKL D) IJKLABCDEFGHmain( int argcchar *argv) ) while(-argc0) printf(“%s“argvargc);printf(“n“);(14) 以下程序的输出结果是A) 1 B) 2 C) 3 D) 4long fun( int n)
6、 long s;if(n= =1 | n= =2) s=2;else s=n-fun(n-1);return s;main() printf(“%ldn“fun(3) ); (15) 有如下程序long fib(int n) if(n2) return(fib(n-1)+fib(n-2) );else return(2);main0 printf(“%dn“fib(3) ); 该程序的输出结果是A 2 B 4 C 6 D 8(16) 若有以下说明和定义fun(int *c) main() int (*a) ()=fun*b()w10c;在必要的赋值之后对 fun函数的正确调用语句是A a=a(
7、w); B (*a) ( C b=*b(w); D fun (b);(17) 下列程序执行后的输出结果是A hello B hel C hlo D hlmvoid func1(int i);void func2(int i);char st=“hellofriend!“;void func1(int i) printf(“%c“sti);if(i后程序的输出结果是A) hello good B) hg C) hel D) hellogoodmain() (int argcchar *argv) int i;if(argc0) fun(k-1);printf(“%d“k);*(20) 若以下程序
8、所生成的可执行文件名为 filel.exe;当打入以下命令执行该程序时;FILEL CHINA BEIJING SHANGHAI程序的输出结果是A) CHINA BEIJING SHANGHAI B) FILEL CHINA BEIJINGC) C B S D) F C Bmain(int argcchar *argv) while(arge0) +argv;printf(“%s “*argv);(21) C 语言规定程序中各函数之间A) 既允许直接递归调用也允许间接递归调用B) 不允许直接递归调用也不允许间接递归调用C) 允许直接递归调用不允许间接递归调用D) 不允许直接递归调用允许间接递归
9、调用 二、填空题:(1)以下程序运行后的输出结果是 【1】 int f(int aint n) if (n = 1) return f(an-1)+an-1;else return 0; main() int aa5=12345s;s=f(aa5); printf(“%dn“s);(2) 下面程序的运行结果是:【2】 int f( int aint n) if(n1) return a0+f(else return a0;main ( ) int aa3=123s;s=f( printf(“%dn“s);(3) 以下程序运行后的输出结果是 【3】 fun(int x) if (x/20) fu
10、n(x/2);printf(“%d“x);main() fun (6); (4) 设函数 findbig已定义为求 3个数中的最大值以下程序将利用函数指针调用 findbig函数请填空main() int findbig(intintint);int (*f) ()xyzzbig;f=【4】; scanf(“%d%d%d“big=(*f) (xyz);printf(“bing=%dn“big);(5) 以下程序的输出结果是【5】 main() int x=0;sub(printf(“%dn“x);sub(int *aint nint k) if(kmain( int argcchar *arg
11、v) int i;printf( %dn“argc);for( i=0; i(表示回车)程序执行后的输出结果是 【10】 (10) 下面程序的输出结果是 【11】 #include fun( int x) int p;if( x=0|x=1) return(3);p=x-fun( x-2);return p;main() printf( “%dn“fun(9) );(11) 下面程序的输出结果是 【12】 #include funa( int aint b) return a+b;funb( int aint b) return a-b;sub( int (*t) ()int xint y)
12、return(*t) ( xy) );main() int x(*p) ();p=funa;x=sub(p93);x+=sub(funb83);printf(“%dn“x);*(12) 设有如下程序:#includemain(int argcchar *argv ) while( -argc0) printf(“%s“argvargc);printf(“n“);假定上述程序经编译和连接后生成可执行文件 PROG.EXE如果在 DOS提示符下键入 PROG ABCD EFGH IJKL 则输出结果为 【13】 (13) 以下程序调用 invert函数按逆序重新放置 a数组中元素的值a数组中的值在
13、 main函数中读入#include #define N 10invert(int *sint iint j) int t; if(ij) t=*(s+i); *(s+j)=(s+j);*(s+j)=t; invert(s【14】 j-1); main() int aNi;for(i=0;iN;i + + ) scanf(“%d“a+ 【15】 ); invert(a0N-1);for(i=0;iN;i + + ) printf(“%d“ai);printf(“n“); 答案:一、选择题:1) B 2) A 3) A 4) B 5) C 6) D 7) A 8) A 9) B 10) D11)
14、 C 12) C 13) D 14) A 15) B 16) B 17) C 18) B 19) B 20) A21) A 22) 23) 24) 25) 26) 27) 28) 29) 30) 二、填空题:(1)15 (2)6 (3)1 3 6 (4)findbig (5)7 (6)8 (7)9 (8)f(xy)/g(y-x)或(*f)(x+y)/g(y-x)或 f(x+y)/(*g) (y_x)或(*f)或(*f)(x+y)/(*g) (y-x) (9)cossinab (10)3 abc.exe file1 file2 (注:两个答案每个 1分) (11)7 (12)17 (13)IJKLEFGHABCD (14)i+1 (15)I