问题 单项选择题

有以下程序:

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=p2; p2=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

答案

参考答案:A

解析:

[评析]题中“(*p1)(float)”定义了一个指向函数的指针变量p1,此函数的返回值是float类型。在main函数中,使得p1指向了函数f1,P2指向了函数缀。语句“y1=p2(p1(2.0));”先调用了p1函数,将其返回值4.000000传递给了f2的形参n,并使其函数返回值8.000000赋值给y1。然后在main函数中交换了p1、p2指针变量的指向,使p1指向了函数侵,p2指向了函数f1,并先调用函数f2,得到返回值4.000000,使其传递给f1函数的形参n,并带回返回值16.000000赋值给y2。在输出y1、y2时,各浮点数占3列,小数位数为0,即输出了 8,16。

判断题
单项选择题