C语言的问题

1.若有说明语句double *P,a;则能通过scanf语句正确给输入项读入数据的程序段是()
A.*p=&a;scanf("%lf",p); B.*p=&a;scanf("%f",p);
C.p=&a;scanf("%lf",*p); D.p=&a;scanf("%lf",p);

有函数fun的定义形式如下。
int fun(float f){...}
则以下对函数fun的调用语句中,不正确的是()
A.fun(fun(0)); B.strlen(fun(0)); C.abs(fun(0)); D.scanf("%d",&(fun()));

有函数fun的定义形式如下。
int fun(float f){...}
则以下对函数fun的调用语句中,正确的是()
A.int*x;x=fun(0); B.int x;x=fun(&x);
C.int x=1;x+fun(5)*4/6+8; D.printf("%d",fun());

给点步骤和思路,谢谢了
单选题 只有1个答案

若有说明语句double *P,a;则能通过scanf语句正确给输入项读入数据的程序段是()
A.*p=&a;scanf("%lf",p); B.*p=&a;scanf("%f",p);
C.p=&a;scanf("%lf",*p); D.p=&a;scanf("%lf",p);
解:p=&a;将a的地址赋值给p,
scanf("%lf",p);从键盘获取一个数值赋值给地址p指向的变量
所以选D

有函数fun的定义形式如下。
int fun(float f){...}
则以下对函数fun的调用语句中,不正确的是()
A.fun(fun(0)); B.strlen(fun(0)); C.abs(fun(0)); D.scanf("%d",&(fun()));
解:fun的参数是个float类型的数,但是fun(0)返回的是一个int数,所以A错误;strlen的参数是个char*,所以B也错误;abs的参数可以是int,所以C对;
D中间对一个int数取地址是错误的
所以选C

有函数fun的定义形式如下。
int fun(float f){...}
则以下对函数fun的调用语句中,正确的是()
A.int*x;x=fun(0); B.int x;x=fun(&x);
C.int x=1;x+fun(5)*4/6+8; D.printf("%d",fun());
解:x是int*,fun(0)返回int,所以A错
fun参数是float,但是&x是int*,所以B错
fun()不是变量,不能给fun()赋值,所以D错
C是对的
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-07-11
1.若有说明语句double *P,a;则能通过scanf语句正确给输入项读入数据的程序段是()
A.*p=&a;scanf("%lf",p); 错误,不能这么赋值,*p是非法操作。
B.*p=&a;scanf("%f",p); 同错误。
C.p=&a;scanf("%lf",*p); 错误,应该提供地址(p),而不是数值(*p)
D.p=&a;scanf("%lf",p); 正确!

有函数fun的定义形式如下。
int fun(float f){...}
则以下对函数fun的调用语句中,不正确的是()
A.fun(fun(0)); 正确,发生类型提升
B.strlen(fun(0)); 错误,strlen要求提供的参数是指针,不是int类型。
C.abs(fun(0)); 正确!
D.scanf("%d",&(fun())); 错误,不能对堆栈上的常量取地址。

有函数fun的定义形式如下。
int fun(float f){...}
则以下对函数fun的调用语句中,正确的是()
A.int*x;x=fun(0); 错误,=两边类型不匹配,且不能自动转换类型。
B.int x;x=fun(&x); 错误,fun函数的参数是float,不是地址。
C.int x=1;x+fun(5)*4/6+8; 正确
D.printf("%d",fun()); 错误,必须给fun提供参数!
第2个回答  2009-07-12
我的想法与匿名先生差不多。但他的回答我有一点补充,如果第二题只能选一个,那应该是D。因为strlen的参数是指针型,但指针本身与无符号整型的表示和计算是一样的,因此在此应该可以算对。

参考资料:如果您的回答是从其他地方引用,请表明出处

相似回答