二级C语言教程章节测试11.对函数的进一步讨论
一、选择题
(1)有以下程序
#包括
void f (char * s,char * t)
{ char k;
k = * s;* s = * t;* t = k;
s++;t-;
if (*s) f(s,t);
}
main()
{ char str(7)下面这个程序的输出是[7]。
long fun 5(int n)
{ long s;
if((n = = 1)| |(n = = 2))
s = 2;
else
s = n+fun 5(n-1);
退货;}
main()
{ long x;
x = fun 5(4);
printf("%ld\n ",x);}= " abcdefg ",* p;
p = str+strlen(str)/2+1;
f(p,p-2);
printf("%s\n ",str);
}
程序运行后的输出结果是
a)abcdefg b)gfedcba c)gbc defa d)abed CFG。
(2)有如下程序
float f1(float n)
{ return n * n;}
float F2(float n)
{ return 2 * n;}
main()
{ float(* P1)(float),(*p2)(float),(*t)(float),y1,y2;
P1 = f1;p2 = f2
y1 = p2(P1(2.0));
t = P1;p1 = p2p2 = t;
y2 = p2(P1(2.0));
printf("%3.0f,%3.0f\n ",y1,y2);
}
程序运行后的输出结果是
A)8,16 B)8,8 C)16,16 D)4,8。
(3)如果程序中有以下描述和定义语句
char fun(char *);
main()
{
char * s = " one ",a(4)在函数调用过程中,如果付娜调用funB,funB调用付娜,那么
A)称为函数的直接递归调用b)称为函数的间接递归调用
C)称为函数的循环调用d)这样的递归调用在C语言中是不允许的。={0},(*f1)()=fun,ch;
...
}
下列选项中调用函数fun的正确说法是
A)(* f1)(A);
B)* f1(* s);
C)好玩(& a);
D)ch=*f1(s)
[5]
(5)有以下程序
void fun (int * a,int i,int j)
{ int t;
if(i0)fun(x/2);
printf("%d ",x);
}
main()
{ fun(6);}
(4)设函数findbig定义为求三个数的值。下面的程序将使用函数指针调用findbig函数。请填写空。
main()
{ int findbig(int,int,int);
int (*f)(),x,yz,z,big
f =【4】;
scanf("%d%d%d ",&x,&y,& z);
big=(*f)(x,y,z);
printf("bing=%d\n ",big);
}
(5)下面这个程序的输出结果是[5]。
main()
{ int x = 0;
sub(&x,8,1);
printf("%d\n ",x);
}
sub(int *a,int n,int k)
{ if(k * a+= k;
}
(6)下面这个程序的输出结果是[6]。
fun(int n,int *s)
{ int f1,F2;
if(n = = 1 | | n = = 2)* s = 1;
else { fun(n-1,& f1);乐趣(n-2,& F2);* s = f1+F2;} }
main()
{ int x;
fun(6,& x);printf("%d\n ",x);}
[10]
(8)下面H函数的作用是计算下面数学函数H的值,请填写空。
double fgh(double(* f)(double a)< double(* g)(double b),
double x,double y)
{ return(【8】);}
double h(double a,double b)
return(fgh( sin,cos,a,b)* fgh(【9】));}
(9)请阅读程序:
# include
main(int argc,char * argv[])
{ int I;
printf( '%d\n ",argc);
for(I = 0;I printf(" \ n ");
}
如果上述程序编译连接生成可执行文件ABC.EXE,输入下面的命令行
ABC file 1 file 2(for enter)
程序执行后的输出结果为[10]。
(10)下面这个程序的输出结果是[11]。
# include
fun(int x)
{ int p;
if( x==0||x==1)返回(3);
p = x-fun(x-2);
return p;
}
main()
{ printf(" % d \ n ",fun(9));}
(11)下面这个程序的输出结果是[12]。
#包含
付娜(int a,int b)
{ return a+b;}
funb( int a,int b)
{ return a-b;}
sub( int (*t)(),int x,int y)
{ return(* t)(x,y));}
main()
{ int x,(* p)();
p =付娜;
x=sub(p,9,3);
x+=sub(funb,8,3);
printf("%d\n ",x);
}
(12)提供以下程序:
# include
main(intargc,char * argv[])
{ while(-argc > 0)printf(" % s ",argv[argc]);
printf(" \ n ");
}
假设上述程序编译连接生成可执行文件PROG.EXE,如果在DOS提示符下键入progabcefghijkl,输出结果为[13]。
(13)下面的程序调用invert函数以逆序重新定位数组A中元素的值。数组a中的值是在主函数中读取的。
# include
# define N 10
invert(int * s,int i,int j)
{ int t;if(i main()
{ int a[N],I;
for(I = 0;我求逆(a,0,N-1);
for(I = 0;I printf(" \ n ");}回答:
一、选择题:
1)B2)a3)a4)b5)C6)D7)A8)a9)b10)D
11)c12)c13)d14)a15)b21)a22)23)24)25)26)27)28)29)30)II .填空题:
(1) 15 (2) 6 (3) 1 3 6 (4) G(y-x)或f(x+y)/(*g)(y_x)或(*f)或(* f) (x+y)/(* g) (y-x) (9) cos,sin,a,b(10)3 abc.exe文件1
0条评论